diff --git a/pr-preview/pr-478/404.html b/pr-preview/pr-478/404.html new file mode 100644 index 0000000000..c716202aaa --- /dev/null +++ b/pr-preview/pr-478/404.html @@ -0,0 +1,772 @@ + + + + + + + + + + + + + + + + + + + + + + + + Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + +
+ +

404 - Not found

+ +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/afbeeldingen/ai_governance_levels_tno.png b/pr-preview/pr-478/afbeeldingen/ai_governance_levels_tno.png new file mode 100644 index 0000000000..7418bca6c6 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/ai_governance_levels_tno.png differ diff --git a/pr-preview/pr-478/afbeeldingen/bouwblokken/bias-en-non-discriminatie.jpg b/pr-preview/pr-478/afbeeldingen/bouwblokken/bias-en-non-discriminatie.jpg new file mode 100644 index 0000000000..e69452b585 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/bouwblokken/bias-en-non-discriminatie.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/bouwblokken/conformiteitsbeoordeling.jpg b/pr-preview/pr-478/afbeeldingen/bouwblokken/conformiteitsbeoordeling.jpg new file mode 100644 index 0000000000..345cccc8a8 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/bouwblokken/conformiteitsbeoordeling.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/bouwblokken/data.jpg b/pr-preview/pr-478/afbeeldingen/bouwblokken/data.jpg new file mode 100644 index 0000000000..c75ade7a86 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/bouwblokken/data.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/bouwblokken/duurzaamheid.jpg b/pr-preview/pr-478/afbeeldingen/bouwblokken/duurzaamheid.jpg new file mode 100644 index 0000000000..0f4fb45089 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/bouwblokken/duurzaamheid.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/bouwblokken/fundamentele-rechten.jpg b/pr-preview/pr-478/afbeeldingen/bouwblokken/fundamentele-rechten.jpg new file mode 100644 index 0000000000..47cd28ffc5 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/bouwblokken/fundamentele-rechten.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/bouwblokken/governance.jpg b/pr-preview/pr-478/afbeeldingen/bouwblokken/governance.jpg new file mode 100644 index 0000000000..c55a780d46 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/bouwblokken/governance.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/bouwblokken/menselijke-controle.jpg b/pr-preview/pr-478/afbeeldingen/bouwblokken/menselijke-controle.jpg new file mode 100644 index 0000000000..44927f3621 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/bouwblokken/menselijke-controle.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/bouwblokken/privacy-en-gegevensbescherming.jpg b/pr-preview/pr-478/afbeeldingen/bouwblokken/privacy-en-gegevensbescherming.jpg new file mode 100644 index 0000000000..d02575763a Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/bouwblokken/privacy-en-gegevensbescherming.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/bouwblokken/publieke-inkoop.jpg b/pr-preview/pr-478/afbeeldingen/bouwblokken/publieke-inkoop.jpg new file mode 100644 index 0000000000..72e6cc13b5 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/bouwblokken/publieke-inkoop.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/bouwblokken/technische-robuustheid-en-veiligheid.jpg b/pr-preview/pr-478/afbeeldingen/bouwblokken/technische-robuustheid-en-veiligheid.jpg new file mode 100644 index 0000000000..3b6b99189a Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/bouwblokken/technische-robuustheid-en-veiligheid.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/bouwblokken/transparantie.jpg b/pr-preview/pr-478/afbeeldingen/bouwblokken/transparantie.jpg new file mode 100644 index 0000000000..42074fc15b Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/bouwblokken/transparantie.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/iconen/bias-en-non-discriminatie.png b/pr-preview/pr-478/afbeeldingen/iconen/bias-en-non-discriminatie.png new file mode 100644 index 0000000000..a4088bfe67 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/iconen/bias-en-non-discriminatie.png differ diff --git a/pr-preview/pr-478/afbeeldingen/iconen/conformiteitsbeoordeling.png b/pr-preview/pr-478/afbeeldingen/iconen/conformiteitsbeoordeling.png new file mode 100644 index 0000000000..bc6cba0c7b Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/iconen/conformiteitsbeoordeling.png differ diff --git a/pr-preview/pr-478/afbeeldingen/iconen/data.png b/pr-preview/pr-478/afbeeldingen/iconen/data.png new file mode 100644 index 0000000000..fedffa74ac Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/iconen/data.png differ diff --git a/pr-preview/pr-478/afbeeldingen/iconen/duurzaamheid.png b/pr-preview/pr-478/afbeeldingen/iconen/duurzaamheid.png new file mode 100644 index 0000000000..dfd933f84e Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/iconen/duurzaamheid.png differ diff --git a/pr-preview/pr-478/afbeeldingen/iconen/fundamentele-rechten.png b/pr-preview/pr-478/afbeeldingen/iconen/fundamentele-rechten.png new file mode 100644 index 0000000000..a0154d3068 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/iconen/fundamentele-rechten.png differ diff --git a/pr-preview/pr-478/afbeeldingen/iconen/governance.png b/pr-preview/pr-478/afbeeldingen/iconen/governance.png new file mode 100644 index 0000000000..ff2d7e09e7 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/iconen/governance.png differ diff --git a/pr-preview/pr-478/afbeeldingen/iconen/inkoop.png b/pr-preview/pr-478/afbeeldingen/iconen/inkoop.png new file mode 100644 index 0000000000..53b212e4da Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/iconen/inkoop.png differ diff --git a/pr-preview/pr-478/afbeeldingen/iconen/menselijke-controle.png b/pr-preview/pr-478/afbeeldingen/iconen/menselijke-controle.png new file mode 100644 index 0000000000..3cb9a3a502 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/iconen/menselijke-controle.png differ diff --git a/pr-preview/pr-478/afbeeldingen/iconen/privacy-en-gegevensbescherming.png b/pr-preview/pr-478/afbeeldingen/iconen/privacy-en-gegevensbescherming.png new file mode 100644 index 0000000000..f23669f709 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/iconen/privacy-en-gegevensbescherming.png differ diff --git a/pr-preview/pr-478/afbeeldingen/iconen/technische-robuustheid-en-veiligheid.png b/pr-preview/pr-478/afbeeldingen/iconen/technische-robuustheid-en-veiligheid.png new file mode 100644 index 0000000000..cfb8d50aa9 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/iconen/technische-robuustheid-en-veiligheid.png differ diff --git a/pr-preview/pr-478/afbeeldingen/iconen/transparantie.png b/pr-preview/pr-478/afbeeldingen/iconen/transparantie.png new file mode 100644 index 0000000000..e561058521 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/iconen/transparantie.png differ diff --git a/pr-preview/pr-478/afbeeldingen/levenscyclus/levenscyclus.jpg b/pr-preview/pr-478/afbeeldingen/levenscyclus/levenscyclus.jpg new file mode 100644 index 0000000000..260a67127c Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/levenscyclus/levenscyclus.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/levenscyclus/modellevenscyclus_uwv.png b/pr-preview/pr-478/afbeeldingen/levenscyclus/modellevenscyclus_uwv.png new file mode 100644 index 0000000000..5e7e48e61a Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/levenscyclus/modellevenscyclus_uwv.png differ diff --git a/pr-preview/pr-478/afbeeldingen/levenscyclus/modellevenscyclus_vws.png b/pr-preview/pr-478/afbeeldingen/levenscyclus/modellevenscyclus_vws.png new file mode 100644 index 0000000000..ef84d7ed94 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/levenscyclus/modellevenscyclus_vws.png differ diff --git a/pr-preview/pr-478/afbeeldingen/maatregelen/MITRE_Maturity-Model-Overview_0.png b/pr-preview/pr-478/afbeeldingen/maatregelen/MITRE_Maturity-Model-Overview_0.png new file mode 100644 index 0000000000..762b18de99 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/maatregelen/MITRE_Maturity-Model-Overview_0.png differ diff --git a/pr-preview/pr-478/afbeeldingen/monitoring.jpg b/pr-preview/pr-478/afbeeldingen/monitoring.jpg new file mode 100644 index 0000000000..730bcfc6ac Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/monitoring.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/onderwerpen.jpeg b/pr-preview/pr-478/afbeeldingen/onderwerpen.jpeg new file mode 100644 index 0000000000..781d24480c Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/onderwerpen.jpeg differ diff --git a/pr-preview/pr-478/afbeeldingen/rollen.jpg b/pr-preview/pr-478/afbeeldingen/rollen.jpg new file mode 100644 index 0000000000..36011ddbe9 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/rollen.jpg differ diff --git a/pr-preview/pr-478/afbeeldingen/rotterdam_risico_classificatie_governance.png b/pr-preview/pr-478/afbeeldingen/rotterdam_risico_classificatie_governance.png new file mode 100644 index 0000000000..64e903f2b1 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/rotterdam_risico_classificatie_governance.png differ diff --git a/pr-preview/pr-478/afbeeldingen/wettenregels.jpeg b/pr-preview/pr-478/afbeeldingen/wettenregels.jpeg new file mode 100644 index 0000000000..2dc6de6175 Binary files /dev/null and b/pr-preview/pr-478/afbeeldingen/wettenregels.jpeg differ diff --git a/pr-preview/pr-478/assets/RijksSansWeb-Italic.woff2 b/pr-preview/pr-478/assets/RijksSansWeb-Italic.woff2 new file mode 100644 index 0000000000..e14e3d44ca Binary files /dev/null and b/pr-preview/pr-478/assets/RijksSansWeb-Italic.woff2 differ diff --git a/pr-preview/pr-478/assets/RijksSansWeb-Regular.woff2 b/pr-preview/pr-478/assets/RijksSansWeb-Regular.woff2 new file mode 100644 index 0000000000..74c73f2195 Binary files /dev/null and b/pr-preview/pr-478/assets/RijksSansWeb-Regular.woff2 differ diff --git a/pr-preview/pr-478/assets/favicon.ico b/pr-preview/pr-478/assets/favicon.ico new file mode 100644 index 0000000000..c63289f51e Binary files /dev/null and b/pr-preview/pr-478/assets/favicon.ico differ diff --git a/pr-preview/pr-478/assets/images/favicon.png b/pr-preview/pr-478/assets/images/favicon.png new file mode 100644 index 0000000000..1cf13b9f9d Binary files /dev/null and b/pr-preview/pr-478/assets/images/favicon.png differ diff --git a/pr-preview/pr-478/assets/javascripts/bundle.203fd0bc.min.js b/pr-preview/pr-478/assets/javascripts/bundle.203fd0bc.min.js new file mode 100644 index 0000000000..6ff9630a6c --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/bundle.203fd0bc.min.js @@ -0,0 +1,3 @@ +"use strict";(()=>{var Zi=Object.create;var _r=Object.defineProperty;var ea=Object.getOwnPropertyDescriptor;var ta=Object.getOwnPropertyNames,Gt=Object.getOwnPropertySymbols,ra=Object.getPrototypeOf,Ar=Object.prototype.hasOwnProperty,bo=Object.prototype.propertyIsEnumerable;var ho=(e,t,r)=>t in e?_r(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,R=(e,t)=>{for(var r in t||(t={}))Ar.call(t,r)&&ho(e,r,t[r]);if(Gt)for(var r of Gt(t))bo.call(t,r)&&ho(e,r,t[r]);return e};var vo=(e,t)=>{var r={};for(var o in e)Ar.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&Gt)for(var o of Gt(e))t.indexOf(o)<0&&bo.call(e,o)&&(r[o]=e[o]);return r};var Cr=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var oa=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ta(t))!Ar.call(e,n)&&n!==r&&_r(e,n,{get:()=>t[n],enumerable:!(o=ea(t,n))||o.enumerable});return e};var Rt=(e,t,r)=>(r=e!=null?Zi(ra(e)):{},oa(t||!e||!e.__esModule?_r(r,"default",{value:e,enumerable:!0}):r,e));var go=(e,t,r)=>new Promise((o,n)=>{var i=c=>{try{a(r.next(c))}catch(p){n(p)}},s=c=>{try{a(r.throw(c))}catch(p){n(p)}},a=c=>c.done?o(c.value):Promise.resolve(c.value).then(i,s);a((r=r.apply(e,t)).next())});var xo=Cr((kr,yo)=>{(function(e,t){typeof kr=="object"&&typeof yo!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(kr,function(){"use strict";function e(r){var o=!0,n=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(k){return!!(k&&k!==document&&k.nodeName!=="HTML"&&k.nodeName!=="BODY"&&"classList"in k&&"contains"in k.classList)}function c(k){var ut=k.type,je=k.tagName;return!!(je==="INPUT"&&s[ut]&&!k.readOnly||je==="TEXTAREA"&&!k.readOnly||k.isContentEditable)}function p(k){k.classList.contains("focus-visible")||(k.classList.add("focus-visible"),k.setAttribute("data-focus-visible-added",""))}function l(k){k.hasAttribute("data-focus-visible-added")&&(k.classList.remove("focus-visible"),k.removeAttribute("data-focus-visible-added"))}function f(k){k.metaKey||k.altKey||k.ctrlKey||(a(r.activeElement)&&p(r.activeElement),o=!0)}function u(k){o=!1}function d(k){a(k.target)&&(o||c(k.target))&&p(k.target)}function v(k){a(k.target)&&(k.target.classList.contains("focus-visible")||k.target.hasAttribute("data-focus-visible-added"))&&(n=!0,window.clearTimeout(i),i=window.setTimeout(function(){n=!1},100),l(k.target))}function S(k){document.visibilityState==="hidden"&&(n&&(o=!0),X())}function X(){document.addEventListener("mousemove",ee),document.addEventListener("mousedown",ee),document.addEventListener("mouseup",ee),document.addEventListener("pointermove",ee),document.addEventListener("pointerdown",ee),document.addEventListener("pointerup",ee),document.addEventListener("touchmove",ee),document.addEventListener("touchstart",ee),document.addEventListener("touchend",ee)}function re(){document.removeEventListener("mousemove",ee),document.removeEventListener("mousedown",ee),document.removeEventListener("mouseup",ee),document.removeEventListener("pointermove",ee),document.removeEventListener("pointerdown",ee),document.removeEventListener("pointerup",ee),document.removeEventListener("touchmove",ee),document.removeEventListener("touchstart",ee),document.removeEventListener("touchend",ee)}function ee(k){k.target.nodeName&&k.target.nodeName.toLowerCase()==="html"||(o=!1,re())}document.addEventListener("keydown",f,!0),document.addEventListener("mousedown",u,!0),document.addEventListener("pointerdown",u,!0),document.addEventListener("touchstart",u,!0),document.addEventListener("visibilitychange",S,!0),X(),r.addEventListener("focus",d,!0),r.addEventListener("blur",v,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var ro=Cr((Uy,Pn)=>{"use strict";var qa=/["'&<>]/;Pn.exports=Ka;function Ka(e){var t=""+e,r=qa.exec(t);if(!r)return t;var o,n="",i=0,s=0;for(i=r.index;i{(function(t,r){typeof zt=="object"&&typeof io=="object"?io.exports=r():typeof define=="function"&&define.amd?define([],r):typeof zt=="object"?zt.ClipboardJS=r():t.ClipboardJS=r()})(zt,function(){return function(){var e={686:function(o,n,i){"use strict";i.d(n,{default:function(){return Xi}});var s=i(279),a=i.n(s),c=i(370),p=i.n(c),l=i(817),f=i.n(l);function u(q){try{return document.execCommand(q)}catch(C){return!1}}var d=function(C){var _=f()(C);return u("cut"),_},v=d;function S(q){var C=document.documentElement.getAttribute("dir")==="rtl",_=document.createElement("textarea");_.style.fontSize="12pt",_.style.border="0",_.style.padding="0",_.style.margin="0",_.style.position="absolute",_.style[C?"right":"left"]="-9999px";var W=window.pageYOffset||document.documentElement.scrollTop;return _.style.top="".concat(W,"px"),_.setAttribute("readonly",""),_.value=q,_}var X=function(C,_){var W=S(C);_.container.appendChild(W);var N=f()(W);return u("copy"),W.remove(),N},re=function(C){var _=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},W="";return typeof C=="string"?W=X(C,_):C instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(C==null?void 0:C.type)?W=X(C.value,_):(W=f()(C),u("copy")),W},ee=re;function k(q){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?k=function(_){return typeof _}:k=function(_){return _&&typeof Symbol=="function"&&_.constructor===Symbol&&_!==Symbol.prototype?"symbol":typeof _},k(q)}var ut=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},_=C.action,W=_===void 0?"copy":_,N=C.container,G=C.target,De=C.text;if(W!=="copy"&&W!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(G!==void 0)if(G&&k(G)==="object"&&G.nodeType===1){if(W==="copy"&&G.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(W==="cut"&&(G.hasAttribute("readonly")||G.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(De)return ee(De,{container:N});if(G)return W==="cut"?v(G):ee(G,{container:N})},je=ut;function P(q){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?P=function(_){return typeof _}:P=function(_){return _&&typeof Symbol=="function"&&_.constructor===Symbol&&_!==Symbol.prototype?"symbol":typeof _},P(q)}function se(q,C){if(!(q instanceof C))throw new TypeError("Cannot call a class as a function")}function ce(q,C){for(var _=0;_0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof N.action=="function"?N.action:this.defaultAction,this.target=typeof N.target=="function"?N.target:this.defaultTarget,this.text=typeof N.text=="function"?N.text:this.defaultText,this.container=P(N.container)==="object"?N.container:document.body}},{key:"listenClick",value:function(N){var G=this;this.listener=p()(N,"click",function(De){return G.onClick(De)})}},{key:"onClick",value:function(N){var G=N.delegateTarget||N.currentTarget,De=this.action(G)||"copy",Bt=je({action:De,container:this.container,target:this.target(G),text:this.text(G)});this.emit(Bt?"success":"error",{action:De,text:Bt,trigger:G,clearSelection:function(){G&&G.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(N){return Mr("action",N)}},{key:"defaultTarget",value:function(N){var G=Mr("target",N);if(G)return document.querySelector(G)}},{key:"defaultText",value:function(N){return Mr("text",N)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(N){var G=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return ee(N,G)}},{key:"cut",value:function(N){return v(N)}},{key:"isSupported",value:function(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],G=typeof N=="string"?[N]:N,De=!!document.queryCommandSupported;return G.forEach(function(Bt){De=De&&!!document.queryCommandSupported(Bt)}),De}}]),_}(a()),Xi=Ji},828:function(o){var n=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,c){for(;a&&a.nodeType!==n;){if(typeof a.matches=="function"&&a.matches(c))return a;a=a.parentNode}}o.exports=s},438:function(o,n,i){var s=i(828);function a(l,f,u,d,v){var S=p.apply(this,arguments);return l.addEventListener(u,S,v),{destroy:function(){l.removeEventListener(u,S,v)}}}function c(l,f,u,d,v){return typeof l.addEventListener=="function"?a.apply(null,arguments):typeof u=="function"?a.bind(null,document).apply(null,arguments):(typeof l=="string"&&(l=document.querySelectorAll(l)),Array.prototype.map.call(l,function(S){return a(S,f,u,d,v)}))}function p(l,f,u,d){return function(v){v.delegateTarget=s(v.target,f),v.delegateTarget&&d.call(l,v)}}o.exports=c},879:function(o,n){n.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},n.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||n.node(i[0]))},n.string=function(i){return typeof i=="string"||i instanceof String},n.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(o,n,i){var s=i(879),a=i(438);function c(u,d,v){if(!u&&!d&&!v)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(v))throw new TypeError("Third argument must be a Function");if(s.node(u))return p(u,d,v);if(s.nodeList(u))return l(u,d,v);if(s.string(u))return f(u,d,v);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function p(u,d,v){return u.addEventListener(d,v),{destroy:function(){u.removeEventListener(d,v)}}}function l(u,d,v){return Array.prototype.forEach.call(u,function(S){S.addEventListener(d,v)}),{destroy:function(){Array.prototype.forEach.call(u,function(S){S.removeEventListener(d,v)})}}}function f(u,d,v){return a(document.body,u,d,v)}o.exports=c},817:function(o){function n(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),p=document.createRange();p.selectNodeContents(i),c.removeAllRanges(),c.addRange(p),s=c.toString()}return s}o.exports=n},279:function(o){function n(){}n.prototype={on:function(i,s,a){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var c=this;function p(){c.off(i,p),s.apply(a,arguments)}return p._=s,this.on(i,p,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),c=0,p=a.length;for(c;c0&&i[i.length-1])&&(p[0]===6||p[0]===2)){r=0;continue}if(p[0]===3&&(!i||p[1]>i[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function K(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var o=r.call(e),n,i=[],s;try{for(;(t===void 0||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(a){s={error:a}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(s)throw s.error}}return i}function B(e,t,r){if(r||arguments.length===2)for(var o=0,n=t.length,i;o1||c(d,S)})},v&&(n[d]=v(n[d])))}function c(d,v){try{p(o[d](v))}catch(S){u(i[0][3],S)}}function p(d){d.value instanceof dt?Promise.resolve(d.value.v).then(l,f):u(i[0][2],d)}function l(d){c("next",d)}function f(d){c("throw",d)}function u(d,v){d(v),i.shift(),i.length&&c(i[0][0],i[0][1])}}function To(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Oe=="function"?Oe(e):e[Symbol.iterator](),r={},o("next"),o("throw"),o("return"),r[Symbol.asyncIterator]=function(){return this},r);function o(i){r[i]=e[i]&&function(s){return new Promise(function(a,c){s=e[i](s),n(a,c,s.done,s.value)})}}function n(i,s,a,c){Promise.resolve(c).then(function(p){i({value:p,done:a})},s)}}function I(e){return typeof e=="function"}function yt(e){var t=function(o){Error.call(o),o.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var Xt=yt(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(o,n){return n+1+") "+o.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ze(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var qe=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,o,n,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=Oe(s),c=a.next();!c.done;c=a.next()){var p=c.value;p.remove(this)}}catch(S){t={error:S}}finally{try{c&&!c.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var l=this.initialTeardown;if(I(l))try{l()}catch(S){i=S instanceof Xt?S.errors:[S]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var u=Oe(f),d=u.next();!d.done;d=u.next()){var v=d.value;try{So(v)}catch(S){i=i!=null?i:[],S instanceof Xt?i=B(B([],K(i)),K(S.errors)):i.push(S)}}}catch(S){o={error:S}}finally{try{d&&!d.done&&(n=u.return)&&n.call(u)}finally{if(o)throw o.error}}}if(i)throw new Xt(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)So(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ze(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ze(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var $r=qe.EMPTY;function Zt(e){return e instanceof qe||e&&"closed"in e&&I(e.remove)&&I(e.add)&&I(e.unsubscribe)}function So(e){I(e)?e():e.unsubscribe()}var We={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var xt={setTimeout:function(e,t){for(var r=[],o=2;o0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var o=this,n=this,i=n.hasError,s=n.isStopped,a=n.observers;return i||s?$r:(this.currentObservers=null,a.push(r),new qe(function(){o.currentObservers=null,Ze(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var o=this,n=o.hasError,i=o.thrownError,s=o.isStopped;n?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,o){return new Ho(r,o)},t}(F);var Ho=function(e){ie(t,e);function t(r,o){var n=e.call(this)||this;return n.destination=r,n.source=o,n}return t.prototype.next=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.next)===null||n===void 0||n.call(o,r)},t.prototype.error=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.error)===null||n===void 0||n.call(o,r)},t.prototype.complete=function(){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||o===void 0||o.call(r)},t.prototype._subscribe=function(r){var o,n;return(n=(o=this.source)===null||o===void 0?void 0:o.subscribe(r))!==null&&n!==void 0?n:$r},t}(T);var jr=function(e){ie(t,e);function t(r){var o=e.call(this)||this;return o._value=r,o}return Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(r){var o=e.prototype._subscribe.call(this,r);return!o.closed&&r.next(this._value),o},t.prototype.getValue=function(){var r=this,o=r.hasError,n=r.thrownError,i=r._value;if(o)throw n;return this._throwIfClosed(),i},t.prototype.next=function(r){e.prototype.next.call(this,this._value=r)},t}(T);var It={now:function(){return(It.delegate||Date).now()},delegate:void 0};var Ft=function(e){ie(t,e);function t(r,o,n){r===void 0&&(r=1/0),o===void 0&&(o=1/0),n===void 0&&(n=It);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=o,i._timestampProvider=n,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=o===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,o),i}return t.prototype.next=function(r){var o=this,n=o.isStopped,i=o._buffer,s=o._infiniteTimeWindow,a=o._timestampProvider,c=o._windowTime;n||(i.push(r),!s&&i.push(a.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var o=this._innerSubscribe(r),n=this,i=n._infiniteTimeWindow,s=n._buffer,a=s.slice(),c=0;c0?e.prototype.schedule.call(this,r,o):(this.delay=o,this.state=r,this.scheduler.flush(this),this)},t.prototype.execute=function(r,o){return o>0||this.closed?e.prototype.execute.call(this,r,o):this._execute(r,o)},t.prototype.requestAsyncId=function(r,o,n){return n===void 0&&(n=0),n!=null&&n>0||n==null&&this.delay>0?e.prototype.requestAsyncId.call(this,r,o,n):(r.flush(this),0)},t}(St);var Po=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(Ot);var Wr=new Po(Ro);var Io=function(e){ie(t,e);function t(r,o){var n=e.call(this,r,o)||this;return n.scheduler=r,n.work=o,n}return t.prototype.requestAsyncId=function(r,o,n){return n===void 0&&(n=0),n!==null&&n>0?e.prototype.requestAsyncId.call(this,r,o,n):(r.actions.push(this),r._scheduled||(r._scheduled=Tt.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,o,n){var i;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,o,n);var s=r.actions;o!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==o&&(Tt.cancelAnimationFrame(o),r._scheduled=void 0)},t}(St);var Fo=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var o=this._scheduled;this._scheduled=void 0;var n=this.actions,i;r=r||n.shift();do if(i=r.execute(r.state,r.delay))break;while((r=n[0])&&r.id===o&&n.shift());if(this._active=!1,i){for(;(r=n[0])&&r.id===o&&n.shift();)r.unsubscribe();throw i}},t}(Ot);var ye=new Fo(Io);var y=new F(function(e){return e.complete()});function rr(e){return e&&I(e.schedule)}function Vr(e){return e[e.length-1]}function pt(e){return I(Vr(e))?e.pop():void 0}function Fe(e){return rr(Vr(e))?e.pop():void 0}function or(e,t){return typeof Vr(e)=="number"?e.pop():t}var Lt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function nr(e){return I(e==null?void 0:e.then)}function ir(e){return I(e[wt])}function ar(e){return Symbol.asyncIterator&&I(e==null?void 0:e[Symbol.asyncIterator])}function sr(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function fa(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var cr=fa();function pr(e){return I(e==null?void 0:e[cr])}function lr(e){return wo(this,arguments,function(){var r,o,n,i;return Jt(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,dt(r.read())];case 3:return o=s.sent(),n=o.value,i=o.done,i?[4,dt(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,dt(n)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function mr(e){return I(e==null?void 0:e.getReader)}function U(e){if(e instanceof F)return e;if(e!=null){if(ir(e))return ua(e);if(Lt(e))return da(e);if(nr(e))return ha(e);if(ar(e))return jo(e);if(pr(e))return ba(e);if(mr(e))return va(e)}throw sr(e)}function ua(e){return new F(function(t){var r=e[wt]();if(I(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function da(e){return new F(function(t){for(var r=0;r=2;return function(o){return o.pipe(e?g(function(n,i){return e(n,i,o)}):be,Ee(1),r?Qe(t):tn(function(){return new ur}))}}function Yr(e){return e<=0?function(){return y}:E(function(t,r){var o=[];t.subscribe(w(r,function(n){o.push(n),e=2,!0))}function le(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new T}:t,o=e.resetOnError,n=o===void 0?!0:o,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,c=a===void 0?!0:a;return function(p){var l,f,u,d=0,v=!1,S=!1,X=function(){f==null||f.unsubscribe(),f=void 0},re=function(){X(),l=u=void 0,v=S=!1},ee=function(){var k=l;re(),k==null||k.unsubscribe()};return E(function(k,ut){d++,!S&&!v&&X();var je=u=u!=null?u:r();ut.add(function(){d--,d===0&&!S&&!v&&(f=Br(ee,c))}),je.subscribe(ut),!l&&d>0&&(l=new bt({next:function(P){return je.next(P)},error:function(P){S=!0,X(),f=Br(re,n,P),je.error(P)},complete:function(){v=!0,X(),f=Br(re,s),je.complete()}}),U(k).subscribe(l))})(p)}}function Br(e,t){for(var r=[],o=2;oe.next(document)),e}function M(e,t=document){return Array.from(t.querySelectorAll(e))}function j(e,t=document){let r=ue(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ue(e,t=document){return t.querySelector(e)||void 0}function Ne(){var e,t,r,o;return(o=(r=(t=(e=document.activeElement)==null?void 0:e.shadowRoot)==null?void 0:t.activeElement)!=null?r:document.activeElement)!=null?o:void 0}var Pa=L(h(document.body,"focusin"),h(document.body,"focusout")).pipe(Ae(1),Q(void 0),m(()=>Ne()||document.body),Z(1));function Ye(e){return Pa.pipe(m(t=>e.contains(t)),Y())}function it(e,t){return H(()=>L(h(e,"mouseenter").pipe(m(()=>!0)),h(e,"mouseleave").pipe(m(()=>!1))).pipe(t?Ut(r=>He(+!r*t)):be,Q(e.matches(":hover"))))}function sn(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)sn(e,r)}function x(e,t,...r){let o=document.createElement(e);if(t)for(let n of Object.keys(t))typeof t[n]!="undefined"&&(typeof t[n]!="boolean"?o.setAttribute(n,t[n]):o.setAttribute(n,""));for(let n of r)sn(o,n);return o}function br(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function At(e){let t=x("script",{src:e});return H(()=>(document.head.appendChild(t),L(h(t,"load"),h(t,"error").pipe(b(()=>Nr(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),A(()=>document.head.removeChild(t)),Ee(1))))}var cn=new T,Ia=H(()=>typeof ResizeObserver=="undefined"?At("https://unpkg.com/resize-observer-polyfill"):$(void 0)).pipe(m(()=>new ResizeObserver(e=>e.forEach(t=>cn.next(t)))),b(e=>L(tt,$(e)).pipe(A(()=>e.disconnect()))),Z(1));function de(e){return{width:e.offsetWidth,height:e.offsetHeight}}function Le(e){let t=e;for(;t.clientWidth===0&&t.parentElement;)t=t.parentElement;return Ia.pipe(O(r=>r.observe(t)),b(r=>cn.pipe(g(o=>o.target===t),A(()=>r.unobserve(t)))),m(()=>de(e)),Q(de(e)))}function Ct(e){return{width:e.scrollWidth,height:e.scrollHeight}}function vr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}function pn(e){let t=[],r=e.parentElement;for(;r;)(e.clientWidth>r.clientWidth||e.clientHeight>r.clientHeight)&&t.push(r),r=(e=r).parentElement;return t.length===0&&t.push(document.documentElement),t}function Be(e){return{x:e.offsetLeft,y:e.offsetTop}}function ln(e){let t=e.getBoundingClientRect();return{x:t.x+window.scrollX,y:t.y+window.scrollY}}function mn(e){return L(h(window,"load"),h(window,"resize")).pipe($e(0,ye),m(()=>Be(e)),Q(Be(e)))}function gr(e){return{x:e.scrollLeft,y:e.scrollTop}}function Ge(e){return L(h(e,"scroll"),h(window,"scroll"),h(window,"resize")).pipe($e(0,ye),m(()=>gr(e)),Q(gr(e)))}var fn=new T,Fa=H(()=>$(new IntersectionObserver(e=>{for(let t of e)fn.next(t)},{threshold:0}))).pipe(b(e=>L(tt,$(e)).pipe(A(()=>e.disconnect()))),Z(1));function mt(e){return Fa.pipe(O(t=>t.observe(e)),b(t=>fn.pipe(g(({target:r})=>r===e),A(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function un(e,t=16){return Ge(e).pipe(m(({y:r})=>{let o=de(e),n=Ct(e);return r>=n.height-o.height-t}),Y())}var yr={drawer:j("[data-md-toggle=drawer]"),search:j("[data-md-toggle=search]")};function dn(e){return yr[e].checked}function at(e,t){yr[e].checked!==t&&yr[e].click()}function Je(e){let t=yr[e];return h(t,"change").pipe(m(()=>t.checked),Q(t.checked))}function ja(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ua(){return L(h(window,"compositionstart").pipe(m(()=>!0)),h(window,"compositionend").pipe(m(()=>!1))).pipe(Q(!1))}function hn(){let e=h(window,"keydown").pipe(g(t=>!(t.metaKey||t.ctrlKey)),m(t=>({mode:dn("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),g(({mode:t,type:r})=>{if(t==="global"){let o=Ne();if(typeof o!="undefined")return!ja(o,r)}return!0}),le());return Ua().pipe(b(t=>t?y:e))}function we(){return new URL(location.href)}function st(e,t=!1){if(V("navigation.instant")&&!t){let r=x("a",{href:e.href});document.body.appendChild(r),r.click(),r.remove()}else location.href=e.href}function bn(){return new T}function vn(){return location.hash.slice(1)}function gn(e){let t=x("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Zr(e){return L(h(window,"hashchange"),e).pipe(m(vn),Q(vn()),g(t=>t.length>0),Z(1))}function yn(e){return Zr(e).pipe(m(t=>ue(`[id="${t}"]`)),g(t=>typeof t!="undefined"))}function Wt(e){let t=matchMedia(e);return dr(r=>t.addListener(()=>r(t.matches))).pipe(Q(t.matches))}function xn(){let e=matchMedia("print");return L(h(window,"beforeprint").pipe(m(()=>!0)),h(window,"afterprint").pipe(m(()=>!1))).pipe(Q(e.matches))}function eo(e,t){return e.pipe(b(r=>r?t():y))}function to(e,t){return new F(r=>{let o=new XMLHttpRequest;return o.open("GET",`${e}`),o.responseType="blob",o.addEventListener("load",()=>{o.status>=200&&o.status<300?(r.next(o.response),r.complete()):r.error(new Error(o.statusText))}),o.addEventListener("error",()=>{r.error(new Error("Network error"))}),o.addEventListener("abort",()=>{r.complete()}),typeof(t==null?void 0:t.progress$)!="undefined"&&(o.addEventListener("progress",n=>{var i;if(n.lengthComputable)t.progress$.next(n.loaded/n.total*100);else{let s=(i=o.getResponseHeader("Content-Length"))!=null?i:0;t.progress$.next(n.loaded/+s*100)}}),t.progress$.next(5)),o.send(),()=>o.abort()})}function ze(e,t){return to(e,t).pipe(b(r=>r.text()),m(r=>JSON.parse(r)),Z(1))}function xr(e,t){let r=new DOMParser;return to(e,t).pipe(b(o=>o.text()),m(o=>r.parseFromString(o,"text/html")),Z(1))}function En(e,t){let r=new DOMParser;return to(e,t).pipe(b(o=>o.text()),m(o=>r.parseFromString(o,"text/xml")),Z(1))}function wn(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function Tn(){return L(h(window,"scroll",{passive:!0}),h(window,"resize",{passive:!0})).pipe(m(wn),Q(wn()))}function Sn(){return{width:innerWidth,height:innerHeight}}function On(){return h(window,"resize",{passive:!0}).pipe(m(Sn),Q(Sn()))}function Ln(){return z([Tn(),On()]).pipe(m(([e,t])=>({offset:e,size:t})),Z(1))}function Er(e,{viewport$:t,header$:r}){let o=t.pipe(ne("size")),n=z([o,r]).pipe(m(()=>Be(e)));return z([r,t,n]).pipe(m(([{height:i},{offset:s,size:a},{x:c,y:p}])=>({offset:{x:s.x-c,y:s.y-p+i},size:a})))}function Da(e){return h(e,"message",t=>t.data)}function Wa(e){let t=new T;return t.subscribe(r=>e.postMessage(r)),t}function Mn(e,t=new Worker(e)){let r=Da(t),o=Wa(t),n=new T;n.subscribe(o);let i=o.pipe(oe(),ae(!0));return n.pipe(oe(),Ve(r.pipe(D(i))),le())}var Va=j("#__config"),kt=JSON.parse(Va.textContent);kt.base=`${new URL(kt.base,we())}`;function Te(){return kt}function V(e){return kt.features.includes(e)}function Me(e,t){return typeof t!="undefined"?kt.translations[e].replace("#",t.toString()):kt.translations[e]}function Ce(e,t=document){return j(`[data-md-component=${e}]`,t)}function me(e,t=document){return M(`[data-md-component=${e}]`,t)}function Na(e){let t=j(".md-typeset > :first-child",e);return h(t,"click",{once:!0}).pipe(m(()=>j(".md-typeset",e)),m(r=>({hash:__md_hash(r.innerHTML)})))}function _n(e){if(!V("announce.dismiss")||!e.childElementCount)return y;if(!e.hidden){let t=j(".md-typeset",e);__md_hash(t.innerHTML)===__md_get("__announce")&&(e.hidden=!0)}return H(()=>{let t=new T;return t.subscribe(({hash:r})=>{e.hidden=!0,__md_set("__announce",r)}),Na(e).pipe(O(r=>t.next(r)),A(()=>t.complete()),m(r=>R({ref:e},r)))})}function za(e,{target$:t}){return t.pipe(m(r=>({hidden:r!==e})))}function An(e,t){let r=new T;return r.subscribe(({hidden:o})=>{e.hidden=o}),za(e,t).pipe(O(o=>r.next(o)),A(()=>r.complete()),m(o=>R({ref:e},o)))}function Vt(e,t){return t==="inline"?x("div",{class:"md-tooltip md-tooltip--inline",id:e,role:"tooltip"},x("div",{class:"md-tooltip__inner md-typeset"})):x("div",{class:"md-tooltip",id:e,role:"tooltip"},x("div",{class:"md-tooltip__inner md-typeset"}))}function wr(...e){return x("div",{class:"md-tooltip2",role:"dialog"},x("div",{class:"md-tooltip2__inner md-typeset"},e))}function Cn(...e){return x("div",{class:"md-tooltip2",role:"tooltip"},x("div",{class:"md-tooltip2__inner md-typeset"},e))}function kn(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return x("aside",{class:"md-annotation",tabIndex:0},Vt(t),x("a",{href:r,class:"md-annotation__index",tabIndex:-1},x("span",{"data-md-annotation-id":e})))}else return x("aside",{class:"md-annotation",tabIndex:0},Vt(t),x("span",{class:"md-annotation__index",tabIndex:-1},x("span",{"data-md-annotation-id":e})))}function Hn(e){return x("button",{class:"md-code__button",title:Me("clipboard.copy"),"data-clipboard-target":`#${e} > code`,"data-md-type":"copy"})}function $n(){return x("button",{class:"md-code__button",title:"Toggle line selection","data-md-type":"select"})}function Rn(){return x("nav",{class:"md-code__nav"})}var In=Rt(ro());function oo(e,t){let r=t&2,o=t&1,n=Object.keys(e.terms).filter(c=>!e.terms[c]).reduce((c,p)=>[...c,x("del",null,(0,In.default)(p))," "],[]).slice(0,-1),i=Te(),s=new URL(e.location,i.base);V("search.highlight")&&s.searchParams.set("h",Object.entries(e.terms).filter(([,c])=>c).reduce((c,[p])=>`${c} ${p}`.trim(),""));let{tags:a}=Te();return x("a",{href:`${s}`,class:"md-search-result__link",tabIndex:-1},x("article",{class:"md-search-result__article md-typeset","data-md-score":e.score.toFixed(2)},r>0&&x("div",{class:"md-search-result__icon md-icon"}),r>0&&x("h1",null,e.title),r<=0&&x("h2",null,e.title),o>0&&e.text.length>0&&e.text,e.tags&&x("nav",{class:"md-tags"},e.tags.map(c=>{let p=a?c in a?`md-tag-icon md-tag--${a[c]}`:"md-tag-icon":"";return x("span",{class:`md-tag ${p}`},c)})),o>0&&n.length>0&&x("p",{class:"md-search-result__terms"},Me("search.result.term.missing"),": ",...n)))}function Fn(e){let t=e[0].score,r=[...e],o=Te(),n=r.findIndex(l=>!`${new URL(l.location,o.base)}`.includes("#")),[i]=r.splice(n,1),s=r.findIndex(l=>l.scoreoo(l,1)),...c.length?[x("details",{class:"md-search-result__more"},x("summary",{tabIndex:-1},x("div",null,c.length>0&&c.length===1?Me("search.result.more.one"):Me("search.result.more.other",c.length))),...c.map(l=>oo(l,1)))]:[]];return x("li",{class:"md-search-result__item"},p)}function jn(e){return x("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>x("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?br(r):r)))}function no(e){let t=`tabbed-control tabbed-control--${e}`;return x("div",{class:t,hidden:!0},x("button",{class:"tabbed-button",tabIndex:-1,"aria-hidden":"true"}))}function Un(e){return x("div",{class:"md-typeset__scrollwrap"},x("div",{class:"md-typeset__table"},e))}function Qa(e){var o;let t=Te(),r=new URL(`../${e.version}/`,t.base);return x("li",{class:"md-version__item"},x("a",{href:`${r}`,class:"md-version__link"},e.title,((o=t.version)==null?void 0:o.alias)&&e.aliases.length>0&&x("span",{class:"md-version__alias"},e.aliases[0])))}function Dn(e,t){var o;let r=Te();return e=e.filter(n=>{var i;return!((i=n.properties)!=null&&i.hidden)}),x("div",{class:"md-version"},x("button",{class:"md-version__current","aria-label":Me("select.version")},t.title,((o=r.version)==null?void 0:o.alias)&&t.aliases.length>0&&x("span",{class:"md-version__alias"},t.aliases[0])),x("ul",{class:"md-version__list"},e.map(Qa)))}var Ya=0;function Ba(e,t=250){let r=z([Ye(e),it(e,t)]).pipe(m(([n,i])=>n||i),Y()),o=H(()=>pn(e)).pipe(J(Ge),gt(1),Re(r),m(()=>ln(e)));return r.pipe(Pe(n=>n),b(()=>z([r,o])),m(([n,i])=>({active:n,offset:i})),le())}function Nt(e,t,r=250){let{content$:o,viewport$:n}=t,i=`__tooltip2_${Ya++}`;return H(()=>{let s=new T,a=new jr(!1);s.pipe(oe(),ae(!1)).subscribe(a);let c=a.pipe(Ut(l=>He(+!l*250,Wr)),Y(),b(l=>l?o:y),O(l=>l.id=i),le());z([s.pipe(m(({active:l})=>l)),c.pipe(b(l=>it(l,250)),Q(!1))]).pipe(m(l=>l.some(f=>f))).subscribe(a);let p=a.pipe(g(l=>l),te(c,n),m(([l,f,{size:u}])=>{let d=e.getBoundingClientRect(),v=d.width/2;if(f.role==="tooltip")return{x:v,y:8+d.height};if(d.y>=u.height/2){let{height:S}=de(f);return{x:v,y:-16-S}}else return{x:v,y:16+d.height}}));return z([c,s,p]).subscribe(([l,{offset:f},u])=>{l.style.setProperty("--md-tooltip-host-x",`${f.x}px`),l.style.setProperty("--md-tooltip-host-y",`${f.y}px`),l.style.setProperty("--md-tooltip-x",`${u.x}px`),l.style.setProperty("--md-tooltip-y",`${u.y}px`),l.classList.toggle("md-tooltip2--top",u.y<0),l.classList.toggle("md-tooltip2--bottom",u.y>=0)}),a.pipe(g(l=>l),te(c,(l,f)=>f),g(l=>l.role==="tooltip")).subscribe(l=>{let f=de(j(":scope > *",l));l.style.setProperty("--md-tooltip-width",`${f.width}px`),l.style.setProperty("--md-tooltip-tail","0px")}),a.pipe(Y(),xe(ye),te(c)).subscribe(([l,f])=>{f.classList.toggle("md-tooltip2--active",l)}),z([a.pipe(g(l=>l)),c]).subscribe(([l,f])=>{f.role==="dialog"?(e.setAttribute("aria-controls",i),e.setAttribute("aria-haspopup","dialog")):e.setAttribute("aria-describedby",i)}),a.pipe(g(l=>!l)).subscribe(()=>{e.removeAttribute("aria-controls"),e.removeAttribute("aria-describedby"),e.removeAttribute("aria-haspopup")}),Ba(e,r).pipe(O(l=>s.next(l)),A(()=>s.complete()),m(l=>R({ref:e},l)))})}function Xe(e,{viewport$:t},r=document.body){return Nt(e,{content$:new F(o=>{let n=e.title,i=Cn(n);return o.next(i),e.removeAttribute("title"),r.append(i),()=>{i.remove(),e.setAttribute("title",n)}}),viewport$:t},0)}function Ga(e,t){let r=H(()=>z([mn(e),Ge(t)])).pipe(m(([{x:o,y:n},i])=>{let{width:s,height:a}=de(e);return{x:o-i.x+s/2,y:n-i.y+a/2}}));return Ye(e).pipe(b(o=>r.pipe(m(n=>({active:o,offset:n})),Ee(+!o||1/0))))}function Wn(e,t,{target$:r}){let[o,n]=Array.from(e.children);return H(()=>{let i=new T,s=i.pipe(oe(),ae(!0));return i.subscribe({next({offset:a}){e.style.setProperty("--md-tooltip-x",`${a.x}px`),e.style.setProperty("--md-tooltip-y",`${a.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),mt(e).pipe(D(s)).subscribe(a=>{e.toggleAttribute("data-md-visible",a)}),L(i.pipe(g(({active:a})=>a)),i.pipe(Ae(250),g(({active:a})=>!a))).subscribe({next({active:a}){a?e.prepend(o):o.remove()},complete(){e.prepend(o)}}),i.pipe($e(16,ye)).subscribe(({active:a})=>{o.classList.toggle("md-tooltip--active",a)}),i.pipe(gt(125,ye),g(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:a})=>a)).subscribe({next(a){a?e.style.setProperty("--md-tooltip-0",`${-a}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),h(n,"click").pipe(D(s),g(a=>!(a.metaKey||a.ctrlKey))).subscribe(a=>{a.stopPropagation(),a.preventDefault()}),h(n,"mousedown").pipe(D(s),te(i)).subscribe(([a,{active:c}])=>{var p;if(a.button!==0||a.metaKey||a.ctrlKey)a.preventDefault();else if(c){a.preventDefault();let l=e.parentElement.closest(".md-annotation");l instanceof HTMLElement?l.focus():(p=Ne())==null||p.blur()}}),r.pipe(D(s),g(a=>a===o),nt(125)).subscribe(()=>e.focus()),Ga(e,t).pipe(O(a=>i.next(a)),A(()=>i.complete()),m(a=>R({ref:e},a)))})}function Ja(e){let t=Te();if(e.tagName!=="CODE")return[e];let r=[".c",".c1",".cm"];if(typeof t.annotate!="undefined"){let o=e.closest("[class|=language]");if(o)for(let n of Array.from(o.classList)){if(!n.startsWith("language-"))continue;let[,i]=n.split("-");i in t.annotate&&r.push(...t.annotate[i])}}return M(r.join(", "),e)}function Xa(e){let t=[];for(let r of Ja(e)){let o=[],n=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=n.nextNode();i;i=n.nextNode())o.push(i);for(let i of o){let s;for(;s=/(\(\d+\))(!)?/.exec(i.textContent);){let[,a,c]=s;if(typeof c=="undefined"){let p=i.splitText(s.index);i=p.splitText(a.length),t.push(p)}else{i.textContent=a,t.push(i);break}}}}return t}function Vn(e,t){t.append(...Array.from(e.childNodes))}function Tr(e,t,{target$:r,print$:o}){let n=t.closest("[id]"),i=n==null?void 0:n.id,s=new Map;for(let a of Xa(t)){let[,c]=a.textContent.match(/\((\d+)\)/);ue(`:scope > li:nth-child(${c})`,e)&&(s.set(c,kn(c,i)),a.replaceWith(s.get(c)))}return s.size===0?y:H(()=>{let a=new T,c=a.pipe(oe(),ae(!0)),p=[];for(let[l,f]of s)p.push([j(".md-typeset",f),j(`:scope > li:nth-child(${l})`,e)]);return o.pipe(D(c)).subscribe(l=>{e.hidden=!l,e.classList.toggle("md-annotation-list",l);for(let[f,u]of p)l?Vn(f,u):Vn(u,f)}),L(...[...s].map(([,l])=>Wn(l,t,{target$:r}))).pipe(A(()=>a.complete()),le())})}function Nn(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return Nn(t)}}function zn(e,t){return H(()=>{let r=Nn(e);return typeof r!="undefined"?Tr(r,e,t):y})}var Kn=Rt(ao());var Za=0,qn=L(h(window,"keydown").pipe(m(()=>!0)),L(h(window,"keyup"),h(window,"contextmenu")).pipe(m(()=>!1))).pipe(Q(!1),Z(1));function Qn(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return Qn(t)}}function es(e){return Le(e).pipe(m(({width:t})=>({scrollable:Ct(e).width>t})),ne("scrollable"))}function Yn(e,t){let{matches:r}=matchMedia("(hover)"),o=H(()=>{let n=new T,i=n.pipe(Yr(1));n.subscribe(({scrollable:d})=>{d&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")});let s=[],a=e.closest("pre"),c=a.closest("[id]"),p=c?c.id:Za++;a.id=`__code_${p}`;let l=[],f=e.closest(".highlight");if(f instanceof HTMLElement){let d=Qn(f);if(typeof d!="undefined"&&(f.classList.contains("annotate")||V("content.code.annotate"))){let v=Tr(d,e,t);l.push(Le(f).pipe(D(i),m(({width:S,height:X})=>S&&X),Y(),b(S=>S?v:y)))}}let u=M(":scope > span[id]",e);if(u.length&&(e.classList.add("md-code__content"),e.closest(".select")||V("content.code.select")&&!e.closest(".no-select"))){let d=+u[0].id.split("-").pop(),v=$n();s.push(v),V("content.tooltips")&&l.push(Xe(v,{viewport$}));let S=h(v,"click").pipe(Dt(P=>!P,!1),O(()=>v.blur()),le());S.subscribe(P=>{v.classList.toggle("md-code__button--active",P)});let X=fe(u).pipe(J(P=>it(P).pipe(m(se=>[P,se]))));S.pipe(b(P=>P?X:y)).subscribe(([P,se])=>{let ce=ue(".hll.select",P);if(ce&&!se)ce.replaceWith(...Array.from(ce.childNodes));else if(!ce&&se){let he=document.createElement("span");he.className="hll select",he.append(...Array.from(P.childNodes).slice(1)),P.append(he)}});let re=fe(u).pipe(J(P=>h(P,"mousedown").pipe(O(se=>se.preventDefault()),m(()=>P)))),ee=S.pipe(b(P=>P?re:y),te(qn),m(([P,se])=>{var he;let ce=u.indexOf(P)+d;if(se===!1)return[ce,ce];{let Se=M(".hll",e).map(Ue=>u.indexOf(Ue.parentElement)+d);return(he=window.getSelection())==null||he.removeAllRanges(),[Math.min(ce,...Se),Math.max(ce,...Se)]}})),k=Zr(y).pipe(g(P=>P.startsWith(`__codelineno-${p}-`)));k.subscribe(P=>{let[,,se]=P.split("-"),ce=se.split(":").map(Se=>+Se-d+1);ce.length===1&&ce.push(ce[0]);for(let Se of M(".hll:not(.select)",e))Se.replaceWith(...Array.from(Se.childNodes));let he=u.slice(ce[0]-1,ce[1]);for(let Se of he){let Ue=document.createElement("span");Ue.className="hll",Ue.append(...Array.from(Se.childNodes).slice(1)),Se.append(Ue)}}),k.pipe(Ee(1),xe(pe)).subscribe(P=>{if(P.includes(":")){let se=document.getElementById(P.split(":")[0]);se&&setTimeout(()=>{let ce=se,he=-64;for(;ce!==document.body;)he+=ce.offsetTop,ce=ce.offsetParent;window.scrollTo({top:he})},1)}});let je=fe(M('a[href^="#__codelineno"]',f)).pipe(J(P=>h(P,"click").pipe(O(se=>se.preventDefault()),m(()=>P)))).pipe(D(i),te(qn),m(([P,se])=>{let he=+j(`[id="${P.hash.slice(1)}"]`).parentElement.id.split("-").pop();if(se===!1)return[he,he];{let Se=M(".hll",e).map(Ue=>+Ue.parentElement.id.split("-").pop());return[Math.min(he,...Se),Math.max(he,...Se)]}}));L(ee,je).subscribe(P=>{let se=`#__codelineno-${p}-`;P[0]===P[1]?se+=P[0]:se+=`${P[0]}:${P[1]}`,history.replaceState({},"",se),window.dispatchEvent(new HashChangeEvent("hashchange",{newURL:window.location.origin+window.location.pathname+se,oldURL:window.location.href}))})}if(Kn.default.isSupported()&&(e.closest(".copy")||V("content.code.copy")&&!e.closest(".no-copy"))){let d=Hn(a.id);s.push(d),V("content.tooltips")&&l.push(Xe(d,{viewport$}))}if(s.length){let d=Rn();d.append(...s),a.insertBefore(d,e)}return es(e).pipe(O(d=>n.next(d)),A(()=>n.complete()),m(d=>R({ref:e},d)),Ve(L(...l).pipe(D(i))))});return V("content.lazy")?mt(e).pipe(g(n=>n),Ee(1),b(()=>o)):o}function ts(e,{target$:t,print$:r}){let o=!0;return L(t.pipe(m(n=>n.closest("details:not([open])")),g(n=>e===n),m(()=>({action:"open",reveal:!0}))),r.pipe(g(n=>n||!o),O(()=>o=e.open),m(n=>({action:n?"open":"close"}))))}function Bn(e,t){return H(()=>{let r=new T;return r.subscribe(({action:o,reveal:n})=>{e.toggleAttribute("open",o==="open"),n&&e.scrollIntoView()}),ts(e,t).pipe(O(o=>r.next(o)),A(()=>r.complete()),m(o=>R({ref:e},o)))})}var Gn=0;function rs(e){let t=document.createElement("h3");t.innerHTML=e.innerHTML;let r=[t],o=e.nextElementSibling;for(;o&&!(o instanceof HTMLHeadingElement);)r.push(o),o=o.nextElementSibling;return r}function os(e,t){for(let r of M("[href], [src]",e))for(let o of["href","src"]){let n=r.getAttribute(o);if(n&&!/^(?:[a-z]+:)?\/\//i.test(n)){r[o]=new URL(r.getAttribute(o),t).toString();break}}for(let r of M("[name^=__], [for]",e))for(let o of["id","for","name"]){let n=r.getAttribute(o);n&&r.setAttribute(o,`${n}$preview_${Gn}`)}return Gn++,$(e)}function Jn(e,t){let{sitemap$:r}=t;if(!(e instanceof HTMLAnchorElement))return y;if(!(V("navigation.instant.preview")||e.hasAttribute("data-preview")))return y;let o=z([Ye(e),it(e)]).pipe(m(([i,s])=>i||s),Y(),g(i=>i));return rt([r,o]).pipe(b(([i])=>{let s=new URL(e.href);return s.search=s.hash="",i.has(`${s}`)?$(s):y}),b(i=>xr(i).pipe(b(s=>os(s,i)))),b(i=>{let s=e.hash?`article [id="${e.hash.slice(1)}"]`:"article h1",a=ue(s,i);return typeof a=="undefined"?y:$(rs(a))})).pipe(b(i=>{let s=new F(a=>{let c=wr(...i);return a.next(c),document.body.append(c),()=>c.remove()});return Nt(e,R({content$:s},t))}))}var Xn=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:#0000}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel p,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel p{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color);stroke-width:.05rem}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}g #flowchart-circleEnd,g #flowchart-circleStart,g #flowchart-crossEnd,g #flowchart-crossStart,g #flowchart-pointEnd,g #flowchart-pointStart{stroke:none}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel,.nodeLabel p{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}a .nodeLabel{text-decoration:underline}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.attributeBoxEven,.attributeBoxOdd{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}.actor{fill:var(--md-mermaid-sequence-actor-bg-color);stroke:var(--md-mermaid-sequence-actor-border-color)}text.actor>tspan{fill:var(--md-mermaid-sequence-actor-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-mermaid-sequence-actor-line-color)}.actor-man circle,.actor-man line{fill:var(--md-mermaid-sequence-actorman-bg-color);stroke:var(--md-mermaid-sequence-actorman-line-color)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-sequence-message-line-color)}.note{fill:var(--md-mermaid-sequence-note-bg-color);stroke:var(--md-mermaid-sequence-note-border-color)}.loopText,.loopText>tspan,.messageText,.noteText>tspan{stroke:none;font-family:var(--md-mermaid-font-family)!important}.messageText{fill:var(--md-mermaid-sequence-message-fg-color)}.loopText,.loopText>tspan{fill:var(--md-mermaid-sequence-loop-fg-color)}.noteText>tspan{fill:var(--md-mermaid-sequence-note-fg-color)}#arrowhead path{fill:var(--md-mermaid-sequence-message-line-color);stroke:none}.loopLine{fill:var(--md-mermaid-sequence-loop-bg-color);stroke:var(--md-mermaid-sequence-loop-border-color)}.labelBox{fill:var(--md-mermaid-sequence-label-bg-color);stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-sequence-label-fg-color);font-family:var(--md-mermaid-font-family)}.sequenceNumber{fill:var(--md-mermaid-sequence-number-fg-color)}rect.rect{fill:var(--md-mermaid-sequence-box-bg-color);stroke:none}rect.rect+text.text{fill:var(--md-mermaid-sequence-box-fg-color)}defs #sequencenumber{fill:var(--md-mermaid-sequence-number-bg-color)!important}";var so,is=0;function as(){return typeof mermaid=="undefined"||mermaid instanceof Element?At("https://unpkg.com/mermaid@11/dist/mermaid.min.js"):$(void 0)}function Zn(e){return e.classList.remove("mermaid"),so||(so=as().pipe(O(()=>mermaid.initialize({startOnLoad:!1,themeCSS:Xn,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),m(()=>{}),Z(1))),so.subscribe(()=>go(this,null,function*(){e.classList.add("mermaid");let t=`__mermaid_${is++}`,r=x("div",{class:"mermaid"}),o=e.textContent,{svg:n,fn:i}=yield mermaid.render(t,o),s=r.attachShadow({mode:"closed"});s.innerHTML=n,e.replaceWith(r),i==null||i(s)})),so.pipe(m(()=>({ref:e})))}var ei=x("table");function ti(e){return e.replaceWith(ei),ei.replaceWith(Un(e)),$({ref:e})}function ss(e){let t=e.find(r=>r.checked)||e[0];return L(...e.map(r=>h(r,"change").pipe(m(()=>j(`label[for="${r.id}"]`))))).pipe(Q(j(`label[for="${t.id}"]`)),m(r=>({active:r})))}function ri(e,{viewport$:t,target$:r}){let o=j(".tabbed-labels",e),n=M(":scope > input",e),i=no("prev");e.append(i);let s=no("next");return e.append(s),H(()=>{let a=new T,c=a.pipe(oe(),ae(!0));z([a,Le(e),mt(e)]).pipe(D(c),$e(1,ye)).subscribe({next([{active:p},l]){let f=Be(p),{width:u}=de(p);e.style.setProperty("--md-indicator-x",`${f.x}px`),e.style.setProperty("--md-indicator-width",`${u}px`);let d=gr(o);(f.xd.x+l.width)&&o.scrollTo({left:Math.max(0,f.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),z([Ge(o),Le(o)]).pipe(D(c)).subscribe(([p,l])=>{let f=Ct(o);i.hidden=p.x<16,s.hidden=p.x>f.width-l.width-16}),L(h(i,"click").pipe(m(()=>-1)),h(s,"click").pipe(m(()=>1))).pipe(D(c)).subscribe(p=>{let{width:l}=de(o);o.scrollBy({left:l*p,behavior:"smooth"})}),r.pipe(D(c),g(p=>n.includes(p))).subscribe(p=>p.click()),o.classList.add("tabbed-labels--linked");for(let p of n){let l=j(`label[for="${p.id}"]`);l.replaceChildren(x("a",{href:`#${l.htmlFor}`,tabIndex:-1},...Array.from(l.childNodes))),h(l.firstElementChild,"click").pipe(D(c),g(f=>!(f.metaKey||f.ctrlKey)),O(f=>{f.preventDefault(),f.stopPropagation()})).subscribe(()=>{history.replaceState({},"",`#${l.htmlFor}`),l.click()})}return V("content.tabs.link")&&a.pipe(Ie(1),te(t)).subscribe(([{active:p},{offset:l}])=>{let f=p.innerText.trim();if(p.hasAttribute("data-md-switching"))p.removeAttribute("data-md-switching");else{let u=e.offsetTop-l.y;for(let v of M("[data-tabs]"))for(let S of M(":scope > input",v)){let X=j(`label[for="${S.id}"]`);if(X!==p&&X.innerText.trim()===f){X.setAttribute("data-md-switching",""),S.click();break}}window.scrollTo({top:e.offsetTop-u});let d=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([f,...d])])}}),a.pipe(D(c)).subscribe(()=>{for(let p of M("audio, video",e))p.pause()}),ss(n).pipe(O(p=>a.next(p)),A(()=>a.complete()),m(p=>R({ref:e},p)))}).pipe(et(pe))}function oi(e,t){let{viewport$:r,target$:o,print$:n}=t;return L(...M(".annotate:not(.highlight)",e).map(i=>zn(i,{target$:o,print$:n})),...M("pre:not(.mermaid) > code",e).map(i=>Yn(i,{target$:o,print$:n})),...M("a:not([title])",e).map(i=>Jn(i,t)),...M("pre.mermaid",e).map(i=>Zn(i)),...M("table:not([class])",e).map(i=>ti(i)),...M("details",e).map(i=>Bn(i,{target$:o,print$:n})),...M("[data-tabs]",e).map(i=>ri(i,{viewport$:r,target$:o})),...M("[title]",e).filter(()=>V("content.tooltips")).map(i=>Xe(i,{viewport$:r})),...M(".footnote-ref",e).filter(()=>V("content.footnote.tooltips")).map(i=>Nt(i,{content$:new F(s=>{let a=new URL(i.href).hash.slice(1),c=Array.from(document.getElementById(a).cloneNode(!0).children),p=wr(...c);return s.next(p),document.body.append(p),()=>p.remove()}),viewport$:r})))}function cs(e,{alert$:t}){return t.pipe(b(r=>L($(!0),$(!1).pipe(nt(2e3))).pipe(m(o=>({message:r,active:o})))))}function ni(e,t){let r=j(".md-typeset",e);return H(()=>{let o=new T;return o.subscribe(({message:n,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=n}),cs(e,t).pipe(O(n=>o.next(n)),A(()=>o.complete()),m(n=>R({ref:e},n)))})}var ps=0;function ls(e,t){document.body.append(e);let{width:r}=de(e);e.style.setProperty("--md-tooltip-width",`${r}px`),e.remove();let o=vr(t),n=typeof o!="undefined"?Ge(o):$({x:0,y:0}),i=L(Ye(t),it(t)).pipe(Y());return z([i,n]).pipe(m(([s,a])=>{let{x:c,y:p}=Be(t),l=de(t),f=t.closest("table");return f&&t.parentElement&&(c+=f.offsetLeft+t.parentElement.offsetLeft,p+=f.offsetTop+t.parentElement.offsetTop),{active:s,offset:{x:c-a.x+l.width/2-r/2,y:p-a.y+l.height+8}}}))}function ii(e){let t=e.title;if(!t.length)return y;let r=`__tooltip_${ps++}`,o=Vt(r,"inline"),n=j(".md-typeset",o);return n.innerHTML=t,H(()=>{let i=new T;return i.subscribe({next({offset:s}){o.style.setProperty("--md-tooltip-x",`${s.x}px`),o.style.setProperty("--md-tooltip-y",`${s.y}px`)},complete(){o.style.removeProperty("--md-tooltip-x"),o.style.removeProperty("--md-tooltip-y")}}),L(i.pipe(g(({active:s})=>s)),i.pipe(Ae(250),g(({active:s})=>!s))).subscribe({next({active:s}){s?(e.insertAdjacentElement("afterend",o),e.setAttribute("aria-describedby",r),e.removeAttribute("title")):(o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t))},complete(){o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t)}}),i.pipe($e(16,ye)).subscribe(({active:s})=>{o.classList.toggle("md-tooltip--active",s)}),i.pipe(gt(125,ye),g(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:s})=>s)).subscribe({next(s){s?o.style.setProperty("--md-tooltip-0",`${-s}px`):o.style.removeProperty("--md-tooltip-0")},complete(){o.style.removeProperty("--md-tooltip-0")}}),ls(o,e).pipe(O(s=>i.next(s)),A(()=>i.complete()),m(s=>R({ref:e},s)))}).pipe(et(pe))}function ms({viewport$:e}){if(!V("header.autohide"))return $(!1);let t=e.pipe(m(({offset:{y:n}})=>n),ot(2,1),m(([n,i])=>[nMath.abs(i-n.y)>100),m(([,[n]])=>n),Y()),o=Je("search");return z([e,o]).pipe(m(([{offset:n},i])=>n.y>400&&!i),Y(),b(n=>n?r:$(!1)),Q(!1))}function ai(e,t){return H(()=>z([Le(e),ms(t)])).pipe(m(([{height:r},o])=>({height:r,hidden:o})),Y((r,o)=>r.height===o.height&&r.hidden===o.hidden),Z(1))}function si(e,{header$:t,main$:r}){return H(()=>{let o=new T,n=o.pipe(oe(),ae(!0));o.pipe(ne("active"),Re(t)).subscribe(([{active:s},{hidden:a}])=>{e.classList.toggle("md-header--shadow",s&&!a),e.hidden=a});let i=fe(M("[title]",e)).pipe(g(()=>V("content.tooltips")),J(s=>ii(s)));return r.subscribe(o),t.pipe(D(n),m(s=>R({ref:e},s)),Ve(i.pipe(D(n))))})}function fs(e,{viewport$:t,header$:r}){return Er(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:o}})=>{let{height:n}=de(e);return{active:o>=n}}),ne("active"))}function ci(e,t){return H(()=>{let r=new T;r.subscribe({next({active:n}){e.classList.toggle("md-header__title--active",n)},complete(){e.classList.remove("md-header__title--active")}});let o=ue(".md-content h1");return typeof o=="undefined"?y:fs(o,t).pipe(O(n=>r.next(n)),A(()=>r.complete()),m(n=>R({ref:e},n)))})}function pi(e,{viewport$:t,header$:r}){let o=r.pipe(m(({height:i})=>i),Y()),n=o.pipe(b(()=>Le(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),ne("bottom"))));return z([o,n,t]).pipe(m(([i,{top:s,bottom:a},{offset:{y:c},size:{height:p}}])=>(p=Math.max(0,p-Math.max(0,s-c,i)-Math.max(0,p+c-a)),{offset:s-i,height:p,active:s-i<=c})),Y((i,s)=>i.offset===s.offset&&i.height===s.height&&i.active===s.active))}function us(e){let t=__md_get("__palette")||{index:e.findIndex(o=>matchMedia(o.getAttribute("data-md-color-media")).matches)},r=Math.max(0,Math.min(t.index,e.length-1));return $(...e).pipe(J(o=>h(o,"change").pipe(m(()=>o))),Q(e[r]),m(o=>({index:e.indexOf(o),color:{media:o.getAttribute("data-md-color-media"),scheme:o.getAttribute("data-md-color-scheme"),primary:o.getAttribute("data-md-color-primary"),accent:o.getAttribute("data-md-color-accent")}})),Z(1))}function li(e){let t=M("input",e),r=x("meta",{name:"theme-color"});document.head.appendChild(r);let o=x("meta",{name:"color-scheme"});document.head.appendChild(o);let n=Wt("(prefers-color-scheme: light)");return H(()=>{let i=new T;return i.subscribe(s=>{if(document.body.setAttribute("data-md-color-switching",""),s.color.media==="(prefers-color-scheme)"){let a=matchMedia("(prefers-color-scheme: light)"),c=document.querySelector(a.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");s.color.scheme=c.getAttribute("data-md-color-scheme"),s.color.primary=c.getAttribute("data-md-color-primary"),s.color.accent=c.getAttribute("data-md-color-accent")}for(let[a,c]of Object.entries(s.color))document.body.setAttribute(`data-md-color-${a}`,c);for(let a=0;as.key==="Enter"),te(i,(s,a)=>a)).subscribe(({index:s})=>{s=(s+1)%t.length,t[s].click(),t[s].focus()}),i.pipe(m(()=>{let s=Ce("header"),a=window.getComputedStyle(s);return o.content=a.colorScheme,a.backgroundColor.match(/\d+/g).map(c=>(+c).toString(16).padStart(2,"0")).join("")})).subscribe(s=>r.content=`#${s}`),i.pipe(xe(pe)).subscribe(()=>{document.body.removeAttribute("data-md-color-switching")}),us(t).pipe(D(n.pipe(Ie(1))),vt(),O(s=>i.next(s)),A(()=>i.complete()),m(s=>R({ref:e},s)))})}function mi(e,{progress$:t}){return H(()=>{let r=new T;return r.subscribe(({value:o})=>{e.style.setProperty("--md-progress-value",`${o}`)}),t.pipe(O(o=>r.next({value:o})),A(()=>r.complete()),m(o=>({ref:e,value:o})))})}function fi(e,t){return e.protocol=t.protocol,e.hostname=t.hostname,e}function ds(e,t){let r=new Map;for(let o of M("url",e)){let n=j("loc",o),i=[fi(new URL(n.textContent),t)];r.set(`${i[0]}`,i);for(let s of M("[rel=alternate]",o)){let a=s.getAttribute("href");a!=null&&i.push(fi(new URL(a),t))}}return r}function Ht(e){return En(new URL("sitemap.xml",e)).pipe(m(t=>ds(t,new URL(e))),ve(()=>$(new Map)),le())}function ui({document$:e}){let t=new Map;e.pipe(b(()=>M("link[rel=alternate]")),m(r=>new URL(r.href)),g(r=>!t.has(r.toString())),J(r=>Ht(r).pipe(m(o=>[r,o]),ve(()=>y)))).subscribe(([r,o])=>{t.set(r.toString().replace(/\/$/,""),o)}),h(document.body,"click").pipe(g(r=>!r.metaKey&&!r.ctrlKey),b(r=>{if(r.target instanceof Element){let o=r.target.closest("a");if(o&&!o.target){let n=[...t].find(([f])=>o.href.startsWith(`${f}/`));if(typeof n=="undefined")return y;let[i,s]=n,a=we();if(a.href.startsWith(i))return y;let c=Te(),p=a.href.replace(c.base,"");p=`${i}/${p}`;let l=s.has(p.split("#")[0])?new URL(p,c.base):new URL(i);return r.preventDefault(),$(l)}}return y})).subscribe(r=>st(r,!0))}var co=Rt(ao());function hs(e){e.setAttribute("data-md-copying","");let t=e.closest("[data-copy]"),r=t?t.getAttribute("data-copy"):e.innerText;return e.removeAttribute("data-md-copying"),r.trimEnd()}function di({alert$:e}){co.default.isSupported()&&new F(t=>{new co.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||hs(j(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(O(t=>{t.trigger.focus()}),m(()=>Me("clipboard.copied"))).subscribe(e)}function hi(e,t){if(!(e.target instanceof Element))return y;let r=e.target.closest("a");if(r===null)return y;if(r.target||e.metaKey||e.ctrlKey)return y;let o=new URL(r.href);return o.search=o.hash="",t.has(`${o}`)?(e.preventDefault(),$(r)):y}function bi(e){let t=new Map;for(let r of M(":scope > *",e.head))t.set(r.outerHTML,r);return t}function vi(e){for(let t of M("[href], [src]",e))for(let r of["href","src"]){let o=t.getAttribute(r);if(o&&!/^(?:[a-z]+:)?\/\//i.test(o)){t[r]=t[r];break}}return $(e)}function bs(e){for(let o of["[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...V("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let n=ue(o),i=ue(o,e);typeof n!="undefined"&&typeof i!="undefined"&&n.replaceWith(i)}let t=bi(document);for(let[o,n]of bi(e))t.has(o)?t.delete(o):document.head.appendChild(n);for(let o of t.values()){let n=o.getAttribute("name");n!=="theme-color"&&n!=="color-scheme"&&o.remove()}let r=Ce("container");return Ke(M("script",r)).pipe(b(o=>{let n=e.createElement("script");if(o.src){for(let i of o.getAttributeNames())n.setAttribute(i,o.getAttribute(i));return o.replaceWith(n),new F(i=>{n.onload=()=>i.complete()})}else return n.textContent=o.textContent,o.replaceWith(n),y}),oe(),ae(document))}function gi({sitemap$:e,location$:t,viewport$:r,progress$:o}){if(location.protocol==="file:")return y;$(document).subscribe(vi);let n=h(document.body,"click").pipe(Re(e),b(([a,c])=>hi(a,c)),m(({href:a})=>new URL(a)),le()),i=h(window,"popstate").pipe(m(we),le());n.pipe(te(r)).subscribe(([a,{offset:c}])=>{history.replaceState(c,""),history.pushState(null,"",a)}),L(n,i).subscribe(t);let s=t.pipe(ne("pathname"),b(a=>xr(a,{progress$:o}).pipe(ve(()=>(st(a,!0),y)))),b(vi),b(bs),le());return L(s.pipe(te(t,(a,c)=>c)),s.pipe(b(()=>t),ne("pathname"),b(()=>t),ne("hash")),t.pipe(Y((a,c)=>a.pathname===c.pathname&&a.hash===c.hash),b(()=>n),O(()=>history.back()))).subscribe(a=>{var c,p;history.state!==null||!a.hash?window.scrollTo(0,(p=(c=history.state)==null?void 0:c.y)!=null?p:0):(history.scrollRestoration="auto",gn(a.hash),history.scrollRestoration="manual")}),t.subscribe(()=>{history.scrollRestoration="manual"}),h(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}),r.pipe(ne("offset"),Ae(100)).subscribe(({offset:a})=>{history.replaceState(a,"")}),V("navigation.instant.prefetch")&&L(h(document.body,"mousemove"),h(document.body,"focusin")).pipe(Re(e),b(([a,c])=>hi(a,c)),Ae(25),Qr(({href:a})=>a),hr(a=>{let c=document.createElement("link");return c.rel="prefetch",c.href=a.toString(),document.head.appendChild(c),h(c,"load").pipe(m(()=>c),Ee(1))})).subscribe(a=>a.remove()),s}var yi=Rt(ro());function xi(e){let t=e.separator.split("|").map(n=>n.replace(/(\(\?[!=<][^)]+\))/g,"").length===0?"\uFFFD":n).join("|"),r=new RegExp(t,"img"),o=(n,i,s)=>`${i}${s}`;return n=>{n=n.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator}|)(${n.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return s=>(0,yi.default)(s).replace(i,o).replace(/<\/mark>(\s+)]*>/img,"$1")}}function qt(e){return e.type===1}function Sr(e){return e.type===3}function Ei(e,t){let r=Mn(e);return L($(location.protocol!=="file:"),Je("search")).pipe(Pe(o=>o),b(()=>t)).subscribe(({config:o,docs:n})=>r.next({type:0,data:{config:o,docs:n,options:{suggest:V("search.suggest")}}})),r}function wi(e){var l;let{selectedVersionSitemap:t,selectedVersionBaseURL:r,currentLocation:o,currentBaseURL:n}=e,i=(l=po(n))==null?void 0:l.pathname;if(i===void 0)return;let s=ys(o.pathname,i);if(s===void 0)return;let a=Es(t.keys());if(!t.has(a))return;let c=po(s,a);if(!c||!t.has(c.href))return;let p=po(s,r);if(p)return p.hash=o.hash,p.search=o.search,p}function po(e,t){try{return new URL(e,t)}catch(r){return}}function ys(e,t){if(e.startsWith(t))return e.slice(t.length)}function xs(e,t){let r=Math.min(e.length,t.length),o;for(o=0;oy)),o=r.pipe(m(n=>{let[,i]=t.base.match(/([^/]+)\/?$/);return n.find(({version:s,aliases:a})=>s===i||a.includes(i))||n[0]}));r.pipe(m(n=>new Map(n.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),b(n=>h(document.body,"click").pipe(g(i=>!i.metaKey&&!i.ctrlKey),te(o),b(([i,s])=>{if(i.target instanceof Element){let a=i.target.closest("a");if(a&&!a.target&&n.has(a.href)){let c=a.href;return!i.target.closest(".md-version")&&n.get(c)===s?y:(i.preventDefault(),$(new URL(c)))}}return y}),b(i=>Ht(i).pipe(m(s=>{var a;return(a=wi({selectedVersionSitemap:s,selectedVersionBaseURL:i,currentLocation:we(),currentBaseURL:t.base}))!=null?a:i})))))).subscribe(n=>st(n,!0)),z([r,o]).subscribe(([n,i])=>{j(".md-header__topic").appendChild(Dn(n,i))}),e.pipe(b(()=>o)).subscribe(n=>{var s;let i=__md_get("__outdated",sessionStorage);if(i===null){i=!0;let a=((s=t.version)==null?void 0:s.default)||"latest";Array.isArray(a)||(a=[a]);e:for(let c of a)for(let p of n.aliases.concat(n.version))if(new RegExp(c,"i").test(p)){i=!1;break e}__md_set("__outdated",i,sessionStorage)}if(i)for(let a of me("outdated"))a.hidden=!1})}function ws(e,{worker$:t}){let{searchParams:r}=we();r.has("q")&&(at("search",!0),e.value=r.get("q"),e.focus(),Je("search").pipe(Pe(i=>!i)).subscribe(()=>{let i=we();i.searchParams.delete("q"),history.replaceState({},"",`${i}`)}));let o=Ye(e),n=L(t.pipe(Pe(qt)),h(e,"keyup"),o).pipe(m(()=>e.value),Y());return z([n,o]).pipe(m(([i,s])=>({value:i,focus:s})),Z(1))}function Si(e,{worker$:t}){let r=new T,o=r.pipe(oe(),ae(!0));z([t.pipe(Pe(qt)),r],(i,s)=>s).pipe(ne("value")).subscribe(({value:i})=>t.next({type:2,data:i})),r.pipe(ne("focus")).subscribe(({focus:i})=>{i&&at("search",i)}),h(e.form,"reset").pipe(D(o)).subscribe(()=>e.focus());let n=j("header [for=__search]");return h(n,"click").subscribe(()=>e.focus()),ws(e,{worker$:t}).pipe(O(i=>r.next(i)),A(()=>r.complete()),m(i=>R({ref:e},i)),Z(1))}function Oi(e,{worker$:t,query$:r}){let o=new T,n=un(e.parentElement).pipe(g(Boolean)),i=e.parentElement,s=j(":scope > :first-child",e),a=j(":scope > :last-child",e);Je("search").subscribe(l=>a.setAttribute("role",l?"list":"presentation")),o.pipe(te(r),Gr(t.pipe(Pe(qt)))).subscribe(([{items:l},{value:f}])=>{switch(l.length){case 0:s.textContent=f.length?Me("search.result.none"):Me("search.result.placeholder");break;case 1:s.textContent=Me("search.result.one");break;default:let u=br(l.length);s.textContent=Me("search.result.other",u)}});let c=o.pipe(O(()=>a.innerHTML=""),b(({items:l})=>L($(...l.slice(0,10)),$(...l.slice(10)).pipe(ot(4),Xr(n),b(([f])=>f)))),m(Fn),le());return c.subscribe(l=>a.appendChild(l)),c.pipe(J(l=>{let f=ue("details",l);return typeof f=="undefined"?y:h(f,"toggle").pipe(D(o),m(()=>f))})).subscribe(l=>{l.open===!1&&l.offsetTop<=i.scrollTop&&i.scrollTo({top:l.offsetTop})}),t.pipe(g(Sr),m(({data:l})=>l)).pipe(O(l=>o.next(l)),A(()=>o.complete()),m(l=>R({ref:e},l)))}function Ts(e,{query$:t}){return t.pipe(m(({value:r})=>{let o=we();return o.hash="",r=r.replace(/\s+/g,"+").replace(/&/g,"%26").replace(/=/g,"%3D"),o.search=`q=${r}`,{url:o}}))}function Li(e,t){let r=new T,o=r.pipe(oe(),ae(!0));return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),h(e,"click").pipe(D(o)).subscribe(n=>n.preventDefault()),Ts(e,t).pipe(O(n=>r.next(n)),A(()=>r.complete()),m(n=>R({ref:e},n)))}function Mi(e,{worker$:t,keyboard$:r}){let o=new T,n=Ce("search-query"),i=L(h(n,"keydown"),h(n,"focus")).pipe(xe(pe),m(()=>n.value),Y());return o.pipe(Re(i),m(([{suggest:a},c])=>{let p=c.split(/([\s-]+)/);if(a!=null&&a.length&&p[p.length-1]){let l=a[a.length-1];l.startsWith(p[p.length-1])&&(p[p.length-1]=l)}else p.length=0;return p})).subscribe(a=>e.innerHTML=a.join("").replace(/\s/g," ")),r.pipe(g(({mode:a})=>a==="search")).subscribe(a=>{switch(a.type){case"ArrowRight":e.innerText.length&&n.selectionStart===n.value.length&&(n.value=e.innerText);break}}),t.pipe(g(Sr),m(({data:a})=>a)).pipe(O(a=>o.next(a)),A(()=>o.complete()),m(()=>({ref:e})))}function _i(e,{index$:t,keyboard$:r}){let o=Te();try{let n=Ei(o.search,t),i=Ce("search-query",e),s=Ce("search-result",e);h(e,"click").pipe(g(({target:c})=>c instanceof Element&&!!c.closest("a"))).subscribe(()=>at("search",!1)),r.pipe(g(({mode:c})=>c==="search")).subscribe(c=>{let p=Ne();switch(c.type){case"Enter":if(p===i){let l=new Map;for(let f of M(":first-child [href]",s)){let u=f.firstElementChild;l.set(f,parseFloat(u.getAttribute("data-md-score")))}if(l.size){let[[f]]=[...l].sort(([,u],[,d])=>d-u);f.click()}c.claim()}break;case"Escape":case"Tab":at("search",!1),i.blur();break;case"ArrowUp":case"ArrowDown":if(typeof p=="undefined")i.focus();else{let l=[i,...M(":not(details) > [href], summary, details[open] [href]",s)],f=Math.max(0,(Math.max(0,l.indexOf(p))+l.length+(c.type==="ArrowUp"?-1:1))%l.length);l[f].focus()}c.claim();break;default:i!==Ne()&&i.focus()}}),r.pipe(g(({mode:c})=>c==="global")).subscribe(c=>{switch(c.type){case"f":case"s":case"/":i.focus(),i.select(),c.claim();break}});let a=Si(i,{worker$:n});return L(a,Oi(s,{worker$:n,query$:a})).pipe(Ve(...me("search-share",e).map(c=>Li(c,{query$:a})),...me("search-suggest",e).map(c=>Mi(c,{worker$:n,keyboard$:r}))))}catch(n){return e.hidden=!0,tt}}function Ai(e,{index$:t,location$:r}){return z([t,r.pipe(Q(we()),g(o=>!!o.searchParams.get("h")))]).pipe(m(([o,n])=>xi(o.config)(n.searchParams.get("h"))),m(o=>{var s;let n=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let a=i.nextNode();a;a=i.nextNode())if((s=a.parentElement)!=null&&s.offsetHeight){let c=a.textContent,p=o(c);p.length>c.length&&n.set(a,p)}for(let[a,c]of n){let{childNodes:p}=x("span",null,c);a.replaceWith(...Array.from(p))}return{ref:e,nodes:n}}))}function Ss(e,{viewport$:t,main$:r}){let o=e.closest(".md-grid"),n=o.offsetTop-o.parentElement.offsetTop;return z([r,t]).pipe(m(([{offset:i,height:s},{offset:{y:a}}])=>(s=s+Math.min(n,Math.max(0,a-i))-n,{height:s,locked:a>=i+n})),Y((i,s)=>i.height===s.height&&i.locked===s.locked))}function lo(e,o){var n=o,{header$:t}=n,r=vo(n,["header$"]);let i=j(".md-sidebar__scrollwrap",e),{y:s}=Be(i);return H(()=>{let a=new T,c=a.pipe(oe(),ae(!0)),p=a.pipe($e(0,ye));return p.pipe(te(t)).subscribe({next([{height:l},{height:f}]){i.style.height=`${l-2*s}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),p.pipe(Pe()).subscribe(()=>{for(let l of M(".md-nav__link--active[href]",e)){if(!l.clientHeight)continue;let f=l.closest(".md-sidebar__scrollwrap");if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:d}=de(f);f.scrollTo({top:u-d/2})}}}),fe(M("label[tabindex]",e)).pipe(J(l=>h(l,"click").pipe(xe(pe),m(()=>l),D(c)))).subscribe(l=>{let f=j(`[id="${l.htmlFor}"]`);j(`[aria-labelledby="${l.id}"]`).setAttribute("aria-expanded",`${f.checked}`)}),V("content.tooltips")&&fe(M("abbr[title]",e)).pipe(J(l=>Xe(l,{viewport$})),D(c)).subscribe(),Ss(e,r).pipe(O(l=>a.next(l)),A(()=>a.complete()),m(l=>R({ref:e},l)))})}function Ci(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return rt(ze(`${r}/releases/latest`).pipe(ve(()=>y),m(o=>({version:o.tag_name})),Qe({})),ze(r).pipe(ve(()=>y),m(o=>({stars:o.stargazers_count,forks:o.forks_count})),Qe({}))).pipe(m(([o,n])=>R(R({},o),n)))}else{let r=`https://api.github.com/users/${e}`;return ze(r).pipe(m(o=>({repositories:o.public_repos})),Qe({}))}}function ki(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return rt(ze(`${r}/releases/permalink/latest`).pipe(ve(()=>y),m(({tag_name:o})=>({version:o})),Qe({})),ze(r).pipe(ve(()=>y),m(({star_count:o,forks_count:n})=>({stars:o,forks:n})),Qe({}))).pipe(m(([o,n])=>R(R({},o),n)))}function Hi(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,o]=t;return Ci(r,o)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,o]=t;return ki(r,o)}return y}var Os;function Ls(e){return Os||(Os=H(()=>{let t=__md_get("__source",sessionStorage);if(t)return $(t);if(me("consent").length){let o=__md_get("__consent");if(!(o&&o.github))return y}return Hi(e.href).pipe(O(o=>__md_set("__source",o,sessionStorage)))}).pipe(ve(()=>y),g(t=>Object.keys(t).length>0),m(t=>({facts:t})),Z(1)))}function $i(e){let t=j(":scope > :last-child",e);return H(()=>{let r=new T;return r.subscribe(({facts:o})=>{t.appendChild(jn(o)),t.classList.add("md-source__repository--active")}),Ls(e).pipe(O(o=>r.next(o)),A(()=>r.complete()),m(o=>R({ref:e},o)))})}function Ms(e,{viewport$:t,header$:r}){return Le(document.body).pipe(b(()=>Er(e,{header$:r,viewport$:t})),m(({offset:{y:o}})=>({hidden:o>=10})),ne("hidden"))}function Ri(e,t){return H(()=>{let r=new T;return r.subscribe({next({hidden:o}){e.hidden=o},complete(){e.hidden=!1}}),(V("navigation.tabs.sticky")?$({hidden:!1}):Ms(e,t)).pipe(O(o=>r.next(o)),A(()=>r.complete()),m(o=>R({ref:e},o)))})}function _s(e,{viewport$:t,header$:r}){let o=new Map,n=M(".md-nav__link",e);for(let a of n){let c=decodeURIComponent(a.hash.substring(1)),p=ue(`[id="${c}"]`);typeof p!="undefined"&&o.set(a,p)}let i=r.pipe(ne("height"),m(({height:a})=>{let c=Ce("main"),p=j(":scope > :first-child",c);return a+.8*(p.offsetTop-c.offsetTop)}),le());return Le(document.body).pipe(ne("height"),b(a=>H(()=>{let c=[];return $([...o].reduce((p,[l,f])=>{for(;c.length&&o.get(c[c.length-1]).tagName>=f.tagName;)c.pop();let u=f.offsetTop;for(;!u&&f.parentElement;)f=f.parentElement,u=f.offsetTop;let d=f.offsetParent;for(;d;d=d.offsetParent)u+=d.offsetTop;return p.set([...c=[...c,l]].reverse(),u)},new Map))}).pipe(m(c=>new Map([...c].sort(([,p],[,l])=>p-l))),Re(i),b(([c,p])=>t.pipe(Dt(([l,f],{offset:{y:u},size:d})=>{let v=u+d.height>=Math.floor(a.height);for(;f.length;){let[,S]=f[0];if(S-p=u&&!v)f=[l.pop(),...f];else break}return[l,f]},[[],[...c]]),Y((l,f)=>l[0]===f[0]&&l[1]===f[1])))))).pipe(m(([a,c])=>({prev:a.map(([p])=>p),next:c.map(([p])=>p)})),Q({prev:[],next:[]}),ot(2,1),m(([a,c])=>a.prev.length{let i=new T,s=i.pipe(oe(),ae(!0));if(i.subscribe(({prev:a,next:c})=>{for(let[p]of c)p.classList.remove("md-nav__link--passed"),p.classList.remove("md-nav__link--active");for(let[p,[l]]of a.entries())l.classList.add("md-nav__link--passed"),l.classList.toggle("md-nav__link--active",p===a.length-1)}),V("toc.follow")){let a=L(t.pipe(Ae(1),m(()=>{})),t.pipe(Ae(250),m(()=>"smooth")));i.pipe(g(({prev:c})=>c.length>0),Re(o.pipe(xe(pe))),te(a)).subscribe(([[{prev:c}],p])=>{let[l]=c[c.length-1];if(l.offsetHeight){let f=vr(l);if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:d}=de(f);f.scrollTo({top:u-d/2,behavior:p})}}})}return V("navigation.tracking")&&t.pipe(D(s),ne("offset"),Ae(250),Ie(1),D(n.pipe(Ie(1))),vt({delay:250}),te(i)).subscribe(([,{prev:a}])=>{let c=we(),p=a[a.length-1];if(p&&p.length){let[l]=p,{hash:f}=new URL(l.href);c.hash!==f&&(c.hash=f,history.replaceState({},"",`${c}`))}else c.hash="",history.replaceState({},"",`${c}`)}),_s(e,{viewport$:t,header$:r}).pipe(O(a=>i.next(a)),A(()=>i.complete()),m(a=>R({ref:e},a)))})}function As(e,{viewport$:t,main$:r,target$:o}){let n=t.pipe(m(({offset:{y:s}})=>s),ot(2,1),m(([s,a])=>s>a&&a>0),Y()),i=r.pipe(m(({active:s})=>s));return z([i,n]).pipe(m(([s,a])=>!(s&&a)),Y(),D(o.pipe(Ie(1))),ae(!0),vt({delay:250}),m(s=>({hidden:s})))}function Ii(e,{viewport$:t,header$:r,main$:o,target$:n}){let i=new T,s=i.pipe(oe(),ae(!0));return i.subscribe({next({hidden:a}){e.hidden=a,a?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(D(s),ne("height")).subscribe(({height:a})=>{e.style.top=`${a+16}px`}),h(e,"click").subscribe(a=>{a.preventDefault(),window.scrollTo({top:0})}),As(e,{viewport$:t,main$:o,target$:n}).pipe(O(a=>i.next(a)),A(()=>i.complete()),m(a=>R({ref:e},a)))}function Fi({document$:e,viewport$:t}){e.pipe(b(()=>M(".md-ellipsis")),J(r=>mt(r).pipe(D(e.pipe(Ie(1))),g(o=>o),m(()=>r),Ee(1))),g(r=>r.offsetWidth{let o=r.innerText,n=r.closest("a")||r;return n.title=o,V("content.tooltips")?Xe(n,{viewport$:t}).pipe(D(e.pipe(Ie(1))),A(()=>n.removeAttribute("title"))):y})).subscribe(),V("content.tooltips")&&e.pipe(b(()=>M(".md-status")),J(r=>Xe(r,{viewport$:t}))).subscribe()}function ji({document$:e,tablet$:t}){e.pipe(b(()=>M(".md-toggle--indeterminate")),O(r=>{r.indeterminate=!0,r.checked=!1}),J(r=>h(r,"change").pipe(Jr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),te(t)).subscribe(([r,o])=>{r.classList.remove("md-toggle--indeterminate"),o&&(r.checked=!1)})}function Cs(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function Ui({document$:e}){e.pipe(b(()=>M("[data-md-scrollfix]")),O(t=>t.removeAttribute("data-md-scrollfix")),g(Cs),J(t=>h(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function Di({viewport$:e,tablet$:t}){z([Je("search"),t]).pipe(m(([r,o])=>r&&!o),b(r=>$(r).pipe(nt(r?400:100))),te(e)).subscribe(([r,{offset:{y:o}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${o}px`;else{let n=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",n&&window.scrollTo(0,n)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let o=e[r];typeof o=="string"?o=document.createTextNode(o):o.parentNode&&o.parentNode.removeChild(o),r?t.insertBefore(this.previousSibling,o):t.replaceChild(o,this)}}}));function ks(){return location.protocol==="file:"?At(`${new URL("search/search_index.js",Or.base)}`).pipe(m(()=>__index),Z(1)):ze(new URL("search/search_index.json",Or.base))}document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var ct=an(),Qt=bn(),$t=yn(Qt),mo=hn(),ke=Ln(),Lr=Wt("(min-width: 960px)"),Vi=Wt("(min-width: 1220px)"),Ni=xn(),Or=Te(),zi=document.forms.namedItem("search")?ks():tt,fo=new T;di({alert$:fo});ui({document$:ct});var uo=new T,qi=Ht(Or.base);V("navigation.instant")&&gi({sitemap$:qi,location$:Qt,viewport$:ke,progress$:uo}).subscribe(ct);var Wi;((Wi=Or.version)==null?void 0:Wi.provider)==="mike"&&Ti({document$:ct});L(Qt,$t).pipe(nt(125)).subscribe(()=>{at("drawer",!1),at("search",!1)});mo.pipe(g(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=ue("link[rel=prev]");typeof t!="undefined"&&st(t);break;case"n":case".":let r=ue("link[rel=next]");typeof r!="undefined"&&st(r);break;case"Enter":let o=Ne();o instanceof HTMLLabelElement&&o.click()}});Fi({viewport$:ke,document$:ct});ji({document$:ct,tablet$:Lr});Ui({document$:ct});Di({viewport$:ke,tablet$:Lr});var ft=ai(Ce("header"),{viewport$:ke}),Kt=ct.pipe(m(()=>Ce("main")),b(e=>pi(e,{viewport$:ke,header$:ft})),Z(1)),Hs=L(...me("consent").map(e=>An(e,{target$:$t})),...me("dialog").map(e=>ni(e,{alert$:fo})),...me("palette").map(e=>li(e)),...me("progress").map(e=>mi(e,{progress$:uo})),...me("search").map(e=>_i(e,{index$:zi,keyboard$:mo})),...me("source").map(e=>$i(e))),$s=H(()=>L(...me("announce").map(e=>_n(e)),...me("content").map(e=>oi(e,{sitemap$:qi,viewport$:ke,target$:$t,print$:Ni})),...me("content").map(e=>V("search.highlight")?Ai(e,{index$:zi,location$:Qt}):y),...me("header").map(e=>si(e,{viewport$:ke,header$:ft,main$:Kt})),...me("header-title").map(e=>ci(e,{viewport$:ke,header$:ft})),...me("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?eo(Vi,()=>lo(e,{viewport$:ke,header$:ft,main$:Kt})):eo(Lr,()=>lo(e,{viewport$:ke,header$:ft,main$:Kt}))),...me("tabs").map(e=>Ri(e,{viewport$:ke,header$:ft})),...me("toc").map(e=>Pi(e,{viewport$:ke,header$:ft,main$:Kt,target$:$t})),...me("top").map(e=>Ii(e,{viewport$:ke,header$:ft,main$:Kt,target$:$t})))),Ki=ct.pipe(b(()=>$s),Ve(Hs),Z(1));Ki.subscribe();window.document$=ct;window.location$=Qt;window.target$=$t;window.keyboard$=mo;window.viewport$=ke;window.tablet$=Lr;window.screen$=Vi;window.print$=Ni;window.alert$=fo;window.progress$=uo;window.component$=Ki;})(); diff --git a/pr-preview/pr-478/assets/javascripts/glightbox.min.js b/pr-preview/pr-478/assets/javascripts/glightbox.min.js new file mode 100644 index 0000000000..614fb1888a --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/glightbox.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).GLightbox=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=e[s]=e[s]||[],l={all:n,evt:null,found:null};return t&&i&&P(n)>0&&o(n,(function(e,n){if(e.eventName==t&&e.fn.toString()==i.toString())return l.found=!0,l.evt=n,!1})),l}function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.onElement,n=t.withCallback,s=t.avoidDuplicate,l=void 0===s||s,a=t.once,h=void 0!==a&&a,d=t.useCapture,c=void 0!==d&&d,u=arguments.length>2?arguments[2]:void 0,g=i||[];function v(e){T(n)&&n.call(u,e,this),h&&v.destroy()}return C(g)&&(g=document.querySelectorAll(g)),v.destroy=function(){o(g,(function(t){var i=r(t,e,v);i.found&&i.all.splice(i.evt,1),t.removeEventListener&&t.removeEventListener(e,v,c)}))},o(g,(function(t){var i=r(t,e,v);(t.addEventListener&&l&&!i.found||!l)&&(t.addEventListener(e,v,c),i.all.push({eventName:e,fn:v}))})),v}function h(e,t){o(t.split(" "),(function(t){return e.classList.add(t)}))}function d(e,t){o(t.split(" "),(function(t){return e.classList.remove(t)}))}function c(e,t){return e.classList.contains(t)}function u(e,t){for(;e!==document.body;){if(!(e=e.parentElement))return!1;if("function"==typeof e.matches?e.matches(t):e.msMatchesSelector(t))return e}}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||""===t)return!1;if("none"==t)return T(i)&&i(),!1;var n=x(),s=t.split(" ");o(s,(function(t){h(e,"g"+t)})),a(n,{onElement:e,avoidDuplicate:!1,once:!0,withCallback:function(e,t){o(s,(function(e){d(t,"g"+e)})),T(i)&&i()}})}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(""==t)return e.style.webkitTransform="",e.style.MozTransform="",e.style.msTransform="",e.style.OTransform="",e.style.transform="",!1;e.style.webkitTransform=t,e.style.MozTransform=t,e.style.msTransform=t,e.style.OTransform=t,e.style.transform=t}function f(e){e.style.display="block"}function p(e){e.style.display="none"}function m(e){var t=document.createDocumentFragment(),i=document.createElement("div");for(i.innerHTML=e;i.firstChild;)t.appendChild(i.firstChild);return t}function y(){return{width:window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,height:window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}}function x(){var e,t=document.createElement("fakeelement"),i={animation:"animationend",OAnimation:"oAnimationEnd",MozAnimation:"animationend",WebkitAnimation:"webkitAnimationEnd"};for(e in i)if(void 0!==t.style[e])return i[e]}function b(e,t,i,n){if(e())t();else{var s;i||(i=100);var l=setInterval((function(){e()&&(clearInterval(l),s&&clearTimeout(s),t())}),i);n&&(s=setTimeout((function(){clearInterval(l)}),n))}}function S(e,t,i){if(I(e))console.error("Inject assets error");else if(T(t)&&(i=t,t=!1),C(t)&&t in window)T(i)&&i();else{var n;if(-1!==e.indexOf(".css")){if((n=document.querySelectorAll('link[href="'+e+'"]'))&&n.length>0)return void(T(i)&&i());var s=document.getElementsByTagName("head")[0],l=s.querySelectorAll('link[rel="stylesheet"]'),o=document.createElement("link");return o.rel="stylesheet",o.type="text/css",o.href=e,o.media="all",l?s.insertBefore(o,l[0]):s.appendChild(o),void(T(i)&&i())}if((n=document.querySelectorAll('script[src="'+e+'"]'))&&n.length>0){if(T(i)){if(C(t))return b((function(){return void 0!==window[t]}),(function(){i()})),!1;i()}}else{var r=document.createElement("script");r.type="text/javascript",r.src=e,r.onload=function(){if(T(i)){if(C(t))return b((function(){return void 0!==window[t]}),(function(){i()})),!1;i()}},document.body.appendChild(r)}}}function w(){return"navigator"in window&&window.navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i)}function T(e){return"function"==typeof e}function C(e){return"string"==typeof e}function k(e){return!(!e||!e.nodeType||1!=e.nodeType)}function E(e){return Array.isArray(e)}function A(e){return e&&e.length&&isFinite(e.length)}function L(t){return"object"===e(t)&&null!=t&&!T(t)&&!E(t)}function I(e){return null==e}function O(e,t){return null!==e&&hasOwnProperty.call(e,t)}function P(e){if(L(e)){if(e.keys)return e.keys().length;var t=0;for(var i in e)O(e,i)&&t++;return t}return e.length}function M(e){return!isNaN(parseFloat(e))&&isFinite(e)}function z(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1,t=document.querySelectorAll(".gbtn[data-taborder]:not(.disabled)");if(!t.length)return!1;if(1==t.length)return t[0];"string"==typeof e&&(e=parseInt(e));var i=[];o(t,(function(e){i.push(e.getAttribute("data-taborder"))}));var n=Math.max.apply(Math,i.map((function(e){return parseInt(e)}))),s=e<0?1:e+1;s>n&&(s="1");var l=i.filter((function(e){return e>=parseInt(s)})),r=l.sort()[0];return document.querySelector('.gbtn[data-taborder="'.concat(r,'"]'))}function X(e){if(e.events.hasOwnProperty("keyboard"))return!1;e.events.keyboard=a("keydown",{onElement:window,withCallback:function(t,i){var n=(t=t||window.event).keyCode;if(9==n){var s=document.querySelector(".gbtn.focused");if(!s){var l=!(!document.activeElement||!document.activeElement.nodeName)&&document.activeElement.nodeName.toLocaleLowerCase();if("input"==l||"textarea"==l||"button"==l)return}t.preventDefault();var o=document.querySelectorAll(".gbtn[data-taborder]");if(!o||o.length<=0)return;if(!s){var r=z();return void(r&&(r.focus(),h(r,"focused")))}var a=z(s.getAttribute("data-taborder"));d(s,"focused"),a&&(a.focus(),h(a,"focused"))}39==n&&e.nextSlide(),37==n&&e.prevSlide(),27==n&&e.close()}})}function Y(e){return Math.sqrt(e.x*e.x+e.y*e.y)}function q(e,t){var i=function(e,t){var i=Y(e)*Y(t);if(0===i)return 0;var n=function(e,t){return e.x*t.x+e.y*t.y}(e,t)/i;return n>1&&(n=1),Math.acos(n)}(e,t);return function(e,t){return e.x*t.y-t.x*e.y}(e,t)>0&&(i*=-1),180*i/Math.PI}var N=function(){function e(i){t(this,e),this.handlers=[],this.el=i}return n(e,[{key:"add",value:function(e){this.handlers.push(e)}},{key:"del",value:function(e){e||(this.handlers=[]);for(var t=this.handlers.length;t>=0;t--)this.handlers[t]===e&&this.handlers.splice(t,1)}},{key:"dispatch",value:function(){for(var e=0,t=this.handlers.length;e=0)console.log("ignore drag for this touched element",e.target.nodeName.toLowerCase());else{this.now=Date.now(),this.x1=e.touches[0].pageX,this.y1=e.touches[0].pageY,this.delta=this.now-(this.last||this.now),this.touchStart.dispatch(e,this.element),null!==this.preTapPosition.x&&(this.isDoubleTap=this.delta>0&&this.delta<=250&&Math.abs(this.preTapPosition.x-this.x1)<30&&Math.abs(this.preTapPosition.y-this.y1)<30,this.isDoubleTap&&clearTimeout(this.singleTapTimeout)),this.preTapPosition.x=this.x1,this.preTapPosition.y=this.y1,this.last=this.now;var t=this.preV;if(e.touches.length>1){this._cancelLongTap(),this._cancelSingleTap();var i={x:e.touches[1].pageX-this.x1,y:e.touches[1].pageY-this.y1};t.x=i.x,t.y=i.y,this.pinchStartLen=Y(t),this.multipointStart.dispatch(e,this.element)}this._preventTap=!1,this.longTapTimeout=setTimeout(function(){this.longTap.dispatch(e,this.element),this._preventTap=!0}.bind(this),750)}}}},{key:"move",value:function(e){if(e.touches){var t=this.preV,i=e.touches.length,n=e.touches[0].pageX,s=e.touches[0].pageY;if(this.isDoubleTap=!1,i>1){var l=e.touches[1].pageX,o=e.touches[1].pageY,r={x:e.touches[1].pageX-n,y:e.touches[1].pageY-s};null!==t.x&&(this.pinchStartLen>0&&(e.zoom=Y(r)/this.pinchStartLen,this.pinch.dispatch(e,this.element)),e.angle=q(r,t),this.rotate.dispatch(e,this.element)),t.x=r.x,t.y=r.y,null!==this.x2&&null!==this.sx2?(e.deltaX=(n-this.x2+l-this.sx2)/2,e.deltaY=(s-this.y2+o-this.sy2)/2):(e.deltaX=0,e.deltaY=0),this.twoFingerPressMove.dispatch(e,this.element),this.sx2=l,this.sy2=o}else{if(null!==this.x2){e.deltaX=n-this.x2,e.deltaY=s-this.y2;var a=Math.abs(this.x1-this.x2),h=Math.abs(this.y1-this.y2);(a>10||h>10)&&(this._preventTap=!0)}else e.deltaX=0,e.deltaY=0;this.pressMove.dispatch(e,this.element)}this.touchMove.dispatch(e,this.element),this._cancelLongTap(),this.x2=n,this.y2=s,i>1&&e.preventDefault()}}},{key:"end",value:function(e){if(e.changedTouches){this._cancelLongTap();var t=this;e.touches.length<2&&(this.multipointEnd.dispatch(e,this.element),this.sx2=this.sy2=null),this.x2&&Math.abs(this.x1-this.x2)>30||this.y2&&Math.abs(this.y1-this.y2)>30?(e.direction=this._swipeDirection(this.x1,this.x2,this.y1,this.y2),this.swipeTimeout=setTimeout((function(){t.swipe.dispatch(e,t.element)}),0)):(this.tapTimeout=setTimeout((function(){t._preventTap||t.tap.dispatch(e,t.element),t.isDoubleTap&&(t.doubleTap.dispatch(e,t.element),t.isDoubleTap=!1)}),0),t.isDoubleTap||(t.singleTapTimeout=setTimeout((function(){t.singleTap.dispatch(e,t.element)}),250))),this.touchEnd.dispatch(e,this.element),this.preV.x=0,this.preV.y=0,this.zoom=1,this.pinchStartLen=null,this.x1=this.x2=this.y1=this.y2=null}}},{key:"cancelAll",value:function(){this._preventTap=!0,clearTimeout(this.singleTapTimeout),clearTimeout(this.tapTimeout),clearTimeout(this.longTapTimeout),clearTimeout(this.swipeTimeout)}},{key:"cancel",value:function(e){this.cancelAll(),this.touchCancel.dispatch(e,this.element)}},{key:"_cancelLongTap",value:function(){clearTimeout(this.longTapTimeout)}},{key:"_cancelSingleTap",value:function(){clearTimeout(this.singleTapTimeout)}},{key:"_swipeDirection",value:function(e,t,i,n){return Math.abs(e-t)>=Math.abs(i-n)?e-t>0?"Left":"Right":i-n>0?"Up":"Down"}},{key:"on",value:function(e,t){this[e]&&this[e].add(t)}},{key:"off",value:function(e,t){this[e]&&this[e].del(t)}},{key:"destroy",value:function(){return this.singleTapTimeout&&clearTimeout(this.singleTapTimeout),this.tapTimeout&&clearTimeout(this.tapTimeout),this.longTapTimeout&&clearTimeout(this.longTapTimeout),this.swipeTimeout&&clearTimeout(this.swipeTimeout),this.element.removeEventListener("touchstart",this.start),this.element.removeEventListener("touchmove",this.move),this.element.removeEventListener("touchend",this.end),this.element.removeEventListener("touchcancel",this.cancel),this.rotate.del(),this.touchStart.del(),this.multipointStart.del(),this.multipointEnd.del(),this.pinch.del(),this.swipe.del(),this.tap.del(),this.doubleTap.del(),this.longTap.del(),this.singleTap.del(),this.pressMove.del(),this.twoFingerPressMove.del(),this.touchMove.del(),this.touchEnd.del(),this.touchCancel.del(),this.preV=this.pinchStartLen=this.zoom=this.isDoubleTap=this.delta=this.last=this.now=this.tapTimeout=this.singleTapTimeout=this.longTapTimeout=this.swipeTimeout=this.x1=this.x2=this.y1=this.y2=this.preTapPosition=this.rotate=this.touchStart=this.multipointStart=this.multipointEnd=this.pinch=this.swipe=this.tap=this.doubleTap=this.longTap=this.singleTap=this.pressMove=this.touchMove=this.touchEnd=this.touchCancel=this.twoFingerPressMove=null,window.removeEventListener("scroll",this._cancelAllHandler),null}}]),e}();function W(e){var t=function(){var e,t=document.createElement("fakeelement"),i={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(e in i)if(void 0!==t.style[e])return i[e]}(),i=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,n=c(e,"gslide-media")?e:e.querySelector(".gslide-media"),s=u(n,".ginner-container"),l=e.querySelector(".gslide-description");i>769&&(n=s),h(n,"greset"),v(n,"translate3d(0, 0, 0)"),a(t,{onElement:n,once:!0,withCallback:function(e,t){d(n,"greset")}}),n.style.opacity="",l&&(l.style.opacity="")}function B(e){if(e.events.hasOwnProperty("touch"))return!1;var t,i,n,s=y(),l=s.width,o=s.height,r=!1,a=null,g=null,f=null,p=!1,m=1,x=1,b=!1,S=!1,w=null,T=null,C=null,k=null,E=0,A=0,L=!1,I=!1,O={},P={},M=0,z=0,X=document.getElementById("glightbox-slider"),Y=document.querySelector(".goverlay"),q=new _(X,{touchStart:function(t){if(r=!0,(c(t.targetTouches[0].target,"ginner-container")||u(t.targetTouches[0].target,".gslide-desc")||"a"==t.targetTouches[0].target.nodeName.toLowerCase())&&(r=!1),u(t.targetTouches[0].target,".gslide-inline")&&!c(t.targetTouches[0].target.parentNode,"gslide-inline")&&(r=!1),r){if(P=t.targetTouches[0],O.pageX=t.targetTouches[0].pageX,O.pageY=t.targetTouches[0].pageY,M=t.targetTouches[0].clientX,z=t.targetTouches[0].clientY,a=e.activeSlide,g=a.querySelector(".gslide-media"),n=a.querySelector(".gslide-inline"),f=null,c(g,"gslide-image")&&(f=g.querySelector("img")),(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)>769&&(g=a.querySelector(".ginner-container")),d(Y,"greset"),t.pageX>20&&t.pageXo){var a=O.pageX-P.pageX;if(Math.abs(a)<=13)return!1}p=!0;var h,d=s.targetTouches[0].clientX,c=s.targetTouches[0].clientY,u=M-d,m=z-c;if(Math.abs(u)>Math.abs(m)?(L=!1,I=!0):(I=!1,L=!0),t=P.pageX-O.pageX,E=100*t/l,i=P.pageY-O.pageY,A=100*i/o,L&&f&&(h=1-Math.abs(i)/o,Y.style.opacity=h,e.settings.touchFollowAxis&&(E=0)),I&&(h=1-Math.abs(t)/l,g.style.opacity=h,e.settings.touchFollowAxis&&(A=0)),!f)return v(g,"translate3d(".concat(E,"%, 0, 0)"));v(g,"translate3d(".concat(E,"%, ").concat(A,"%, 0)"))}},touchEnd:function(){if(r){if(p=!1,S||b)return C=w,void(k=T);var t=Math.abs(parseInt(A)),i=Math.abs(parseInt(E));if(!(t>29&&f))return t<29&&i<25?(h(Y,"greset"),Y.style.opacity=1,W(g)):void 0;e.close()}},multipointEnd:function(){setTimeout((function(){b=!1}),50)},multipointStart:function(){b=!0,m=x||1},pinch:function(e){if(!f||p)return!1;b=!0,f.scaleX=f.scaleY=m*e.zoom;var t=m*e.zoom;if(S=!0,t<=1)return S=!1,t=1,k=null,C=null,w=null,T=null,void f.setAttribute("style","");t>4.5&&(t=4.5),f.style.transform="scale3d(".concat(t,", ").concat(t,", 1)"),x=t},pressMove:function(e){if(S&&!b){var t=P.pageX-O.pageX,i=P.pageY-O.pageY;C&&(t+=C),k&&(i+=k),w=t,T=i;var n="translate3d(".concat(t,"px, ").concat(i,"px, 0)");x&&(n+=" scale3d(".concat(x,", ").concat(x,", 1)")),v(f,n)}},swipe:function(t){if(!S)if(b)b=!1;else{if("Left"==t.direction){if(e.index==e.elements.length-1)return W(g);e.nextSlide()}if("Right"==t.direction){if(0==e.index)return W(g);e.prevSlide()}}}});e.events.touch=q}var H=function(){function e(i,n){var s=this,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(t(this,e),this.img=i,this.slide=n,this.onclose=l,this.img.setZoomEvents)return!1;this.active=!1,this.zoomedIn=!1,this.dragging=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.img.addEventListener("mousedown",(function(e){return s.dragStart(e)}),!1),this.img.addEventListener("mouseup",(function(e){return s.dragEnd(e)}),!1),this.img.addEventListener("mousemove",(function(e){return s.drag(e)}),!1),this.img.addEventListener("click",(function(e){return s.slide.classList.contains("dragging-nav")?(s.zoomOut(),!1):s.zoomedIn?void(s.zoomedIn&&!s.dragging&&s.zoomOut()):s.zoomIn()}),!1),this.img.setZoomEvents=!0}return n(e,[{key:"zoomIn",value:function(){var e=this.widowWidth();if(!(this.zoomedIn||e<=768)){var t=this.img;if(t.setAttribute("data-style",t.getAttribute("style")),t.style.maxWidth=t.naturalWidth+"px",t.style.maxHeight=t.naturalHeight+"px",t.naturalWidth>e){var i=e/2-t.naturalWidth/2;this.setTranslate(this.img.parentNode,i,0)}this.slide.classList.add("zoomed"),this.zoomedIn=!0}}},{key:"zoomOut",value:function(){this.img.parentNode.setAttribute("style",""),this.img.setAttribute("style",this.img.getAttribute("data-style")),this.slide.classList.remove("zoomed"),this.zoomedIn=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.onclose&&"function"==typeof this.onclose&&this.onclose()}},{key:"dragStart",value:function(e){e.preventDefault(),this.zoomedIn?("touchstart"===e.type?(this.initialX=e.touches[0].clientX-this.xOffset,this.initialY=e.touches[0].clientY-this.yOffset):(this.initialX=e.clientX-this.xOffset,this.initialY=e.clientY-this.yOffset),e.target===this.img&&(this.active=!0,this.img.classList.add("dragging"))):this.active=!1}},{key:"dragEnd",value:function(e){var t=this;e.preventDefault(),this.initialX=this.currentX,this.initialY=this.currentY,this.active=!1,setTimeout((function(){t.dragging=!1,t.img.isDragging=!1,t.img.classList.remove("dragging")}),100)}},{key:"drag",value:function(e){this.active&&(e.preventDefault(),"touchmove"===e.type?(this.currentX=e.touches[0].clientX-this.initialX,this.currentY=e.touches[0].clientY-this.initialY):(this.currentX=e.clientX-this.initialX,this.currentY=e.clientY-this.initialY),this.xOffset=this.currentX,this.yOffset=this.currentY,this.img.isDragging=!0,this.dragging=!0,this.setTranslate(this.img,this.currentX,this.currentY))}},{key:"onMove",value:function(e){if(this.zoomedIn){var t=e.clientX-this.img.naturalWidth/2,i=e.clientY-this.img.naturalHeight/2;this.setTranslate(this.img,t,i)}}},{key:"setTranslate",value:function(e,t,i){e.style.transform="translate3d("+t+"px, "+i+"px, 0)"}},{key:"widowWidth",value:function(){return window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth}}]),e}(),V=function(){function e(){var i=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e);var s=n.dragEl,l=n.toleranceX,o=void 0===l?40:l,r=n.toleranceY,a=void 0===r?65:r,h=n.slide,d=void 0===h?null:h,c=n.instance,u=void 0===c?null:c;this.el=s,this.active=!1,this.dragging=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.direction=null,this.lastDirection=null,this.toleranceX=o,this.toleranceY=a,this.toleranceReached=!1,this.dragContainer=this.el,this.slide=d,this.instance=u,this.el.addEventListener("mousedown",(function(e){return i.dragStart(e)}),!1),this.el.addEventListener("mouseup",(function(e){return i.dragEnd(e)}),!1),this.el.addEventListener("mousemove",(function(e){return i.drag(e)}),!1)}return n(e,[{key:"dragStart",value:function(e){if(this.slide.classList.contains("zoomed"))this.active=!1;else{"touchstart"===e.type?(this.initialX=e.touches[0].clientX-this.xOffset,this.initialY=e.touches[0].clientY-this.yOffset):(this.initialX=e.clientX-this.xOffset,this.initialY=e.clientY-this.yOffset);var t=e.target.nodeName.toLowerCase();e.target.classList.contains("nodrag")||u(e.target,".nodrag")||-1!==["input","select","textarea","button","a"].indexOf(t)?this.active=!1:(e.preventDefault(),(e.target===this.el||"img"!==t&&u(e.target,".gslide-inline"))&&(this.active=!0,this.el.classList.add("dragging"),this.dragContainer=u(e.target,".ginner-container")))}}},{key:"dragEnd",value:function(e){var t=this;e&&e.preventDefault(),this.initialX=0,this.initialY=0,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.active=!1,this.doSlideChange&&(this.instance.preventOutsideClick=!0,"right"==this.doSlideChange&&this.instance.prevSlide(),"left"==this.doSlideChange&&this.instance.nextSlide()),this.doSlideClose&&this.instance.close(),this.toleranceReached||this.setTranslate(this.dragContainer,0,0,!0),setTimeout((function(){t.instance.preventOutsideClick=!1,t.toleranceReached=!1,t.lastDirection=null,t.dragging=!1,t.el.isDragging=!1,t.el.classList.remove("dragging"),t.slide.classList.remove("dragging-nav"),t.dragContainer.style.transform="",t.dragContainer.style.transition=""}),100)}},{key:"drag",value:function(e){if(this.active){e.preventDefault(),this.slide.classList.add("dragging-nav"),"touchmove"===e.type?(this.currentX=e.touches[0].clientX-this.initialX,this.currentY=e.touches[0].clientY-this.initialY):(this.currentX=e.clientX-this.initialX,this.currentY=e.clientY-this.initialY),this.xOffset=this.currentX,this.yOffset=this.currentY,this.el.isDragging=!0,this.dragging=!0,this.doSlideChange=!1,this.doSlideClose=!1;var t=Math.abs(this.currentX),i=Math.abs(this.currentY);if(t>0&&t>=Math.abs(this.currentY)&&(!this.lastDirection||"x"==this.lastDirection)){this.yOffset=0,this.lastDirection="x",this.setTranslate(this.dragContainer,this.currentX,0);var n=this.shouldChange();if(!this.instance.settings.dragAutoSnap&&n&&(this.doSlideChange=n),this.instance.settings.dragAutoSnap&&n)return this.instance.preventOutsideClick=!0,this.toleranceReached=!0,this.active=!1,this.instance.preventOutsideClick=!0,this.dragEnd(null),"right"==n&&this.instance.prevSlide(),void("left"==n&&this.instance.nextSlide())}if(this.toleranceY>0&&i>0&&i>=t&&(!this.lastDirection||"y"==this.lastDirection)){this.xOffset=0,this.lastDirection="y",this.setTranslate(this.dragContainer,0,this.currentY);var s=this.shouldClose();return!this.instance.settings.dragAutoSnap&&s&&(this.doSlideClose=!0),void(this.instance.settings.dragAutoSnap&&s&&this.instance.close())}}}},{key:"shouldChange",value:function(){var e=!1;if(Math.abs(this.currentX)>=this.toleranceX){var t=this.currentX>0?"right":"left";("left"==t&&this.slide!==this.slide.parentNode.lastChild||"right"==t&&this.slide!==this.slide.parentNode.firstChild)&&(e=t)}return e}},{key:"shouldClose",value:function(){var e=!1;return Math.abs(this.currentY)>=this.toleranceY&&(e=!0),e}},{key:"setTranslate",value:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.style.transition=n?"all .2s ease":"",e.style.transform="translate3d(".concat(t,"px, ").concat(i,"px, 0)")}}]),e}();function j(e,t,i,n){var s=e.querySelector(".gslide-media"),l=new Image,o="gSlideTitle_"+i,r="gSlideDesc_"+i;l.addEventListener("load",(function(){T(n)&&n()}),!1),l.src=t.href,""!=t.sizes&&""!=t.srcset&&(l.sizes=t.sizes,l.srcset=t.srcset),l.alt="",I(t.alt)||""===t.alt||(l.alt=t.alt),""!==t.title&&l.setAttribute("aria-labelledby",o),""!==t.description&&l.setAttribute("aria-describedby",r),t.hasOwnProperty("_hasCustomWidth")&&t._hasCustomWidth&&(l.style.width=t.width),t.hasOwnProperty("_hasCustomHeight")&&t._hasCustomHeight&&(l.style.height=t.height),s.insertBefore(l,s.firstChild)}function F(e,t,i,n){var s=this,l=e.querySelector(".ginner-container"),o="gvideo"+i,r=e.querySelector(".gslide-media"),a=this.getAllPlayers();h(l,"gvideo-container"),r.insertBefore(m('
'),r.firstChild);var d=e.querySelector(".gvideo-wrapper");S(this.settings.plyr.css,"Plyr");var c=t.href,u=location.protocol.replace(":",""),g="",v="",f=!1;"file"==u&&(u="http"),r.style.maxWidth=t.width,S(this.settings.plyr.js,"Plyr",(function(){if(c.match(/vimeo\.com\/([0-9]*)/)){var l=/vimeo.*\/(\d+)/i.exec(c);g="vimeo",v=l[1]}if(c.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/)||c.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/)||c.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/)){var r=function(e){var t="";t=void 0!==(e=e.replace(/(>|<)/gi,"").split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/))[2]?(t=e[2].split(/[^0-9a-z_\-]/i))[0]:e;return t}(c);g="youtube",v=r}if(null!==c.match(/\.(mp4|ogg|webm|mov)$/)){g="local";var u='")}var w=f||m('
'));h(d,"".concat(g,"-video gvideo")),d.appendChild(w),d.setAttribute("data-id",o),d.setAttribute("data-index",i);var C=O(s.settings.plyr,"config")?s.settings.plyr.config:{},k=new Plyr("#"+o,C);k.on("ready",(function(e){var t=e.detail.plyr;a[o]=t,T(n)&&n()})),b((function(){return e.querySelector("iframe")&&"true"==e.querySelector("iframe").dataset.ready}),(function(){s.resize(e)})),k.on("enterfullscreen",R),k.on("exitfullscreen",R)}))}function R(e){var t=u(e.target,".gslide-media");"enterfullscreen"==e.type&&h(t,"fullscreen"),"exitfullscreen"==e.type&&d(t,"fullscreen")}function G(e,t,i,n){var s,l=this,o=e.querySelector(".gslide-media"),r=!(!O(t,"href")||!t.href)&&t.href.split("#").pop().trim(),d=!(!O(t,"content")||!t.content)&&t.content;if(d&&(C(d)&&(s=m('
'.concat(d,"
"))),k(d))){"none"==d.style.display&&(d.style.display="block");var c=document.createElement("div");c.className="ginlined-content",c.appendChild(d),s=c}if(r){var u=document.getElementById(r);if(!u)return!1;var g=u.cloneNode(!0);g.style.height=t.height,g.style.maxWidth=t.width,h(g,"ginlined-content"),s=g}if(!s)return console.error("Unable to append inline slide content",t),!1;o.style.height=t.height,o.style.width=t.width,o.appendChild(s),this.events["inlineclose"+r]=a("click",{onElement:o.querySelectorAll(".gtrigger-close"),withCallback:function(e){e.preventDefault(),l.close()}}),T(n)&&n()}function Z(e,t,i,n){var s=e.querySelector(".gslide-media"),l=function(e){var t=e.url,i=e.allow,n=e.callback,s=e.appendTo,l=document.createElement("iframe");return l.className="vimeo-video gvideo",l.src=t,l.style.width="100%",l.style.height="100%",i&&l.setAttribute("allow",i),l.onload=function(){h(l,"node-ready"),T(n)&&n()},s&&s.appendChild(l),l}({url:t.href,callback:n});s.parentNode.style.maxWidth=t.width,s.parentNode.style.height=t.height,s.appendChild(l)}var $=function(){function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.defaults={href:"",sizes:"",srcset:"",title:"",type:"",description:"",alt:"",descPosition:"bottom",effect:"",width:"",height:"",content:!1,zoomable:!0,draggable:!0},L(i)&&(this.defaults=l(this.defaults,i))}return n(e,[{key:"sourceType",value:function(e){var t=e;if(null!==(e=e.toLowerCase()).match(/\.(jpeg|jpg|jpe|gif|png|apn|webp|avif|svg)/))return"image";if(e.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/)||e.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/)||e.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/))return"video";if(e.match(/vimeo\.com\/([0-9]*)/))return"video";if(null!==e.match(/\.(mp4|ogg|webm|mov)/))return"video";if(null!==e.match(/\.(mp3|wav|wma|aac|ogg)/))return"audio";if(e.indexOf("#")>-1&&""!==t.split("#").pop().trim())return"inline";return e.indexOf("goajax=true")>-1?"ajax":"external"}},{key:"parseConfig",value:function(e,t){var i=this,n=l({descPosition:t.descPosition},this.defaults);if(L(e)&&!k(e)){O(e,"type")||(O(e,"content")&&e.content?e.type="inline":O(e,"href")&&(e.type=this.sourceType(e.href)));var s=l(n,e);return this.setSize(s,t),s}var r="",a=e.getAttribute("data-glightbox"),h=e.nodeName.toLowerCase();if("a"===h&&(r=e.href),"img"===h&&(r=e.src,n.alt=e.alt),n.href=r,o(n,(function(s,l){O(t,l)&&"width"!==l&&(n[l]=t[l]);var o=e.dataset[l];I(o)||(n[l]=i.sanitizeValue(o))})),n.content&&(n.type="inline"),!n.type&&r&&(n.type=this.sourceType(r)),I(a)){if(!n.title&&"a"==h){var d=e.title;I(d)||""===d||(n.title=d)}if(!n.title&&"img"==h){var c=e.alt;I(c)||""===c||(n.title=c)}}else{var u=[];o(n,(function(e,t){u.push(";\\s?"+t)})),u=u.join("\\s?:|"),""!==a.trim()&&o(n,(function(e,t){var s=a,l=new RegExp("s?"+t+"s?:s?(.*?)("+u+"s?:|$)"),o=s.match(l);if(o&&o.length&&o[1]){var r=o[1].trim().replace(/;\s*$/,"");n[t]=i.sanitizeValue(r)}}))}if(n.description&&"."===n.description.substring(0,1)){var g;try{g=document.querySelector(n.description).innerHTML}catch(e){if(!(e instanceof DOMException))throw e}g&&(n.description=g)}if(!n.description){var v=e.querySelector(".glightbox-desc");v&&(n.description=v.innerHTML)}return this.setSize(n,t,e),this.slideConfig=n,n}},{key:"setSize",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n="video"==e.type?this.checkSize(t.videosWidth):this.checkSize(t.width),s=this.checkSize(t.height);return e.width=O(e,"width")&&""!==e.width?this.checkSize(e.width):n,e.height=O(e,"height")&&""!==e.height?this.checkSize(e.height):s,i&&"image"==e.type&&(e._hasCustomWidth=!!i.dataset.width,e._hasCustomHeight=!!i.dataset.height),e}},{key:"checkSize",value:function(e){return M(e)?"".concat(e,"px"):e}},{key:"sanitizeValue",value:function(e){return"true"!==e&&"false"!==e?e:"true"===e}}]),e}(),U=function(){function e(i,n,s){t(this,e),this.element=i,this.instance=n,this.index=s}return n(e,[{key:"setContent",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(c(t,"loaded"))return!1;var n=this.instance.settings,s=this.slideConfig,l=w();T(n.beforeSlideLoad)&&n.beforeSlideLoad({index:this.index,slide:t,player:!1});var o=s.type,r=s.descPosition,a=t.querySelector(".gslide-media"),d=t.querySelector(".gslide-title"),u=t.querySelector(".gslide-desc"),g=t.querySelector(".gdesc-inner"),v=i,f="gSlideTitle_"+this.index,p="gSlideDesc_"+this.index;if(T(n.afterSlideLoad)&&(v=function(){T(i)&&i(),n.afterSlideLoad({index:e.index,slide:t,player:e.instance.getSlidePlayerInstance(e.index)})}),""==s.title&&""==s.description?g&&g.parentNode.parentNode.removeChild(g.parentNode):(d&&""!==s.title?(d.id=f,d.innerHTML=s.title):d.parentNode.removeChild(d),u&&""!==s.description?(u.id=p,l&&n.moreLength>0?(s.smallDescription=this.slideShortDesc(s.description,n.moreLength,n.moreText),u.innerHTML=s.smallDescription,this.descriptionEvents(u,s)):u.innerHTML=s.description):u.parentNode.removeChild(u),h(a.parentNode,"desc-".concat(r)),h(g.parentNode,"description-".concat(r))),h(a,"gslide-".concat(o)),h(t,"loaded"),"video"!==o){if("external"!==o)return"inline"===o?(G.apply(this.instance,[t,s,this.index,v]),void(s.draggable&&new V({dragEl:t.querySelector(".gslide-inline"),toleranceX:n.dragToleranceX,toleranceY:n.dragToleranceY,slide:t,instance:this.instance}))):void("image"!==o?T(v)&&v():j(t,s,this.index,(function(){var i=t.querySelector("img");s.draggable&&new V({dragEl:i,toleranceX:n.dragToleranceX,toleranceY:n.dragToleranceY,slide:t,instance:e.instance}),s.zoomable&&i.naturalWidth>i.offsetWidth&&(h(i,"zoomable"),new H(i,t,(function(){e.instance.resize()}))),T(v)&&v()})));Z.apply(this,[t,s,this.index,v])}else F.apply(this.instance,[t,s,this.index,v])}},{key:"slideShortDesc",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement("div");n.innerHTML=e;var s=n.innerText,l=i;if((e=s.trim()).length<=t)return e;var o=e.substr(0,t-1);return l?(n=null,o+'... '+i+""):o}},{key:"descriptionEvents",value:function(e,t){var i=this,n=e.querySelector(".desc-more");if(!n)return!1;a("click",{onElement:n,withCallback:function(e,n){e.preventDefault();var s=document.body,l=u(n,".gslide-desc");if(!l)return!1;l.innerHTML=t.description,h(s,"gdesc-open");var o=a("click",{onElement:[s,u(l,".gslide-description")],withCallback:function(e,n){"a"!==e.target.nodeName.toLowerCase()&&(d(s,"gdesc-open"),h(s,"gdesc-closed"),l.innerHTML=t.smallDescription,i.descriptionEvents(l,t),setTimeout((function(){d(s,"gdesc-closed")}),400),o.destroy())}})}})}},{key:"create",value:function(){return m(this.instance.settings.slideHTML)}},{key:"getConfig",value:function(){k(this.element)||this.element.hasOwnProperty("draggable")||(this.element.draggable=this.instance.settings.draggable);var e=new $(this.instance.settings.slideExtraAttributes);return this.slideConfig=e.parseConfig(this.element,this.instance.settings),this.slideConfig}}]),e}(),J=w(),K=null!==w()||void 0!==document.createTouch||"ontouchstart"in window||"onmsgesturechange"in window||navigator.msMaxTouchPoints,Q=document.getElementsByTagName("html")[0],ee={selector:".glightbox",elements:null,skin:"clean",theme:"clean",closeButton:!0,startAt:null,autoplayVideos:!0,autofocusVideos:!0,descPosition:"bottom",width:"900px",height:"506px",videosWidth:"960px",beforeSlideChange:null,afterSlideChange:null,beforeSlideLoad:null,afterSlideLoad:null,slideInserted:null,slideRemoved:null,slideExtraAttributes:null,onOpen:null,onClose:null,loop:!1,zoomable:!0,draggable:!0,dragAutoSnap:!1,dragToleranceX:40,dragToleranceY:65,preload:!0,oneSlidePerOpen:!1,touchNavigation:!0,touchFollowAxis:!0,keyboardNavigation:!0,closeOnOutsideClick:!0,plugins:!1,plyr:{css:"https://cdn.plyr.io/3.6.8/plyr.css",js:"https://cdn.plyr.io/3.6.8/plyr.js",config:{ratio:"16:9",fullscreen:{enabled:!0,iosNative:!0},youtube:{noCookie:!0,rel:0,showinfo:0,iv_load_policy:3},vimeo:{byline:!1,portrait:!1,title:!1,transparent:!1}}},openEffect:"zoom",closeEffect:"zoom",slideEffect:"slide",moreText:"See more",moreLength:60,cssEfects:{fade:{in:"fadeIn",out:"fadeOut"},zoom:{in:"zoomIn",out:"zoomOut"},slide:{in:"slideInRight",out:"slideOutLeft"},slideBack:{in:"slideInLeft",out:"slideOutRight"},none:{in:"none",out:"none"}},svg:{close:'',next:' ',prev:''},slideHTML:'
\n
\n
\n
\n
\n
\n
\n

\n
\n
\n
\n
\n
\n
',lightboxHTML:''},te=function(){function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.customOptions=i,this.settings=l(ee,i),this.effectsClasses=this.getAnimationClasses(),this.videoPlayers={},this.apiEvents=[],this.fullElementsList=!1}return n(e,[{key:"init",value:function(){var e=this,t=this.getSelector();t&&(this.baseEvents=a("click",{onElement:t,withCallback:function(t,i){t.preventDefault(),e.open(i)}})),this.elements=this.getElements()}},{key:"open",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(0==this.elements.length)return!1;this.activeSlide=null,this.prevActiveSlideIndex=null,this.prevActiveSlide=null;var i=M(t)?t:this.settings.startAt;if(k(e)){var n=e.getAttribute("data-gallery");n&&(this.fullElementsList=this.elements,this.elements=this.getGalleryElements(this.elements,n)),I(i)&&(i=this.getElementIndex(e))<0&&(i=0)}M(i)||(i=0),this.build(),g(this.overlay,"none"==this.settings.openEffect?"none":this.settings.cssEfects.fade.in);var s=document.body,l=window.innerWidth-document.documentElement.clientWidth;if(l>0){var o=document.createElement("style");o.type="text/css",o.className="gcss-styles",o.innerText=".gscrollbar-fixer {margin-right: ".concat(l,"px}"),document.head.appendChild(o),h(s,"gscrollbar-fixer")}h(s,"glightbox-open"),h(Q,"glightbox-open"),J&&(h(document.body,"glightbox-mobile"),this.settings.slideEffect="slide"),this.showSlide(i,!0),1==this.elements.length?(h(this.prevButton,"glightbox-button-hidden"),h(this.nextButton,"glightbox-button-hidden")):(d(this.prevButton,"glightbox-button-hidden"),d(this.nextButton,"glightbox-button-hidden")),this.lightboxOpen=!0,this.trigger("open"),T(this.settings.onOpen)&&this.settings.onOpen(),K&&this.settings.touchNavigation&&B(this),this.settings.keyboardNavigation&&X(this)}},{key:"openAt",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.open(null,e)}},{key:"showSlide",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];f(this.loader),this.index=parseInt(t);var n=this.slidesContainer.querySelector(".current");n&&d(n,"current"),this.slideAnimateOut();var s=this.slidesContainer.querySelectorAll(".gslide")[t];if(c(s,"loaded"))this.slideAnimateIn(s,i),p(this.loader);else{f(this.loader);var l=this.elements[t],o={index:this.index,slide:s,slideNode:s,slideConfig:l.slideConfig,slideIndex:this.index,trigger:l.node,player:null};this.trigger("slide_before_load",o),l.instance.setContent(s,(function(){p(e.loader),e.resize(),e.slideAnimateIn(s,i),e.trigger("slide_after_load",o)}))}this.slideDescription=s.querySelector(".gslide-description"),this.slideDescriptionContained=this.slideDescription&&c(this.slideDescription.parentNode,"gslide-media"),this.settings.preload&&(this.preloadSlide(t+1),this.preloadSlide(t-1)),this.updateNavigationClasses(),this.activeSlide=s}},{key:"preloadSlide",value:function(e){var t=this;if(e<0||e>this.elements.length-1)return!1;if(I(this.elements[e]))return!1;var i=this.slidesContainer.querySelectorAll(".gslide")[e];if(c(i,"loaded"))return!1;var n=this.elements[e],s=n.type,l={index:e,slide:i,slideNode:i,slideConfig:n.slideConfig,slideIndex:e,trigger:n.node,player:null};this.trigger("slide_before_load",l),"video"==s||"external"==s?setTimeout((function(){n.instance.setContent(i,(function(){t.trigger("slide_after_load",l)}))}),200):n.instance.setContent(i,(function(){t.trigger("slide_after_load",l)}))}},{key:"prevSlide",value:function(){this.goToSlide(this.index-1)}},{key:"nextSlide",value:function(){this.goToSlide(this.index+1)}},{key:"goToSlide",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.prevActiveSlide=this.activeSlide,this.prevActiveSlideIndex=this.index,!this.loop()&&(e<0||e>this.elements.length-1))return!1;e<0?e=this.elements.length-1:e>=this.elements.length&&(e=0),this.showSlide(e)}},{key:"insertSlide",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;t<0&&(t=this.elements.length);var i=new U(e,this,t),n=i.getConfig(),s=l({},n),o=i.create(),r=this.elements.length-1;s.index=t,s.node=!1,s.instance=i,s.slideConfig=n,this.elements.splice(t,0,s);var a=null,h=null;if(this.slidesContainer){if(t>r)this.slidesContainer.appendChild(o);else{var d=this.slidesContainer.querySelectorAll(".gslide")[t];this.slidesContainer.insertBefore(o,d)}(this.settings.preload&&0==this.index&&0==t||this.index-1==t||this.index+1==t)&&this.preloadSlide(t),0==this.index&&0==t&&(this.index=1),this.updateNavigationClasses(),a=this.slidesContainer.querySelectorAll(".gslide")[t],h=this.getSlidePlayerInstance(t),s.slideNode=a}this.trigger("slide_inserted",{index:t,slide:a,slideNode:a,slideConfig:n,slideIndex:t,trigger:null,player:h}),T(this.settings.slideInserted)&&this.settings.slideInserted({index:t,slide:a,player:h})}},{key:"removeSlide",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;if(e<0||e>this.elements.length-1)return!1;var t=this.slidesContainer&&this.slidesContainer.querySelectorAll(".gslide")[e];t&&(this.getActiveSlideIndex()==e&&(e==this.elements.length-1?this.prevSlide():this.nextSlide()),t.parentNode.removeChild(t)),this.elements.splice(e,1),this.trigger("slide_removed",e),T(this.settings.slideRemoved)&&this.settings.slideRemoved(e)}},{key:"slideAnimateIn",value:function(e,t){var i=this,n=e.querySelector(".gslide-media"),s=e.querySelector(".gslide-description"),l={index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,slideNode:this.prevActiveSlide,slideIndex:this.prevActiveSlide,slideConfig:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].slideConfig,trigger:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].node,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},o={index:this.index,slide:this.activeSlide,slideNode:this.activeSlide,slideConfig:this.elements[this.index].slideConfig,slideIndex:this.index,trigger:this.elements[this.index].node,player:this.getSlidePlayerInstance(this.index)};if(n.offsetWidth>0&&s&&(p(s),s.style.display=""),d(e,this.effectsClasses),t)g(e,this.settings.cssEfects[this.settings.openEffect].in,(function(){i.settings.autoplayVideos&&i.slidePlayerPlay(e),i.trigger("slide_changed",{prev:l,current:o}),T(i.settings.afterSlideChange)&&i.settings.afterSlideChange.apply(i,[l,o])}));else{var r=this.settings.slideEffect,a="none"!==r?this.settings.cssEfects[r].in:r;this.prevActiveSlideIndex>this.index&&"slide"==this.settings.slideEffect&&(a=this.settings.cssEfects.slideBack.in),g(e,a,(function(){i.settings.autoplayVideos&&i.slidePlayerPlay(e),i.trigger("slide_changed",{prev:l,current:o}),T(i.settings.afterSlideChange)&&i.settings.afterSlideChange.apply(i,[l,o])}))}setTimeout((function(){i.resize(e)}),100),h(e,"current")}},{key:"slideAnimateOut",value:function(){if(!this.prevActiveSlide)return!1;var e=this.prevActiveSlide;d(e,this.effectsClasses),h(e,"prev");var t=this.settings.slideEffect,i="none"!==t?this.settings.cssEfects[t].out:t;this.slidePlayerPause(e),this.trigger("slide_before_change",{prev:{index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,slideNode:this.prevActiveSlide,slideIndex:this.prevActiveSlideIndex,slideConfig:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].slideConfig,trigger:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].node,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},current:{index:this.index,slide:this.activeSlide,slideNode:this.activeSlide,slideIndex:this.index,slideConfig:this.elements[this.index].slideConfig,trigger:this.elements[this.index].node,player:this.getSlidePlayerInstance(this.index)}}),T(this.settings.beforeSlideChange)&&this.settings.beforeSlideChange.apply(this,[{index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},{index:this.index,slide:this.activeSlide,player:this.getSlidePlayerInstance(this.index)}]),this.prevActiveSlideIndex>this.index&&"slide"==this.settings.slideEffect&&(i=this.settings.cssEfects.slideBack.out),g(e,i,(function(){var t=e.querySelector(".ginner-container"),i=e.querySelector(".gslide-media"),n=e.querySelector(".gslide-description");t.style.transform="",i.style.transform="",d(i,"greset"),i.style.opacity="",n&&(n.style.opacity=""),d(e,"prev")}))}},{key:"getAllPlayers",value:function(){return this.videoPlayers}},{key:"getSlidePlayerInstance",value:function(e){var t="gvideo"+e,i=this.getAllPlayers();return!(!O(i,t)||!i[t])&&i[t]}},{key:"stopSlideVideo",value:function(e){if(k(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}console.log("stopSlideVideo is deprecated, use slidePlayerPause");var i=this.getSlidePlayerInstance(e);i&&i.playing&&i.pause()}},{key:"slidePlayerPause",value:function(e){if(k(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}var i=this.getSlidePlayerInstance(e);i&&i.playing&&i.pause()}},{key:"playSlideVideo",value:function(e){if(k(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}console.log("playSlideVideo is deprecated, use slidePlayerPlay");var i=this.getSlidePlayerInstance(e);i&&!i.playing&&i.play()}},{key:"slidePlayerPlay",value:function(e){if(k(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}var i=this.getSlidePlayerInstance(e);i&&!i.playing&&(i.play(),this.settings.autofocusVideos&&i.elements.container.focus())}},{key:"setElements",value:function(e){var t=this;this.settings.elements=!1;var i=[];e&&e.length&&o(e,(function(e,n){var s=new U(e,t,n),o=s.getConfig(),r=l({},o);r.slideConfig=o,r.instance=s,r.index=n,i.push(r)})),this.elements=i,this.lightboxOpen&&(this.slidesContainer.innerHTML="",this.elements.length&&(o(this.elements,(function(){var e=m(t.settings.slideHTML);t.slidesContainer.appendChild(e)})),this.showSlide(0,!0)))}},{key:"getElementIndex",value:function(e){var t=!1;return o(this.elements,(function(i,n){if(O(i,"node")&&i.node==e)return t=n,!0})),t}},{key:"getElements",value:function(){var e=this,t=[];this.elements=this.elements?this.elements:[],!I(this.settings.elements)&&E(this.settings.elements)&&this.settings.elements.length&&o(this.settings.elements,(function(i,n){var s=new U(i,e,n),o=s.getConfig(),r=l({},o);r.node=!1,r.index=n,r.instance=s,r.slideConfig=o,t.push(r)}));var i=!1;return this.getSelector()&&(i=document.querySelectorAll(this.getSelector())),i?(o(i,(function(i,n){var s=new U(i,e,n),o=s.getConfig(),r=l({},o);r.node=i,r.index=n,r.instance=s,r.slideConfig=o,r.gallery=i.getAttribute("data-gallery"),t.push(r)})),t):t}},{key:"getGalleryElements",value:function(e,t){return e.filter((function(e){return e.gallery==t}))}},{key:"getSelector",value:function(){return!this.settings.elements&&(this.settings.selector&&"data-"==this.settings.selector.substring(0,5)?"*[".concat(this.settings.selector,"]"):this.settings.selector)}},{key:"getActiveSlide",value:function(){return this.slidesContainer.querySelectorAll(".gslide")[this.index]}},{key:"getActiveSlideIndex",value:function(){return this.index}},{key:"getAnimationClasses",value:function(){var e=[];for(var t in this.settings.cssEfects)if(this.settings.cssEfects.hasOwnProperty(t)){var i=this.settings.cssEfects[t];e.push("g".concat(i.in)),e.push("g".concat(i.out))}return e.join(" ")}},{key:"build",value:function(){var e=this;if(this.built)return!1;var t=document.body.childNodes,i=[];o(t,(function(e){e.parentNode==document.body&&"#"!==e.nodeName.charAt(0)&&e.hasAttribute&&!e.hasAttribute("aria-hidden")&&(i.push(e),e.setAttribute("aria-hidden","true"))}));var n=O(this.settings.svg,"next")?this.settings.svg.next:"",s=O(this.settings.svg,"prev")?this.settings.svg.prev:"",l=O(this.settings.svg,"close")?this.settings.svg.close:"",r=this.settings.lightboxHTML;r=m(r=(r=(r=r.replace(/{nextSVG}/g,n)).replace(/{prevSVG}/g,s)).replace(/{closeSVG}/g,l)),document.body.appendChild(r);var d=document.getElementById("glightbox-body");this.modal=d;var g=d.querySelector(".gclose");this.prevButton=d.querySelector(".gprev"),this.nextButton=d.querySelector(".gnext"),this.overlay=d.querySelector(".goverlay"),this.loader=d.querySelector(".gloader"),this.slidesContainer=document.getElementById("glightbox-slider"),this.bodyHiddenChildElms=i,this.events={},h(this.modal,"glightbox-"+this.settings.skin),this.settings.closeButton&&g&&(this.events.close=a("click",{onElement:g,withCallback:function(t,i){t.preventDefault(),e.close()}})),g&&!this.settings.closeButton&&g.parentNode.removeChild(g),this.nextButton&&(this.events.next=a("click",{onElement:this.nextButton,withCallback:function(t,i){t.preventDefault(),e.nextSlide()}})),this.prevButton&&(this.events.prev=a("click",{onElement:this.prevButton,withCallback:function(t,i){t.preventDefault(),e.prevSlide()}})),this.settings.closeOnOutsideClick&&(this.events.outClose=a("click",{onElement:d,withCallback:function(t,i){e.preventOutsideClick||c(document.body,"glightbox-mobile")||u(t.target,".ginner-container")||u(t.target,".gbtn")||c(t.target,"gnext")||c(t.target,"gprev")||e.close()}})),o(this.elements,(function(t,i){e.slidesContainer.appendChild(t.instance.create()),t.slideNode=e.slidesContainer.querySelectorAll(".gslide")[i]})),K&&h(document.body,"glightbox-touch"),this.events.resize=a("resize",{onElement:window,withCallback:function(){e.resize()}}),this.built=!0}},{key:"resize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if((e=e||this.activeSlide)&&!c(e,"zoomed")){var t=y(),i=e.querySelector(".gvideo-wrapper"),n=e.querySelector(".gslide-image"),s=this.slideDescription,l=t.width,o=t.height;if(l<=768?h(document.body,"glightbox-mobile"):d(document.body,"glightbox-mobile"),i||n){var r=!1;if(s&&(c(s,"description-bottom")||c(s,"description-top"))&&!c(s,"gabsolute")&&(r=!0),n)if(l<=768)n.querySelector("img");else if(r){var a=s.offsetHeight,u=n.querySelector("img");u.setAttribute("style","max-height: calc(100vh - ".concat(a,"px)")),s.setAttribute("style","max-width: ".concat(u.offsetWidth,"px;"))}if(i){var g=O(this.settings.plyr.config,"ratio")?this.settings.plyr.config.ratio:"";if(!g){var v=i.clientWidth,f=i.clientHeight,p=v/f;g="".concat(v/p,":").concat(f/p)}var m=g.split(":"),x=this.settings.videosWidth,b=this.settings.videosWidth,S=(b=M(x)||-1!==x.indexOf("px")?parseInt(x):-1!==x.indexOf("vw")?l*parseInt(x)/100:-1!==x.indexOf("vh")?o*parseInt(x)/100:-1!==x.indexOf("%")?l*parseInt(x)/100:parseInt(i.clientWidth))/(parseInt(m[0])/parseInt(m[1]));if(S=Math.floor(S),r&&(o-=s.offsetHeight),b>l||S>o||ob){var w=i.offsetWidth,T=i.offsetHeight,C=o/T,k={width:w*C,height:T*C};i.parentNode.setAttribute("style","max-width: ".concat(k.width,"px")),r&&s.setAttribute("style","max-width: ".concat(k.width,"px;"))}else i.parentNode.style.maxWidth="".concat(x),r&&s.setAttribute("style","max-width: ".concat(x,";"))}}}}},{key:"reload",value:function(){this.init()}},{key:"updateNavigationClasses",value:function(){var e=this.loop();d(this.nextButton,"disabled"),d(this.prevButton,"disabled"),0==this.index&&this.elements.length-1==0?(h(this.prevButton,"disabled"),h(this.nextButton,"disabled")):0!==this.index||e?this.index!==this.elements.length-1||e||h(this.nextButton,"disabled"):h(this.prevButton,"disabled")}},{key:"loop",value:function(){var e=O(this.settings,"loopAtEnd")?this.settings.loopAtEnd:null;return e=O(this.settings,"loop")?this.settings.loop:e,e}},{key:"close",value:function(){var e=this;if(!this.lightboxOpen){if(this.events){for(var t in this.events)this.events.hasOwnProperty(t)&&this.events[t].destroy();this.events=null}return!1}if(this.closing)return!1;this.closing=!0,this.slidePlayerPause(this.activeSlide),this.fullElementsList&&(this.elements=this.fullElementsList),this.bodyHiddenChildElms.length&&o(this.bodyHiddenChildElms,(function(e){e.removeAttribute("aria-hidden")})),h(this.modal,"glightbox-closing"),g(this.overlay,"none"==this.settings.openEffect?"none":this.settings.cssEfects.fade.out),g(this.activeSlide,this.settings.cssEfects[this.settings.closeEffect].out,(function(){if(e.activeSlide=null,e.prevActiveSlideIndex=null,e.prevActiveSlide=null,e.built=!1,e.events){for(var t in e.events)e.events.hasOwnProperty(t)&&e.events[t].destroy();e.events=null}var i=document.body;d(Q,"glightbox-open"),d(i,"glightbox-open touching gdesc-open glightbox-touch glightbox-mobile gscrollbar-fixer"),e.modal.parentNode.removeChild(e.modal),e.trigger("close"),T(e.settings.onClose)&&e.settings.onClose();var n=document.querySelector(".gcss-styles");n&&n.parentNode.removeChild(n),e.lightboxOpen=!1,e.closing=null}))}},{key:"destroy",value:function(){this.close(),this.clearAllEvents(),this.baseEvents&&this.baseEvents.destroy()}},{key:"on",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||!T(t))throw new TypeError("Event name and callback must be defined");this.apiEvents.push({evt:e,once:i,callback:t})}},{key:"once",value:function(e,t){this.on(e,t,!0)}},{key:"trigger",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=[];o(this.apiEvents,(function(t,s){var l=t.evt,o=t.once,r=t.callback;l==e&&(r(i),o&&n.push(s))})),n.length&&o(n,(function(e){return t.apiEvents.splice(e,1)}))}},{key:"clearAllEvents",value:function(){this.apiEvents.splice(0,this.apiEvents.length)}},{key:"version",value:function(){return"3.1.1"}}]),e}();return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new te(e);return t.init(),t}})); diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ar.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ar.min.js new file mode 100644 index 0000000000..9b06c26c1f --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ar.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ar=function(){this.pipeline.reset(),this.pipeline.add(e.ar.trimmer,e.ar.stopWordFilter,e.ar.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ar.stemmer))},e.ar.wordCharacters="ء-ٛٱـ",e.ar.trimmer=e.trimmerSupport.generateTrimmer(e.ar.wordCharacters),e.Pipeline.registerFunction(e.ar.trimmer,"trimmer-ar"),e.ar.stemmer=function(){var e=this;return e.result=!1,e.preRemoved=!1,e.sufRemoved=!1,e.pre={pre1:"ف ك ب و س ل ن ا ي ت",pre2:"ال لل",pre3:"بال وال فال تال كال ولل",pre4:"فبال كبال وبال وكال"},e.suf={suf1:"ه ك ت ن ا ي",suf2:"نك نه ها وك يا اه ون ين تن تم نا وا ان كم كن ني نن ما هم هن تك ته ات يه",suf3:"تين كهم نيه نهم ونه وها يهم ونا ونك وني وهم تكم تنا تها تني تهم كما كها ناه نكم هنا تان يها",suf4:"كموه ناها ونني ونهم تكما تموه تكاه كماه ناكم ناهم نيها وننا"},e.patterns=JSON.parse('{"pt43":[{"pt":[{"c":"ا","l":1}]},{"pt":[{"c":"ا,ت,ن,ي","l":0}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"و","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ي","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ا","l":2},{"c":"ل","l":3,"m":3}]},{"pt":[{"c":"م","l":0}]}],"pt53":[{"pt":[{"c":"ت","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":3},{"c":"ل","l":3,"m":4},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":3}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ن","l":4}]},{"pt":[{"c":"ت","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"م","l":0},{"c":"و","l":3}]},{"pt":[{"c":"ا","l":1},{"c":"و","l":3}]},{"pt":[{"c":"و","l":1},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"ا","l":2},{"c":"ن","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":1},{"c":"ا","l":3}]},{"pt":[{"c":"ي,ت,ا,ن","l":0},{"c":"ت","l":1}],"mPt":[{"c":"ف","l":0,"m":2},{"c":"ع","l":1,"m":3},{"c":"ا","l":2},{"c":"ل","l":3,"m":4}]},{"pt":[{"c":"ت,ي,ا,ن","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":2},{"c":"ي","l":3}]},{"pt":[{"c":"ا,ي,ت,ن","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ء","l":4}]}],"pt63":[{"pt":[{"c":"ا","l":0},{"c":"ت","l":2},{"c":"ا","l":4}]},{"pt":[{"c":"ا,ت,ن,ي","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"و","l":3}]},{"pt":[{"c":"م","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ي","l":1},{"c":"ي","l":3},{"c":"ا","l":4},{"c":"ء","l":5}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ا","l":4}]}],"pt54":[{"pt":[{"c":"ت","l":0}]},{"pt":[{"c":"ا,ي,ت,ن","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"م","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":2}]}],"pt64":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":1}]}],"pt73":[{"pt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ا","l":5}]}],"pt75":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":5}]}]}'),e.execArray=["cleanWord","removeDiacritics","cleanAlef","removeStopWords","normalizeHamzaAndAlef","removeStartWaw","removePre432","removeEndTaa","wordCheck"],e.stem=function(){var r=0;for(e.result=!1,e.preRemoved=!1,e.sufRemoved=!1;r=0)return!0},e.normalizeHamzaAndAlef=function(){return e.word=e.word.replace("ؤ","ء"),e.word=e.word.replace("ئ","ء"),e.word=e.word.replace(/([\u0627])\1+/gi,"ا"),!1},e.removeEndTaa=function(){return!(e.word.length>2)||(e.word=e.word.replace(/[\u0627]$/,""),e.word=e.word.replace("ة",""),!1)},e.removeStartWaw=function(){return e.word.length>3&&"و"==e.word[0]&&"و"==e.word[1]&&(e.word=e.word.slice(1)),!1},e.removePre432=function(){var r=e.word;if(e.word.length>=7){var t=new RegExp("^("+e.pre.pre4.split(" ").join("|")+")");e.word=e.word.replace(t,"")}if(e.word==r&&e.word.length>=6){var c=new RegExp("^("+e.pre.pre3.split(" ").join("|")+")");e.word=e.word.replace(c,"")}if(e.word==r&&e.word.length>=5){var l=new RegExp("^("+e.pre.pre2.split(" ").join("|")+")");e.word=e.word.replace(l,"")}return r!=e.word&&(e.preRemoved=!0),!1},e.patternCheck=function(r){for(var t=0;t3){var t=new RegExp("^("+e.pre.pre1.split(" ").join("|")+")");e.word=e.word.replace(t,"")}return r!=e.word&&(e.preRemoved=!0),!1},e.removeSuf1=function(){var r=e.word;if(0==e.sufRemoved&&e.word.length>3){var t=new RegExp("("+e.suf.suf1.split(" ").join("|")+")$");e.word=e.word.replace(t,"")}return r!=e.word&&(e.sufRemoved=!0),!1},e.removeSuf432=function(){var r=e.word;if(e.word.length>=6){var t=new RegExp("("+e.suf.suf4.split(" ").join("|")+")$");e.word=e.word.replace(t,"")}if(e.word==r&&e.word.length>=5){var c=new RegExp("("+e.suf.suf3.split(" ").join("|")+")$");e.word=e.word.replace(c,"")}if(e.word==r&&e.word.length>=4){var l=new RegExp("("+e.suf.suf2.split(" ").join("|")+")$");e.word=e.word.replace(l,"")}return r!=e.word&&(e.sufRemoved=!0),!1},e.wordCheck=function(){for(var r=(e.word,[e.removeSuf432,e.removeSuf1,e.removePre1]),t=0,c=!1;e.word.length>=7&&!e.result&&t=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.de.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.de.min.js new file mode 100644 index 0000000000..f3b5c108c9 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.de.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `German` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.de=function(){this.pipeline.reset(),this.pipeline.add(e.de.trimmer,e.de.stopWordFilter,e.de.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.de.stemmer))},e.de.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.de.trimmer=e.trimmerSupport.generateTrimmer(e.de.wordCharacters),e.Pipeline.registerFunction(e.de.trimmer,"trimmer-de"),e.de.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,n){return!(!v.eq_s(1,e)||(v.ket=v.cursor,!v.in_grouping(p,97,252)))&&(v.slice_from(r),v.cursor=n,!0)}function i(){for(var r,n,i,s,t=v.cursor;;)if(r=v.cursor,v.bra=r,v.eq_s(1,"ß"))v.ket=v.cursor,v.slice_from("ss");else{if(r>=v.limit)break;v.cursor=r+1}for(v.cursor=t;;)for(n=v.cursor;;){if(i=v.cursor,v.in_grouping(p,97,252)){if(s=v.cursor,v.bra=s,e("u","U",i))break;if(v.cursor=s,e("y","Y",i))break}if(i>=v.limit)return void(v.cursor=n);v.cursor=i+1}}function s(){for(;!v.in_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}for(;!v.out_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}return!1}function t(){m=v.limit,l=m;var e=v.cursor+3;0<=e&&e<=v.limit&&(d=e,s()||(m=v.cursor,m=v.limit)return;v.cursor++}}}function c(){return m<=v.cursor}function u(){return l<=v.cursor}function a(){var e,r,n,i,s=v.limit-v.cursor;if(v.ket=v.cursor,(e=v.find_among_b(w,7))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:v.slice_del(),v.ket=v.cursor,v.eq_s_b(1,"s")&&(v.bra=v.cursor,v.eq_s_b(3,"nis")&&v.slice_del());break;case 3:v.in_grouping_b(g,98,116)&&v.slice_del()}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(f,4))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:if(v.in_grouping_b(k,98,116)){var t=v.cursor-3;v.limit_backward<=t&&t<=v.limit&&(v.cursor=t,v.slice_del())}}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(_,8))&&(v.bra=v.cursor,u()))switch(e){case 1:v.slice_del(),v.ket=v.cursor,v.eq_s_b(2,"ig")&&(v.bra=v.cursor,r=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-r,u()&&v.slice_del()));break;case 2:n=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-n,v.slice_del());break;case 3:if(v.slice_del(),v.ket=v.cursor,i=v.limit-v.cursor,!v.eq_s_b(2,"er")&&(v.cursor=v.limit-i,!v.eq_s_b(2,"en")))break;v.bra=v.cursor,c()&&v.slice_del();break;case 4:v.slice_del(),v.ket=v.cursor,e=v.find_among_b(b,2),e&&(v.bra=v.cursor,u()&&1==e&&v.slice_del())}}var d,l,m,h=[new r("",-1,6),new r("U",0,2),new r("Y",0,1),new r("ä",0,3),new r("ö",0,4),new r("ü",0,5)],w=[new r("e",-1,2),new r("em",-1,1),new r("en",-1,2),new r("ern",-1,1),new r("er",-1,1),new r("s",-1,3),new r("es",5,2)],f=[new r("en",-1,1),new r("er",-1,1),new r("st",-1,2),new r("est",2,1)],b=[new r("ig",-1,1),new r("lich",-1,1)],_=[new r("end",-1,1),new r("ig",-1,2),new r("ung",-1,1),new r("lich",-1,3),new r("isch",-1,2),new r("ik",-1,2),new r("heit",-1,3),new r("keit",-1,4)],p=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8],g=[117,30,5],k=[117,30,4],v=new n;this.setCurrent=function(e){v.setCurrent(e)},this.getCurrent=function(){return v.getCurrent()},this.stem=function(){var e=v.cursor;return i(),v.cursor=e,t(),v.limit_backward=e,v.cursor=v.limit,a(),v.cursor=v.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.de.stemmer,"stemmer-de"),e.de.stopWordFilter=e.generateStopWordFilter("aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über".split(" ")),e.Pipeline.registerFunction(e.de.stopWordFilter,"stopWordFilter-de")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.du.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.du.min.js new file mode 100644 index 0000000000..49a0f3f0ac --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.du.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Dutch` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");console.warn('[Lunr Languages] Please use the "nl" instead of the "du". The "nl" code is the standard code for Dutch language, and "du" will be removed in the next major versions.'),e.du=function(){this.pipeline.reset(),this.pipeline.add(e.du.trimmer,e.du.stopWordFilter,e.du.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.du.stemmer))},e.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.du.trimmer=e.trimmerSupport.generateTrimmer(e.du.wordCharacters),e.Pipeline.registerFunction(e.du.trimmer,"trimmer-du"),e.du.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e,r,i,o=C.cursor;;){if(C.bra=C.cursor,e=C.find_among(b,11))switch(C.ket=C.cursor,e){case 1:C.slice_from("a");continue;case 2:C.slice_from("e");continue;case 3:C.slice_from("i");continue;case 4:C.slice_from("o");continue;case 5:C.slice_from("u");continue;case 6:if(C.cursor>=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(r=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=r);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=r;else if(n(r))break}else if(n(r))break}function n(e){return C.cursor=e,e>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,f=_,t()||(_=C.cursor,_<3&&(_=3),t()||(f=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var e;;)if(C.bra=C.cursor,e=C.find_among(p,3))switch(C.ket=C.cursor,e){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return f<=C.cursor}function a(){var e=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-e,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var e;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.slice_del(),w=!0,a())))}function m(){var e;u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.eq_s_b(3,"gem")||(C.cursor=C.limit-e,C.slice_del(),a())))}function d(){var e,r,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,e=C.find_among_b(h,5))switch(C.bra=C.cursor,e){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(z,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(r=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-r,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,e=C.find_among_b(k,6))switch(C.bra=C.cursor,e){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(j,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var f,_,w,b=[new r("",-1,6),new r("á",0,1),new r("ä",0,1),new r("é",0,2),new r("ë",0,2),new r("í",0,3),new r("ï",0,3),new r("ó",0,4),new r("ö",0,4),new r("ú",0,5),new r("ü",0,5)],p=[new r("",-1,3),new r("I",0,2),new r("Y",0,1)],g=[new r("dd",-1,-1),new r("kk",-1,-1),new r("tt",-1,-1)],h=[new r("ene",-1,2),new r("se",-1,3),new r("en",-1,2),new r("heden",2,1),new r("s",-1,3)],k=[new r("end",-1,1),new r("ig",-1,2),new r("ing",-1,1),new r("lijk",-1,3),new r("baar",-1,4),new r("bar",-1,5)],v=[new r("aa",-1,-1),new r("ee",-1,-1),new r("oo",-1,-1),new r("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(e){C.setCurrent(e)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var r=C.cursor;return e(),C.cursor=r,o(),C.limit_backward=r,C.cursor=C.limit,d(),C.cursor=C.limit_backward,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.du.stemmer,"stemmer-du"),e.du.stopWordFilter=e.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),e.Pipeline.registerFunction(e.du.stopWordFilter,"stopWordFilter-du")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.el.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.el.min.js new file mode 100644 index 0000000000..ace017bd65 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.el.min.js @@ -0,0 +1 @@ +!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.el=function(){this.pipeline.reset(),void 0===this.searchPipeline&&this.pipeline.add(e.el.trimmer,e.el.normilizer),this.pipeline.add(e.el.stopWordFilter,e.el.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.el.stemmer))},e.el.wordCharacters="A-Za-zΑαΒβΓγΔδΕεΖζΗηΘθΙιΚκΛλΜμΝνΞξΟοΠπΡρΣσςΤτΥυΦφΧχΨψΩωΆάΈέΉήΊίΌόΎύΏώΪΐΫΰΐΰ",e.el.trimmer=e.trimmerSupport.generateTrimmer(e.el.wordCharacters),e.Pipeline.registerFunction(e.el.trimmer,"trimmer-el"),e.el.stemmer=function(){function e(e){return s.test(e)}function t(e){return/[ΑΕΗΙΟΥΩ]$/.test(e)}function r(e){return/[ΑΕΗΙΟΩ]$/.test(e)}function n(n){var s=n;if(n.length<3)return s;if(!e(n))return s;if(i.indexOf(n)>=0)return s;var u=new RegExp("(.*)("+Object.keys(l).join("|")+")$"),o=u.exec(s);return null!==o&&(s=o[1]+l[o[2]]),null!==(o=/^(.+?)(ΑΔΕΣ|ΑΔΩΝ)$/.exec(s))&&(s=o[1],/(ΟΚ|ΜΑΜ|ΜΑΝ|ΜΠΑΜΠ|ΠΑΤΕΡ|ΓΙΑΓΙ|ΝΤΑΝΤ|ΚΥΡ|ΘΕΙ|ΠΕΘΕΡ|ΜΟΥΣΑΜ|ΚΑΠΛΑΜ|ΠΑΡ|ΨΑΡ|ΤΖΟΥΡ|ΤΑΜΠΟΥΡ|ΓΑΛΑΤ|ΦΑΦΛΑΤ)$/.test(o[1])||(s+="ΑΔ")),null!==(o=/^(.+?)(ΕΔΕΣ|ΕΔΩΝ)$/.exec(s))&&(s=o[1],/(ΟΠ|ΙΠ|ΕΜΠ|ΥΠ|ΓΗΠ|ΔΑΠ|ΚΡΑΣΠ|ΜΙΛ)$/.test(o[1])&&(s+="ΕΔ")),null!==(o=/^(.+?)(ΟΥΔΕΣ|ΟΥΔΩΝ)$/.exec(s))&&(s=o[1],/(ΑΡΚ|ΚΑΛΙΑΚ|ΠΕΤΑΛ|ΛΙΧ|ΠΛΕΞ|ΣΚ|Σ|ΦΛ|ΦΡ|ΒΕΛ|ΛΟΥΛ|ΧΝ|ΣΠ|ΤΡΑΓ|ΦΕ)$/.test(o[1])&&(s+="ΟΥΔ")),null!==(o=/^(.+?)(ΕΩΣ|ΕΩΝ|ΕΑΣ|ΕΑ)$/.exec(s))&&(s=o[1],/^(Θ|Δ|ΕΛ|ΓΑΛ|Ν|Π|ΙΔ|ΠΑΡ|ΣΤΕΡ|ΟΡΦ|ΑΝΔΡ|ΑΝΤΡ)$/.test(o[1])&&(s+="Ε")),null!==(o=/^(.+?)(ΕΙΟ|ΕΙΟΣ|ΕΙΟΙ|ΕΙΑ|ΕΙΑΣ|ΕΙΕΣ|ΕΙΟΥ|ΕΙΟΥΣ|ΕΙΩΝ)$/.exec(s))&&o[1].length>4&&(s=o[1]),null!==(o=/^(.+?)(ΙΟΥΣ|ΙΑΣ|ΙΕΣ|ΙΟΣ|ΙΟΥ|ΙΟΙ|ΙΩΝ|ΙΟΝ|ΙΑ|ΙΟ)$/.exec(s))&&(s=o[1],(t(s)||s.length<2||/^(ΑΓ|ΑΓΓΕΛ|ΑΓΡ|ΑΕΡ|ΑΘΛ|ΑΚΟΥΣ|ΑΞ|ΑΣ|Β|ΒΙΒΛ|ΒΥΤ|Γ|ΓΙΑΓ|ΓΩΝ|Δ|ΔΑΝ|ΔΗΛ|ΔΗΜ|ΔΟΚΙΜ|ΕΛ|ΖΑΧΑΡ|ΗΛ|ΗΠ|ΙΔ|ΙΣΚ|ΙΣΤ|ΙΟΝ|ΙΩΝ|ΚΙΜΩΛ|ΚΟΛΟΝ|ΚΟΡ|ΚΤΗΡ|ΚΥΡ|ΛΑΓ|ΛΟΓ|ΜΑΓ|ΜΠΑΝ|ΜΠΡ|ΝΑΥΤ|ΝΟΤ|ΟΠΑΛ|ΟΞ|ΟΡ|ΟΣ|ΠΑΝΑΓ|ΠΑΤΡ|ΠΗΛ|ΠΗΝ|ΠΛΑΙΣ|ΠΟΝΤ|ΡΑΔ|ΡΟΔ|ΣΚ|ΣΚΟΡΠ|ΣΟΥΝ|ΣΠΑΝ|ΣΤΑΔ|ΣΥΡ|ΤΗΛ|ΤΙΜ|ΤΟΚ|ΤΟΠ|ΤΡΟΧ|ΦΙΛ|ΦΩΤ|Χ|ΧΙΛ|ΧΡΩΜ|ΧΩΡ)$/.test(o[1]))&&(s+="Ι"),/^(ΠΑΛ)$/.test(o[1])&&(s+="ΑΙ")),null!==(o=/^(.+?)(ΙΚΟΣ|ΙΚΟΝ|ΙΚΕΙΣ|ΙΚΟΙ|ΙΚΕΣ|ΙΚΟΥΣ|ΙΚΗ|ΙΚΗΣ|ΙΚΟ|ΙΚΑ|ΙΚΟΥ|ΙΚΩΝ|ΙΚΩΣ)$/.exec(s))&&(s=o[1],(t(s)||/^(ΑΔ|ΑΛ|ΑΜΑΝ|ΑΜΕΡ|ΑΜΜΟΧΑΛ|ΑΝΗΘ|ΑΝΤΙΔ|ΑΠΛ|ΑΤΤ|ΑΦΡ|ΒΑΣ|ΒΡΩΜ|ΓΕΝ|ΓΕΡ|Δ|ΔΙΚΑΝ|ΔΥΤ|ΕΙΔ|ΕΝΔ|ΕΞΩΔ|ΗΘ|ΘΕΤ|ΚΑΛΛΙΝ|ΚΑΛΠ|ΚΑΤΑΔ|ΚΟΥΖΙΝ|ΚΡ|ΚΩΔ|ΛΟΓ|Μ|ΜΕΡ|ΜΟΝΑΔ|ΜΟΥΛ|ΜΟΥΣ|ΜΠΑΓΙΑΤ|ΜΠΑΝ|ΜΠΟΛ|ΜΠΟΣ|ΜΥΣΤ|Ν|ΝΙΤ|ΞΙΚ|ΟΠΤ|ΠΑΝ|ΠΕΤΣ|ΠΙΚΑΝΤ|ΠΙΤΣ|ΠΛΑΣΤ|ΠΛΙΑΤΣ|ΠΟΝΤ|ΠΟΣΤΕΛΝ|ΠΡΩΤΟΔ|ΣΕΡΤ|ΣΗΜΑΝΤ|ΣΤΑΤ|ΣΥΝΑΔ|ΣΥΝΟΜΗΛ|ΤΕΛ|ΤΕΧΝ|ΤΡΟΠ|ΤΣΑΜ|ΥΠΟΔ|Φ|ΦΙΛΟΝ|ΦΥΛΟΔ|ΦΥΣ|ΧΑΣ)$/.test(o[1])||/(ΦΟΙΝ)$/.test(o[1]))&&(s+="ΙΚ")),"ΑΓΑΜΕ"===s&&(s="ΑΓΑΜ"),null!==(o=/^(.+?)(ΑΓΑΜΕ|ΗΣΑΜΕ|ΟΥΣΑΜΕ|ΗΚΑΜΕ|ΗΘΗΚΑΜΕ)$/.exec(s))&&(s=o[1]),null!==(o=/^(.+?)(ΑΜΕ)$/.exec(s))&&(s=o[1],/^(ΑΝΑΠ|ΑΠΟΘ|ΑΠΟΚ|ΑΠΟΣΤ|ΒΟΥΒ|ΞΕΘ|ΟΥΛ|ΠΕΘ|ΠΙΚΡ|ΠΟΤ|ΣΙΧ|Χ)$/.test(o[1])&&(s+="ΑΜ")),null!==(o=/^(.+?)(ΑΓΑΝΕ|ΗΣΑΝΕ|ΟΥΣΑΝΕ|ΙΟΝΤΑΝΕ|ΙΟΤΑΝΕ|ΙΟΥΝΤΑΝΕ|ΟΝΤΑΝΕ|ΟΤΑΝΕ|ΟΥΝΤΑΝΕ|ΗΚΑΝΕ|ΗΘΗΚΑΝΕ)$/.exec(s))&&(s=o[1],/^(ΤΡ|ΤΣ)$/.test(o[1])&&(s+="ΑΓΑΝ")),null!==(o=/^(.+?)(ΑΝΕ)$/.exec(s))&&(s=o[1],(r(s)||/^(ΒΕΤΕΡ|ΒΟΥΛΚ|ΒΡΑΧΜ|Γ|ΔΡΑΔΟΥΜ|Θ|ΚΑΛΠΟΥΖ|ΚΑΣΤΕΛ|ΚΟΡΜΟΡ|ΛΑΟΠΛ|ΜΩΑΜΕΘ|Μ|ΜΟΥΣΟΥΛΜΑΝ|ΟΥΛ|Π|ΠΕΛΕΚ|ΠΛ|ΠΟΛΙΣ|ΠΟΡΤΟΛ|ΣΑΡΑΚΑΤΣ|ΣΟΥΛΤ|ΤΣΑΡΛΑΤ|ΟΡΦ|ΤΣΙΓΓ|ΤΣΟΠ|ΦΩΤΟΣΤΕΦ|Χ|ΨΥΧΟΠΛ|ΑΓ|ΟΡΦ|ΓΑΛ|ΓΕΡ|ΔΕΚ|ΔΙΠΛ|ΑΜΕΡΙΚΑΝ|ΟΥΡ|ΠΙΘ|ΠΟΥΡΙΤ|Σ|ΖΩΝΤ|ΙΚ|ΚΑΣΤ|ΚΟΠ|ΛΙΧ|ΛΟΥΘΗΡ|ΜΑΙΝΤ|ΜΕΛ|ΣΙΓ|ΣΠ|ΣΤΕΓ|ΤΡΑΓ|ΤΣΑΓ|Φ|ΕΡ|ΑΔΑΠ|ΑΘΙΓΓ|ΑΜΗΧ|ΑΝΙΚ|ΑΝΟΡΓ|ΑΠΗΓ|ΑΠΙΘ|ΑΤΣΙΓΓ|ΒΑΣ|ΒΑΣΚ|ΒΑΘΥΓΑΛ|ΒΙΟΜΗΧ|ΒΡΑΧΥΚ|ΔΙΑΤ|ΔΙΑΦ|ΕΝΟΡΓ|ΘΥΣ|ΚΑΠΝΟΒΙΟΜΗΧ|ΚΑΤΑΓΑΛ|ΚΛΙΒ|ΚΟΙΛΑΡΦ|ΛΙΒ|ΜΕΓΛΟΒΙΟΜΗΧ|ΜΙΚΡΟΒΙΟΜΗΧ|ΝΤΑΒ|ΞΗΡΟΚΛΙΒ|ΟΛΙΓΟΔΑΜ|ΟΛΟΓΑΛ|ΠΕΝΤΑΡΦ|ΠΕΡΗΦ|ΠΕΡΙΤΡ|ΠΛΑΤ|ΠΟΛΥΔΑΠ|ΠΟΛΥΜΗΧ|ΣΤΕΦ|ΤΑΒ|ΤΕΤ|ΥΠΕΡΗΦ|ΥΠΟΚΟΠ|ΧΑΜΗΛΟΔΑΠ|ΨΗΛΟΤΑΒ)$/.test(o[1]))&&(s+="ΑΝ")),null!==(o=/^(.+?)(ΗΣΕΤΕ)$/.exec(s))&&(s=o[1]),null!==(o=/^(.+?)(ΕΤΕ)$/.exec(s))&&(s=o[1],(r(s)||/(ΟΔ|ΑΙΡ|ΦΟΡ|ΤΑΘ|ΔΙΑΘ|ΣΧ|ΕΝΔ|ΕΥΡ|ΤΙΘ|ΥΠΕΡΘ|ΡΑΘ|ΕΝΘ|ΡΟΘ|ΣΘ|ΠΥΡ|ΑΙΝ|ΣΥΝΔ|ΣΥΝ|ΣΥΝΘ|ΧΩΡ|ΠΟΝ|ΒΡ|ΚΑΘ|ΕΥΘ|ΕΚΘ|ΝΕΤ|ΡΟΝ|ΑΡΚ|ΒΑΡ|ΒΟΛ|ΩΦΕΛ)$/.test(o[1])||/^(ΑΒΑΡ|ΒΕΝ|ΕΝΑΡ|ΑΒΡ|ΑΔ|ΑΘ|ΑΝ|ΑΠΛ|ΒΑΡΟΝ|ΝΤΡ|ΣΚ|ΚΟΠ|ΜΠΟΡ|ΝΙΦ|ΠΑΓ|ΠΑΡΑΚΑΛ|ΣΕΡΠ|ΣΚΕΛ|ΣΥΡΦ|ΤΟΚ|Υ|Δ|ΕΜ|ΘΑΡΡ|Θ)$/.test(o[1]))&&(s+="ΕΤ")),null!==(o=/^(.+?)(ΟΝΤΑΣ|ΩΝΤΑΣ)$/.exec(s))&&(s=o[1],/^ΑΡΧ$/.test(o[1])&&(s+="ΟΝΤ"),/ΚΡΕ$/.test(o[1])&&(s+="ΩΝΤ")),null!==(o=/^(.+?)(ΟΜΑΣΤΕ|ΙΟΜΑΣΤΕ)$/.exec(s))&&(s=o[1],/^ΟΝ$/.test(o[1])&&(s+="ΟΜΑΣΤ")),null!==(o=/^(.+?)(ΙΕΣΤΕ)$/.exec(s))&&(s=o[1],/^(Π|ΑΠ|ΣΥΜΠ|ΑΣΥΜΠ|ΑΚΑΤΑΠ|ΑΜΕΤΑΜΦ)$/.test(o[1])&&(s+="ΙΕΣΤ")),null!==(o=/^(.+?)(ΕΣΤΕ)$/.exec(s))&&(s=o[1],/^(ΑΛ|ΑΡ|ΕΚΤΕΛ|Ζ|Μ|Ξ|ΠΑΡΑΚΑΛ|ΠΡΟ|ΝΙΣ)$/.test(o[1])&&(s+="ΕΣΤ")),null!==(o=/^(.+?)(ΗΘΗΚΑ|ΗΘΗΚΕΣ|ΗΘΗΚΕ)$/.exec(s))&&(s=o[1]),null!==(o=/^(.+?)(ΗΚΑ|ΗΚΕΣ|ΗΚΕ)$/.exec(s))&&(s=o[1],(/(ΣΚΩΛ|ΣΚΟΥΛ|ΝΑΡΘ|ΣΦ|ΟΘ|ΠΙΘ)$/.test(o[1])||/^(ΔΙΑΘ|Θ|ΠΑΡΑΚΑΤΑΘ|ΠΡΟΣΘ|ΣΥΝΘ)$/.test(o[1]))&&(s+="ΗΚ")),null!==(o=/^(.+?)(ΟΥΣΑ|ΟΥΣΕΣ|ΟΥΣΕ)$/.exec(s))&&(s=o[1],(t(s)||/^(ΦΑΡΜΑΚ|ΧΑΔ|ΑΓΚ|ΑΝΑΡΡ|ΒΡΟΜ|ΕΚΛΙΠ|ΛΑΜΠΙΔ|ΛΕΧ|Μ|ΠΑΤ|Ρ|Λ|ΜΕΔ|ΜΕΣΑΖ|ΥΠΟΤΕΙΝ|ΑΜ|ΑΙΘ|ΑΝΗΚ|ΔΕΣΠΟΖ|ΕΝΔΙΑΦΕΡ)$/.test(o[1])||/(ΠΟΔΑΡ|ΒΛΕΠ|ΠΑΝΤΑΧ|ΦΡΥΔ|ΜΑΝΤΙΛ|ΜΑΛΛ|ΚΥΜΑΤ|ΛΑΧ|ΛΗΓ|ΦΑΓ|ΟΜ|ΠΡΩΤ)$/.test(o[1]))&&(s+="ΟΥΣ")),null!==(o=/^(.+?)(ΑΓΑ|ΑΓΕΣ|ΑΓΕ)$/.exec(s))&&(s=o[1],(/^(ΑΒΑΣΤ|ΠΟΛΥΦ|ΑΔΗΦ|ΠΑΜΦ|Ρ|ΑΣΠ|ΑΦ|ΑΜΑΛ|ΑΜΑΛΛΙ|ΑΝΥΣΤ|ΑΠΕΡ|ΑΣΠΑΡ|ΑΧΑΡ|ΔΕΡΒΕΝ|ΔΡΟΣΟΠ|ΞΕΦ|ΝΕΟΠ|ΝΟΜΟΤ|ΟΛΟΠ|ΟΜΟΤ|ΠΡΟΣΤ|ΠΡΟΣΩΠΟΠ|ΣΥΜΠ|ΣΥΝΤ|Τ|ΥΠΟΤ|ΧΑΡ|ΑΕΙΠ|ΑΙΜΟΣΤ|ΑΝΥΠ|ΑΠΟΤ|ΑΡΤΙΠ|ΔΙΑΤ|ΕΝ|ΕΠΙΤ|ΚΡΟΚΑΛΟΠ|ΣΙΔΗΡΟΠ|Λ|ΝΑΥ|ΟΥΛΑΜ|ΟΥΡ|Π|ΤΡ|Μ)$/.test(o[1])||/(ΟΦ|ΠΕΛ|ΧΟΡΤ|ΛΛ|ΣΦ|ΡΠ|ΦΡ|ΠΡ|ΛΟΧ|ΣΜΗΝ)$/.test(o[1])&&!/^(ΨΟΦ|ΝΑΥΛΟΧ)$/.test(o[1])||/(ΚΟΛΛ)$/.test(o[1]))&&(s+="ΑΓ")),null!==(o=/^(.+?)(ΗΣΕ|ΗΣΟΥ|ΗΣΑ)$/.exec(s))&&(s=o[1],/^(Ν|ΧΕΡΣΟΝ|ΔΩΔΕΚΑΝ|ΕΡΗΜΟΝ|ΜΕΓΑΛΟΝ|ΕΠΤΑΝ|Ι)$/.test(o[1])&&(s+="ΗΣ")),null!==(o=/^(.+?)(ΗΣΤΕ)$/.exec(s))&&(s=o[1],/^(ΑΣΒ|ΣΒ|ΑΧΡ|ΧΡ|ΑΠΛ|ΑΕΙΜΝ|ΔΥΣΧΡ|ΕΥΧΡ|ΚΟΙΝΟΧΡ|ΠΑΛΙΜΨ)$/.test(o[1])&&(s+="ΗΣΤ")),null!==(o=/^(.+?)(ΟΥΝΕ|ΗΣΟΥΝΕ|ΗΘΟΥΝΕ)$/.exec(s))&&(s=o[1],/^(Ν|Ρ|ΣΠΙ|ΣΤΡΑΒΟΜΟΥΤΣ|ΚΑΚΟΜΟΥΤΣ|ΕΞΩΝ)$/.test(o[1])&&(s+="ΟΥΝ")),null!==(o=/^(.+?)(ΟΥΜΕ|ΗΣΟΥΜΕ|ΗΘΟΥΜΕ)$/.exec(s))&&(s=o[1],/^(ΠΑΡΑΣΟΥΣ|Φ|Χ|ΩΡΙΟΠΛ|ΑΖ|ΑΛΛΟΣΟΥΣ|ΑΣΟΥΣ)$/.test(o[1])&&(s+="ΟΥΜ")),null!=(o=/^(.+?)(ΜΑΤΟΙ|ΜΑΤΟΥΣ|ΜΑΤΟ|ΜΑΤΑ|ΜΑΤΩΣ|ΜΑΤΩΝ|ΜΑΤΟΣ|ΜΑΤΕΣ|ΜΑΤΗ|ΜΑΤΗΣ|ΜΑΤΟΥ)$/.exec(s))&&(s=o[1]+"Μ",/^(ΓΡΑΜ)$/.test(o[1])?s+="Α":/^(ΓΕ|ΣΤΑ)$/.test(o[1])&&(s+="ΑΤ")),null!==(o=/^(.+?)(ΟΥΑ)$/.exec(s))&&(s=o[1]+"ΟΥ"),n.length===s.length&&null!==(o=/^(.+?)(Α|ΑΓΑΤΕ|ΑΓΑΝ|ΑΕΙ|ΑΜΑΙ|ΑΝ|ΑΣ|ΑΣΑΙ|ΑΤΑΙ|ΑΩ|Ε|ΕΙ|ΕΙΣ|ΕΙΤΕ|ΕΣΑΙ|ΕΣ|ΕΤΑΙ|Ι|ΙΕΜΑΙ|ΙΕΜΑΣΤΕ|ΙΕΤΑΙ|ΙΕΣΑΙ|ΙΕΣΑΣΤΕ|ΙΟΜΑΣΤΑΝ|ΙΟΜΟΥΝ|ΙΟΜΟΥΝΑ|ΙΟΝΤΑΝ|ΙΟΝΤΟΥΣΑΝ|ΙΟΣΑΣΤΑΝ|ΙΟΣΑΣΤΕ|ΙΟΣΟΥΝ|ΙΟΣΟΥΝΑ|ΙΟΤΑΝ|ΙΟΥΜΑ|ΙΟΥΜΑΣΤΕ|ΙΟΥΝΤΑΙ|ΙΟΥΝΤΑΝ|Η|ΗΔΕΣ|ΗΔΩΝ|ΗΘΕΙ|ΗΘΕΙΣ|ΗΘΕΙΤΕ|ΗΘΗΚΑΤΕ|ΗΘΗΚΑΝ|ΗΘΟΥΝ|ΗΘΩ|ΗΚΑΤΕ|ΗΚΑΝ|ΗΣ|ΗΣΑΝ|ΗΣΑΤΕ|ΗΣΕΙ|ΗΣΕΣ|ΗΣΟΥΝ|ΗΣΩ|Ο|ΟΙ|ΟΜΑΙ|ΟΜΑΣΤΑΝ|ΟΜΟΥΝ|ΟΜΟΥΝΑ|ΟΝΤΑΙ|ΟΝΤΑΝ|ΟΝΤΟΥΣΑΝ|ΟΣ|ΟΣΑΣΤΑΝ|ΟΣΑΣΤΕ|ΟΣΟΥΝ|ΟΣΟΥΝΑ|ΟΤΑΝ|ΟΥ|ΟΥΜΑΙ|ΟΥΜΑΣΤΕ|ΟΥΝ|ΟΥΝΤΑΙ|ΟΥΝΤΑΝ|ΟΥΣ|ΟΥΣΑΝ|ΟΥΣΑΤΕ|Υ||ΥΑ|ΥΣ|Ω|ΩΝ|ΟΙΣ)$/.exec(s))&&(s=o[1]),null!=(o=/^(.+?)(ΕΣΤΕΡ|ΕΣΤΑΤ|ΟΤΕΡ|ΟΤΑΤ|ΥΤΕΡ|ΥΤΑΤ|ΩΤΕΡ|ΩΤΑΤ)$/.exec(s))&&(/^(ΕΞ|ΕΣ|ΑΝ|ΚΑΤ|Κ|ΠΡ)$/.test(o[1])||(s=o[1]),/^(ΚΑ|Μ|ΕΛΕ|ΛΕ|ΔΕ)$/.test(o[1])&&(s+="ΥΤ")),s}var l={"ΦΑΓΙΑ":"ΦΑ","ΦΑΓΙΟΥ":"ΦΑ","ΦΑΓΙΩΝ":"ΦΑ","ΣΚΑΓΙΑ":"ΣΚΑ","ΣΚΑΓΙΟΥ":"ΣΚΑ","ΣΚΑΓΙΩΝ":"ΣΚΑ","ΣΟΓΙΟΥ":"ΣΟ","ΣΟΓΙΑ":"ΣΟ","ΣΟΓΙΩΝ":"ΣΟ","ΤΑΤΟΓΙΑ":"ΤΑΤΟ","ΤΑΤΟΓΙΟΥ":"ΤΑΤΟ","ΤΑΤΟΓΙΩΝ":"ΤΑΤΟ","ΚΡΕΑΣ":"ΚΡΕ","ΚΡΕΑΤΟΣ":"ΚΡΕ","ΚΡΕΑΤΑ":"ΚΡΕ","ΚΡΕΑΤΩΝ":"ΚΡΕ","ΠΕΡΑΣ":"ΠΕΡ","ΠΕΡΑΤΟΣ":"ΠΕΡ","ΠΕΡΑΤΑ":"ΠΕΡ","ΠΕΡΑΤΩΝ":"ΠΕΡ","ΤΕΡΑΣ":"ΤΕΡ","ΤΕΡΑΤΟΣ":"ΤΕΡ","ΤΕΡΑΤΑ":"ΤΕΡ","ΤΕΡΑΤΩΝ":"ΤΕΡ","ΦΩΣ":"ΦΩ","ΦΩΤΟΣ":"ΦΩ","ΦΩΤΑ":"ΦΩ","ΦΩΤΩΝ":"ΦΩ","ΚΑΘΕΣΤΩΣ":"ΚΑΘΕΣΤ","ΚΑΘΕΣΤΩΤΟΣ":"ΚΑΘΕΣΤ","ΚΑΘΕΣΤΩΤΑ":"ΚΑΘΕΣΤ","ΚΑΘΕΣΤΩΤΩΝ":"ΚΑΘΕΣΤ","ΓΕΓΟΝΟΣ":"ΓΕΓΟΝ","ΓΕΓΟΝΟΤΟΣ":"ΓΕΓΟΝ","ΓΕΓΟΝΟΤΑ":"ΓΕΓΟΝ","ΓΕΓΟΝΟΤΩΝ":"ΓΕΓΟΝ","ΕΥΑ":"ΕΥ"},i=["ΑΚΡΙΒΩΣ","ΑΛΑ","ΑΛΛΑ","ΑΛΛΙΩΣ","ΑΛΛΟΤΕ","ΑΜΑ","ΑΝΩ","ΑΝΑ","ΑΝΑΜΕΣΑ","ΑΝΑΜΕΤΑΞΥ","ΑΝΕΥ","ΑΝΤΙ","ΑΝΤΙΠΕΡΑ","ΑΝΤΙΟ","ΑΞΑΦΝΑ","ΑΠΟ","ΑΠΟΨΕ","ΑΡΑ","ΑΡΑΓΕ","ΑΥΡΙΟ","ΑΦΟΙ","ΑΦΟΥ","ΑΦΟΤΟΥ","ΒΡΕ","ΓΕΙΑ","ΓΙΑ","ΓΙΑΤΙ","ΓΡΑΜΜΑ","ΔΕΗ","ΔΕΝ","ΔΗΛΑΔΗ","ΔΙΧΩΣ","ΔΥΟ","ΕΑΝ","ΕΓΩ","ΕΔΩ","ΕΔΑ","ΕΙΘΕ","ΕΙΜΑΙ","ΕΙΜΑΣΤΕ","ΕΙΣΑΙ","ΕΙΣΑΣΤΕ","ΕΙΝΑΙ","ΕΙΣΤΕ","ΕΙΤΕ","ΕΚΕΙ","ΕΚΟ","ΕΛΑ","ΕΜΑΣ","ΕΜΕΙΣ","ΕΝΤΕΛΩΣ","ΕΝΤΟΣ","ΕΝΤΩΜΕΤΑΞΥ","ΕΝΩ","ΕΞΙ","ΕΞΙΣΟΥ","ΕΞΗΣ","ΕΞΩ","ΕΟΚ","ΕΠΑΝΩ","ΕΠΕΙΔΗ","ΕΠΕΙΤΑ","ΕΠΙ","ΕΠΙΣΗΣ","ΕΠΟΜΕΝΩΣ","ΕΠΤΑ","ΕΣΑΣ","ΕΣΕΙΣ","ΕΣΤΩ","ΕΣΥ","ΕΣΩ","ΕΤΣΙ","ΕΥΓΕ","ΕΦΕ","ΕΦΕΞΗΣ","ΕΧΤΕΣ","ΕΩΣ","ΗΔΗ","ΗΜΙ","ΗΠΑ","ΗΤΟΙ","ΘΕΣ","ΙΔΙΩΣ","ΙΔΗ","ΙΚΑ","ΙΣΩΣ","ΚΑΘΕ","ΚΑΘΕΤΙ","ΚΑΘΟΛΟΥ","ΚΑΘΩΣ","ΚΑΙ","ΚΑΝ","ΚΑΠΟΤΕ","ΚΑΠΟΥ","ΚΑΤΑ","ΚΑΤΙ","ΚΑΤΟΠΙΝ","ΚΑΤΩ","ΚΕΙ","ΚΙΧ","ΚΚΕ","ΚΟΛΑΝ","ΚΥΡΙΩΣ","ΚΩΣ","ΜΑΚΑΡΙ","ΜΑΛΙΣΤΑ","ΜΑΛΛΟΝ","ΜΑΙ","ΜΑΟ","ΜΑΟΥΣ","ΜΑΣ","ΜΕΘΑΥΡΙΟ","ΜΕΣ","ΜΕΣΑ","ΜΕΤΑ","ΜΕΤΑΞΥ","ΜΕΧΡΙ","ΜΗΔΕ","ΜΗΝ","ΜΗΠΩΣ","ΜΗΤΕ","ΜΙΑ","ΜΙΑΣ","ΜΙΣ","ΜΜΕ","ΜΟΛΟΝΟΤΙ","ΜΟΥ","ΜΠΑ","ΜΠΑΣ","ΜΠΟΥΦΑΝ","ΜΠΡΟΣ","ΝΑΙ","ΝΕΣ","ΝΤΑ","ΝΤΕ","ΞΑΝΑ","ΟΗΕ","ΟΚΤΩ","ΟΜΩΣ","ΟΝΕ","ΟΠΑ","ΟΠΟΥ","ΟΠΩΣ","ΟΣΟ","ΟΤΑΝ","ΟΤΕ","ΟΤΙ","ΟΥΤΕ","ΟΧΙ","ΠΑΛΙ","ΠΑΝ","ΠΑΝΟ","ΠΑΝΤΟΤΕ","ΠΑΝΤΟΥ","ΠΑΝΤΩΣ","ΠΑΝΩ","ΠΑΡΑ","ΠΕΡΑ","ΠΕΡΙ","ΠΕΡΙΠΟΥ","ΠΙΑ","ΠΙΟ","ΠΙΣΩ","ΠΛΑΙ","ΠΛΕΟΝ","ΠΛΗΝ","ΠΟΤΕ","ΠΟΥ","ΠΡΟ","ΠΡΟΣ","ΠΡΟΧΤΕΣ","ΠΡΟΧΘΕΣ","ΡΟΔΙ","ΠΩΣ","ΣΑΙ","ΣΑΣ","ΣΑΝ","ΣΕΙΣ","ΣΙΑ","ΣΚΙ","ΣΟΙ","ΣΟΥ","ΣΡΙ","ΣΥΝ","ΣΥΝΑΜΑ","ΣΧΕΔΟΝ","ΤΑΔΕ","ΤΑΞΙ","ΤΑΧΑ","ΤΕΙ","ΤΗΝ","ΤΗΣ","ΤΙΠΟΤΑ","ΤΙΠΟΤΕ","ΤΙΣ","ΤΟΝ","ΤΟΤΕ","ΤΟΥ","ΤΟΥΣ","ΤΣΑ","ΤΣΕ","ΤΣΙ","ΤΣΟΥ","ΤΩΝ","ΥΠΟ","ΥΠΟΨΗ","ΥΠΟΨΙΝ","ΥΣΤΕΡΑ","ΦΕΤΟΣ","ΦΙΣ","ΦΠΑ","ΧΑΦ","ΧΘΕΣ","ΧΤΕΣ","ΧΩΡΙΣ","ΩΣ","ΩΣΑΝ","ΩΣΟΤΟΥ","ΩΣΠΟΥ","ΩΣΤΕ","ΩΣΤΟΣΟ"],s=new RegExp("^[ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ]+$");return function(e){return"function"==typeof e.update?e.update(function(e){return n(e.toUpperCase()).toLowerCase()}):n(e.toUpperCase()).toLowerCase()}}(),e.Pipeline.registerFunction(e.el.stemmer,"stemmer-el"),e.el.stopWordFilter=e.generateStopWordFilter("αλλα αν αντι απο αυτα αυτεσ αυτη αυτο αυτοι αυτοσ αυτουσ αυτων για δε δεν εαν ειμαι ειμαστε ειναι εισαι ειστε εκεινα εκεινεσ εκεινη εκεινο εκεινοι εκεινοσ εκεινουσ εκεινων ενω επι η θα ισωσ κ και κατα κι μα με μετα μη μην να ο οι ομωσ οπωσ οσο οτι παρα ποια ποιεσ ποιο ποιοι ποιοσ ποιουσ ποιων που προσ πωσ σε στη στην στο στον τα την τησ το τον τοτε του των ωσ".split(" ")),e.Pipeline.registerFunction(e.el.stopWordFilter,"stopWordFilter-el"),e.el.normilizer=function(){var e={"Ά":"Α","ά":"α","Έ":"Ε","έ":"ε","Ή":"Η","ή":"η","Ί":"Ι","ί":"ι","Ό":"Ο","ο":"ο","Ύ":"Υ","ύ":"υ","Ώ":"Ω","ώ":"ω","Ϊ":"Ι","ϊ":"ι","Ϋ":"Υ","ϋ":"υ","ΐ":"ι","ΰ":"υ"};return function(t){if("function"==typeof t.update)return t.update(function(t){for(var r="",n=0;n=A.limit)return!0;A.cursor++}return!1}return!0}function n(){if(A.in_grouping(x,97,252)){var s=A.cursor;if(e()){if(A.cursor=s,!A.in_grouping(x,97,252))return!0;for(;!A.out_grouping(x,97,252);){if(A.cursor>=A.limit)return!0;A.cursor++}}return!1}return!0}function i(){var s,r=A.cursor;if(n()){if(A.cursor=r,!A.out_grouping(x,97,252))return;if(s=A.cursor,e()){if(A.cursor=s,!A.in_grouping(x,97,252)||A.cursor>=A.limit)return;A.cursor++}}g=A.cursor}function a(){for(;!A.in_grouping(x,97,252);){if(A.cursor>=A.limit)return!1;A.cursor++}for(;!A.out_grouping(x,97,252);){if(A.cursor>=A.limit)return!1;A.cursor++}return!0}function t(){var e=A.cursor;g=A.limit,p=g,v=g,i(),A.cursor=e,a()&&(p=A.cursor,a()&&(v=A.cursor))}function o(){for(var e;;){if(A.bra=A.cursor,e=A.find_among(k,6))switch(A.ket=A.cursor,e){case 1:A.slice_from("a");continue;case 2:A.slice_from("e");continue;case 3:A.slice_from("i");continue;case 4:A.slice_from("o");continue;case 5:A.slice_from("u");continue;case 6:if(A.cursor>=A.limit)break;A.cursor++;continue}break}}function u(){return g<=A.cursor}function w(){return p<=A.cursor}function c(){return v<=A.cursor}function m(){var e;if(A.ket=A.cursor,A.find_among_b(y,13)&&(A.bra=A.cursor,(e=A.find_among_b(q,11))&&u()))switch(e){case 1:A.bra=A.cursor,A.slice_from("iendo");break;case 2:A.bra=A.cursor,A.slice_from("ando");break;case 3:A.bra=A.cursor,A.slice_from("ar");break;case 4:A.bra=A.cursor,A.slice_from("er");break;case 5:A.bra=A.cursor,A.slice_from("ir");break;case 6:A.slice_del();break;case 7:A.eq_s_b(1,"u")&&A.slice_del()}}function l(e,s){if(!c())return!0;A.slice_del(),A.ket=A.cursor;var r=A.find_among_b(e,s);return r&&(A.bra=A.cursor,1==r&&c()&&A.slice_del()),!1}function d(e){return!c()||(A.slice_del(),A.ket=A.cursor,A.eq_s_b(2,e)&&(A.bra=A.cursor,c()&&A.slice_del()),!1)}function b(){var e;if(A.ket=A.cursor,e=A.find_among_b(S,46)){switch(A.bra=A.cursor,e){case 1:if(!c())return!1;A.slice_del();break;case 2:if(d("ic"))return!1;break;case 3:if(!c())return!1;A.slice_from("log");break;case 4:if(!c())return!1;A.slice_from("u");break;case 5:if(!c())return!1;A.slice_from("ente");break;case 6:if(!w())return!1;A.slice_del(),A.ket=A.cursor,e=A.find_among_b(C,4),e&&(A.bra=A.cursor,c()&&(A.slice_del(),1==e&&(A.ket=A.cursor,A.eq_s_b(2,"at")&&(A.bra=A.cursor,c()&&A.slice_del()))));break;case 7:if(l(P,3))return!1;break;case 8:if(l(F,3))return!1;break;case 9:if(d("at"))return!1}return!0}return!1}function f(){var e,s;if(A.cursor>=g&&(s=A.limit_backward,A.limit_backward=g,A.ket=A.cursor,e=A.find_among_b(W,12),A.limit_backward=s,e)){if(A.bra=A.cursor,1==e){if(!A.eq_s_b(1,"u"))return!1;A.slice_del()}return!0}return!1}function _(){var e,s,r,n;if(A.cursor>=g&&(s=A.limit_backward,A.limit_backward=g,A.ket=A.cursor,e=A.find_among_b(L,96),A.limit_backward=s,e))switch(A.bra=A.cursor,e){case 1:r=A.limit-A.cursor,A.eq_s_b(1,"u")?(n=A.limit-A.cursor,A.eq_s_b(1,"g")?A.cursor=A.limit-n:A.cursor=A.limit-r):A.cursor=A.limit-r,A.bra=A.cursor;case 2:A.slice_del()}}function h(){var e,s;if(A.ket=A.cursor,e=A.find_among_b(z,8))switch(A.bra=A.cursor,e){case 1:u()&&A.slice_del();break;case 2:u()&&(A.slice_del(),A.ket=A.cursor,A.eq_s_b(1,"u")&&(A.bra=A.cursor,s=A.limit-A.cursor,A.eq_s_b(1,"g")&&(A.cursor=A.limit-s,u()&&A.slice_del())))}}var v,p,g,k=[new s("",-1,6),new s("á",0,1),new s("é",0,2),new s("í",0,3),new s("ó",0,4),new s("ú",0,5)],y=[new s("la",-1,-1),new s("sela",0,-1),new s("le",-1,-1),new s("me",-1,-1),new s("se",-1,-1),new s("lo",-1,-1),new s("selo",5,-1),new s("las",-1,-1),new s("selas",7,-1),new s("les",-1,-1),new s("los",-1,-1),new s("selos",10,-1),new s("nos",-1,-1)],q=[new s("ando",-1,6),new s("iendo",-1,6),new s("yendo",-1,7),new s("ándo",-1,2),new s("iéndo",-1,1),new s("ar",-1,6),new s("er",-1,6),new s("ir",-1,6),new s("ár",-1,3),new s("ér",-1,4),new s("ír",-1,5)],C=[new s("ic",-1,-1),new s("ad",-1,-1),new s("os",-1,-1),new s("iv",-1,1)],P=[new s("able",-1,1),new s("ible",-1,1),new s("ante",-1,1)],F=[new s("ic",-1,1),new s("abil",-1,1),new s("iv",-1,1)],S=[new s("ica",-1,1),new s("ancia",-1,2),new s("encia",-1,5),new s("adora",-1,2),new s("osa",-1,1),new s("ista",-1,1),new s("iva",-1,9),new s("anza",-1,1),new s("logía",-1,3),new s("idad",-1,8),new s("able",-1,1),new s("ible",-1,1),new s("ante",-1,2),new s("mente",-1,7),new s("amente",13,6),new s("ación",-1,2),new s("ución",-1,4),new s("ico",-1,1),new s("ismo",-1,1),new s("oso",-1,1),new s("amiento",-1,1),new s("imiento",-1,1),new s("ivo",-1,9),new s("ador",-1,2),new s("icas",-1,1),new s("ancias",-1,2),new s("encias",-1,5),new s("adoras",-1,2),new s("osas",-1,1),new s("istas",-1,1),new s("ivas",-1,9),new s("anzas",-1,1),new s("logías",-1,3),new s("idades",-1,8),new s("ables",-1,1),new s("ibles",-1,1),new s("aciones",-1,2),new s("uciones",-1,4),new s("adores",-1,2),new s("antes",-1,2),new s("icos",-1,1),new s("ismos",-1,1),new s("osos",-1,1),new s("amientos",-1,1),new s("imientos",-1,1),new s("ivos",-1,9)],W=[new s("ya",-1,1),new s("ye",-1,1),new s("yan",-1,1),new s("yen",-1,1),new s("yeron",-1,1),new s("yendo",-1,1),new s("yo",-1,1),new s("yas",-1,1),new s("yes",-1,1),new s("yais",-1,1),new s("yamos",-1,1),new s("yó",-1,1)],L=[new s("aba",-1,2),new s("ada",-1,2),new s("ida",-1,2),new s("ara",-1,2),new s("iera",-1,2),new s("ía",-1,2),new s("aría",5,2),new s("ería",5,2),new s("iría",5,2),new s("ad",-1,2),new s("ed",-1,2),new s("id",-1,2),new s("ase",-1,2),new s("iese",-1,2),new s("aste",-1,2),new s("iste",-1,2),new s("an",-1,2),new s("aban",16,2),new s("aran",16,2),new s("ieran",16,2),new s("ían",16,2),new s("arían",20,2),new s("erían",20,2),new s("irían",20,2),new s("en",-1,1),new s("asen",24,2),new s("iesen",24,2),new s("aron",-1,2),new s("ieron",-1,2),new s("arán",-1,2),new s("erán",-1,2),new s("irán",-1,2),new s("ado",-1,2),new s("ido",-1,2),new s("ando",-1,2),new s("iendo",-1,2),new s("ar",-1,2),new s("er",-1,2),new s("ir",-1,2),new s("as",-1,2),new s("abas",39,2),new s("adas",39,2),new s("idas",39,2),new s("aras",39,2),new s("ieras",39,2),new s("ías",39,2),new s("arías",45,2),new s("erías",45,2),new s("irías",45,2),new s("es",-1,1),new s("ases",49,2),new s("ieses",49,2),new s("abais",-1,2),new s("arais",-1,2),new s("ierais",-1,2),new s("íais",-1,2),new s("aríais",55,2),new s("eríais",55,2),new s("iríais",55,2),new s("aseis",-1,2),new s("ieseis",-1,2),new s("asteis",-1,2),new s("isteis",-1,2),new s("áis",-1,2),new s("éis",-1,1),new s("aréis",64,2),new s("eréis",64,2),new s("iréis",64,2),new s("ados",-1,2),new s("idos",-1,2),new s("amos",-1,2),new s("ábamos",70,2),new s("áramos",70,2),new s("iéramos",70,2),new s("íamos",70,2),new s("aríamos",74,2),new s("eríamos",74,2),new s("iríamos",74,2),new s("emos",-1,1),new s("aremos",78,2),new s("eremos",78,2),new s("iremos",78,2),new s("ásemos",78,2),new s("iésemos",78,2),new s("imos",-1,2),new s("arás",-1,2),new s("erás",-1,2),new s("irás",-1,2),new s("ís",-1,2),new s("ará",-1,2),new s("erá",-1,2),new s("irá",-1,2),new s("aré",-1,2),new s("eré",-1,2),new s("iré",-1,2),new s("ió",-1,2)],z=[new s("a",-1,1),new s("e",-1,2),new s("o",-1,1),new s("os",-1,1),new s("á",-1,1),new s("é",-1,2),new s("í",-1,1),new s("ó",-1,1)],x=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,4,10],A=new r;this.setCurrent=function(e){A.setCurrent(e)},this.getCurrent=function(){return A.getCurrent()},this.stem=function(){var e=A.cursor;return t(),A.limit_backward=e,A.cursor=A.limit,m(),A.cursor=A.limit,b()||(A.cursor=A.limit,f()||(A.cursor=A.limit,_())),A.cursor=A.limit,h(),A.cursor=A.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.es.stemmer,"stemmer-es"),e.es.stopWordFilter=e.generateStopWordFilter("a al algo algunas algunos ante antes como con contra cual cuando de del desde donde durante e el ella ellas ellos en entre era erais eran eras eres es esa esas ese eso esos esta estaba estabais estaban estabas estad estada estadas estado estados estamos estando estar estaremos estará estarán estarás estaré estaréis estaría estaríais estaríamos estarían estarías estas este estemos esto estos estoy estuve estuviera estuvierais estuvieran estuvieras estuvieron estuviese estuvieseis estuviesen estuvieses estuvimos estuviste estuvisteis estuviéramos estuviésemos estuvo está estábamos estáis están estás esté estéis estén estés fue fuera fuerais fueran fueras fueron fuese fueseis fuesen fueses fui fuimos fuiste fuisteis fuéramos fuésemos ha habida habidas habido habidos habiendo habremos habrá habrán habrás habré habréis habría habríais habríamos habrían habrías habéis había habíais habíamos habían habías han has hasta hay haya hayamos hayan hayas hayáis he hemos hube hubiera hubierais hubieran hubieras hubieron hubiese hubieseis hubiesen hubieses hubimos hubiste hubisteis hubiéramos hubiésemos hubo la las le les lo los me mi mis mucho muchos muy más mí mía mías mío míos nada ni no nos nosotras nosotros nuestra nuestras nuestro nuestros o os otra otras otro otros para pero poco por porque que quien quienes qué se sea seamos sean seas seremos será serán serás seré seréis sería seríais seríamos serían serías seáis sido siendo sin sobre sois somos son soy su sus suya suyas suyo suyos sí también tanto te tendremos tendrá tendrán tendrás tendré tendréis tendría tendríais tendríamos tendrían tendrías tened tenemos tenga tengamos tengan tengas tengo tengáis tenida tenidas tenido tenidos teniendo tenéis tenía teníais teníamos tenían tenías ti tiene tienen tienes todo todos tu tus tuve tuviera tuvierais tuvieran tuvieras tuvieron tuviese tuvieseis tuviesen tuvieses tuvimos tuviste tuvisteis tuviéramos tuviésemos tuvo tuya tuyas tuyo tuyos tú un una uno unos vosotras vosotros vuestra vuestras vuestro vuestros y ya yo él éramos".split(" ")),e.Pipeline.registerFunction(e.es.stopWordFilter,"stopWordFilter-es")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.fi.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.fi.min.js new file mode 100644 index 0000000000..29f5dfcea8 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.fi.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Finnish` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(i,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(i.lunr)}(this,function(){return function(i){if(void 0===i)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===i.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");i.fi=function(){this.pipeline.reset(),this.pipeline.add(i.fi.trimmer,i.fi.stopWordFilter,i.fi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(i.fi.stemmer))},i.fi.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",i.fi.trimmer=i.trimmerSupport.generateTrimmer(i.fi.wordCharacters),i.Pipeline.registerFunction(i.fi.trimmer,"trimmer-fi"),i.fi.stemmer=function(){var e=i.stemmerSupport.Among,r=i.stemmerSupport.SnowballProgram,n=new function(){function i(){f=A.limit,d=f,n()||(f=A.cursor,n()||(d=A.cursor))}function n(){for(var i;;){if(i=A.cursor,A.in_grouping(W,97,246))break;if(A.cursor=i,i>=A.limit)return!0;A.cursor++}for(A.cursor=i;!A.out_grouping(W,97,246);){if(A.cursor>=A.limit)return!0;A.cursor++}return!1}function t(){return d<=A.cursor}function s(){var i,e;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(h,10)){switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:if(!A.in_grouping_b(x,97,246))return;break;case 2:if(!t())return}A.slice_del()}else A.limit_backward=e}function o(){var i,e,r;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(v,9))switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:r=A.limit-A.cursor,A.eq_s_b(1,"k")||(A.cursor=A.limit-r,A.slice_del());break;case 2:A.slice_del(),A.ket=A.cursor,A.eq_s_b(3,"kse")&&(A.bra=A.cursor,A.slice_from("ksi"));break;case 3:A.slice_del();break;case 4:A.find_among_b(p,6)&&A.slice_del();break;case 5:A.find_among_b(g,6)&&A.slice_del();break;case 6:A.find_among_b(j,2)&&A.slice_del()}else A.limit_backward=e}function l(){return A.find_among_b(q,7)}function a(){return A.eq_s_b(1,"i")&&A.in_grouping_b(L,97,246)}function u(){var i,e,r;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(C,30)){switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:if(!A.eq_s_b(1,"a"))return;break;case 2:case 9:if(!A.eq_s_b(1,"e"))return;break;case 3:if(!A.eq_s_b(1,"i"))return;break;case 4:if(!A.eq_s_b(1,"o"))return;break;case 5:if(!A.eq_s_b(1,"ä"))return;break;case 6:if(!A.eq_s_b(1,"ö"))return;break;case 7:if(r=A.limit-A.cursor,!l()&&(A.cursor=A.limit-r,!A.eq_s_b(2,"ie"))){A.cursor=A.limit-r;break}if(A.cursor=A.limit-r,A.cursor<=A.limit_backward){A.cursor=A.limit-r;break}A.cursor--,A.bra=A.cursor;break;case 8:if(!A.in_grouping_b(W,97,246)||!A.out_grouping_b(W,97,246))return}A.slice_del(),k=!0}else A.limit_backward=e}function c(){var i,e,r;if(A.cursor>=d)if(e=A.limit_backward,A.limit_backward=d,A.ket=A.cursor,i=A.find_among_b(P,14)){if(A.bra=A.cursor,A.limit_backward=e,1==i){if(r=A.limit-A.cursor,A.eq_s_b(2,"po"))return;A.cursor=A.limit-r}A.slice_del()}else A.limit_backward=e}function m(){var i;A.cursor>=f&&(i=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,A.find_among_b(F,2)?(A.bra=A.cursor,A.limit_backward=i,A.slice_del()):A.limit_backward=i)}function w(){var i,e,r,n,t,s;if(A.cursor>=f){if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,A.eq_s_b(1,"t")&&(A.bra=A.cursor,r=A.limit-A.cursor,A.in_grouping_b(W,97,246)&&(A.cursor=A.limit-r,A.slice_del(),A.limit_backward=e,n=A.limit-A.cursor,A.cursor>=d&&(A.cursor=d,t=A.limit_backward,A.limit_backward=A.cursor,A.cursor=A.limit-n,A.ket=A.cursor,i=A.find_among_b(S,2))))){if(A.bra=A.cursor,A.limit_backward=t,1==i){if(s=A.limit-A.cursor,A.eq_s_b(2,"po"))return;A.cursor=A.limit-s}return void A.slice_del()}A.limit_backward=e}}function _(){var i,e,r,n;if(A.cursor>=f){for(i=A.limit_backward,A.limit_backward=f,e=A.limit-A.cursor,l()&&(A.cursor=A.limit-e,A.ket=A.cursor,A.cursor>A.limit_backward&&(A.cursor--,A.bra=A.cursor,A.slice_del())),A.cursor=A.limit-e,A.ket=A.cursor,A.in_grouping_b(y,97,228)&&(A.bra=A.cursor,A.out_grouping_b(W,97,246)&&A.slice_del()),A.cursor=A.limit-e,A.ket=A.cursor,A.eq_s_b(1,"j")&&(A.bra=A.cursor,r=A.limit-A.cursor,A.eq_s_b(1,"o")?A.slice_del():(A.cursor=A.limit-r,A.eq_s_b(1,"u")&&A.slice_del())),A.cursor=A.limit-e,A.ket=A.cursor,A.eq_s_b(1,"o")&&(A.bra=A.cursor,A.eq_s_b(1,"j")&&A.slice_del()),A.cursor=A.limit-e,A.limit_backward=i;;){if(n=A.limit-A.cursor,A.out_grouping_b(W,97,246)){A.cursor=A.limit-n;break}if(A.cursor=A.limit-n,A.cursor<=A.limit_backward)return;A.cursor--}A.ket=A.cursor,A.cursor>A.limit_backward&&(A.cursor--,A.bra=A.cursor,b=A.slice_to(),A.eq_v_b(b)&&A.slice_del())}}var k,b,d,f,h=[new e("pa",-1,1),new e("sti",-1,2),new e("kaan",-1,1),new e("han",-1,1),new e("kin",-1,1),new e("hän",-1,1),new e("kään",-1,1),new e("ko",-1,1),new e("pä",-1,1),new e("kö",-1,1)],p=[new e("lla",-1,-1),new e("na",-1,-1),new e("ssa",-1,-1),new e("ta",-1,-1),new e("lta",3,-1),new e("sta",3,-1)],g=[new e("llä",-1,-1),new e("nä",-1,-1),new e("ssä",-1,-1),new e("tä",-1,-1),new e("ltä",3,-1),new e("stä",3,-1)],j=[new e("lle",-1,-1),new e("ine",-1,-1)],v=[new e("nsa",-1,3),new e("mme",-1,3),new e("nne",-1,3),new e("ni",-1,2),new e("si",-1,1),new e("an",-1,4),new e("en",-1,6),new e("än",-1,5),new e("nsä",-1,3)],q=[new e("aa",-1,-1),new e("ee",-1,-1),new e("ii",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1),new e("ää",-1,-1),new e("öö",-1,-1)],C=[new e("a",-1,8),new e("lla",0,-1),new e("na",0,-1),new e("ssa",0,-1),new e("ta",0,-1),new e("lta",4,-1),new e("sta",4,-1),new e("tta",4,9),new e("lle",-1,-1),new e("ine",-1,-1),new e("ksi",-1,-1),new e("n",-1,7),new e("han",11,1),new e("den",11,-1,a),new e("seen",11,-1,l),new e("hen",11,2),new e("tten",11,-1,a),new e("hin",11,3),new e("siin",11,-1,a),new e("hon",11,4),new e("hän",11,5),new e("hön",11,6),new e("ä",-1,8),new e("llä",22,-1),new e("nä",22,-1),new e("ssä",22,-1),new e("tä",22,-1),new e("ltä",26,-1),new e("stä",26,-1),new e("ttä",26,9)],P=[new e("eja",-1,-1),new e("mma",-1,1),new e("imma",1,-1),new e("mpa",-1,1),new e("impa",3,-1),new e("mmi",-1,1),new e("immi",5,-1),new e("mpi",-1,1),new e("impi",7,-1),new e("ejä",-1,-1),new e("mmä",-1,1),new e("immä",10,-1),new e("mpä",-1,1),new e("impä",12,-1)],F=[new e("i",-1,-1),new e("j",-1,-1)],S=[new e("mma",-1,1),new e("imma",0,-1)],y=[17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8],W=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],L=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],x=[17,97,24,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],A=new r;this.setCurrent=function(i){A.setCurrent(i)},this.getCurrent=function(){return A.getCurrent()},this.stem=function(){var e=A.cursor;return i(),k=!1,A.limit_backward=e,A.cursor=A.limit,s(),A.cursor=A.limit,o(),A.cursor=A.limit,u(),A.cursor=A.limit,c(),A.cursor=A.limit,k?(m(),A.cursor=A.limit):(A.cursor=A.limit,w(),A.cursor=A.limit),_(),!0}};return function(i){return"function"==typeof i.update?i.update(function(i){return n.setCurrent(i),n.stem(),n.getCurrent()}):(n.setCurrent(i),n.stem(),n.getCurrent())}}(),i.Pipeline.registerFunction(i.fi.stemmer,"stemmer-fi"),i.fi.stopWordFilter=i.generateStopWordFilter("ei eivät emme en et ette että he heidän heidät heihin heille heillä heiltä heissä heistä heitä hän häneen hänelle hänellä häneltä hänen hänessä hänestä hänet häntä itse ja johon joiden joihin joiksi joilla joille joilta joina joissa joista joita joka joksi jolla jolle jolta jona jonka jos jossa josta jota jotka kanssa keiden keihin keiksi keille keillä keiltä keinä keissä keistä keitä keneen keneksi kenelle kenellä keneltä kenen kenenä kenessä kenestä kenet ketkä ketkä ketä koska kuin kuka kun me meidän meidät meihin meille meillä meiltä meissä meistä meitä mihin miksi mikä mille millä miltä minkä minkä minua minulla minulle minulta minun minussa minusta minut minuun minä minä missä mistä mitkä mitä mukaan mutta ne niiden niihin niiksi niille niillä niiltä niin niin niinä niissä niistä niitä noiden noihin noiksi noilla noille noilta noin noina noissa noista noita nuo nyt näiden näihin näiksi näille näillä näiltä näinä näissä näistä näitä nämä ole olemme olen olet olette oli olimme olin olisi olisimme olisin olisit olisitte olisivat olit olitte olivat olla olleet ollut on ovat poikki se sekä sen siihen siinä siitä siksi sille sillä sillä siltä sinua sinulla sinulle sinulta sinun sinussa sinusta sinut sinuun sinä sinä sitä tai te teidän teidät teihin teille teillä teiltä teissä teistä teitä tuo tuohon tuoksi tuolla tuolle tuolta tuon tuona tuossa tuosta tuota tähän täksi tälle tällä tältä tämä tämän tänä tässä tästä tätä vaan vai vaikka yli".split(" ")),i.Pipeline.registerFunction(i.fi.stopWordFilter,"stopWordFilter-fi")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.fr.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.fr.min.js new file mode 100644 index 0000000000..68cd0094ae --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.fr.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `French` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.fr=function(){this.pipeline.reset(),this.pipeline.add(e.fr.trimmer,e.fr.stopWordFilter,e.fr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.fr.stemmer))},e.fr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.fr.trimmer=e.trimmerSupport.generateTrimmer(e.fr.wordCharacters),e.Pipeline.registerFunction(e.fr.trimmer,"trimmer-fr"),e.fr.stemmer=function(){var r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,s){return!(!W.eq_s(1,e)||(W.ket=W.cursor,!W.in_grouping(F,97,251)))&&(W.slice_from(r),W.cursor=s,!0)}function i(e,r,s){return!!W.eq_s(1,e)&&(W.ket=W.cursor,W.slice_from(r),W.cursor=s,!0)}function n(){for(var r,s;;){if(r=W.cursor,W.in_grouping(F,97,251)){if(W.bra=W.cursor,s=W.cursor,e("u","U",r))continue;if(W.cursor=s,e("i","I",r))continue;if(W.cursor=s,i("y","Y",r))continue}if(W.cursor=r,W.bra=r,!e("y","Y",r)){if(W.cursor=r,W.eq_s(1,"q")&&(W.bra=W.cursor,i("u","U",r)))continue;if(W.cursor=r,r>=W.limit)return;W.cursor++}}}function t(){for(;!W.in_grouping(F,97,251);){if(W.cursor>=W.limit)return!0;W.cursor++}for(;!W.out_grouping(F,97,251);){if(W.cursor>=W.limit)return!0;W.cursor++}return!1}function u(){var e=W.cursor;if(q=W.limit,g=q,p=q,W.in_grouping(F,97,251)&&W.in_grouping(F,97,251)&&W.cursor=W.limit){W.cursor=q;break}W.cursor++}while(!W.in_grouping(F,97,251))}q=W.cursor,W.cursor=e,t()||(g=W.cursor,t()||(p=W.cursor))}function o(){for(var e,r;;){if(r=W.cursor,W.bra=r,!(e=W.find_among(h,4)))break;switch(W.ket=W.cursor,e){case 1:W.slice_from("i");break;case 2:W.slice_from("u");break;case 3:W.slice_from("y");break;case 4:if(W.cursor>=W.limit)return;W.cursor++}}}function c(){return q<=W.cursor}function a(){return g<=W.cursor}function l(){return p<=W.cursor}function w(){var e,r;if(W.ket=W.cursor,e=W.find_among_b(C,43)){switch(W.bra=W.cursor,e){case 1:if(!l())return!1;W.slice_del();break;case 2:if(!l())return!1;W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"ic")&&(W.bra=W.cursor,l()?W.slice_del():W.slice_from("iqU"));break;case 3:if(!l())return!1;W.slice_from("log");break;case 4:if(!l())return!1;W.slice_from("u");break;case 5:if(!l())return!1;W.slice_from("ent");break;case 6:if(!c())return!1;if(W.slice_del(),W.ket=W.cursor,e=W.find_among_b(z,6))switch(W.bra=W.cursor,e){case 1:l()&&(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"at")&&(W.bra=W.cursor,l()&&W.slice_del()));break;case 2:l()?W.slice_del():a()&&W.slice_from("eux");break;case 3:l()&&W.slice_del();break;case 4:c()&&W.slice_from("i")}break;case 7:if(!l())return!1;if(W.slice_del(),W.ket=W.cursor,e=W.find_among_b(y,3))switch(W.bra=W.cursor,e){case 1:l()?W.slice_del():W.slice_from("abl");break;case 2:l()?W.slice_del():W.slice_from("iqU");break;case 3:l()&&W.slice_del()}break;case 8:if(!l())return!1;if(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"at")&&(W.bra=W.cursor,l()&&(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"ic")))){W.bra=W.cursor,l()?W.slice_del():W.slice_from("iqU");break}break;case 9:W.slice_from("eau");break;case 10:if(!a())return!1;W.slice_from("al");break;case 11:if(l())W.slice_del();else{if(!a())return!1;W.slice_from("eux")}break;case 12:if(!a()||!W.out_grouping_b(F,97,251))return!1;W.slice_del();break;case 13:return c()&&W.slice_from("ant"),!1;case 14:return c()&&W.slice_from("ent"),!1;case 15:return r=W.limit-W.cursor,W.in_grouping_b(F,97,251)&&c()&&(W.cursor=W.limit-r,W.slice_del()),!1}return!0}return!1}function f(){var e,r;if(W.cursor=q){if(s=W.limit_backward,W.limit_backward=q,W.ket=W.cursor,e=W.find_among_b(P,7))switch(W.bra=W.cursor,e){case 1:if(l()){if(i=W.limit-W.cursor,!W.eq_s_b(1,"s")&&(W.cursor=W.limit-i,!W.eq_s_b(1,"t")))break;W.slice_del()}break;case 2:W.slice_from("i");break;case 3:W.slice_del();break;case 4:W.eq_s_b(2,"gu")&&W.slice_del()}W.limit_backward=s}}function b(){var e=W.limit-W.cursor;W.find_among_b(U,5)&&(W.cursor=W.limit-e,W.ket=W.cursor,W.cursor>W.limit_backward&&(W.cursor--,W.bra=W.cursor,W.slice_del()))}function d(){for(var e,r=1;W.out_grouping_b(F,97,251);)r--;if(r<=0){if(W.ket=W.cursor,e=W.limit-W.cursor,!W.eq_s_b(1,"é")&&(W.cursor=W.limit-e,!W.eq_s_b(1,"è")))return;W.bra=W.cursor,W.slice_from("e")}}function k(){if(!w()&&(W.cursor=W.limit,!f()&&(W.cursor=W.limit,!m())))return W.cursor=W.limit,void _();W.cursor=W.limit,W.ket=W.cursor,W.eq_s_b(1,"Y")?(W.bra=W.cursor,W.slice_from("i")):(W.cursor=W.limit,W.eq_s_b(1,"ç")&&(W.bra=W.cursor,W.slice_from("c")))}var p,g,q,v=[new r("col",-1,-1),new r("par",-1,-1),new r("tap",-1,-1)],h=[new r("",-1,4),new r("I",0,1),new r("U",0,2),new r("Y",0,3)],z=[new r("iqU",-1,3),new r("abl",-1,3),new r("Ièr",-1,4),new r("ièr",-1,4),new r("eus",-1,2),new r("iv",-1,1)],y=[new r("ic",-1,2),new r("abil",-1,1),new r("iv",-1,3)],C=[new r("iqUe",-1,1),new r("atrice",-1,2),new r("ance",-1,1),new r("ence",-1,5),new r("logie",-1,3),new r("able",-1,1),new r("isme",-1,1),new r("euse",-1,11),new r("iste",-1,1),new r("ive",-1,8),new r("if",-1,8),new r("usion",-1,4),new r("ation",-1,2),new r("ution",-1,4),new r("ateur",-1,2),new r("iqUes",-1,1),new r("atrices",-1,2),new r("ances",-1,1),new r("ences",-1,5),new r("logies",-1,3),new r("ables",-1,1),new r("ismes",-1,1),new r("euses",-1,11),new r("istes",-1,1),new r("ives",-1,8),new r("ifs",-1,8),new r("usions",-1,4),new r("ations",-1,2),new r("utions",-1,4),new r("ateurs",-1,2),new r("ments",-1,15),new r("ements",30,6),new r("issements",31,12),new r("ités",-1,7),new r("ment",-1,15),new r("ement",34,6),new r("issement",35,12),new r("amment",34,13),new r("emment",34,14),new r("aux",-1,10),new r("eaux",39,9),new r("eux",-1,1),new r("ité",-1,7)],x=[new r("ira",-1,1),new r("ie",-1,1),new r("isse",-1,1),new r("issante",-1,1),new r("i",-1,1),new r("irai",4,1),new r("ir",-1,1),new r("iras",-1,1),new r("ies",-1,1),new r("îmes",-1,1),new r("isses",-1,1),new r("issantes",-1,1),new r("îtes",-1,1),new r("is",-1,1),new r("irais",13,1),new r("issais",13,1),new r("irions",-1,1),new r("issions",-1,1),new r("irons",-1,1),new r("issons",-1,1),new r("issants",-1,1),new r("it",-1,1),new r("irait",21,1),new r("issait",21,1),new r("issant",-1,1),new r("iraIent",-1,1),new r("issaIent",-1,1),new r("irent",-1,1),new r("issent",-1,1),new r("iront",-1,1),new r("ît",-1,1),new r("iriez",-1,1),new r("issiez",-1,1),new r("irez",-1,1),new r("issez",-1,1)],I=[new r("a",-1,3),new r("era",0,2),new r("asse",-1,3),new r("ante",-1,3),new r("ée",-1,2),new r("ai",-1,3),new r("erai",5,2),new r("er",-1,2),new r("as",-1,3),new r("eras",8,2),new r("âmes",-1,3),new r("asses",-1,3),new r("antes",-1,3),new r("âtes",-1,3),new r("ées",-1,2),new r("ais",-1,3),new r("erais",15,2),new r("ions",-1,1),new r("erions",17,2),new r("assions",17,3),new r("erons",-1,2),new r("ants",-1,3),new r("és",-1,2),new r("ait",-1,3),new r("erait",23,2),new r("ant",-1,3),new r("aIent",-1,3),new r("eraIent",26,2),new r("èrent",-1,2),new r("assent",-1,3),new r("eront",-1,2),new r("ât",-1,3),new r("ez",-1,2),new r("iez",32,2),new r("eriez",33,2),new r("assiez",33,3),new r("erez",32,2),new r("é",-1,2)],P=[new r("e",-1,3),new r("Ière",0,2),new r("ière",0,2),new r("ion",-1,1),new r("Ier",-1,2),new r("ier",-1,2),new r("ë",-1,4)],U=[new r("ell",-1,-1),new r("eill",-1,-1),new r("enn",-1,-1),new r("onn",-1,-1),new r("ett",-1,-1)],F=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5],S=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128],W=new s;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){var e=W.cursor;return n(),W.cursor=e,u(),W.limit_backward=e,W.cursor=W.limit,k(),W.cursor=W.limit,b(),W.cursor=W.limit,d(),W.cursor=W.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.fr.stemmer,"stemmer-fr"),e.fr.stopWordFilter=e.generateStopWordFilter("ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes".split(" ")),e.Pipeline.registerFunction(e.fr.stopWordFilter,"stopWordFilter-fr")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.he.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.he.min.js new file mode 100644 index 0000000000..b863d3eae0 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.he.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.he=function(){this.pipeline.reset(),this.pipeline.add(e.he.trimmer,e.he.stopWordFilter,e.he.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.he.stemmer))},e.he.wordCharacters="֑-״א-תa-zA-Za-zA-Z0-90-9",e.he.trimmer=e.trimmerSupport.generateTrimmer(e.he.wordCharacters),e.Pipeline.registerFunction(e.he.trimmer,"trimmer-he"),e.he.stemmer=function(){var e=this;return e.result=!1,e.preRemoved=!1,e.sufRemoved=!1,e.pre={pre1:"ה ו י ת",pre2:"ב כ ל מ ש כש",pre3:"הב הכ הל המ הש בש לכ",pre4:"וב וכ ול ומ וש",pre5:"מה שה כל",pre6:"מב מכ מל ממ מש",pre7:"בה בו בי בת כה כו כי כת לה לו לי לת",pre8:"ובה ובו ובי ובת וכה וכו וכי וכת ולה ולו ולי ולת"},e.suf={suf1:"ך כ ם ן נ",suf2:"ים ות וך וכ ום ון ונ הם הן יכ יך ינ ים",suf3:"תי תך תכ תם תן תנ",suf4:"ותי ותך ותכ ותם ותן ותנ",suf5:"נו כם כן הם הן",suf6:"ונו וכם וכן והם והן",suf7:"תכם תכן תנו תהם תהן",suf8:"הוא היא הם הן אני אתה את אנו אתם אתן",suf9:"ני נו כי כו כם כן תי תך תכ תם תן",suf10:"י ך כ ם ן נ ת"},e.patterns=JSON.parse('{"hebrewPatterns": [{"pt1": [{"c": "ה", "l": 0}]}, {"pt2": [{"c": "ו", "l": 0}]}, {"pt3": [{"c": "י", "l": 0}]}, {"pt4": [{"c": "ת", "l": 0}]}, {"pt5": [{"c": "מ", "l": 0}]}, {"pt6": [{"c": "ל", "l": 0}]}, {"pt7": [{"c": "ב", "l": 0}]}, {"pt8": [{"c": "כ", "l": 0}]}, {"pt9": [{"c": "ש", "l": 0}]}, {"pt10": [{"c": "כש", "l": 0}]}, {"pt11": [{"c": "בה", "l": 0}]}, {"pt12": [{"c": "וב", "l": 0}]}, {"pt13": [{"c": "וכ", "l": 0}]}, {"pt14": [{"c": "ול", "l": 0}]}, {"pt15": [{"c": "ומ", "l": 0}]}, {"pt16": [{"c": "וש", "l": 0}]}, {"pt17": [{"c": "הב", "l": 0}]}, {"pt18": [{"c": "הכ", "l": 0}]}, {"pt19": [{"c": "הל", "l": 0}]}, {"pt20": [{"c": "המ", "l": 0}]}, {"pt21": [{"c": "הש", "l": 0}]}, {"pt22": [{"c": "מה", "l": 0}]}, {"pt23": [{"c": "שה", "l": 0}]}, {"pt24": [{"c": "כל", "l": 0}]}]}'),e.execArray=["cleanWord","removeDiacritics","removeStopWords","normalizeHebrewCharacters"],e.stem=function(){var r=0;for(e.result=!1,e.preRemoved=!1,e.sufRemoved=!1;r=0)return!0},e.normalizeHebrewCharacters=function(){return e.word=e.word.replace("ך","כ"),e.word=e.word.replace("ם","מ"),e.word=e.word.replace("ן","נ"),e.word=e.word.replace("ף","פ"),e.word=e.word.replace("ץ","צ"),!1},function(r){return"function"==typeof r.update?r.update(function(r){return e.setCurrent(r),e.stem(),e.getCurrent()}):(e.setCurrent(r),e.stem(),e.getCurrent())}}(),e.Pipeline.registerFunction(e.he.stemmer,"stemmer-he"),e.he.stopWordFilter=e.generateStopWordFilter("אבל או אולי אותו אותי אותך אותם אותן אותנו אז אחר אחרות אחרי אחריכן אחרים אחרת אי איזה איך אין איפה אל אלה אלו אם אנחנו אני אף אפשר את אתה אתכם אתכן אתם אתן באיזה באיזו בגלל בין בלבד בעבור בעזרת בכל בכן בלי במידה במקום שבו ברוב בשביל בשעה ש בתוך גם דרך הוא היא היה היי היכן היתה היתי הם הן הנה הסיבה שבגללה הרי ואילו ואת זאת זה זות יהיה יוכל יוכלו יותר מדי יכול יכולה יכולות יכולים יכל יכלה יכלו יש כאן כאשר כולם כולן כזה כי כיצד כך כל כלל כמו כן כפי כש לא לאו לאיזותך לאן לבין לה להיות להם להן לו לזה לזות לי לך לכם לכן למה למעלה למעלה מ למטה למטה מ למעט למקום שבו למרות לנו לעבר לעיכן לפיכך לפני מאד מאחורי מאיזו סיבה מאין מאיפה מבלי מבעד מדוע מה מהיכן מול מחוץ מי מידע מכאן מכל מכן מלבד מן מנין מסוגל מעט מעטים מעל מצד מקום בו מתחת מתי נגד נגר נו עד עז על עלי עליו עליה עליהם עליך עלינו עם עצמה עצמהם עצמהן עצמו עצמי עצמם עצמן עצמנו פה רק שוב של שלה שלהם שלהן שלו שלי שלך שלכה שלכם שלכן שלנו שם תהיה תחת".split(" ")),e.Pipeline.registerFunction(e.he.stopWordFilter,"stopWordFilter-he")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.hi.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.hi.min.js new file mode 100644 index 0000000000..7dbc41402c --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.hi.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Za-zA-Z0-90-9",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.hu.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.hu.min.js new file mode 100644 index 0000000000..ed9d909f73 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.hu.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Hungarian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hu=function(){this.pipeline.reset(),this.pipeline.add(e.hu.trimmer,e.hu.stopWordFilter,e.hu.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hu.stemmer))},e.hu.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.hu.trimmer=e.trimmerSupport.generateTrimmer(e.hu.wordCharacters),e.Pipeline.registerFunction(e.hu.trimmer,"trimmer-hu"),e.hu.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,n=L.cursor;if(d=L.limit,L.in_grouping(W,97,252))for(;;){if(e=L.cursor,L.out_grouping(W,97,252))return L.cursor=e,L.find_among(g,8)||(L.cursor=e,e=L.limit)return void(d=e);L.cursor++}if(L.cursor=n,L.out_grouping(W,97,252)){for(;!L.in_grouping(W,97,252);){if(L.cursor>=L.limit)return;L.cursor++}d=L.cursor}}function i(){return d<=L.cursor}function a(){var e;if(L.ket=L.cursor,(e=L.find_among_b(h,2))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("a");break;case 2:L.slice_from("e")}}function t(){var e=L.limit-L.cursor;return!!L.find_among_b(p,23)&&(L.cursor=L.limit-e,!0)}function s(){if(L.cursor>L.limit_backward){L.cursor--,L.ket=L.cursor;var e=L.cursor-1;L.limit_backward<=e&&e<=L.limit&&(L.cursor=e,L.bra=e,L.slice_del())}}function c(){var e;if(L.ket=L.cursor,(e=L.find_among_b(_,2))&&(L.bra=L.cursor,i())){if((1==e||2==e)&&!t())return;L.slice_del(),s()}}function o(){L.ket=L.cursor,L.find_among_b(v,44)&&(L.bra=L.cursor,i()&&(L.slice_del(),a()))}function w(){var e;if(L.ket=L.cursor,(e=L.find_among_b(z,3))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("e");break;case 2:case 3:L.slice_from("a")}}function l(){var e;if(L.ket=L.cursor,(e=L.find_among_b(y,6))&&(L.bra=L.cursor,i()))switch(e){case 1:case 2:L.slice_del();break;case 3:L.slice_from("a");break;case 4:L.slice_from("e")}}function u(){var e;if(L.ket=L.cursor,(e=L.find_among_b(j,2))&&(L.bra=L.cursor,i())){if((1==e||2==e)&&!t())return;L.slice_del(),s()}}function m(){var e;if(L.ket=L.cursor,(e=L.find_among_b(C,7))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("a");break;case 2:L.slice_from("e");break;case 3:case 4:case 5:case 6:case 7:L.slice_del()}}function k(){var e;if(L.ket=L.cursor,(e=L.find_among_b(P,12))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 7:case 9:L.slice_del();break;case 2:case 5:case 8:L.slice_from("e");break;case 3:case 6:L.slice_from("a")}}function f(){var e;if(L.ket=L.cursor,(e=L.find_among_b(F,31))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 7:case 8:case 9:case 12:case 13:case 16:case 17:case 18:L.slice_del();break;case 2:case 5:case 10:case 14:case 19:L.slice_from("a");break;case 3:case 6:case 11:case 15:case 20:L.slice_from("e")}}function b(){var e;if(L.ket=L.cursor,(e=L.find_among_b(S,42))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 5:case 6:case 9:case 10:case 11:case 14:case 15:case 16:case 17:case 20:case 21:case 24:case 25:case 26:case 29:L.slice_del();break;case 2:case 7:case 12:case 18:case 22:case 27:L.slice_from("a");break;case 3:case 8:case 13:case 19:case 23:case 28:L.slice_from("e")}}var d,g=[new n("cs",-1,-1),new n("dzs",-1,-1),new n("gy",-1,-1),new n("ly",-1,-1),new n("ny",-1,-1),new n("sz",-1,-1),new n("ty",-1,-1),new n("zs",-1,-1)],h=[new n("á",-1,1),new n("é",-1,2)],p=[new n("bb",-1,-1),new n("cc",-1,-1),new n("dd",-1,-1),new n("ff",-1,-1),new n("gg",-1,-1),new n("jj",-1,-1),new n("kk",-1,-1),new n("ll",-1,-1),new n("mm",-1,-1),new n("nn",-1,-1),new n("pp",-1,-1),new n("rr",-1,-1),new n("ccs",-1,-1),new n("ss",-1,-1),new n("zzs",-1,-1),new n("tt",-1,-1),new n("vv",-1,-1),new n("ggy",-1,-1),new n("lly",-1,-1),new n("nny",-1,-1),new n("tty",-1,-1),new n("ssz",-1,-1),new n("zz",-1,-1)],_=[new n("al",-1,1),new n("el",-1,2)],v=[new n("ba",-1,-1),new n("ra",-1,-1),new n("be",-1,-1),new n("re",-1,-1),new n("ig",-1,-1),new n("nak",-1,-1),new n("nek",-1,-1),new n("val",-1,-1),new n("vel",-1,-1),new n("ul",-1,-1),new n("nál",-1,-1),new n("nél",-1,-1),new n("ból",-1,-1),new n("ról",-1,-1),new n("tól",-1,-1),new n("bõl",-1,-1),new n("rõl",-1,-1),new n("tõl",-1,-1),new n("ül",-1,-1),new n("n",-1,-1),new n("an",19,-1),new n("ban",20,-1),new n("en",19,-1),new n("ben",22,-1),new n("képpen",22,-1),new n("on",19,-1),new n("ön",19,-1),new n("képp",-1,-1),new n("kor",-1,-1),new n("t",-1,-1),new n("at",29,-1),new n("et",29,-1),new n("ként",29,-1),new n("anként",32,-1),new n("enként",32,-1),new n("onként",32,-1),new n("ot",29,-1),new n("ért",29,-1),new n("öt",29,-1),new n("hez",-1,-1),new n("hoz",-1,-1),new n("höz",-1,-1),new n("vá",-1,-1),new n("vé",-1,-1)],z=[new n("án",-1,2),new n("én",-1,1),new n("ánként",-1,3)],y=[new n("stul",-1,2),new n("astul",0,1),new n("ástul",0,3),new n("stül",-1,2),new n("estül",3,1),new n("éstül",3,4)],j=[new n("á",-1,1),new n("é",-1,2)],C=[new n("k",-1,7),new n("ak",0,4),new n("ek",0,6),new n("ok",0,5),new n("ák",0,1),new n("ék",0,2),new n("ök",0,3)],P=[new n("éi",-1,7),new n("áéi",0,6),new n("ééi",0,5),new n("é",-1,9),new n("ké",3,4),new n("aké",4,1),new n("eké",4,1),new n("oké",4,1),new n("áké",4,3),new n("éké",4,2),new n("öké",4,1),new n("éé",3,8)],F=[new n("a",-1,18),new n("ja",0,17),new n("d",-1,16),new n("ad",2,13),new n("ed",2,13),new n("od",2,13),new n("ád",2,14),new n("éd",2,15),new n("öd",2,13),new n("e",-1,18),new n("je",9,17),new n("nk",-1,4),new n("unk",11,1),new n("ánk",11,2),new n("énk",11,3),new n("ünk",11,1),new n("uk",-1,8),new n("juk",16,7),new n("ájuk",17,5),new n("ük",-1,8),new n("jük",19,7),new n("éjük",20,6),new n("m",-1,12),new n("am",22,9),new n("em",22,9),new n("om",22,9),new n("ám",22,10),new n("ém",22,11),new n("o",-1,18),new n("á",-1,19),new n("é",-1,20)],S=[new n("id",-1,10),new n("aid",0,9),new n("jaid",1,6),new n("eid",0,9),new n("jeid",3,6),new n("áid",0,7),new n("éid",0,8),new n("i",-1,15),new n("ai",7,14),new n("jai",8,11),new n("ei",7,14),new n("jei",10,11),new n("ái",7,12),new n("éi",7,13),new n("itek",-1,24),new n("eitek",14,21),new n("jeitek",15,20),new n("éitek",14,23),new n("ik",-1,29),new n("aik",18,26),new n("jaik",19,25),new n("eik",18,26),new n("jeik",21,25),new n("áik",18,27),new n("éik",18,28),new n("ink",-1,20),new n("aink",25,17),new n("jaink",26,16),new n("eink",25,17),new n("jeink",28,16),new n("áink",25,18),new n("éink",25,19),new n("aitok",-1,21),new n("jaitok",32,20),new n("áitok",-1,22),new n("im",-1,5),new n("aim",35,4),new n("jaim",36,1),new n("eim",35,4),new n("jeim",38,1),new n("áim",35,2),new n("éim",35,3)],W=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,52,14],L=new r;this.setCurrent=function(e){L.setCurrent(e)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){var n=L.cursor;return e(),L.limit_backward=n,L.cursor=L.limit,c(),L.cursor=L.limit,o(),L.cursor=L.limit,w(),L.cursor=L.limit,l(),L.cursor=L.limit,u(),L.cursor=L.limit,k(),L.cursor=L.limit,f(),L.cursor=L.limit,b(),L.cursor=L.limit,m(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.hu.stemmer,"stemmer-hu"),e.hu.stopWordFilter=e.generateStopWordFilter("a abban ahhoz ahogy ahol aki akik akkor alatt amely amelyek amelyekben amelyeket amelyet amelynek ami amikor amit amolyan amíg annak arra arról az azok azon azonban azt aztán azután azzal azért be belül benne bár cikk cikkek cikkeket csak de e ebben eddig egy egyes egyetlen egyik egyre egyéb egész ehhez ekkor el ellen elsõ elég elõ elõször elõtt emilyen ennek erre ez ezek ezen ezt ezzel ezért fel felé hanem hiszen hogy hogyan igen ill ill. illetve ilyen ilyenkor ismét ison itt jobban jó jól kell kellett keressünk keresztül ki kívül között közül legalább legyen lehet lehetett lenne lenni lesz lett maga magát majd majd meg mellett mely melyek mert mi mikor milyen minden mindenki mindent mindig mint mintha mit mivel miért most már más másik még míg nagy nagyobb nagyon ne nekem neki nem nincs néha néhány nélkül olyan ott pedig persze rá s saját sem semmi sok sokat sokkal szemben szerint szinte számára talán tehát teljes tovább továbbá több ugyanis utolsó után utána vagy vagyis vagyok valaki valami valamint való van vannak vele vissza viszont volna volt voltak voltam voltunk által általában át én éppen és így õ õk õket össze úgy új újabb újra".split(" ")),e.Pipeline.registerFunction(e.hu.stopWordFilter,"stopWordFilter-hu")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.hy.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.hy.min.js new file mode 100644 index 0000000000..b37f792985 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.hy.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hy=function(){this.pipeline.reset(),this.pipeline.add(e.hy.trimmer,e.hy.stopWordFilter)},e.hy.wordCharacters="[A-Za-z԰-֏ff-ﭏ]",e.hy.trimmer=e.trimmerSupport.generateTrimmer(e.hy.wordCharacters),e.Pipeline.registerFunction(e.hy.trimmer,"trimmer-hy"),e.hy.stopWordFilter=e.generateStopWordFilter("դու և եք էիր էիք հետո նաև նրանք որը վրա է որ պիտի են այս մեջ ն իր ու ի այդ որոնք այն կամ էր մի ես համար այլ իսկ էին ենք հետ ին թ էինք մենք նրա նա դուք եմ էի ըստ որպես ում".split(" ")),e.Pipeline.registerFunction(e.hy.stopWordFilter,"stopWordFilter-hy"),e.hy.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}(),e.Pipeline.registerFunction(e.hy.stemmer,"stemmer-hy")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.it.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.it.min.js new file mode 100644 index 0000000000..344b6a3c0c --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.it.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Italian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.it=function(){this.pipeline.reset(),this.pipeline.add(e.it.trimmer,e.it.stopWordFilter,e.it.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.it.stemmer))},e.it.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.it.trimmer=e.trimmerSupport.generateTrimmer(e.it.wordCharacters),e.Pipeline.registerFunction(e.it.trimmer,"trimmer-it"),e.it.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,n){return!(!x.eq_s(1,e)||(x.ket=x.cursor,!x.in_grouping(L,97,249)))&&(x.slice_from(r),x.cursor=n,!0)}function i(){for(var r,n,i,o,t=x.cursor;;){if(x.bra=x.cursor,r=x.find_among(h,7))switch(x.ket=x.cursor,r){case 1:x.slice_from("à");continue;case 2:x.slice_from("è");continue;case 3:x.slice_from("ì");continue;case 4:x.slice_from("ò");continue;case 5:x.slice_from("ù");continue;case 6:x.slice_from("qU");continue;case 7:if(x.cursor>=x.limit)break;x.cursor++;continue}break}for(x.cursor=t;;)for(n=x.cursor;;){if(i=x.cursor,x.in_grouping(L,97,249)){if(x.bra=x.cursor,o=x.cursor,e("u","U",i))break;if(x.cursor=o,e("i","I",i))break}if(x.cursor=i,x.cursor>=x.limit)return void(x.cursor=n);x.cursor++}}function o(e){if(x.cursor=e,!x.in_grouping(L,97,249))return!1;for(;!x.out_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}return!0}function t(){if(x.in_grouping(L,97,249)){var e=x.cursor;if(x.out_grouping(L,97,249)){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return o(e);x.cursor++}return!0}return o(e)}return!1}function s(){var e,r=x.cursor;if(!t()){if(x.cursor=r,!x.out_grouping(L,97,249))return;if(e=x.cursor,x.out_grouping(L,97,249)){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return x.cursor=e,void(x.in_grouping(L,97,249)&&x.cursor=x.limit)return;x.cursor++}k=x.cursor}function a(){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}for(;!x.out_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}return!0}function u(){var e=x.cursor;k=x.limit,p=k,g=k,s(),x.cursor=e,a()&&(p=x.cursor,a()&&(g=x.cursor))}function c(){for(var e;;){if(x.bra=x.cursor,!(e=x.find_among(q,3)))break;switch(x.ket=x.cursor,e){case 1:x.slice_from("i");break;case 2:x.slice_from("u");break;case 3:if(x.cursor>=x.limit)return;x.cursor++}}}function w(){return k<=x.cursor}function l(){return p<=x.cursor}function m(){return g<=x.cursor}function f(){var e;if(x.ket=x.cursor,x.find_among_b(C,37)&&(x.bra=x.cursor,(e=x.find_among_b(z,5))&&w()))switch(e){case 1:x.slice_del();break;case 2:x.slice_from("e")}}function v(){var e;if(x.ket=x.cursor,!(e=x.find_among_b(S,51)))return!1;switch(x.bra=x.cursor,e){case 1:if(!m())return!1;x.slice_del();break;case 2:if(!m())return!1;x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"ic")&&(x.bra=x.cursor,m()&&x.slice_del());break;case 3:if(!m())return!1;x.slice_from("log");break;case 4:if(!m())return!1;x.slice_from("u");break;case 5:if(!m())return!1;x.slice_from("ente");break;case 6:if(!w())return!1;x.slice_del();break;case 7:if(!l())return!1;x.slice_del(),x.ket=x.cursor,e=x.find_among_b(P,4),e&&(x.bra=x.cursor,m()&&(x.slice_del(),1==e&&(x.ket=x.cursor,x.eq_s_b(2,"at")&&(x.bra=x.cursor,m()&&x.slice_del()))));break;case 8:if(!m())return!1;x.slice_del(),x.ket=x.cursor,e=x.find_among_b(F,3),e&&(x.bra=x.cursor,1==e&&m()&&x.slice_del());break;case 9:if(!m())return!1;x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"at")&&(x.bra=x.cursor,m()&&(x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"ic")&&(x.bra=x.cursor,m()&&x.slice_del())))}return!0}function b(){var e,r;x.cursor>=k&&(r=x.limit_backward,x.limit_backward=k,x.ket=x.cursor,e=x.find_among_b(W,87),e&&(x.bra=x.cursor,1==e&&x.slice_del()),x.limit_backward=r)}function d(){var e=x.limit-x.cursor;if(x.ket=x.cursor,x.in_grouping_b(y,97,242)&&(x.bra=x.cursor,w()&&(x.slice_del(),x.ket=x.cursor,x.eq_s_b(1,"i")&&(x.bra=x.cursor,w()))))return void x.slice_del();x.cursor=x.limit-e}function _(){d(),x.ket=x.cursor,x.eq_s_b(1,"h")&&(x.bra=x.cursor,x.in_grouping_b(U,99,103)&&w()&&x.slice_del())}var g,p,k,h=[new r("",-1,7),new r("qu",0,6),new r("á",0,1),new r("é",0,2),new r("í",0,3),new r("ó",0,4),new r("ú",0,5)],q=[new r("",-1,3),new r("I",0,1),new r("U",0,2)],C=[new r("la",-1,-1),new r("cela",0,-1),new r("gliela",0,-1),new r("mela",0,-1),new r("tela",0,-1),new r("vela",0,-1),new r("le",-1,-1),new r("cele",6,-1),new r("gliele",6,-1),new r("mele",6,-1),new r("tele",6,-1),new r("vele",6,-1),new r("ne",-1,-1),new r("cene",12,-1),new r("gliene",12,-1),new r("mene",12,-1),new r("sene",12,-1),new r("tene",12,-1),new r("vene",12,-1),new r("ci",-1,-1),new r("li",-1,-1),new r("celi",20,-1),new r("glieli",20,-1),new r("meli",20,-1),new r("teli",20,-1),new r("veli",20,-1),new r("gli",20,-1),new r("mi",-1,-1),new r("si",-1,-1),new r("ti",-1,-1),new r("vi",-1,-1),new r("lo",-1,-1),new r("celo",31,-1),new r("glielo",31,-1),new r("melo",31,-1),new r("telo",31,-1),new r("velo",31,-1)],z=[new r("ando",-1,1),new r("endo",-1,1),new r("ar",-1,2),new r("er",-1,2),new r("ir",-1,2)],P=[new r("ic",-1,-1),new r("abil",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],F=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],S=[new r("ica",-1,1),new r("logia",-1,3),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,9),new r("anza",-1,1),new r("enza",-1,5),new r("ice",-1,1),new r("atrice",7,1),new r("iche",-1,1),new r("logie",-1,3),new r("abile",-1,1),new r("ibile",-1,1),new r("usione",-1,4),new r("azione",-1,2),new r("uzione",-1,4),new r("atore",-1,2),new r("ose",-1,1),new r("ante",-1,1),new r("mente",-1,1),new r("amente",19,7),new r("iste",-1,1),new r("ive",-1,9),new r("anze",-1,1),new r("enze",-1,5),new r("ici",-1,1),new r("atrici",25,1),new r("ichi",-1,1),new r("abili",-1,1),new r("ibili",-1,1),new r("ismi",-1,1),new r("usioni",-1,4),new r("azioni",-1,2),new r("uzioni",-1,4),new r("atori",-1,2),new r("osi",-1,1),new r("anti",-1,1),new r("amenti",-1,6),new r("imenti",-1,6),new r("isti",-1,1),new r("ivi",-1,9),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,6),new r("imento",-1,6),new r("ivo",-1,9),new r("ità",-1,8),new r("istà",-1,1),new r("istè",-1,1),new r("istì",-1,1)],W=[new r("isca",-1,1),new r("enda",-1,1),new r("ata",-1,1),new r("ita",-1,1),new r("uta",-1,1),new r("ava",-1,1),new r("eva",-1,1),new r("iva",-1,1),new r("erebbe",-1,1),new r("irebbe",-1,1),new r("isce",-1,1),new r("ende",-1,1),new r("are",-1,1),new r("ere",-1,1),new r("ire",-1,1),new r("asse",-1,1),new r("ate",-1,1),new r("avate",16,1),new r("evate",16,1),new r("ivate",16,1),new r("ete",-1,1),new r("erete",20,1),new r("irete",20,1),new r("ite",-1,1),new r("ereste",-1,1),new r("ireste",-1,1),new r("ute",-1,1),new r("erai",-1,1),new r("irai",-1,1),new r("isci",-1,1),new r("endi",-1,1),new r("erei",-1,1),new r("irei",-1,1),new r("assi",-1,1),new r("ati",-1,1),new r("iti",-1,1),new r("eresti",-1,1),new r("iresti",-1,1),new r("uti",-1,1),new r("avi",-1,1),new r("evi",-1,1),new r("ivi",-1,1),new r("isco",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("Yamo",-1,1),new r("iamo",-1,1),new r("avamo",-1,1),new r("evamo",-1,1),new r("ivamo",-1,1),new r("eremo",-1,1),new r("iremo",-1,1),new r("assimo",-1,1),new r("ammo",-1,1),new r("emmo",-1,1),new r("eremmo",54,1),new r("iremmo",54,1),new r("immo",-1,1),new r("ano",-1,1),new r("iscano",58,1),new r("avano",58,1),new r("evano",58,1),new r("ivano",58,1),new r("eranno",-1,1),new r("iranno",-1,1),new r("ono",-1,1),new r("iscono",65,1),new r("arono",65,1),new r("erono",65,1),new r("irono",65,1),new r("erebbero",-1,1),new r("irebbero",-1,1),new r("assero",-1,1),new r("essero",-1,1),new r("issero",-1,1),new r("ato",-1,1),new r("ito",-1,1),new r("uto",-1,1),new r("avo",-1,1),new r("evo",-1,1),new r("ivo",-1,1),new r("ar",-1,1),new r("ir",-1,1),new r("erà",-1,1),new r("irà",-1,1),new r("erò",-1,1),new r("irò",-1,1)],L=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2,1],y=[17,65,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2],U=[17],x=new n;this.setCurrent=function(e){x.setCurrent(e)},this.getCurrent=function(){return x.getCurrent()},this.stem=function(){var e=x.cursor;return i(),x.cursor=e,u(),x.limit_backward=e,x.cursor=x.limit,f(),x.cursor=x.limit,v()||(x.cursor=x.limit,b()),x.cursor=x.limit,_(),x.cursor=x.limit_backward,c(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.it.stemmer,"stemmer-it"),e.it.stopWordFilter=e.generateStopWordFilter("a abbia abbiamo abbiano abbiate ad agl agli ai al all alla alle allo anche avemmo avendo avesse avessero avessi avessimo aveste avesti avete aveva avevamo avevano avevate avevi avevo avrai avranno avrebbe avrebbero avrei avremmo avremo avreste avresti avrete avrà avrò avuta avute avuti avuto c che chi ci coi col come con contro cui da dagl dagli dai dal dall dalla dalle dallo degl degli dei del dell della delle dello di dov dove e ebbe ebbero ebbi ed era erano eravamo eravate eri ero essendo faccia facciamo facciano facciate faccio facemmo facendo facesse facessero facessi facessimo faceste facesti faceva facevamo facevano facevate facevi facevo fai fanno farai faranno farebbe farebbero farei faremmo faremo fareste faresti farete farà farò fece fecero feci fosse fossero fossi fossimo foste fosti fu fui fummo furono gli ha hai hanno ho i il in io l la le lei li lo loro lui ma mi mia mie miei mio ne negl negli nei nel nell nella nelle nello noi non nostra nostre nostri nostro o per perché più quale quanta quante quanti quanto quella quelle quelli quello questa queste questi questo sarai saranno sarebbe sarebbero sarei saremmo saremo sareste saresti sarete sarà sarò se sei si sia siamo siano siate siete sono sta stai stando stanno starai staranno starebbe starebbero starei staremmo staremo stareste staresti starete starà starò stava stavamo stavano stavate stavi stavo stemmo stesse stessero stessi stessimo steste stesti stette stettero stetti stia stiamo stiano stiate sto su sua sue sugl sugli sui sul sull sulla sulle sullo suo suoi ti tra tu tua tue tuo tuoi tutti tutto un una uno vi voi vostra vostre vostri vostro è".split(" ")),e.Pipeline.registerFunction(e.it.stopWordFilter,"stopWordFilter-it")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ja.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ja.min.js new file mode 100644 index 0000000000..5f254ebe91 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ja.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(e=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=e);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=e;else if(n(e))break}else if(n(e))break}function n(r){return C.cursor=r,r>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,d=_,t()||(_=C.cursor,_<3&&(_=3),t()||(d=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var r;;)if(C.bra=C.cursor,r=C.find_among(p,3))switch(C.ket=C.cursor,r){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return d<=C.cursor}function a(){var r=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-r,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var r;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.slice_del(),w=!0,a())))}function m(){var r;u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.eq_s_b(3,"gem")||(C.cursor=C.limit-r,C.slice_del(),a())))}function f(){var r,e,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,r=C.find_among_b(h,5))switch(C.bra=C.cursor,r){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(j,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(e=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-e,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,r=C.find_among_b(k,6))switch(C.bra=C.cursor,r){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(z,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var d,_,w,b=[new e("",-1,6),new e("á",0,1),new e("ä",0,1),new e("é",0,2),new e("ë",0,2),new e("í",0,3),new e("ï",0,3),new e("ó",0,4),new e("ö",0,4),new e("ú",0,5),new e("ü",0,5)],p=[new e("",-1,3),new e("I",0,2),new e("Y",0,1)],g=[new e("dd",-1,-1),new e("kk",-1,-1),new e("tt",-1,-1)],h=[new e("ene",-1,2),new e("se",-1,3),new e("en",-1,2),new e("heden",2,1),new e("s",-1,3)],k=[new e("end",-1,1),new e("ig",-1,2),new e("ing",-1,1),new e("lijk",-1,3),new e("baar",-1,4),new e("bar",-1,5)],v=[new e("aa",-1,-1),new e("ee",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(r){C.setCurrent(r)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var e=C.cursor;return r(),C.cursor=e,o(),C.limit_backward=e,C.cursor=C.limit,f(),C.cursor=C.limit_backward,s(),!0}};return function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}}(),r.Pipeline.registerFunction(r.nl.stemmer,"stemmer-nl"),r.nl.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.nl.stopWordFilter,"stopWordFilter-nl")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.no.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.no.min.js new file mode 100644 index 0000000000..92bc7e4e89 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.no.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Norwegian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.pt.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.pt.min.js new file mode 100644 index 0000000000..6c16996d65 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.pt.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Portuguese` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.pt=function(){this.pipeline.reset(),this.pipeline.add(e.pt.trimmer,e.pt.stopWordFilter,e.pt.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.pt.stemmer))},e.pt.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.pt.trimmer=e.trimmerSupport.generateTrimmer(e.pt.wordCharacters),e.Pipeline.registerFunction(e.pt.trimmer,"trimmer-pt"),e.pt.stemmer=function(){var r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(k,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("a~");continue;case 2:z.slice_from("o~");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function n(){if(z.out_grouping(y,97,250)){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!0;z.cursor++}return!1}return!0}function i(){if(z.in_grouping(y,97,250))for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return g=z.cursor,!0}function o(){var e,r,s=z.cursor;if(z.in_grouping(y,97,250))if(e=z.cursor,n()){if(z.cursor=e,i())return}else g=z.cursor;if(z.cursor=s,z.out_grouping(y,97,250)){if(r=z.cursor,n()){if(z.cursor=r,!z.in_grouping(y,97,250)||z.cursor>=z.limit)return;z.cursor++}g=z.cursor}}function t(){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return!0}function a(){var e=z.cursor;g=z.limit,b=g,h=g,o(),z.cursor=e,t()&&(b=z.cursor,t()&&(h=z.cursor))}function u(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(q,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("ã");continue;case 2:z.slice_from("õ");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function w(){return g<=z.cursor}function m(){return b<=z.cursor}function c(){return h<=z.cursor}function l(){var e;if(z.ket=z.cursor,!(e=z.find_among_b(F,45)))return!1;switch(z.bra=z.cursor,e){case 1:if(!c())return!1;z.slice_del();break;case 2:if(!c())return!1;z.slice_from("log");break;case 3:if(!c())return!1;z.slice_from("u");break;case 4:if(!c())return!1;z.slice_from("ente");break;case 5:if(!m())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(j,4),e&&(z.bra=z.cursor,c()&&(z.slice_del(),1==e&&(z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del()))));break;case 6:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(C,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 7:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(P,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 8:if(!c())return!1;z.slice_del(),z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del());break;case 9:if(!w()||!z.eq_s_b(1,"e"))return!1;z.slice_from("ir")}return!0}function f(){var e,r;if(z.cursor>=g){if(r=z.limit_backward,z.limit_backward=g,z.ket=z.cursor,e=z.find_among_b(S,120))return z.bra=z.cursor,1==e&&z.slice_del(),z.limit_backward=r,!0;z.limit_backward=r}return!1}function d(){var e;z.ket=z.cursor,(e=z.find_among_b(W,7))&&(z.bra=z.cursor,1==e&&w()&&z.slice_del())}function v(e,r){if(z.eq_s_b(1,e)){z.bra=z.cursor;var s=z.limit-z.cursor;if(z.eq_s_b(1,r))return z.cursor=z.limit-s,w()&&z.slice_del(),!1}return!0}function p(){var e;if(z.ket=z.cursor,e=z.find_among_b(L,4))switch(z.bra=z.cursor,e){case 1:w()&&(z.slice_del(),z.ket=z.cursor,z.limit-z.cursor,v("u","g")&&v("i","c"));break;case 2:z.slice_from("c")}}function _(){if(!l()&&(z.cursor=z.limit,!f()))return z.cursor=z.limit,void d();z.cursor=z.limit,z.ket=z.cursor,z.eq_s_b(1,"i")&&(z.bra=z.cursor,z.eq_s_b(1,"c")&&(z.cursor=z.limit,w()&&z.slice_del()))}var h,b,g,k=[new r("",-1,3),new r("ã",0,1),new r("õ",0,2)],q=[new r("",-1,3),new r("a~",0,1),new r("o~",0,2)],j=[new r("ic",-1,-1),new r("ad",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],C=[new r("ante",-1,1),new r("avel",-1,1),new r("ível",-1,1)],P=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],F=[new r("ica",-1,1),new r("ância",-1,1),new r("ência",-1,4),new r("ira",-1,9),new r("adora",-1,1),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,8),new r("eza",-1,1),new r("logía",-1,2),new r("idade",-1,7),new r("ante",-1,1),new r("mente",-1,6),new r("amente",12,5),new r("ável",-1,1),new r("ível",-1,1),new r("ución",-1,3),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,1),new r("imento",-1,1),new r("ivo",-1,8),new r("aça~o",-1,1),new r("ador",-1,1),new r("icas",-1,1),new r("ências",-1,4),new r("iras",-1,9),new r("adoras",-1,1),new r("osas",-1,1),new r("istas",-1,1),new r("ivas",-1,8),new r("ezas",-1,1),new r("logías",-1,2),new r("idades",-1,7),new r("uciones",-1,3),new r("adores",-1,1),new r("antes",-1,1),new r("aço~es",-1,1),new r("icos",-1,1),new r("ismos",-1,1),new r("osos",-1,1),new r("amentos",-1,1),new r("imentos",-1,1),new r("ivos",-1,8)],S=[new r("ada",-1,1),new r("ida",-1,1),new r("ia",-1,1),new r("aria",2,1),new r("eria",2,1),new r("iria",2,1),new r("ara",-1,1),new r("era",-1,1),new r("ira",-1,1),new r("ava",-1,1),new r("asse",-1,1),new r("esse",-1,1),new r("isse",-1,1),new r("aste",-1,1),new r("este",-1,1),new r("iste",-1,1),new r("ei",-1,1),new r("arei",16,1),new r("erei",16,1),new r("irei",16,1),new r("am",-1,1),new r("iam",20,1),new r("ariam",21,1),new r("eriam",21,1),new r("iriam",21,1),new r("aram",20,1),new r("eram",20,1),new r("iram",20,1),new r("avam",20,1),new r("em",-1,1),new r("arem",29,1),new r("erem",29,1),new r("irem",29,1),new r("assem",29,1),new r("essem",29,1),new r("issem",29,1),new r("ado",-1,1),new r("ido",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("indo",-1,1),new r("ara~o",-1,1),new r("era~o",-1,1),new r("ira~o",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("ir",-1,1),new r("as",-1,1),new r("adas",47,1),new r("idas",47,1),new r("ias",47,1),new r("arias",50,1),new r("erias",50,1),new r("irias",50,1),new r("aras",47,1),new r("eras",47,1),new r("iras",47,1),new r("avas",47,1),new r("es",-1,1),new r("ardes",58,1),new r("erdes",58,1),new r("irdes",58,1),new r("ares",58,1),new r("eres",58,1),new r("ires",58,1),new r("asses",58,1),new r("esses",58,1),new r("isses",58,1),new r("astes",58,1),new r("estes",58,1),new r("istes",58,1),new r("is",-1,1),new r("ais",71,1),new r("eis",71,1),new r("areis",73,1),new r("ereis",73,1),new r("ireis",73,1),new r("áreis",73,1),new r("éreis",73,1),new r("íreis",73,1),new r("ásseis",73,1),new r("ésseis",73,1),new r("ísseis",73,1),new r("áveis",73,1),new r("íeis",73,1),new r("aríeis",84,1),new r("eríeis",84,1),new r("iríeis",84,1),new r("ados",-1,1),new r("idos",-1,1),new r("amos",-1,1),new r("áramos",90,1),new r("éramos",90,1),new r("íramos",90,1),new r("ávamos",90,1),new r("íamos",90,1),new r("aríamos",95,1),new r("eríamos",95,1),new r("iríamos",95,1),new r("emos",-1,1),new r("aremos",99,1),new r("eremos",99,1),new r("iremos",99,1),new r("ássemos",99,1),new r("êssemos",99,1),new r("íssemos",99,1),new r("imos",-1,1),new r("armos",-1,1),new r("ermos",-1,1),new r("irmos",-1,1),new r("ámos",-1,1),new r("arás",-1,1),new r("erás",-1,1),new r("irás",-1,1),new r("eu",-1,1),new r("iu",-1,1),new r("ou",-1,1),new r("ará",-1,1),new r("erá",-1,1),new r("irá",-1,1)],W=[new r("a",-1,1),new r("i",-1,1),new r("o",-1,1),new r("os",-1,1),new r("á",-1,1),new r("í",-1,1),new r("ó",-1,1)],L=[new r("e",-1,1),new r("ç",-1,2),new r("é",-1,1),new r("ê",-1,1)],y=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2],z=new s;this.setCurrent=function(e){z.setCurrent(e)},this.getCurrent=function(){return z.getCurrent()},this.stem=function(){var r=z.cursor;return e(),z.cursor=r,a(),z.limit_backward=r,z.cursor=z.limit,_(),z.cursor=z.limit,p(),z.cursor=z.limit_backward,u(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.pt.stemmer,"stemmer-pt"),e.pt.stopWordFilter=e.generateStopWordFilter("a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos".split(" ")),e.Pipeline.registerFunction(e.pt.stopWordFilter,"stopWordFilter-pt")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ro.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ro.min.js new file mode 100644 index 0000000000..7277140181 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ro.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Romanian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ro=function(){this.pipeline.reset(),this.pipeline.add(e.ro.trimmer,e.ro.stopWordFilter,e.ro.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ro.stemmer))},e.ro.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.ro.trimmer=e.trimmerSupport.generateTrimmer(e.ro.wordCharacters),e.Pipeline.registerFunction(e.ro.trimmer,"trimmer-ro"),e.ro.stemmer=function(){var i=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){function e(e,i){L.eq_s(1,e)&&(L.ket=L.cursor,L.in_grouping(W,97,259)&&L.slice_from(i))}function n(){for(var i,r;;){if(i=L.cursor,L.in_grouping(W,97,259)&&(r=L.cursor,L.bra=r,e("u","U"),L.cursor=r,e("i","I")),L.cursor=i,L.cursor>=L.limit)break;L.cursor++}}function t(){if(L.out_grouping(W,97,259)){for(;!L.in_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}return!0}function a(){if(L.in_grouping(W,97,259))for(;!L.out_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}function o(){var e,i,r=L.cursor;if(L.in_grouping(W,97,259)){if(e=L.cursor,!t())return void(h=L.cursor);if(L.cursor=e,!a())return void(h=L.cursor)}L.cursor=r,L.out_grouping(W,97,259)&&(i=L.cursor,t()&&(L.cursor=i,L.in_grouping(W,97,259)&&L.cursor=L.limit)return!1;L.cursor++}for(;!L.out_grouping(W,97,259);){if(L.cursor>=L.limit)return!1;L.cursor++}return!0}function c(){var e=L.cursor;h=L.limit,k=h,g=h,o(),L.cursor=e,u()&&(k=L.cursor,u()&&(g=L.cursor))}function s(){for(var e;;){if(L.bra=L.cursor,e=L.find_among(z,3))switch(L.ket=L.cursor,e){case 1:L.slice_from("i");continue;case 2:L.slice_from("u");continue;case 3:if(L.cursor>=L.limit)break;L.cursor++;continue}break}}function w(){return h<=L.cursor}function m(){return k<=L.cursor}function l(){return g<=L.cursor}function f(){var e,i;if(L.ket=L.cursor,(e=L.find_among_b(C,16))&&(L.bra=L.cursor,m()))switch(e){case 1:L.slice_del();break;case 2:L.slice_from("a");break;case 3:L.slice_from("e");break;case 4:L.slice_from("i");break;case 5:i=L.limit-L.cursor,L.eq_s_b(2,"ab")||(L.cursor=L.limit-i,L.slice_from("i"));break;case 6:L.slice_from("at");break;case 7:L.slice_from("aţi")}}function p(){var e,i=L.limit-L.cursor;if(L.ket=L.cursor,(e=L.find_among_b(P,46))&&(L.bra=L.cursor,m())){switch(e){case 1:L.slice_from("abil");break;case 2:L.slice_from("ibil");break;case 3:L.slice_from("iv");break;case 4:L.slice_from("ic");break;case 5:L.slice_from("at");break;case 6:L.slice_from("it")}return _=!0,L.cursor=L.limit-i,!0}return!1}function d(){var e,i;for(_=!1;;)if(i=L.limit-L.cursor,!p()){L.cursor=L.limit-i;break}if(L.ket=L.cursor,(e=L.find_among_b(F,62))&&(L.bra=L.cursor,l())){switch(e){case 1:L.slice_del();break;case 2:L.eq_s_b(1,"ţ")&&(L.bra=L.cursor,L.slice_from("t"));break;case 3:L.slice_from("ist")}_=!0}}function b(){var e,i,r;if(L.cursor>=h){if(i=L.limit_backward,L.limit_backward=h,L.ket=L.cursor,e=L.find_among_b(q,94))switch(L.bra=L.cursor,e){case 1:if(r=L.limit-L.cursor,!L.out_grouping_b(W,97,259)&&(L.cursor=L.limit-r,!L.eq_s_b(1,"u")))break;case 2:L.slice_del()}L.limit_backward=i}}function v(){var e;L.ket=L.cursor,(e=L.find_among_b(S,5))&&(L.bra=L.cursor,w()&&1==e&&L.slice_del())}var _,g,k,h,z=[new i("",-1,3),new i("I",0,1),new i("U",0,2)],C=[new i("ea",-1,3),new i("aţia",-1,7),new i("aua",-1,2),new i("iua",-1,4),new i("aţie",-1,7),new i("ele",-1,3),new i("ile",-1,5),new i("iile",6,4),new i("iei",-1,4),new i("atei",-1,6),new i("ii",-1,4),new i("ului",-1,1),new i("ul",-1,1),new i("elor",-1,3),new i("ilor",-1,4),new i("iilor",14,4)],P=[new i("icala",-1,4),new i("iciva",-1,4),new i("ativa",-1,5),new i("itiva",-1,6),new i("icale",-1,4),new i("aţiune",-1,5),new i("iţiune",-1,6),new i("atoare",-1,5),new i("itoare",-1,6),new i("ătoare",-1,5),new i("icitate",-1,4),new i("abilitate",-1,1),new i("ibilitate",-1,2),new i("ivitate",-1,3),new i("icive",-1,4),new i("ative",-1,5),new i("itive",-1,6),new i("icali",-1,4),new i("atori",-1,5),new i("icatori",18,4),new i("itori",-1,6),new i("ători",-1,5),new i("icitati",-1,4),new i("abilitati",-1,1),new i("ivitati",-1,3),new i("icivi",-1,4),new i("ativi",-1,5),new i("itivi",-1,6),new i("icităi",-1,4),new i("abilităi",-1,1),new i("ivităi",-1,3),new i("icităţi",-1,4),new i("abilităţi",-1,1),new i("ivităţi",-1,3),new i("ical",-1,4),new i("ator",-1,5),new i("icator",35,4),new i("itor",-1,6),new i("ător",-1,5),new i("iciv",-1,4),new i("ativ",-1,5),new i("itiv",-1,6),new i("icală",-1,4),new i("icivă",-1,4),new i("ativă",-1,5),new i("itivă",-1,6)],F=[new i("ica",-1,1),new i("abila",-1,1),new i("ibila",-1,1),new i("oasa",-1,1),new i("ata",-1,1),new i("ita",-1,1),new i("anta",-1,1),new i("ista",-1,3),new i("uta",-1,1),new i("iva",-1,1),new i("ic",-1,1),new i("ice",-1,1),new i("abile",-1,1),new i("ibile",-1,1),new i("isme",-1,3),new i("iune",-1,2),new i("oase",-1,1),new i("ate",-1,1),new i("itate",17,1),new i("ite",-1,1),new i("ante",-1,1),new i("iste",-1,3),new i("ute",-1,1),new i("ive",-1,1),new i("ici",-1,1),new i("abili",-1,1),new i("ibili",-1,1),new i("iuni",-1,2),new i("atori",-1,1),new i("osi",-1,1),new i("ati",-1,1),new i("itati",30,1),new i("iti",-1,1),new i("anti",-1,1),new i("isti",-1,3),new i("uti",-1,1),new i("işti",-1,3),new i("ivi",-1,1),new i("ităi",-1,1),new i("oşi",-1,1),new i("ităţi",-1,1),new i("abil",-1,1),new i("ibil",-1,1),new i("ism",-1,3),new i("ator",-1,1),new i("os",-1,1),new i("at",-1,1),new i("it",-1,1),new i("ant",-1,1),new i("ist",-1,3),new i("ut",-1,1),new i("iv",-1,1),new i("ică",-1,1),new i("abilă",-1,1),new i("ibilă",-1,1),new i("oasă",-1,1),new i("ată",-1,1),new i("ită",-1,1),new i("antă",-1,1),new i("istă",-1,3),new i("ută",-1,1),new i("ivă",-1,1)],q=[new i("ea",-1,1),new i("ia",-1,1),new i("esc",-1,1),new i("ăsc",-1,1),new i("ind",-1,1),new i("ând",-1,1),new i("are",-1,1),new i("ere",-1,1),new i("ire",-1,1),new i("âre",-1,1),new i("se",-1,2),new i("ase",10,1),new i("sese",10,2),new i("ise",10,1),new i("use",10,1),new i("âse",10,1),new i("eşte",-1,1),new i("ăşte",-1,1),new i("eze",-1,1),new i("ai",-1,1),new i("eai",19,1),new i("iai",19,1),new i("sei",-1,2),new i("eşti",-1,1),new i("ăşti",-1,1),new i("ui",-1,1),new i("ezi",-1,1),new i("âi",-1,1),new i("aşi",-1,1),new i("seşi",-1,2),new i("aseşi",29,1),new i("seseşi",29,2),new i("iseşi",29,1),new i("useşi",29,1),new i("âseşi",29,1),new i("işi",-1,1),new i("uşi",-1,1),new i("âşi",-1,1),new i("aţi",-1,2),new i("eaţi",38,1),new i("iaţi",38,1),new i("eţi",-1,2),new i("iţi",-1,2),new i("âţi",-1,2),new i("arăţi",-1,1),new i("serăţi",-1,2),new i("aserăţi",45,1),new i("seserăţi",45,2),new i("iserăţi",45,1),new i("userăţi",45,1),new i("âserăţi",45,1),new i("irăţi",-1,1),new i("urăţi",-1,1),new i("ârăţi",-1,1),new i("am",-1,1),new i("eam",54,1),new i("iam",54,1),new i("em",-1,2),new i("asem",57,1),new i("sesem",57,2),new i("isem",57,1),new i("usem",57,1),new i("âsem",57,1),new i("im",-1,2),new i("âm",-1,2),new i("ăm",-1,2),new i("arăm",65,1),new i("serăm",65,2),new i("aserăm",67,1),new i("seserăm",67,2),new i("iserăm",67,1),new i("userăm",67,1),new i("âserăm",67,1),new i("irăm",65,1),new i("urăm",65,1),new i("ârăm",65,1),new i("au",-1,1),new i("eau",76,1),new i("iau",76,1),new i("indu",-1,1),new i("ându",-1,1),new i("ez",-1,1),new i("ească",-1,1),new i("ară",-1,1),new i("seră",-1,2),new i("aseră",84,1),new i("seseră",84,2),new i("iseră",84,1),new i("useră",84,1),new i("âseră",84,1),new i("iră",-1,1),new i("ură",-1,1),new i("âră",-1,1),new i("ează",-1,1)],S=[new i("a",-1,1),new i("e",-1,1),new i("ie",1,1),new i("i",-1,1),new i("ă",-1,1)],W=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,2,32,0,0,4],L=new r;this.setCurrent=function(e){L.setCurrent(e)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){var e=L.cursor;return n(),L.cursor=e,c(),L.limit_backward=e,L.cursor=L.limit,f(),L.cursor=L.limit,d(),L.cursor=L.limit,_||(L.cursor=L.limit,b(),L.cursor=L.limit),v(),L.cursor=L.limit_backward,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.ro.stemmer,"stemmer-ro"),e.ro.stopWordFilter=e.generateStopWordFilter("acea aceasta această aceea acei aceia acel acela acele acelea acest acesta aceste acestea aceşti aceştia acolo acord acum ai aia aibă aici al ale alea altceva altcineva am ar are asemenea asta astea astăzi asupra au avea avem aveţi azi aş aşadar aţi bine bucur bună ca care caut ce cel ceva chiar cinci cine cineva contra cu cum cumva curând curînd când cât câte câtva câţi cînd cît cîte cîtva cîţi că căci cărei căror cărui către da dacă dar datorită dată dau de deci deja deoarece departe deşi din dinaintea dintr- dintre doi doilea două drept după dă ea ei el ele eram este eu eşti face fata fi fie fiecare fii fim fiu fiţi frumos fără graţie halbă iar ieri la le li lor lui lângă lîngă mai mea mei mele mereu meu mi mie mine mult multă mulţi mulţumesc mâine mîine mă ne nevoie nici nicăieri nimeni nimeri nimic nişte noastre noastră noi noroc nostru nouă noştri nu opt ori oricare orice oricine oricum oricând oricât oricînd oricît oriunde patra patru patrulea pe pentru peste pic poate pot prea prima primul prin puţin puţina puţină până pînă rog sa sale sau se spate spre sub sunt suntem sunteţi sută sînt sîntem sînteţi să săi său ta tale te timp tine toate toată tot totuşi toţi trei treia treilea tu tăi tău un una unde undeva unei uneia unele uneori unii unor unora unu unui unuia unul vi voastre voastră voi vostru vouă voştri vreme vreo vreun vă zece zero zi zice îi îl îmi împotriva în înainte înaintea încotro încât încît între întrucât întrucît îţi ăla ălea ăsta ăstea ăştia şapte şase şi ştiu ţi ţie".split(" ")),e.Pipeline.registerFunction(e.ro.stopWordFilter,"stopWordFilter-ro")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ru.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ru.min.js new file mode 100644 index 0000000000..186cc485c2 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ru.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Russian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ru=function(){this.pipeline.reset(),this.pipeline.add(e.ru.trimmer,e.ru.stopWordFilter,e.ru.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ru.stemmer))},e.ru.wordCharacters="Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯",e.ru.trimmer=e.trimmerSupport.generateTrimmer(e.ru.wordCharacters),e.Pipeline.registerFunction(e.ru.trimmer,"trimmer-ru"),e.ru.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,t=new function(){function e(){for(;!W.in_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function t(){for(;!W.out_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function w(){b=W.limit,_=b,e()&&(b=W.cursor,t()&&e()&&t()&&(_=W.cursor))}function i(){return _<=W.cursor}function u(e,n){var r,t;if(W.ket=W.cursor,r=W.find_among_b(e,n)){switch(W.bra=W.cursor,r){case 1:if(t=W.limit-W.cursor,!W.eq_s_b(1,"а")&&(W.cursor=W.limit-t,!W.eq_s_b(1,"я")))return!1;case 2:W.slice_del()}return!0}return!1}function o(){return u(h,9)}function s(e,n){var r;return W.ket=W.cursor,!!(r=W.find_among_b(e,n))&&(W.bra=W.cursor,1==r&&W.slice_del(),!0)}function c(){return s(g,26)}function m(){return!!c()&&(u(C,8),!0)}function f(){return s(k,2)}function l(){return u(P,46)}function a(){s(v,36)}function p(){var e;W.ket=W.cursor,(e=W.find_among_b(F,2))&&(W.bra=W.cursor,i()&&1==e&&W.slice_del())}function d(){var e;if(W.ket=W.cursor,e=W.find_among_b(q,4))switch(W.bra=W.cursor,e){case 1:if(W.slice_del(),W.ket=W.cursor,!W.eq_s_b(1,"н"))break;W.bra=W.cursor;case 2:if(!W.eq_s_b(1,"н"))break;case 3:W.slice_del()}}var _,b,h=[new n("в",-1,1),new n("ив",0,2),new n("ыв",0,2),new n("вши",-1,1),new n("ивши",3,2),new n("ывши",3,2),new n("вшись",-1,1),new n("ившись",6,2),new n("ывшись",6,2)],g=[new n("ее",-1,1),new n("ие",-1,1),new n("ое",-1,1),new n("ые",-1,1),new n("ими",-1,1),new n("ыми",-1,1),new n("ей",-1,1),new n("ий",-1,1),new n("ой",-1,1),new n("ый",-1,1),new n("ем",-1,1),new n("им",-1,1),new n("ом",-1,1),new n("ым",-1,1),new n("его",-1,1),new n("ого",-1,1),new n("ему",-1,1),new n("ому",-1,1),new n("их",-1,1),new n("ых",-1,1),new n("ею",-1,1),new n("ою",-1,1),new n("ую",-1,1),new n("юю",-1,1),new n("ая",-1,1),new n("яя",-1,1)],C=[new n("ем",-1,1),new n("нн",-1,1),new n("вш",-1,1),new n("ивш",2,2),new n("ывш",2,2),new n("щ",-1,1),new n("ющ",5,1),new n("ующ",6,2)],k=[new n("сь",-1,1),new n("ся",-1,1)],P=[new n("ла",-1,1),new n("ила",0,2),new n("ыла",0,2),new n("на",-1,1),new n("ена",3,2),new n("ете",-1,1),new n("ите",-1,2),new n("йте",-1,1),new n("ейте",7,2),new n("уйте",7,2),new n("ли",-1,1),new n("или",10,2),new n("ыли",10,2),new n("й",-1,1),new n("ей",13,2),new n("уй",13,2),new n("л",-1,1),new n("ил",16,2),new n("ыл",16,2),new n("ем",-1,1),new n("им",-1,2),new n("ым",-1,2),new n("н",-1,1),new n("ен",22,2),new n("ло",-1,1),new n("ило",24,2),new n("ыло",24,2),new n("но",-1,1),new n("ено",27,2),new n("нно",27,1),new n("ет",-1,1),new n("ует",30,2),new n("ит",-1,2),new n("ыт",-1,2),new n("ют",-1,1),new n("уют",34,2),new n("ят",-1,2),new n("ны",-1,1),new n("ены",37,2),new n("ть",-1,1),new n("ить",39,2),new n("ыть",39,2),new n("ешь",-1,1),new n("ишь",-1,2),new n("ю",-1,2),new n("ую",44,2)],v=[new n("а",-1,1),new n("ев",-1,1),new n("ов",-1,1),new n("е",-1,1),new n("ие",3,1),new n("ье",3,1),new n("и",-1,1),new n("еи",6,1),new n("ии",6,1),new n("ами",6,1),new n("ями",6,1),new n("иями",10,1),new n("й",-1,1),new n("ей",12,1),new n("ией",13,1),new n("ий",12,1),new n("ой",12,1),new n("ам",-1,1),new n("ем",-1,1),new n("ием",18,1),new n("ом",-1,1),new n("ям",-1,1),new n("иям",21,1),new n("о",-1,1),new n("у",-1,1),new n("ах",-1,1),new n("ях",-1,1),new n("иях",26,1),new n("ы",-1,1),new n("ь",-1,1),new n("ю",-1,1),new n("ию",30,1),new n("ью",30,1),new n("я",-1,1),new n("ия",33,1),new n("ья",33,1)],F=[new n("ост",-1,1),new n("ость",-1,1)],q=[new n("ейше",-1,1),new n("н",-1,2),new n("ейш",-1,1),new n("ь",-1,3)],S=[33,65,8,232],W=new r;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){return w(),W.cursor=W.limit,!(W.cursor=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursors||e>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor>1),f=0,l=o0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.sv.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.sv.min.js new file mode 100644 index 0000000000..3e5eb64000 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.sv.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Swedish` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ta.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ta.min.js new file mode 100644 index 0000000000..a644bed228 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.ta.min.js @@ -0,0 +1 @@ +!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ta=function(){this.pipeline.reset(),this.pipeline.add(e.ta.trimmer,e.ta.stopWordFilter,e.ta.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ta.stemmer))},e.ta.wordCharacters="஀-உஊ-ஏஐ-ஙச-ட஠-னப-யர-ஹ஺-ிீ-௉ொ-௏ௐ-௙௚-௟௠-௩௪-௯௰-௹௺-௿a-zA-Za-zA-Z0-90-9",e.ta.trimmer=e.trimmerSupport.generateTrimmer(e.ta.wordCharacters),e.Pipeline.registerFunction(e.ta.trimmer,"trimmer-ta"),e.ta.stopWordFilter=e.generateStopWordFilter("அங்கு அங்கே அது அதை அந்த அவர் அவர்கள் அவள் அவன் அவை ஆக ஆகவே ஆகையால் ஆதலால் ஆதலினால் ஆனாலும் ஆனால் இங்கு இங்கே இது இதை இந்த இப்படி இவர் இவர்கள் இவள் இவன் இவை இவ்வளவு உனக்கு உனது உன் உன்னால் எங்கு எங்கே எது எதை எந்த எப்படி எவர் எவர்கள் எவள் எவன் எவை எவ்வளவு எனக்கு எனது எனவே என் என்ன என்னால் ஏது ஏன் தனது தன்னால் தானே தான் நாங்கள் நாம் நான் நீ நீங்கள்".split(" ")),e.ta.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.ta.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.ta.stemmer,"stemmer-ta"),e.Pipeline.registerFunction(e.ta.stopWordFilter,"stopWordFilter-ta")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.te.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.te.min.js new file mode 100644 index 0000000000..9fa7a93b99 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.te.min.js @@ -0,0 +1 @@ +!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.te=function(){this.pipeline.reset(),this.pipeline.add(e.te.trimmer,e.te.stopWordFilter,e.te.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.te.stemmer))},e.te.wordCharacters="ఀ-ఄఅ-ఔక-హా-ౌౕ-ౖౘ-ౚౠ-ౡౢ-ౣ౦-౯౸-౿఼ఽ్ౝ౷౤౥",e.te.trimmer=e.trimmerSupport.generateTrimmer(e.te.wordCharacters),e.Pipeline.registerFunction(e.te.trimmer,"trimmer-te"),e.te.stopWordFilter=e.generateStopWordFilter("అందరూ అందుబాటులో అడగండి అడగడం అడ్డంగా అనుగుణంగా అనుమతించు అనుమతిస్తుంది అయితే ఇప్పటికే ఉన్నారు ఎక్కడైనా ఎప్పుడు ఎవరైనా ఎవరో ఏ ఏదైనా ఏమైనప్పటికి ఒక ఒకరు కనిపిస్తాయి కాదు కూడా గా గురించి చుట్టూ చేయగలిగింది తగిన తర్వాత దాదాపు దూరంగా నిజంగా పై ప్రకారం ప్రక్కన మధ్య మరియు మరొక మళ్ళీ మాత్రమే మెచ్చుకో వద్ద వెంట వేరుగా వ్యతిరేకంగా సంబంధం".split(" ")),e.te.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.te.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.te.stemmer,"stemmer-te"),e.Pipeline.registerFunction(e.te.stopWordFilter,"stopWordFilter-te")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.th.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.th.min.js new file mode 100644 index 0000000000..dee3aac6e5 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.th.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[฀-๿]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.tr.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.tr.min.js new file mode 100644 index 0000000000..563f6ec1f5 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.tr.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Turkish` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(r,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");r.tr=function(){this.pipeline.reset(),this.pipeline.add(r.tr.trimmer,r.tr.stopWordFilter,r.tr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.tr.stemmer))},r.tr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.tr.trimmer=r.trimmerSupport.generateTrimmer(r.tr.wordCharacters),r.Pipeline.registerFunction(r.tr.trimmer,"trimmer-tr"),r.tr.stemmer=function(){var i=r.stemmerSupport.Among,e=r.stemmerSupport.SnowballProgram,n=new function(){function r(r,i,e){for(;;){var n=Dr.limit-Dr.cursor;if(Dr.in_grouping_b(r,i,e)){Dr.cursor=Dr.limit-n;break}if(Dr.cursor=Dr.limit-n,Dr.cursor<=Dr.limit_backward)return!1;Dr.cursor--}return!0}function n(){var i,e;i=Dr.limit-Dr.cursor,r(Wr,97,305);for(var n=0;nDr.limit_backward&&(Dr.cursor--,e=Dr.limit-Dr.cursor,i()))?(Dr.cursor=Dr.limit-e,!0):(Dr.cursor=Dr.limit-n,r()?(Dr.cursor=Dr.limit-n,!1):(Dr.cursor=Dr.limit-n,!(Dr.cursor<=Dr.limit_backward)&&(Dr.cursor--,!!i()&&(Dr.cursor=Dr.limit-n,!0))))}function u(r){return t(r,function(){return Dr.in_grouping_b(Wr,97,305)})}function o(){return u(function(){return Dr.eq_s_b(1,"n")})}function s(){return u(function(){return Dr.eq_s_b(1,"s")})}function c(){return u(function(){return Dr.eq_s_b(1,"y")})}function l(){return t(function(){return Dr.in_grouping_b(Lr,105,305)},function(){return Dr.out_grouping_b(Wr,97,305)})}function a(){return Dr.find_among_b(ur,10)&&l()}function m(){return n()&&Dr.in_grouping_b(Lr,105,305)&&s()}function d(){return Dr.find_among_b(or,2)}function f(){return n()&&Dr.in_grouping_b(Lr,105,305)&&c()}function b(){return n()&&Dr.find_among_b(sr,4)}function w(){return n()&&Dr.find_among_b(cr,4)&&o()}function _(){return n()&&Dr.find_among_b(lr,2)&&c()}function k(){return n()&&Dr.find_among_b(ar,2)}function p(){return n()&&Dr.find_among_b(mr,4)}function g(){return n()&&Dr.find_among_b(dr,2)}function y(){return n()&&Dr.find_among_b(fr,4)}function z(){return n()&&Dr.find_among_b(br,2)}function v(){return n()&&Dr.find_among_b(wr,2)&&c()}function h(){return Dr.eq_s_b(2,"ki")}function q(){return n()&&Dr.find_among_b(_r,2)&&o()}function C(){return n()&&Dr.find_among_b(kr,4)&&c()}function P(){return n()&&Dr.find_among_b(pr,4)}function F(){return n()&&Dr.find_among_b(gr,4)&&c()}function S(){return Dr.find_among_b(yr,4)}function W(){return n()&&Dr.find_among_b(zr,2)}function L(){return n()&&Dr.find_among_b(vr,4)}function x(){return n()&&Dr.find_among_b(hr,8)}function A(){return Dr.find_among_b(qr,2)}function E(){return n()&&Dr.find_among_b(Cr,32)&&c()}function j(){return Dr.find_among_b(Pr,8)&&c()}function T(){return n()&&Dr.find_among_b(Fr,4)&&c()}function Z(){return Dr.eq_s_b(3,"ken")&&c()}function B(){var r=Dr.limit-Dr.cursor;return!(T()||(Dr.cursor=Dr.limit-r,E()||(Dr.cursor=Dr.limit-r,j()||(Dr.cursor=Dr.limit-r,Z()))))}function D(){if(A()){var r=Dr.limit-Dr.cursor;if(S()||(Dr.cursor=Dr.limit-r,W()||(Dr.cursor=Dr.limit-r,C()||(Dr.cursor=Dr.limit-r,P()||(Dr.cursor=Dr.limit-r,F()||(Dr.cursor=Dr.limit-r))))),T())return!1}return!0}function G(){if(W()){Dr.bra=Dr.cursor,Dr.slice_del();var r=Dr.limit-Dr.cursor;return Dr.ket=Dr.cursor,x()||(Dr.cursor=Dr.limit-r,E()||(Dr.cursor=Dr.limit-r,j()||(Dr.cursor=Dr.limit-r,T()||(Dr.cursor=Dr.limit-r)))),nr=!1,!1}return!0}function H(){if(!L())return!0;var r=Dr.limit-Dr.cursor;return!E()&&(Dr.cursor=Dr.limit-r,!j())}function I(){var r,i=Dr.limit-Dr.cursor;return!(S()||(Dr.cursor=Dr.limit-i,F()||(Dr.cursor=Dr.limit-i,P()||(Dr.cursor=Dr.limit-i,C()))))||(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,T()||(Dr.cursor=Dr.limit-r),!1)}function J(){var r,i=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,nr=!0,B()&&(Dr.cursor=Dr.limit-i,D()&&(Dr.cursor=Dr.limit-i,G()&&(Dr.cursor=Dr.limit-i,H()&&(Dr.cursor=Dr.limit-i,I()))))){if(Dr.cursor=Dr.limit-i,!x())return;Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,r=Dr.limit-Dr.cursor,S()||(Dr.cursor=Dr.limit-r,W()||(Dr.cursor=Dr.limit-r,C()||(Dr.cursor=Dr.limit-r,P()||(Dr.cursor=Dr.limit-r,F()||(Dr.cursor=Dr.limit-r))))),T()||(Dr.cursor=Dr.limit-r)}Dr.bra=Dr.cursor,Dr.slice_del()}function K(){var r,i,e,n;if(Dr.ket=Dr.cursor,h()){if(r=Dr.limit-Dr.cursor,p())return Dr.bra=Dr.cursor,Dr.slice_del(),i=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,W()?(Dr.bra=Dr.cursor,Dr.slice_del(),K()):(Dr.cursor=Dr.limit-i,a()&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()))),!0;if(Dr.cursor=Dr.limit-r,w()){if(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,e=Dr.limit-Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else{if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,!a()&&(Dr.cursor=Dr.limit-e,!m()&&(Dr.cursor=Dr.limit-e,!K())))return!0;Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())}return!0}if(Dr.cursor=Dr.limit-r,g()){if(n=Dr.limit-Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else if(Dr.cursor=Dr.limit-n,m())Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K());else if(Dr.cursor=Dr.limit-n,!K())return!1;return!0}}return!1}function M(r){if(Dr.ket=Dr.cursor,!g()&&(Dr.cursor=Dr.limit-r,!k()))return!1;var i=Dr.limit-Dr.cursor;if(d())Dr.bra=Dr.cursor,Dr.slice_del();else if(Dr.cursor=Dr.limit-i,m())Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K());else if(Dr.cursor=Dr.limit-i,!K())return!1;return!0}function N(r){if(Dr.ket=Dr.cursor,!z()&&(Dr.cursor=Dr.limit-r,!b()))return!1;var i=Dr.limit-Dr.cursor;return!(!m()&&(Dr.cursor=Dr.limit-i,!d()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()),!0)}function O(){var r,i=Dr.limit-Dr.cursor;return Dr.ket=Dr.cursor,!(!w()&&(Dr.cursor=Dr.limit-i,!v()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,!(!W()||(Dr.bra=Dr.cursor,Dr.slice_del(),!K()))||(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!(a()||(Dr.cursor=Dr.limit-r,m()||(Dr.cursor=Dr.limit-r,K())))||(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()),!0)))}function Q(){var r,i,e=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,!p()&&(Dr.cursor=Dr.limit-e,!f()&&(Dr.cursor=Dr.limit-e,!_())))return!1;if(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,r=Dr.limit-Dr.cursor,a())Dr.bra=Dr.cursor,Dr.slice_del(),i=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,W()||(Dr.cursor=Dr.limit-i);else if(Dr.cursor=Dr.limit-r,!W())return!0;return Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,K(),!0}function R(){var r,i,e=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,W())return Dr.bra=Dr.cursor,Dr.slice_del(),void K();if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,q())if(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else{if(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!a()&&(Dr.cursor=Dr.limit-r,!m())){if(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!W())return;if(Dr.bra=Dr.cursor,Dr.slice_del(),!K())return}Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())}else if(Dr.cursor=Dr.limit-e,!M(e)&&(Dr.cursor=Dr.limit-e,!N(e))){if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,y())return Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,i=Dr.limit-Dr.cursor,void(a()?(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())):(Dr.cursor=Dr.limit-i,W()?(Dr.bra=Dr.cursor,Dr.slice_del(),K()):(Dr.cursor=Dr.limit-i,K())));if(Dr.cursor=Dr.limit-e,!O()){if(Dr.cursor=Dr.limit-e,d())return Dr.bra=Dr.cursor,void Dr.slice_del();Dr.cursor=Dr.limit-e,K()||(Dr.cursor=Dr.limit-e,Q()||(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,(a()||(Dr.cursor=Dr.limit-e,m()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()))))}}}function U(){var r;if(Dr.ket=Dr.cursor,r=Dr.find_among_b(Sr,4))switch(Dr.bra=Dr.cursor,r){case 1:Dr.slice_from("p");break;case 2:Dr.slice_from("ç");break;case 3:Dr.slice_from("t");break;case 4:Dr.slice_from("k")}}function V(){for(;;){var r=Dr.limit-Dr.cursor;if(Dr.in_grouping_b(Wr,97,305)){Dr.cursor=Dr.limit-r;break}if(Dr.cursor=Dr.limit-r,Dr.cursor<=Dr.limit_backward)return!1;Dr.cursor--}return!0}function X(r,i,e){if(Dr.cursor=Dr.limit-r,V()){var n=Dr.limit-Dr.cursor;if(!Dr.eq_s_b(1,i)&&(Dr.cursor=Dr.limit-n,!Dr.eq_s_b(1,e)))return!0;Dr.cursor=Dr.limit-r;var t=Dr.cursor;return Dr.insert(Dr.cursor,Dr.cursor,e),Dr.cursor=t,!1}return!0}function Y(){var r=Dr.limit-Dr.cursor;(Dr.eq_s_b(1,"d")||(Dr.cursor=Dr.limit-r,Dr.eq_s_b(1,"g")))&&X(r,"a","ı")&&X(r,"e","i")&&X(r,"o","u")&&X(r,"ö","ü")}function $(){for(var r,i=Dr.cursor,e=2;;){for(r=Dr.cursor;!Dr.in_grouping(Wr,97,305);){if(Dr.cursor>=Dr.limit)return Dr.cursor=r,!(e>0)&&(Dr.cursor=i,!0);Dr.cursor++}e--}}function rr(r,i,e){for(;!Dr.eq_s(i,e);){if(Dr.cursor>=Dr.limit)return!0;Dr.cursor++}return(tr=i)!=Dr.limit||(Dr.cursor=r,!1)}function ir(){var r=Dr.cursor;return!rr(r,2,"ad")||(Dr.cursor=r,!rr(r,5,"soyad"))}function er(){var r=Dr.cursor;return!ir()&&(Dr.limit_backward=r,Dr.cursor=Dr.limit,Y(),Dr.cursor=Dr.limit,U(),!0)}var nr,tr,ur=[new i("m",-1,-1),new i("n",-1,-1),new i("miz",-1,-1),new i("niz",-1,-1),new i("muz",-1,-1),new i("nuz",-1,-1),new i("müz",-1,-1),new i("nüz",-1,-1),new i("mız",-1,-1),new i("nız",-1,-1)],or=[new i("leri",-1,-1),new i("ları",-1,-1)],sr=[new i("ni",-1,-1),new i("nu",-1,-1),new i("nü",-1,-1),new i("nı",-1,-1)],cr=[new i("in",-1,-1),new i("un",-1,-1),new i("ün",-1,-1),new i("ın",-1,-1)],lr=[new i("a",-1,-1),new i("e",-1,-1)],ar=[new i("na",-1,-1),new i("ne",-1,-1)],mr=[new i("da",-1,-1),new i("ta",-1,-1),new i("de",-1,-1),new i("te",-1,-1)],dr=[new i("nda",-1,-1),new i("nde",-1,-1)],fr=[new i("dan",-1,-1),new i("tan",-1,-1),new i("den",-1,-1),new i("ten",-1,-1)],br=[new i("ndan",-1,-1),new i("nden",-1,-1)],wr=[new i("la",-1,-1),new i("le",-1,-1)],_r=[new i("ca",-1,-1),new i("ce",-1,-1)],kr=[new i("im",-1,-1),new i("um",-1,-1),new i("üm",-1,-1),new i("ım",-1,-1)],pr=[new i("sin",-1,-1),new i("sun",-1,-1),new i("sün",-1,-1),new i("sın",-1,-1)],gr=[new i("iz",-1,-1),new i("uz",-1,-1),new i("üz",-1,-1),new i("ız",-1,-1)],yr=[new i("siniz",-1,-1),new i("sunuz",-1,-1),new i("sünüz",-1,-1),new i("sınız",-1,-1)],zr=[new i("lar",-1,-1),new i("ler",-1,-1)],vr=[new i("niz",-1,-1),new i("nuz",-1,-1),new i("nüz",-1,-1),new i("nız",-1,-1)],hr=[new i("dir",-1,-1),new i("tir",-1,-1),new i("dur",-1,-1),new i("tur",-1,-1),new i("dür",-1,-1),new i("tür",-1,-1),new i("dır",-1,-1),new i("tır",-1,-1)],qr=[new i("casına",-1,-1),new i("cesine",-1,-1)],Cr=[new i("di",-1,-1),new i("ti",-1,-1),new i("dik",-1,-1),new i("tik",-1,-1),new i("duk",-1,-1),new i("tuk",-1,-1),new i("dük",-1,-1),new i("tük",-1,-1),new i("dık",-1,-1),new i("tık",-1,-1),new i("dim",-1,-1),new i("tim",-1,-1),new i("dum",-1,-1),new i("tum",-1,-1),new i("düm",-1,-1),new i("tüm",-1,-1),new i("dım",-1,-1),new i("tım",-1,-1),new i("din",-1,-1),new i("tin",-1,-1),new i("dun",-1,-1),new i("tun",-1,-1),new i("dün",-1,-1),new i("tün",-1,-1),new i("dın",-1,-1),new i("tın",-1,-1),new i("du",-1,-1),new i("tu",-1,-1),new i("dü",-1,-1),new i("tü",-1,-1),new i("dı",-1,-1),new i("tı",-1,-1)],Pr=[new i("sa",-1,-1),new i("se",-1,-1),new i("sak",-1,-1),new i("sek",-1,-1),new i("sam",-1,-1),new i("sem",-1,-1),new i("san",-1,-1),new i("sen",-1,-1)],Fr=[new i("miş",-1,-1),new i("muş",-1,-1),new i("müş",-1,-1),new i("mış",-1,-1)],Sr=[new i("b",-1,1),new i("c",-1,2),new i("d",-1,3),new i("ğ",-1,4)],Wr=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,8,0,0,0,0,0,0,1],Lr=[1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,1],xr=[1,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],Ar=[17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130],Er=[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],jr=[17],Tr=[65],Zr=[65],Br=[["a",xr,97,305],["e",Ar,101,252],["ı",Er,97,305],["i",jr,101,105],["o",Tr,111,117],["ö",Zr,246,252],["u",Tr,111,117]],Dr=new e;this.setCurrent=function(r){Dr.setCurrent(r)},this.getCurrent=function(){return Dr.getCurrent()},this.stem=function(){return!!($()&&(Dr.limit_backward=Dr.cursor,Dr.cursor=Dr.limit,J(),Dr.cursor=Dr.limit,nr&&(R(),Dr.cursor=Dr.limit_backward,er())))}};return function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}}(),r.Pipeline.registerFunction(r.tr.stemmer,"stemmer-tr"),r.tr.stopWordFilter=r.generateStopWordFilter("acaba altmış altı ama ancak arada aslında ayrıca bana bazı belki ben benden beni benim beri beş bile bin bir biri birkaç birkez birçok birşey birşeyi biz bizden bize bizi bizim bu buna bunda bundan bunlar bunları bunların bunu bunun burada böyle böylece da daha dahi de defa değil diye diğer doksan dokuz dolayı dolayısıyla dört edecek eden ederek edilecek ediliyor edilmesi ediyor elli en etmesi etti ettiği ettiğini eğer gibi göre halen hangi hatta hem henüz hep hepsi her herhangi herkesin hiç hiçbir iki ile ilgili ise itibaren itibariyle için işte kadar karşın katrilyon kendi kendilerine kendini kendisi kendisine kendisini kez ki kim kimden kime kimi kimse kırk milyar milyon mu mü mı nasıl ne neden nedenle nerde nerede nereye niye niçin o olan olarak oldu olduklarını olduğu olduğunu olmadı olmadığı olmak olması olmayan olmaz olsa olsun olup olur olursa oluyor on ona ondan onlar onlardan onları onların onu onun otuz oysa pek rağmen sadece sanki sekiz seksen sen senden seni senin siz sizden sizi sizin tarafından trilyon tüm var vardı ve veya ya yani yapacak yapmak yaptı yaptıkları yaptığı yaptığını yapılan yapılması yapıyor yedi yerine yetmiş yine yirmi yoksa yüz zaten çok çünkü öyle üzere üç şey şeyden şeyi şeyler şu şuna şunda şundan şunları şunu şöyle".split(" ")),r.Pipeline.registerFunction(r.tr.stopWordFilter,"stopWordFilter-tr")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.vi.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.vi.min.js new file mode 100644 index 0000000000..22aed28c49 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.vi.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.zh.min.js b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.zh.min.js new file mode 100644 index 0000000000..fda66e9c57 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/min/lunr.zh.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("@node-rs/jieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 為 以 于 於 上 他 而 后 後 之 来 來 及 了 因 下 可 到 由 这 這 与 與 也 此 但 并 並 个 個 其 已 无 無 小 我 们 們 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 當 从 從 得 打 凡 儿 兒 尔 爾 该 該 各 给 給 跟 和 何 还 還 即 几 幾 既 看 据 據 距 靠 啦 另 么 麽 每 嘛 拿 哪 您 凭 憑 且 却 卻 让 讓 仍 啥 如 若 使 谁 誰 虽 雖 随 隨 同 所 她 哇 嗡 往 些 向 沿 哟 喲 用 咱 则 則 怎 曾 至 致 着 著 诸 諸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/tinyseg.js b/pr-preview/pr-478/assets/javascripts/lunr/tinyseg.js new file mode 100644 index 0000000000..167fa6dd69 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/tinyseg.js @@ -0,0 +1,206 @@ +/** + * export the module via AMD, CommonJS or as a browser global + * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js + */ +;(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(factory) + } else if (typeof exports === 'object') { + /** + * Node. Does not work with strict CommonJS, but + * only CommonJS-like environments that support module.exports, + * like Node. + */ + module.exports = factory() + } else { + // Browser globals (root is window) + factory()(root.lunr); + } +}(this, function () { + /** + * Just return a value to define the module export. + * This example returns an object, but the module + * can return a function as the exported value. + */ + + return function(lunr) { + // TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript + // (c) 2008 Taku Kudo + // TinySegmenter is freely distributable under the terms of a new BSD licence. + // For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt + + function TinySegmenter() { + var patterns = { + "[一二三四五六七八九十百千万億兆]":"M", + "[一-龠々〆ヵヶ]":"H", + "[ぁ-ん]":"I", + "[ァ-ヴーア-ン゙ー]":"K", + "[a-zA-Za-zA-Z]":"A", + "[0-90-9]":"N" + } + this.chartype_ = []; + for (var i in patterns) { + var regexp = new RegExp(i); + this.chartype_.push([regexp, patterns[i]]); + } + + this.BIAS__ = -332 + this.BC1__ = {"HH":6,"II":2461,"KH":406,"OH":-1378}; + this.BC2__ = {"AA":-3267,"AI":2744,"AN":-878,"HH":-4070,"HM":-1711,"HN":4012,"HO":3761,"IA":1327,"IH":-1184,"II":-1332,"IK":1721,"IO":5492,"KI":3831,"KK":-8741,"MH":-3132,"MK":3334,"OO":-2920}; + this.BC3__ = {"HH":996,"HI":626,"HK":-721,"HN":-1307,"HO":-836,"IH":-301,"KK":2762,"MK":1079,"MM":4034,"OA":-1652,"OH":266}; + this.BP1__ = {"BB":295,"OB":304,"OO":-125,"UB":352}; + this.BP2__ = {"BO":60,"OO":-1762}; + this.BQ1__ = {"BHH":1150,"BHM":1521,"BII":-1158,"BIM":886,"BMH":1208,"BNH":449,"BOH":-91,"BOO":-2597,"OHI":451,"OIH":-296,"OKA":1851,"OKH":-1020,"OKK":904,"OOO":2965}; + this.BQ2__ = {"BHH":118,"BHI":-1159,"BHM":466,"BIH":-919,"BKK":-1720,"BKO":864,"OHH":-1139,"OHM":-181,"OIH":153,"UHI":-1146}; + this.BQ3__ = {"BHH":-792,"BHI":2664,"BII":-299,"BKI":419,"BMH":937,"BMM":8335,"BNN":998,"BOH":775,"OHH":2174,"OHM":439,"OII":280,"OKH":1798,"OKI":-793,"OKO":-2242,"OMH":-2402,"OOO":11699}; + this.BQ4__ = {"BHH":-3895,"BIH":3761,"BII":-4654,"BIK":1348,"BKK":-1806,"BMI":-3385,"BOO":-12396,"OAH":926,"OHH":266,"OHK":-2036,"ONN":-973}; + this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682}; + this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"11":-669}; + this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1000,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990}; + this.TC1__ = {"AAA":1093,"HHH":1029,"HHM":580,"HII":998,"HOH":-390,"HOM":-331,"IHI":1169,"IOH":-142,"IOI":-1015,"IOM":467,"MMH":187,"OOI":-1832}; + this.TC2__ = {"HHO":2088,"HII":-1023,"HMM":-1154,"IHI":-1965,"KKH":703,"OII":-2649}; + this.TC3__ = {"AAA":-294,"HHH":346,"HHI":-341,"HII":-1088,"HIK":731,"HOH":-1486,"IHH":128,"IHI":-3041,"IHO":-1935,"IIH":-825,"IIM":-1035,"IOI":-542,"KHH":-1216,"KKA":491,"KKH":-1217,"KOK":-1009,"MHH":-2694,"MHM":-457,"MHO":123,"MMH":-471,"NNH":-1689,"NNO":662,"OHO":-3393}; + this.TC4__ = {"HHH":-203,"HHI":1344,"HHK":365,"HHM":-122,"HHN":182,"HHO":669,"HIH":804,"HII":679,"HOH":446,"IHH":695,"IHO":-2324,"IIH":321,"III":1497,"IIO":656,"IOO":54,"KAK":4845,"KKA":3386,"KKK":3065,"MHH":-405,"MHI":201,"MMH":-241,"MMM":661,"MOM":841}; + this.TQ1__ = {"BHHH":-227,"BHHI":316,"BHIH":-132,"BIHH":60,"BIII":1595,"BNHH":-744,"BOHH":225,"BOOO":-908,"OAKK":482,"OHHH":281,"OHIH":249,"OIHI":200,"OIIH":-68}; + this.TQ2__ = {"BIHH":-1401,"BIII":-1033,"BKAK":-543,"BOOO":-5591}; + this.TQ3__ = {"BHHH":478,"BHHM":-1073,"BHIH":222,"BHII":-504,"BIIH":-116,"BIII":-105,"BMHI":-863,"BMHM":-464,"BOMH":620,"OHHH":346,"OHHI":1729,"OHII":997,"OHMH":481,"OIHH":623,"OIIH":1344,"OKAK":2792,"OKHH":587,"OKKA":679,"OOHH":110,"OOII":-685}; + this.TQ4__ = {"BHHH":-721,"BHHM":-3604,"BHII":-966,"BIIH":-607,"BIII":-2181,"OAAA":-2763,"OAKK":180,"OHHH":-294,"OHHI":2446,"OHHO":480,"OHIH":-1573,"OIHH":1935,"OIHI":-493,"OIIH":626,"OIII":-4007,"OKAK":-8156}; + this.TW1__ = {"につい":-4681,"東京都":2026}; + this.TW2__ = {"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216}; + this.TW3__ = {"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287}; + this.TW4__ = {"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865}; + this.UC1__ = {"A":484,"K":93,"M":645,"O":-505}; + this.UC2__ = {"A":819,"H":1059,"I":409,"M":3987,"N":5775,"O":646}; + this.UC3__ = {"A":-1370,"I":2311}; + this.UC4__ = {"A":-2643,"H":1809,"I":-1032,"K":-3450,"M":3565,"N":3876,"O":6646}; + this.UC5__ = {"H":313,"I":-1238,"K":-799,"M":539,"O":-831}; + this.UC6__ = {"H":-506,"I":-253,"K":87,"M":247,"O":-387}; + this.UP1__ = {"O":-214}; + this.UP2__ = {"B":69,"O":935}; + this.UP3__ = {"B":189}; + this.UQ1__ = {"BH":21,"BI":-12,"BK":-99,"BN":142,"BO":-56,"OH":-95,"OI":477,"OK":410,"OO":-2422}; + this.UQ2__ = {"BH":216,"BI":113,"OK":1759}; + this.UQ3__ = {"BA":-479,"BH":42,"BI":1913,"BK":-7198,"BM":3160,"BN":6427,"BO":14761,"OI":-827,"ON":-3212}; + this.UW1__ = {",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135}; + this.UW2__ = {",":-829,"、":-829,"〇":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568}; + this.UW3__ = {",":4889,"1":-800,"−":-1723,"、":4889,"々":-2311,"〇":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"1":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278}; + this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"〇":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1000,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637}; + this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"1":-514,"E2":-32768,"「":363,"イ":241,"ル":451,"ン":-343}; + this.UW6__ = {",":227,".":808,"1":-270,"E1":306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"1":-270,"E1":306,"ル":-673,"ン":-496}; + + return this; + } + TinySegmenter.prototype.ctype_ = function(str) { + for (var i in this.chartype_) { + if (str.match(this.chartype_[i][0])) { + return this.chartype_[i][1]; + } + } + return "O"; + } + + TinySegmenter.prototype.ts_ = function(v) { + if (v) { return v; } + return 0; + } + + TinySegmenter.prototype.segment = function(input) { + if (input == null || input == undefined || input == "") { + return []; + } + var result = []; + var seg = ["B3","B2","B1"]; + var ctype = ["O","O","O"]; + var o = input.split(""); + for (i = 0; i < o.length; ++i) { + seg.push(o[i]); + ctype.push(this.ctype_(o[i])) + } + seg.push("E1"); + seg.push("E2"); + seg.push("E3"); + ctype.push("O"); + ctype.push("O"); + ctype.push("O"); + var word = seg[3]; + var p1 = "U"; + var p2 = "U"; + var p3 = "U"; + for (var i = 4; i < seg.length - 3; ++i) { + var score = this.BIAS__; + var w1 = seg[i-3]; + var w2 = seg[i-2]; + var w3 = seg[i-1]; + var w4 = seg[i]; + var w5 = seg[i+1]; + var w6 = seg[i+2]; + var c1 = ctype[i-3]; + var c2 = ctype[i-2]; + var c3 = ctype[i-1]; + var c4 = ctype[i]; + var c5 = ctype[i+1]; + var c6 = ctype[i+2]; + score += this.ts_(this.UP1__[p1]); + score += this.ts_(this.UP2__[p2]); + score += this.ts_(this.UP3__[p3]); + score += this.ts_(this.BP1__[p1 + p2]); + score += this.ts_(this.BP2__[p2 + p3]); + score += this.ts_(this.UW1__[w1]); + score += this.ts_(this.UW2__[w2]); + score += this.ts_(this.UW3__[w3]); + score += this.ts_(this.UW4__[w4]); + score += this.ts_(this.UW5__[w5]); + score += this.ts_(this.UW6__[w6]); + score += this.ts_(this.BW1__[w2 + w3]); + score += this.ts_(this.BW2__[w3 + w4]); + score += this.ts_(this.BW3__[w4 + w5]); + score += this.ts_(this.TW1__[w1 + w2 + w3]); + score += this.ts_(this.TW2__[w2 + w3 + w4]); + score += this.ts_(this.TW3__[w3 + w4 + w5]); + score += this.ts_(this.TW4__[w4 + w5 + w6]); + score += this.ts_(this.UC1__[c1]); + score += this.ts_(this.UC2__[c2]); + score += this.ts_(this.UC3__[c3]); + score += this.ts_(this.UC4__[c4]); + score += this.ts_(this.UC5__[c5]); + score += this.ts_(this.UC6__[c6]); + score += this.ts_(this.BC1__[c2 + c3]); + score += this.ts_(this.BC2__[c3 + c4]); + score += this.ts_(this.BC3__[c4 + c5]); + score += this.ts_(this.TC1__[c1 + c2 + c3]); + score += this.ts_(this.TC2__[c2 + c3 + c4]); + score += this.ts_(this.TC3__[c3 + c4 + c5]); + score += this.ts_(this.TC4__[c4 + c5 + c6]); + // score += this.ts_(this.TC5__[c4 + c5 + c6]); + score += this.ts_(this.UQ1__[p1 + c1]); + score += this.ts_(this.UQ2__[p2 + c2]); + score += this.ts_(this.UQ3__[p3 + c3]); + score += this.ts_(this.BQ1__[p2 + c2 + c3]); + score += this.ts_(this.BQ2__[p2 + c3 + c4]); + score += this.ts_(this.BQ3__[p3 + c2 + c3]); + score += this.ts_(this.BQ4__[p3 + c3 + c4]); + score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]); + score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]); + score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]); + score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]); + var p = "O"; + if (score > 0) { + result.push(word); + word = ""; + p = "B"; + } + p1 = p2; + p2 = p3; + p3 = p; + word += seg[i]; + } + result.push(word); + + return result; + } + + lunr.TinySegmenter = TinySegmenter; + }; + +})); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/lunr/wordcut.js b/pr-preview/pr-478/assets/javascripts/lunr/wordcut.js new file mode 100644 index 0000000000..0d898c9ed1 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/lunr/wordcut.js @@ -0,0 +1,6708 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}(g.lunr || (g.lunr = {})).wordcut = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 1; + }) + this.addWords(words, false) + } + if(finalize){ + this.finalizeDict(); + } + }, + + dictSeek: function (l, r, ch, strOffset, pos) { + var ans = null; + while (l <= r) { + var m = Math.floor((l + r) / 2), + dict_item = this.dict[m], + len = dict_item.length; + if (len <= strOffset) { + l = m + 1; + } else { + var ch_ = dict_item[strOffset]; + if (ch_ < ch) { + l = m + 1; + } else if (ch_ > ch) { + r = m - 1; + } else { + ans = m; + if (pos == LEFT) { + r = m - 1; + } else { + l = m + 1; + } + } + } + } + return ans; + }, + + isFinal: function (acceptor) { + return this.dict[acceptor.l].length == acceptor.strOffset; + }, + + createAcceptor: function () { + return { + l: 0, + r: this.dict.length - 1, + strOffset: 0, + isFinal: false, + dict: this, + transit: function (ch) { + return this.dict.transit(this, ch); + }, + isError: false, + tag: "DICT", + w: 1, + type: "DICT" + }; + }, + + transit: function (acceptor, ch) { + var l = this.dictSeek(acceptor.l, + acceptor.r, + ch, + acceptor.strOffset, + LEFT); + if (l !== null) { + var r = this.dictSeek(l, + acceptor.r, + ch, + acceptor.strOffset, + RIGHT); + acceptor.l = l; + acceptor.r = r; + acceptor.strOffset++; + acceptor.isFinal = this.isFinal(acceptor); + } else { + acceptor.isError = true; + } + return acceptor; + }, + + sortuniq: function(a){ + return a.sort().filter(function(item, pos, arr){ + return !pos || item != arr[pos - 1]; + }) + }, + + flatten: function(a){ + //[[1,2],[3]] -> [1,2,3] + return [].concat.apply([], a); + } +}; +module.exports = WordcutDict; + +}).call(this,"/dist/tmp") +},{"glob":16,"path":22}],3:[function(require,module,exports){ +var WordRule = { + createAcceptor: function(tag) { + if (tag["WORD_RULE"]) + return null; + + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + var lch = ch.toLowerCase(); + if (lch >= "a" && lch <= "z") { + this.isFinal = true; + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "WORD_RULE", + type: "WORD_RULE", + w: 1}; + } +}; + +var NumberRule = { + createAcceptor: function(tag) { + if (tag["NUMBER_RULE"]) + return null; + + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + if (ch >= "0" && ch <= "9") { + this.isFinal = true; + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "NUMBER_RULE", + type: "NUMBER_RULE", + w: 1}; + } +}; + +var SpaceRule = { + tag: "SPACE_RULE", + createAcceptor: function(tag) { + + if (tag["SPACE_RULE"]) + return null; + + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + if (ch == " " || ch == "\t" || ch == "\r" || ch == "\n" || + ch == "\u00A0" || ch=="\u2003"//nbsp and emsp + ) { + this.isFinal = true; + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: SpaceRule.tag, + w: 1, + type: "SPACE_RULE"}; + } +} + +var SingleSymbolRule = { + tag: "SINSYM", + createAcceptor: function(tag) { + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + if (this.strOffset == 0 && ch.match(/^[\@\(\)\/\,\-\."`]$/)) { + this.isFinal = true; + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "SINSYM", + w: 1, + type: "SINSYM"}; + } +} + + +var LatinRules = [WordRule, SpaceRule, SingleSymbolRule, NumberRule]; + +module.exports = LatinRules; + +},{}],4:[function(require,module,exports){ +var _ = require("underscore") + , WordcutCore = require("./wordcut_core"); +var PathInfoBuilder = { + + /* + buildByPartAcceptors: function(path, acceptors, i) { + var + var genInfos = partAcceptors.reduce(function(genInfos, acceptor) { + + }, []); + + return genInfos; + } + */ + + buildByAcceptors: function(path, finalAcceptors, i) { + var self = this; + var infos = finalAcceptors.map(function(acceptor) { + var p = i - acceptor.strOffset + 1 + , _info = path[p]; + + var info = {p: p, + mw: _info.mw + (acceptor.mw === undefined ? 0 : acceptor.mw), + w: acceptor.w + _info.w, + unk: (acceptor.unk ? acceptor.unk : 0) + _info.unk, + type: acceptor.type}; + + if (acceptor.type == "PART") { + for(var j = p + 1; j <= i; j++) { + path[j].merge = p; + } + info.merge = p; + } + + return info; + }); + return infos.filter(function(info) { return info; }); + }, + + fallback: function(path, leftBoundary, text, i) { + var _info = path[leftBoundary]; + if (text[i].match(/[\u0E48-\u0E4E]/)) { + if (leftBoundary != 0) + leftBoundary = path[leftBoundary].p; + return {p: leftBoundary, + mw: 0, + w: 1 + _info.w, + unk: 1 + _info.unk, + type: "UNK"}; +/* } else if(leftBoundary > 0 && path[leftBoundary].type !== "UNK") { + leftBoundary = path[leftBoundary].p; + return {p: leftBoundary, + w: 1 + _info.w, + unk: 1 + _info.unk, + type: "UNK"}; */ + } else { + return {p: leftBoundary, + mw: _info.mw, + w: 1 + _info.w, + unk: 1 + _info.unk, + type: "UNK"}; + } + }, + + build: function(path, finalAcceptors, i, leftBoundary, text) { + var basicPathInfos = this.buildByAcceptors(path, finalAcceptors, i); + if (basicPathInfos.length > 0) { + return basicPathInfos; + } else { + return [this.fallback(path, leftBoundary, text, i)]; + } + } +}; + +module.exports = function() { + return _.clone(PathInfoBuilder); +} + +},{"./wordcut_core":8,"underscore":25}],5:[function(require,module,exports){ +var _ = require("underscore"); + + +var PathSelector = { + selectPath: function(paths) { + var path = paths.reduce(function(selectedPath, path) { + if (selectedPath == null) { + return path; + } else { + if (path.unk < selectedPath.unk) + return path; + if (path.unk == selectedPath.unk) { + if (path.mw < selectedPath.mw) + return path + if (path.mw == selectedPath.mw) { + if (path.w < selectedPath.w) + return path; + } + } + return selectedPath; + } + }, null); + return path; + }, + + createPath: function() { + return [{p:null, w:0, unk:0, type: "INIT", mw:0}]; + } +}; + +module.exports = function() { + return _.clone(PathSelector); +}; + +},{"underscore":25}],6:[function(require,module,exports){ +function isMatch(pat, offset, ch) { + if (pat.length <= offset) + return false; + var _ch = pat[offset]; + return _ch == ch || + (_ch.match(/[กข]/) && ch.match(/[ก-ฮ]/)) || + (_ch.match(/[มบ]/) && ch.match(/[ก-ฮ]/)) || + (_ch.match(/\u0E49/) && ch.match(/[\u0E48-\u0E4B]/)); +} + +var Rule0 = { + pat: "เหก็ม", + createAcceptor: function(tag) { + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + if (isMatch(Rule0.pat, this.strOffset,ch)) { + this.isFinal = (this.strOffset + 1 == Rule0.pat.length); + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "THAI_RULE", + type: "THAI_RULE", + w: 1}; + } +}; + +var PartRule = { + createAcceptor: function(tag) { + return {strOffset: 0, + patterns: [ + "แก", "เก", "ก้", "กก์", "กา", "กี", "กิ", "กืก" + ], + isFinal: false, + transit: function(ch) { + var offset = this.strOffset; + this.patterns = this.patterns.filter(function(pat) { + return isMatch(pat, offset, ch); + }); + + if (this.patterns.length > 0) { + var len = 1 + offset; + this.isFinal = this.patterns.some(function(pat) { + return pat.length == len; + }); + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "PART", + type: "PART", + unk: 1, + w: 1}; + } +}; + +var ThaiRules = [Rule0, PartRule]; + +module.exports = ThaiRules; + +},{}],7:[function(require,module,exports){ +var sys = require("sys") + , WordcutDict = require("./dict") + , WordcutCore = require("./wordcut_core") + , PathInfoBuilder = require("./path_info_builder") + , PathSelector = require("./path_selector") + , Acceptors = require("./acceptors") + , latinRules = require("./latin_rules") + , thaiRules = require("./thai_rules") + , _ = require("underscore"); + + +var Wordcut = Object.create(WordcutCore); +Wordcut.defaultPathInfoBuilder = PathInfoBuilder; +Wordcut.defaultPathSelector = PathSelector; +Wordcut.defaultAcceptors = Acceptors; +Wordcut.defaultLatinRules = latinRules; +Wordcut.defaultThaiRules = thaiRules; +Wordcut.defaultDict = WordcutDict; + + +Wordcut.initNoDict = function(dict_path) { + var self = this; + self.pathInfoBuilder = new self.defaultPathInfoBuilder; + self.pathSelector = new self.defaultPathSelector; + self.acceptors = new self.defaultAcceptors; + self.defaultLatinRules.forEach(function(rule) { + self.acceptors.creators.push(rule); + }); + self.defaultThaiRules.forEach(function(rule) { + self.acceptors.creators.push(rule); + }); +}; + +Wordcut.init = function(dict_path, withDefault, additionalWords) { + withDefault = withDefault || false; + this.initNoDict(); + var dict = _.clone(this.defaultDict); + dict.init(dict_path, withDefault, additionalWords); + this.acceptors.creators.push(dict); +}; + +module.exports = Wordcut; + +},{"./acceptors":1,"./dict":2,"./latin_rules":3,"./path_info_builder":4,"./path_selector":5,"./thai_rules":6,"./wordcut_core":8,"sys":28,"underscore":25}],8:[function(require,module,exports){ +var WordcutCore = { + + buildPath: function(text) { + var self = this + , path = self.pathSelector.createPath() + , leftBoundary = 0; + self.acceptors.reset(); + for (var i = 0; i < text.length; i++) { + var ch = text[i]; + self.acceptors.transit(ch); + + var possiblePathInfos = self + .pathInfoBuilder + .build(path, + self.acceptors.getFinalAcceptors(), + i, + leftBoundary, + text); + var selectedPath = self.pathSelector.selectPath(possiblePathInfos) + + path.push(selectedPath); + if (selectedPath.type !== "UNK") { + leftBoundary = i; + } + } + return path; + }, + + pathToRanges: function(path) { + var e = path.length - 1 + , ranges = []; + + while (e > 0) { + var info = path[e] + , s = info.p; + + if (info.merge !== undefined && ranges.length > 0) { + var r = ranges[ranges.length - 1]; + r.s = info.merge; + s = r.s; + } else { + ranges.push({s:s, e:e}); + } + e = s; + } + return ranges.reverse(); + }, + + rangesToText: function(text, ranges, delimiter) { + return ranges.map(function(r) { + return text.substring(r.s, r.e); + }).join(delimiter); + }, + + cut: function(text, delimiter) { + var path = this.buildPath(text) + , ranges = this.pathToRanges(path); + return this + .rangesToText(text, ranges, + (delimiter === undefined ? "|" : delimiter)); + }, + + cutIntoRanges: function(text, noText) { + var path = this.buildPath(text) + , ranges = this.pathToRanges(path); + + if (!noText) { + ranges.forEach(function(r) { + r.text = text.substring(r.s, r.e); + }); + } + return ranges; + }, + + cutIntoArray: function(text) { + var path = this.buildPath(text) + , ranges = this.pathToRanges(path); + + return ranges.map(function(r) { + return text.substring(r.s, r.e) + }); + } +}; + +module.exports = WordcutCore; + +},{}],9:[function(require,module,exports){ +// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 +// +// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! +// +// Originally from narwhal.js (http://narwhaljs.org) +// Copyright (c) 2009 Thomas Robinson <280north.com> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the 'Software'), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// when used in node, this will actually load the util module we depend on +// versus loading the builtin util module as happens otherwise +// this is a bug in node module loading as far as I am concerned +var util = require('util/'); + +var pSlice = Array.prototype.slice; +var hasOwn = Object.prototype.hasOwnProperty; + +// 1. The assert module provides functions that throw +// AssertionError's when particular conditions are not met. The +// assert module must conform to the following interface. + +var assert = module.exports = ok; + +// 2. The AssertionError is defined in assert. +// new assert.AssertionError({ message: message, +// actual: actual, +// expected: expected }) + +assert.AssertionError = function AssertionError(options) { + this.name = 'AssertionError'; + this.actual = options.actual; + this.expected = options.expected; + this.operator = options.operator; + if (options.message) { + this.message = options.message; + this.generatedMessage = false; + } else { + this.message = getMessage(this); + this.generatedMessage = true; + } + var stackStartFunction = options.stackStartFunction || fail; + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, stackStartFunction); + } + else { + // non v8 browsers so we can have a stacktrace + var err = new Error(); + if (err.stack) { + var out = err.stack; + + // try to strip useless frames + var fn_name = stackStartFunction.name; + var idx = out.indexOf('\n' + fn_name); + if (idx >= 0) { + // once we have located the function frame + // we need to strip out everything before it (and its line) + var next_line = out.indexOf('\n', idx + 1); + out = out.substring(next_line + 1); + } + + this.stack = out; + } + } +}; + +// assert.AssertionError instanceof Error +util.inherits(assert.AssertionError, Error); + +function replacer(key, value) { + if (util.isUndefined(value)) { + return '' + value; + } + if (util.isNumber(value) && !isFinite(value)) { + return value.toString(); + } + if (util.isFunction(value) || util.isRegExp(value)) { + return value.toString(); + } + return value; +} + +function truncate(s, n) { + if (util.isString(s)) { + return s.length < n ? s : s.slice(0, n); + } else { + return s; + } +} + +function getMessage(self) { + return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + + self.operator + ' ' + + truncate(JSON.stringify(self.expected, replacer), 128); +} + +// At present only the three keys mentioned above are used and +// understood by the spec. Implementations or sub modules can pass +// other keys to the AssertionError's constructor - they will be +// ignored. + +// 3. All of the following functions must throw an AssertionError +// when a corresponding condition is not met, with a message that +// may be undefined if not provided. All assertion methods provide +// both the actual and expected values to the assertion error for +// display purposes. + +function fail(actual, expected, message, operator, stackStartFunction) { + throw new assert.AssertionError({ + message: message, + actual: actual, + expected: expected, + operator: operator, + stackStartFunction: stackStartFunction + }); +} + +// EXTENSION! allows for well behaved errors defined elsewhere. +assert.fail = fail; + +// 4. Pure assertion tests whether a value is truthy, as determined +// by !!guard. +// assert.ok(guard, message_opt); +// This statement is equivalent to assert.equal(true, !!guard, +// message_opt);. To test strictly for the value true, use +// assert.strictEqual(true, guard, message_opt);. + +function ok(value, message) { + if (!value) fail(value, true, message, '==', assert.ok); +} +assert.ok = ok; + +// 5. The equality assertion tests shallow, coercive equality with +// ==. +// assert.equal(actual, expected, message_opt); + +assert.equal = function equal(actual, expected, message) { + if (actual != expected) fail(actual, expected, message, '==', assert.equal); +}; + +// 6. The non-equality assertion tests for whether two objects are not equal +// with != assert.notEqual(actual, expected, message_opt); + +assert.notEqual = function notEqual(actual, expected, message) { + if (actual == expected) { + fail(actual, expected, message, '!=', assert.notEqual); + } +}; + +// 7. The equivalence assertion tests a deep equality relation. +// assert.deepEqual(actual, expected, message_opt); + +assert.deepEqual = function deepEqual(actual, expected, message) { + if (!_deepEqual(actual, expected)) { + fail(actual, expected, message, 'deepEqual', assert.deepEqual); + } +}; + +function _deepEqual(actual, expected) { + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + + } else if (util.isBuffer(actual) && util.isBuffer(expected)) { + if (actual.length != expected.length) return false; + + for (var i = 0; i < actual.length; i++) { + if (actual[i] !== expected[i]) return false; + } + + return true; + + // 7.2. If the expected value is a Date object, the actual value is + // equivalent if it is also a Date object that refers to the same time. + } else if (util.isDate(actual) && util.isDate(expected)) { + return actual.getTime() === expected.getTime(); + + // 7.3 If the expected value is a RegExp object, the actual value is + // equivalent if it is also a RegExp object with the same source and + // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). + } else if (util.isRegExp(actual) && util.isRegExp(expected)) { + return actual.source === expected.source && + actual.global === expected.global && + actual.multiline === expected.multiline && + actual.lastIndex === expected.lastIndex && + actual.ignoreCase === expected.ignoreCase; + + // 7.4. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if (!util.isObject(actual) && !util.isObject(expected)) { + return actual == expected; + + // 7.5 For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else { + return objEquiv(actual, expected); + } +} + +function isArguments(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; +} + +function objEquiv(a, b) { + if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) + return false; + // an identical 'prototype' property. + if (a.prototype !== b.prototype) return false; + // if one is a primitive, the other must be same + if (util.isPrimitive(a) || util.isPrimitive(b)) { + return a === b; + } + var aIsArgs = isArguments(a), + bIsArgs = isArguments(b); + if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) + return false; + if (aIsArgs) { + a = pSlice.call(a); + b = pSlice.call(b); + return _deepEqual(a, b); + } + var ka = objectKeys(a), + kb = objectKeys(b), + key, i; + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length != kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] != kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!_deepEqual(a[key], b[key])) return false; + } + return true; +} + +// 8. The non-equivalence assertion tests for any deep inequality. +// assert.notDeepEqual(actual, expected, message_opt); + +assert.notDeepEqual = function notDeepEqual(actual, expected, message) { + if (_deepEqual(actual, expected)) { + fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); + } +}; + +// 9. The strict equality assertion tests strict equality, as determined by ===. +// assert.strictEqual(actual, expected, message_opt); + +assert.strictEqual = function strictEqual(actual, expected, message) { + if (actual !== expected) { + fail(actual, expected, message, '===', assert.strictEqual); + } +}; + +// 10. The strict non-equality assertion tests for strict inequality, as +// determined by !==. assert.notStrictEqual(actual, expected, message_opt); + +assert.notStrictEqual = function notStrictEqual(actual, expected, message) { + if (actual === expected) { + fail(actual, expected, message, '!==', assert.notStrictEqual); + } +}; + +function expectedException(actual, expected) { + if (!actual || !expected) { + return false; + } + + if (Object.prototype.toString.call(expected) == '[object RegExp]') { + return expected.test(actual); + } else if (actual instanceof expected) { + return true; + } else if (expected.call({}, actual) === true) { + return true; + } + + return false; +} + +function _throws(shouldThrow, block, expected, message) { + var actual; + + if (util.isString(expected)) { + message = expected; + expected = null; + } + + try { + block(); + } catch (e) { + actual = e; + } + + message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + + (message ? ' ' + message : '.'); + + if (shouldThrow && !actual) { + fail(actual, expected, 'Missing expected exception' + message); + } + + if (!shouldThrow && expectedException(actual, expected)) { + fail(actual, expected, 'Got unwanted exception' + message); + } + + if ((shouldThrow && actual && expected && + !expectedException(actual, expected)) || (!shouldThrow && actual)) { + throw actual; + } +} + +// 11. Expected to throw an error: +// assert.throws(block, Error_opt, message_opt); + +assert.throws = function(block, /*optional*/error, /*optional*/message) { + _throws.apply(this, [true].concat(pSlice.call(arguments))); +}; + +// EXTENSION! This is annoying to write outside this module. +assert.doesNotThrow = function(block, /*optional*/message) { + _throws.apply(this, [false].concat(pSlice.call(arguments))); +}; + +assert.ifError = function(err) { if (err) {throw err;}}; + +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + if (hasOwn.call(obj, key)) keys.push(key); + } + return keys; +}; + +},{"util/":28}],10:[function(require,module,exports){ +'use strict'; +module.exports = balanced; +function balanced(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); + + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + begs = []; + left = str.length; + + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} + +},{}],11:[function(require,module,exports){ +var concatMap = require('concat-map'); +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; +} + + +},{"balanced-match":10,"concat-map":13}],12:[function(require,module,exports){ + +},{}],13:[function(require,module,exports){ +module.exports = function (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + var x = fn(xs[i], i); + if (isArray(x)) res.push.apply(res, x); + else res.push(x); + } + return res; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +},{}],14:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +EventEmitter.defaultMaxListeners = 10; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; + +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; + + if (!this._events) + this._events = {}; + + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } + throw TypeError('Uncaught, unspecified "error" event.'); + } + } + + handler = this._events[type]; + + if (isUndefined(handler)) + return false; + + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + handler.apply(this, args); + } + } else if (isObject(handler)) { + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } + + return true; +}; + +EventEmitter.prototype.addListener = function(type, listener) { + var m; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events) + this._events = {}; + + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); + + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + var m; + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + var fired = false; + + function g() { + this.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } + + g.listener = listener; + this.on(type, g); + + return this; +}; + +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events || !this._events[type]) + return this; + + list = this._events[type]; + length = list.length; + position = -1; + + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } + + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; + +EventEmitter.listenerCount = function(emitter, type) { + var ret; + if (!emitter._events || !emitter._events[type]) + ret = 0; + else if (isFunction(emitter._events[type])) + ret = 1; + else + ret = emitter._events[type].length; + return ret; +}; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} + +},{}],15:[function(require,module,exports){ +(function (process){ +exports.alphasort = alphasort +exports.alphasorti = alphasorti +exports.setopts = setopts +exports.ownProp = ownProp +exports.makeAbs = makeAbs +exports.finish = finish +exports.mark = mark +exports.isIgnored = isIgnored +exports.childrenIgnored = childrenIgnored + +function ownProp (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} + +var path = require("path") +var minimatch = require("minimatch") +var isAbsolute = require("path-is-absolute") +var Minimatch = minimatch.Minimatch + +function alphasorti (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()) +} + +function alphasort (a, b) { + return a.localeCompare(b) +} + +function setupIgnores (self, options) { + self.ignore = options.ignore || [] + + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore] + + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap) + } +} + +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern) + } + + return { + matcher: new Minimatch(pattern), + gmatcher: gmatcher + } +} + +function setopts (self, pattern, options) { + if (!options) + options = {} + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + self.silent = !!options.silent + self.pattern = pattern + self.strict = options.strict !== false + self.realpath = !!options.realpath + self.realpathCache = options.realpathCache || Object.create(null) + self.follow = !!options.follow + self.dot = !!options.dot + self.mark = !!options.mark + self.nodir = !!options.nodir + if (self.nodir) + self.mark = true + self.sync = !!options.sync + self.nounique = !!options.nounique + self.nonull = !!options.nonull + self.nosort = !!options.nosort + self.nocase = !!options.nocase + self.stat = !!options.stat + self.noprocess = !!options.noprocess + + self.maxLength = options.maxLength || Infinity + self.cache = options.cache || Object.create(null) + self.statCache = options.statCache || Object.create(null) + self.symlinks = options.symlinks || Object.create(null) + + setupIgnores(self, options) + + self.changedCwd = false + var cwd = process.cwd() + if (!ownProp(options, "cwd")) + self.cwd = cwd + else { + self.cwd = options.cwd + self.changedCwd = path.resolve(options.cwd) !== cwd + } + + self.root = options.root || path.resolve(self.cwd, "/") + self.root = path.resolve(self.root) + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/") + + self.nomount = !!options.nomount + + // disable comments and negation unless the user explicitly + // passes in false as the option. + options.nonegate = options.nonegate === false ? false : true + options.nocomment = options.nocomment === false ? false : true + deprecationWarning(options) + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +// TODO(isaacs): remove entirely in v6 +// exported to reset in tests +exports.deprecationWarned +function deprecationWarning(options) { + if (!options.nonegate || !options.nocomment) { + if (process.noDeprecation !== true && !exports.deprecationWarned) { + var msg = 'glob WARNING: comments and negation will be disabled in v6' + if (process.throwDeprecation) + throw new Error(msg) + else if (process.traceDeprecation) + console.trace(msg) + else + console.error(msg) + + exports.deprecationWarned = true + } + } +} + +function finish (self) { + var nou = self.nounique + var all = nou ? [] : Object.create(null) + + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i] + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i] + if (nou) + all.push(literal) + else + all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) + all.push.apply(all, m) + else + m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) + all = Object.keys(all) + + if (!self.nosort) + all = all.sort(self.nocase ? alphasorti : alphasort) + + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]) + } + if (self.nodir) { + all = all.filter(function (e) { + return !(/\/$/.test(e)) + }) + } + } + + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored(self, m) + }) + + self.found = all +} + +function mark (self, p) { + var abs = makeAbs(self, p) + var c = self.cache[abs] + var m = p + if (c) { + var isDir = c === 'DIR' || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + var mabs = makeAbs(self, m) + self.statCache[mabs] = self.statCache[abs] + self.cache[mabs] = self.cache[abs] + } + } + + return m +} + +// lotta situps... +function makeAbs (self, f) { + var abs = f + if (f.charAt(0) === '/') { + abs = path.join(self.root, f) + } else if (isAbsolute(f) || f === '') { + abs = f + } else if (self.changedCwd) { + abs = path.resolve(self.cwd, f) + } else { + abs = path.resolve(f) + } + return abs +} + + +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +function childrenIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +}).call(this,require('_process')) +},{"_process":24,"minimatch":20,"path":22,"path-is-absolute":23}],16:[function(require,module,exports){ +(function (process){ +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern, false) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern, inGlobStar) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// +// If inGlobStar and PREFIX is symlink and points to dir +// set ENTRIES = [] +// else readdir(PREFIX) as ENTRIES +// If fail, END +// +// with ENTRIES +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// // Mark that this entry is a globstar match +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. + +module.exports = glob + +var fs = require('fs') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var inherits = require('inherits') +var EE = require('events').EventEmitter +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var globSync = require('./sync.js') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var inflight = require('inflight') +var util = require('util') +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +var once = require('once') + +function glob (pattern, options, cb) { + if (typeof options === 'function') cb = options, options = {} + if (!options) options = {} + + if (options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return globSync(pattern, options) + } + + return new Glob(pattern, options, cb) +} + +glob.sync = globSync +var GlobSync = glob.GlobSync = globSync.GlobSync + +// old api surface +glob.glob = glob + +glob.hasMagic = function (pattern, options_) { + var options = util._extend({}, options_) + options.noprocess = true + + var g = new Glob(pattern, options) + var set = g.minimatch.set + if (set.length > 1) + return true + + for (var j = 0; j < set[0].length; j++) { + if (typeof set[0][j] !== 'string') + return true + } + + return false +} + +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (typeof options === 'function') { + cb = options + options = null + } + + if (options && options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return new GlobSync(pattern, options) + } + + if (!(this instanceof Glob)) + return new Glob(pattern, options, cb) + + setopts(this, pattern, options) + this._didRealPath = false + + // process each pattern in the minimatch set + var n = this.minimatch.set.length + + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n) + + if (typeof cb === 'function') { + cb = once(cb) + this.on('error', cb) + this.on('end', function (matches) { + cb(null, matches) + }) + } + + var self = this + var n = this.minimatch.set.length + this._processing = 0 + this.matches = new Array(n) + + this._emitQueue = [] + this._processQueue = [] + this.paused = false + + if (this.noprocess) + return this + + if (n === 0) + return done() + + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done) + } + + function done () { + --self._processing + if (self._processing <= 0) + self._finish() + } +} + +Glob.prototype._finish = function () { + assert(this instanceof Glob) + if (this.aborted) + return + + if (this.realpath && !this._didRealpath) + return this._realpath() + + common.finish(this) + this.emit('end', this.found) +} + +Glob.prototype._realpath = function () { + if (this._didRealpath) + return + + this._didRealpath = true + + var n = this.matches.length + if (n === 0) + return this._finish() + + var self = this + for (var i = 0; i < this.matches.length; i++) + this._realpathSet(i, next) + + function next () { + if (--n === 0) + self._finish() + } +} + +Glob.prototype._realpathSet = function (index, cb) { + var matchset = this.matches[index] + if (!matchset) + return cb() + + var found = Object.keys(matchset) + var self = this + var n = found.length + + if (n === 0) + return cb() + + var set = this.matches[index] = Object.create(null) + found.forEach(function (p, i) { + // If there's a problem with the stat, then it means that + // one or more of the links in the realpath couldn't be + // resolved. just return the abs value in that case. + p = self._makeAbs(p) + fs.realpath(p, self.realpathCache, function (er, real) { + if (!er) + set[real] = true + else if (er.syscall === 'stat') + set[p] = true + else + self.emit('error', er) // srsly wtf right here + + if (--n === 0) { + self.matches[index] = set + cb() + } + }) + }) +} + +Glob.prototype._mark = function (p) { + return common.mark(this, p) +} + +Glob.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + +Glob.prototype.abort = function () { + this.aborted = true + this.emit('abort') +} + +Glob.prototype.pause = function () { + if (!this.paused) { + this.paused = true + this.emit('pause') + } +} + +Glob.prototype.resume = function () { + if (this.paused) { + this.emit('resume') + this.paused = false + if (this._emitQueue.length) { + var eq = this._emitQueue.slice(0) + this._emitQueue.length = 0 + for (var i = 0; i < eq.length; i ++) { + var e = eq[i] + this._emitMatch(e[0], e[1]) + } + } + if (this._processQueue.length) { + var pq = this._processQueue.slice(0) + this._processQueue.length = 0 + for (var i = 0; i < pq.length; i ++) { + var p = pq[i] + this._processing-- + this._process(p[0], p[1], p[2], p[3]) + } + } + } +} + +Glob.prototype._process = function (pattern, index, inGlobStar, cb) { + assert(this instanceof Glob) + assert(typeof cb === 'function') + + if (this.aborted) + return + + this._processing++ + if (this.paused) { + this._processQueue.push([pattern, index, inGlobStar, cb]) + return + } + + //console.error('PROCESS %d', this._processing, pattern) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // see if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index, cb) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip _processing + if (childrenIgnored(this, read)) + return cb() + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) +} + +Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + +Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return cb() + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return cb() + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return cb() + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + this._process([e].concat(remain), index, inGlobStar, cb) + } + cb() +} + +Glob.prototype._emitMatch = function (index, e) { + if (this.aborted) + return + + if (this.matches[index][e]) + return + + if (isIgnored(this, e)) + return + + if (this.paused) { + this._emitQueue.push([index, e]) + return + } + + var abs = this._makeAbs(e) + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + if (this.mark) + e = this._mark(e) + + this.matches[index][e] = true + + var st = this.statCache[abs] + if (st) + this.emit('stat', e, st) + + this.emit('match', e) +} + +Glob.prototype._readdirInGlobStar = function (abs, cb) { + if (this.aborted) + return + + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false, cb) + + var lstatkey = 'lstat\0' + abs + var self = this + var lstatcb = inflight(lstatkey, lstatcb_) + + if (lstatcb) + fs.lstat(abs, lstatcb) + + function lstatcb_ (er, lstat) { + if (er) + return cb() + + var isSym = lstat.isSymbolicLink() + self.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && !lstat.isDirectory()) { + self.cache[abs] = 'FILE' + cb() + } else + self._readdir(abs, false, cb) + } +} + +Glob.prototype._readdir = function (abs, inGlobStar, cb) { + if (this.aborted) + return + + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) + if (!cb) + return + + //console.error('RD %j %j', +inGlobStar, abs) + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs, cb) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return cb() + + if (Array.isArray(c)) + return cb(null, c) + } + + var self = this + fs.readdir(abs, readdirCb(this, abs, cb)) +} + +function readdirCb (self, abs, cb) { + return function (er, entries) { + if (er) + self._readdirError(abs, er, cb) + else + self._readdirEntries(abs, entries, cb) + } +} + +Glob.prototype._readdirEntries = function (abs, entries, cb) { + if (this.aborted) + return + + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + return cb(null, entries) +} + +Glob.prototype._readdirError = function (f, er, cb) { + if (this.aborted) + return + + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + this.cache[this._makeAbs(f)] = 'FILE' + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) { + this.emit('error', er) + // If the error is handled, then we abort + // if not, we threw out of here + this.abort() + } + if (!this.silent) + console.error('glob error', er) + break + } + + return cb() +} + +Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + + +Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + //console.error('pgs2', prefix, remain[0], entries) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return cb() + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false, cb) + + var isSym = this.symlinks[abs] + var len = entries.length + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return cb() + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true, cb) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true, cb) + } + + cb() +} + +Glob.prototype._processSimple = function (prefix, index, cb) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var self = this + this._stat(prefix, function (er, exists) { + self._processSimple2(prefix, index, er, exists, cb) + }) +} +Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { + + //console.error('ps2', prefix, exists) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return cb() + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) + cb() +} + +// Returns either 'DIR', 'FILE', or false +Glob.prototype._stat = function (f, cb) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return cb() + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return cb(null, c) + + if (needDir && c === 'FILE') + return cb() + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (stat !== undefined) { + if (stat === false) + return cb(null, stat) + else { + var type = stat.isDirectory() ? 'DIR' : 'FILE' + if (needDir && type === 'FILE') + return cb() + else + return cb(null, type, stat) + } + } + + var self = this + var statcb = inflight('stat\0' + abs, lstatcb_) + if (statcb) + fs.lstat(abs, statcb) + + function lstatcb_ (er, lstat) { + if (lstat && lstat.isSymbolicLink()) { + // If it's a symlink, then treat it as the target, unless + // the target does not exist, then treat it as a file. + return fs.stat(abs, function (er, stat) { + if (er) + self._stat2(f, abs, null, lstat, cb) + else + self._stat2(f, abs, er, stat, cb) + }) + } else { + self._stat2(f, abs, er, lstat, cb) + } + } +} + +Glob.prototype._stat2 = function (f, abs, er, stat, cb) { + if (er) { + this.statCache[abs] = false + return cb() + } + + var needDir = f.slice(-1) === '/' + this.statCache[abs] = stat + + if (abs.slice(-1) === '/' && !stat.isDirectory()) + return cb(null, false, stat) + + var c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c !== 'DIR') + return cb() + + return cb(null, c, stat) +} + +}).call(this,require('_process')) +},{"./common.js":15,"./sync.js":17,"_process":24,"assert":9,"events":14,"fs":12,"inflight":18,"inherits":19,"minimatch":20,"once":21,"path":22,"path-is-absolute":23,"util":28}],17:[function(require,module,exports){ +(function (process){ +module.exports = globSync +globSync.GlobSync = GlobSync + +var fs = require('fs') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var Glob = require('./glob.js').Glob +var util = require('util') +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var childrenIgnored = common.childrenIgnored + +function globSync (pattern, options) { + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + return new GlobSync(pattern, options).found +} + +function GlobSync (pattern, options) { + if (!pattern) + throw new Error('must provide pattern') + + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + if (!(this instanceof GlobSync)) + return new GlobSync(pattern, options) + + setopts(this, pattern, options) + + if (this.noprocess) + return this + + var n = this.minimatch.set.length + this.matches = new Array(n) + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false) + } + this._finish() +} + +GlobSync.prototype._finish = function () { + assert(this instanceof GlobSync) + if (this.realpath) { + var self = this + this.matches.forEach(function (matchset, index) { + var set = self.matches[index] = Object.create(null) + for (var p in matchset) { + try { + p = self._makeAbs(p) + var real = fs.realpathSync(p, self.realpathCache) + set[real] = true + } catch (er) { + if (er.syscall === 'stat') + set[self._makeAbs(p)] = true + else + throw er + } + } + }) + } + common.finish(this) +} + + +GlobSync.prototype._process = function (pattern, index, inGlobStar) { + assert(this instanceof GlobSync) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // See if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip processing + if (childrenIgnored(this, read)) + return + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar) +} + + +GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { + var entries = this._readdir(abs, inGlobStar) + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix.slice(-1) !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this.matches[index][e] = true + } + // This was the last one, and no stats were needed + return + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) + newPattern = [prefix, e] + else + newPattern = [e] + this._process(newPattern.concat(remain), index, inGlobStar) + } +} + + +GlobSync.prototype._emitMatch = function (index, e) { + var abs = this._makeAbs(e) + if (this.mark) + e = this._mark(e) + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[this._makeAbs(e)] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + if (this.stat) + this._stat(e) +} + + +GlobSync.prototype._readdirInGlobStar = function (abs) { + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false) + + var entries + var lstat + var stat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + // lstat failed, doesn't exist + return null + } + + var isSym = lstat.isSymbolicLink() + this.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && !lstat.isDirectory()) + this.cache[abs] = 'FILE' + else + entries = this._readdir(abs, false) + + return entries +} + +GlobSync.prototype._readdir = function (abs, inGlobStar) { + var entries + + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return null + + if (Array.isArray(c)) + return c + } + + try { + return this._readdirEntries(abs, fs.readdirSync(abs)) + } catch (er) { + this._readdirError(abs, er) + return null + } +} + +GlobSync.prototype._readdirEntries = function (abs, entries) { + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + + // mark and cache dir-ness + return entries +} + +GlobSync.prototype._readdirError = function (f, er) { + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + this.cache[this._makeAbs(f)] = 'FILE' + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) + throw er + if (!this.silent) + console.error('glob error', er) + break + } +} + +GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { + + var entries = this._readdir(abs, inGlobStar) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false) + + var len = entries.length + var isSym = this.symlinks[abs] + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true) + } +} + +GlobSync.prototype._processSimple = function (prefix, index) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var exists = this._stat(prefix) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this.matches[index][prefix] = true +} + +// Returns either 'DIR', 'FILE', or false +GlobSync.prototype._stat = function (f) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return false + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return c + + if (needDir && c === 'FILE') + return false + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (!stat) { + var lstat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + return false + } + + if (lstat.isSymbolicLink()) { + try { + stat = fs.statSync(abs) + } catch (er) { + stat = lstat + } + } else { + stat = lstat + } + } + + this.statCache[abs] = stat + + var c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c !== 'DIR') + return false + + return c +} + +GlobSync.prototype._mark = function (p) { + return common.mark(this, p) +} + +GlobSync.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + +}).call(this,require('_process')) +},{"./common.js":15,"./glob.js":16,"_process":24,"assert":9,"fs":12,"minimatch":20,"path":22,"path-is-absolute":23,"util":28}],18:[function(require,module,exports){ +(function (process){ +var wrappy = require('wrappy') +var reqs = Object.create(null) +var once = require('once') + +module.exports = wrappy(inflight) + +function inflight (key, cb) { + if (reqs[key]) { + reqs[key].push(cb) + return null + } else { + reqs[key] = [cb] + return makeres(key) + } +} + +function makeres (key) { + return once(function RES () { + var cbs = reqs[key] + var len = cbs.length + var args = slice(arguments) + + // XXX It's somewhat ambiguous whether a new callback added in this + // pass should be queued for later execution if something in the + // list of callbacks throws, or if it should just be discarded. + // However, it's such an edge case that it hardly matters, and either + // choice is likely as surprising as the other. + // As it happens, we do go ahead and schedule it for later execution. + try { + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args) + } + } finally { + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len) + process.nextTick(function () { + RES.apply(null, args) + }) + } else { + delete reqs[key] + } + } + }) +} + +function slice (args) { + var length = args.length + var array = [] + + for (var i = 0; i < length; i++) array[i] = args[i] + return array +} + +}).call(this,require('_process')) +},{"_process":24,"once":21,"wrappy":29}],19:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],20:[function(require,module,exports){ +module.exports = minimatch +minimatch.Minimatch = Minimatch + +var path = { sep: '/' } +try { + path = require('path') +} catch (er) {} + +var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} +var expand = require('brace-expansion') + +var plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +} + +// any single thing other than / +// don't need to escape / when using new RegExp() +var qmark = '[^/]' + +// * => any number of characters +var star = qmark + '*?' + +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' + +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' + +// characters that need to be escaped in RegExp. +var reSpecials = charSet('().*{}+?[]^$\\!') + +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split('').reduce(function (set, c) { + set[c] = true + return set + }, {}) +} + +// normalizes slashes. +var slashSplit = /\/+/ + +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) + } +} + +function ext (a, b) { + a = a || {} + b = b || {} + var t = {} + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + return t +} + +minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return minimatch + + var orig = minimatch + + var m = function minimatch (p, pattern, options) { + return orig.minimatch(p, pattern, ext(def, options)) + } + + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + } + + return m +} + +Minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return Minimatch + return minimatch.defaults(def).Minimatch +} + +function minimatch (p, pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } + + if (!options) options = {} + + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false + } + + // "" only matches "" + if (pattern.trim() === '') return p === '' + + return new Minimatch(pattern, options).match(p) +} + +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options) + } + + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } + + if (!options) options = {} + pattern = pattern.trim() + + // windows support: need to use /, not \ + if (path.sep !== '/') { + pattern = pattern.split(path.sep).join('/') + } + + this.options = options + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false + + // make the set of regexps etc. + this.make() +} + +Minimatch.prototype.debug = function () {} + +Minimatch.prototype.make = make +function make () { + // don't do it more than once. + if (this._made) return + + var pattern = this.pattern + var options = this.options + + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return + } + + // step 1: figure out negation, etc. + this.parseNegate() + + // step 2: expand braces + var set = this.globSet = this.braceExpand() + + if (options.debug) this.debug = console.error + + this.debug(this.pattern, set) + + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }) + + this.debug(this.pattern, set) + + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this) + + this.debug(this.pattern, set) + + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return s.indexOf(false) === -1 + }) + + this.debug(this.pattern, set) + + this.set = set +} + +Minimatch.prototype.parseNegate = parseNegate +function parseNegate () { + var pattern = this.pattern + var negate = false + var options = this.options + var negateOffset = 0 + + if (options.nonegate) return + + for (var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === '!' + ; i++) { + negate = !negate + negateOffset++ + } + + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate +} + +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = function (pattern, options) { + return braceExpand(pattern, options) +} + +Minimatch.prototype.braceExpand = braceExpand + +function braceExpand (pattern, options) { + if (!options) { + if (this instanceof Minimatch) { + options = this.options + } else { + options = {} + } + } + + pattern = typeof pattern === 'undefined' + ? this.pattern : pattern + + if (typeof pattern === 'undefined') { + throw new TypeError('undefined pattern') + } + + if (options.nobrace || + !pattern.match(/\{.*\}/)) { + // shortcut. no need to expand. + return [pattern] + } + + return expand(pattern) +} + +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch.prototype.parse = parse +var SUBPARSE = {} +function parse (pattern, isSub) { + if (pattern.length > 1024 * 64) { + throw new TypeError('pattern is too long') + } + + var options = this.options + + // shortcuts + if (!options.noglobstar && pattern === '**') return GLOBSTAR + if (pattern === '') return '' + + var re = '' + var hasMagic = !!options.nocase + var escaping = false + // ? => one single character + var patternListStack = [] + var negativeLists = [] + var stateChar + var inClass = false + var reClassStart = -1 + var classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + var patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)' + var self = this + + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case '*': + re += star + hasMagic = true + break + case '?': + re += qmark + hasMagic = true + break + default: + re += '\\' + stateChar + break + } + self.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } + + for (var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i++) { + this.debug('%s\t%s %s %j', pattern, i, re, c) + + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += '\\' + c + escaping = false + continue + } + + switch (c) { + case '/': + // completely not allowed, even escaped. + // Should already be path-split by now. + return false + + case '\\': + clearStateChar() + escaping = true + continue + + // the various stateChar values + // for the "extglob" stuff. + case '?': + case '*': + case '+': + case '@': + case '!': + this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) + + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === '!' && i === classStart + 1) c = '^' + re += c + continue + } + + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar() + continue + + case '(': + if (inClass) { + re += '(' + continue + } + + if (!stateChar) { + re += '\\(' + continue + } + + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close + }) + // negation is (?:(?!js)[^/]*) + re += stateChar === '!' ? '(?:(?!(?:' : '(?:' + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue + + case ')': + if (inClass || !patternListStack.length) { + re += '\\)' + continue + } + + clearStateChar() + hasMagic = true + var pl = patternListStack.pop() + // negation is (?:(?!js)[^/]*) + // The others are (?:) + re += pl.close + if (pl.type === '!') { + negativeLists.push(pl) + } + pl.reEnd = re.length + continue + + case '|': + if (inClass || !patternListStack.length || escaping) { + re += '\\|' + escaping = false + continue + } + + clearStateChar() + re += '|' + continue + + // these are mostly the same in regexp and glob + case '[': + // swallow any state-tracking char before the [ + clearStateChar() + + if (inClass) { + re += '\\' + c + continue + } + + inClass = true + classStart = i + reClassStart = re.length + re += c + continue + + case ']': + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += '\\' + c + escaping = false + continue + } + + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + if (inClass) { + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + var cs = pattern.substring(classStart + 1, i) + try { + RegExp('[' + cs + ']') + } catch (er) { + // not a valid class! + var sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' + hasMagic = hasMagic || sp[1] + inClass = false + continue + } + } + + // finish up the class. + hasMagic = true + inClass = false + re += c + continue + + default: + // swallow any state char that wasn't consumed + clearStateChar() + + if (escaping) { + // no need + escaping = false + } else if (reSpecials[c] + && !(c === '^' && inClass)) { + re += '\\' + } + + re += c + + } // switch + } // for + + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + cs = pattern.substr(classStart + 1) + sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + hasMagic = hasMagic || sp[1] + } + + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + pl.open.length) + this.debug('setting tail', re, pl) + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = '\\' + } + + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + '|' + }) + + this.debug('tail=%j\n %s', tail, tail, pl, re) + var t = pl.type === '*' ? star + : pl.type === '?' ? qmark + : '\\' + pl.type + + hasMagic = true + re = re.slice(0, pl.reStart) + t + '\\(' + tail + } + + // handle trailing things that only matter at the very end. + clearStateChar() + if (escaping) { + // trailing \\ + re += '\\\\' + } + + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false + switch (re.charAt(0)) { + case '.': + case '[': + case '(': addPatternStart = true + } + + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (var n = negativeLists.length - 1; n > -1; n--) { + var nl = negativeLists[n] + + var nlBefore = re.slice(0, nl.reStart) + var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) + var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + var nlAfter = re.slice(nl.reEnd) + + nlLast += nlAfter + + // Handle nested stuff like *(*.js|!(*.json)), where open parens + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + var openParensBefore = nlBefore.split('(').length - 1 + var cleanAfter = nlAfter + for (i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') + } + nlAfter = cleanAfter + + var dollar = '' + if (nlAfter === '' && isSub !== SUBPARSE) { + dollar = '$' + } + var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast + re = newRe + } + + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== '' && hasMagic) { + re = '(?=.)' + re + } + + if (addPatternStart) { + re = patternStart + re + } + + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [re, hasMagic] + } + + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) + } + + var flags = options.nocase ? 'i' : '' + try { + var regExp = new RegExp('^' + re + '$', flags) + } catch (er) { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') + } + + regExp._glob = pattern + regExp._src = re + + return regExp +} + +minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe() +} + +Minimatch.prototype.makeRe = makeRe +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set + + if (!set.length) { + this.regexp = false + return this.regexp + } + var options = this.options + + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + var flags = options.nocase ? 'i' : '' + + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === 'string') ? regExpEscape(p) + : p._src + }).join('\\\/') + }).join('|') + + // must match entire pattern + // ending in a * or ** will make it less strict. + re = '^(?:' + re + ')$' + + // can match anything, as long as it's not this. + if (this.negate) re = '^(?!' + re + ').*$' + + try { + this.regexp = new RegExp(re, flags) + } catch (ex) { + this.regexp = false + } + return this.regexp +} + +minimatch.match = function (list, pattern, options) { + options = options || {} + var mm = new Minimatch(pattern, options) + list = list.filter(function (f) { + return mm.match(f) + }) + if (mm.options.nonull && !list.length) { + list.push(pattern) + } + return list +} + +Minimatch.prototype.match = match +function match (f, partial) { + this.debug('match', f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === '' + + if (f === '/' && partial) return true + + var options = this.options + + // windows: need to use /, not \ + if (path.sep !== '/') { + f = f.split(path.sep).join('/') + } + + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, 'split', f) + + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. + + var set = this.set + this.debug(this.pattern, 'set', set) + + // Find the basename of the path by looking for the last non-empty segment + var filename + var i + for (i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } + + for (i = 0; i < set.length; i++) { + var pattern = set[i] + var file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + var hit = this.matchOne(file, pattern, partial) + if (hit) { + if (options.flipNegate) return true + return !this.negate + } + } + + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate +} + +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch.prototype.matchOne = function (file, pattern, partial) { + var options = this.options + + this.debug('matchOne', + { 'this': this, file: file, pattern: pattern }) + + this.debug('matchOne', file.length, pattern.length) + + for (var fi = 0, + pi = 0, + fl = file.length, + pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi++, pi++) { + this.debug('matchOne loop') + var p = pattern[pi] + var f = file[fi] + + this.debug(pattern, p, f) + + // should be impossible. + // some invalid regexp stuff in the set. + if (p === false) return false + + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]) + + // "**" + // a/**/b/**/c would match the following: + // a/b/x/y/z/c + // a/x/y/z/b/c + // a/b/x/b/x/c + // a/b/c + // To do this, take the rest of the pattern after + // the **, and see if it would match the file remainder. + // If so, return success. + // If not, the ** "swallows" a segment, and try again. + // This is recursively awful. + // + // a/**/b/**/c matching a/b/x/y/z/c + // - a matches a + // - doublestar + // - matchOne(b/x/y/z/c, b/**/c) + // - b matches b + // - doublestar + // - matchOne(x/y/z/c, c) -> no + // - matchOne(y/z/c, c) -> no + // - matchOne(z/c, c) -> no + // - matchOne(c, c) yes, hit + var fr = fi + var pr = pi + 1 + if (pr === pl) { + this.debug('** at the end') + // a ** at the end will just swallow the rest. + // We have found a match. + // however, it will not swallow /.x, unless + // options.dot is set. + // . and .. are *never* matched by **, for explosively + // exponential reasons. + for (; fi < fl; fi++) { + if (file[fi] === '.' || file[fi] === '..' || + (!options.dot && file[fi].charAt(0) === '.')) return false + } + return true + } + + // ok, let's see if we can swallow whatever we can. + while (fr < fl) { + var swallowee = file[fr] + + this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) + + // XXX remove this slice. Just pass the start index. + if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { + this.debug('globstar found match!', fr, fl, swallowee) + // found a match. + return true + } else { + // can't swallow "." or ".." ever. + // can only swallow ".foo" when explicitly asked. + if (swallowee === '.' || swallowee === '..' || + (!options.dot && swallowee.charAt(0) === '.')) { + this.debug('dot detected!', file, fr, pattern, pr) + break + } + + // ** swallows a segment, and continue. + this.debug('globstar swallow a segment, and continue') + fr++ + } + } + + // no match was found. + // However, in partial mode, we can't say this is necessarily over. + // If there's more *pattern* left, then + if (partial) { + // ran out of file + this.debug('\n>>> no match, partial?', file, fr, pattern, pr) + if (fr === fl) return true + } + return false + } + + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === 'string') { + if (options.nocase) { + hit = f.toLowerCase() === p.toLowerCase() + } else { + hit = f === p + } + this.debug('string match', p, f, hit) + } else { + hit = f.match(p) + this.debug('pattern match', p, f, hit) + } + + if (!hit) return false + } + + // Note: ending in / means that we'll get a final "" + // at the end of the pattern. This can only match a + // corresponding "" at the end of the file. + // If the file ends in /, then it can only match a + // a pattern that ends in /, unless the pattern just + // doesn't have any more for it. But, a/b/ should *not* + // match "a/b/*", even though "" matches against the + // [^/]*? pattern, except in partial mode, where it might + // simply not be reached yet. + // However, a/b/ should still satisfy a/* + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') + return emptyFileEnd + } + + // should be unreachable. + throw new Error('wtf?') +} + +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, '$1') +} + +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +} + +},{"brace-expansion":11,"path":22}],21:[function(require,module,exports){ +var wrappy = require('wrappy') +module.exports = wrappy(once) +module.exports.strict = wrappy(onceStrict) + +once.proto = once(function () { + Object.defineProperty(Function.prototype, 'once', { + value: function () { + return once(this) + }, + configurable: true + }) + + Object.defineProperty(Function.prototype, 'onceStrict', { + value: function () { + return onceStrict(this) + }, + configurable: true + }) +}) + +function once (fn) { + var f = function () { + if (f.called) return f.value + f.called = true + return f.value = fn.apply(this, arguments) + } + f.called = false + return f +} + +function onceStrict (fn) { + var f = function () { + if (f.called) + throw new Error(f.onceError) + f.called = true + return f.value = fn.apply(this, arguments) + } + var name = fn.name || 'Function wrapped with `once`' + f.onceError = name + " shouldn't be called more than once" + f.called = false + return f +} + +},{"wrappy":29}],22:[function(require,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) +},{"_process":24}],23:[function(require,module,exports){ +(function (process){ +'use strict'; + +function posix(path) { + return path.charAt(0) === '/'; +} + +function win32(path) { + // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 + var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; + var result = splitDeviceRe.exec(path); + var device = result[1] || ''; + var isUnc = Boolean(device && device.charAt(1) !== ':'); + + // UNC paths are always absolute + return Boolean(result[2] || isUnc); +} + +module.exports = process.platform === 'win32' ? win32 : posix; +module.exports.posix = posix; +module.exports.win32 = win32; + +}).call(this,require('_process')) +},{"_process":24}],24:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],25:[function(require,module,exports){ +// Underscore.js 1.8.3 +// http://underscorejs.org +// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `exports` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var + push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind, + nativeCreate = Object.create; + + // Naked function reference for surrogate-prototype-swapping. + var Ctor = function(){}; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for the old `require()` API. If we're in + // the browser, add `_` as a global object. + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.8.3'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var optimizeCb = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + case 2: return function(value, other) { + return func.call(context, value, other); + }; + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + // A mostly-internal function to generate callbacks that can be applied + // to each element in a collection, returning the desired result — either + // identity, an arbitrary callback, a property matcher, or a property accessor. + var cb = function(value, context, argCount) { + if (value == null) return _.identity; + if (_.isFunction(value)) return optimizeCb(value, context, argCount); + if (_.isObject(value)) return _.matcher(value); + return _.property(value); + }; + _.iteratee = function(value, context) { + return cb(value, context, Infinity); + }; + + // An internal function for creating assigner functions. + var createAssigner = function(keysFunc, undefinedOnly) { + return function(obj) { + var length = arguments.length; + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + }; + + // An internal function for creating a new object that inherits from another. + var baseCreate = function(prototype) { + if (!_.isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + }; + + var property = function(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + }; + + // Helper for collection methods to determine whether a collection + // should be iterated as an array or as an object + // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = property('length'); + var isArrayLike = function(collection) { + var length = getLength(collection); + return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; + }; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); + } + } + return obj; + }; + + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Create a reducing function iterating left or right. + function createReduce(dir) { + // Optimized iterator function as using arguments.length + // in the main function will deoptimize the, see #1991. + function iterator(obj, iteratee, memo, keys, index, length) { + for (; index >= 0 && index < length; index += dir) { + var currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + } + + return function(obj, iteratee, memo, context) { + iteratee = optimizeCb(iteratee, context, 4); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + index = dir > 0 ? 0 : length - 1; + // Determine the initial value if none is provided. + if (arguments.length < 3) { + memo = obj[keys ? keys[index] : index]; + index += dir; + } + return iterator(obj, iteratee, memo, keys, index, length); + }; + } + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + _.reduce = _.foldl = _.inject = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + _.reduceRight = _.foldr = createReduce(-1); + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var key; + if (isArrayLike(obj)) { + key = _.findIndex(obj, predicate, context); + } else { + key = _.findKey(obj, predicate, context); + } + if (key !== void 0 && key !== -1) return obj[key]; + }; + + // Return all the elements that pass a truth test. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(cb(predicate)), context); + }; + + // Determine whether all of the elements match a truth test. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + }; + + // Determine if at least one element in the object matches a truth test. + // Aliased as `any`. + _.some = _.any = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + }; + + // Determine if the array or object contains a given item (using `===`). + // Aliased as `includes` and `include`. + _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return _.indexOf(obj, item, fromIndex) >= 0; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + var isFunc = _.isFunction(method); + return _.map(obj, function(value) { + var func = isFunc ? method : value[method]; + return func == null ? func : func.apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matcher(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matcher(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Shuffle a collection, using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + _.shuffle = function(obj) { + var set = isArrayLike(obj) ? obj : _.values(obj); + var length = set.length; + var shuffled = Array(length); + for (var index = 0, rand; index < length; index++) { + rand = _.random(0, index); + if (rand !== index) shuffled[index] = shuffled[rand]; + shuffled[rand] = set[index]; + } + return shuffled; + }; + + // Sample **n** random values from a collection. + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + return _.shuffle(obj).slice(0, Math.max(0, n)); + }; + + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + return _.pluck(_.map(obj, function(value, index, list) { + return { + value: value, + index: index, + criteria: iteratee(value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior) { + return function(obj, iteratee, context) { + var result = {}; + iteratee = cb(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, value, key) { + if (_.has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, value, key) { + if (_.has(result, key)) result[key]++; else result[key] = 1; + }); + + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (isArrayLike(obj)) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = function(obj, predicate, context) { + predicate = cb(predicate, context); + var pass = [], fail = []; + _.each(obj, function(value, key, obj) { + (predicate(value, key, obj) ? pass : fail).push(value); + }); + return [pass, fail]; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[0]; + return _.initial(array, array.length - n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + _.initial = function(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + _.last = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[array.length - 1]; + return _.rest(array, Math.max(0, array.length - n)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, _.identity); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, strict, startIndex) { + var output = [], idx = 0; + for (var i = startIndex || 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { + //flatten current level of array or arguments object + if (!shallow) value = flatten(value, shallow, strict); + var j = 0, len = value.length; + output.length += len; + while (j < len) { + output[idx++] = value[j++]; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, false); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + return _.difference(array, slice.call(arguments, 1)); + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!_.contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!_.contains(result, value)) { + result.push(value); + } + } + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = function() { + return _.uniq(flatten(arguments, true, true)); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + for (var j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = function(array) { + var rest = flatten(arguments, true, true, 1); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function() { + return _.unzip(arguments); + }; + + // Complement of _.zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices + _.unzip = function(array) { + var length = array && _.max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = _.pluck(array, index); + } + return result; + }; + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. + _.object = function(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // Generator function to create the findIndex and findLastIndex functions + function createPredicateIndexFinder(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + } + + // Returns the first index on an array-like that passes a predicate test + _.findIndex = createPredicateIndexFinder(1); + _.findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + }; + + // Generator function to create the indexOf and lastIndexOf functions + function createIndexFinder(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), _.isNaN); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + } + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); + _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + step = step || 1; + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Determines whether to execute a function as a constructor + // or a normal function with the provided arguments + var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (_.isObject(result)) return result; + return self; + }; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = function(func, context) { + if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + var args = slice.call(arguments, 2); + var bound = function() { + return executeBound(func, bound, context, this, args.concat(slice.call(arguments))); + }; + return bound; + }; + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder, allowing any combination of arguments to be pre-filled. + _.partial = function(func) { + var boundArgs = slice.call(arguments, 1); + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = function(obj) { + var i, length = arguments.length, key; + if (length <= 1) throw new Error('bindAll must be passed function names'); + for (i = 1; i < length; i++) { + key = arguments[i]; + obj[key] = _.bind(obj[key], obj); + } + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ + return func.apply(null, args); + }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = _.partial(_.delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) options = {}; + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + return function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, args, context, timestamp, result; + + var later = function() { + var last = _.now() - timestamp; + + if (last < wait && last >= 0) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + if (!timeout) context = args = null; + } + } + }; + + return function() { + context = this; + args = arguments; + timestamp = _.now(); + var callNow = immediate && !timeout; + if (!timeout) timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + }; + + // Returns a function that will only be executed on and after the Nth call. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Returns a function that will only be executed up to (but not including) the Nth call. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + + // Object Functions + // ---------------- + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + function collectNonEnumProps(obj, keys) { + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { + keys.push(prop); + } + } + } + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve all the property names of an object. + _.allKeys = function(obj) { + if (!_.isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Returns the results of applying the iteratee to each element of the object + // In contrast to _.map it returns an object + _.mapObject = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = _.keys(obj), + length = keys.length, + results = {}, + currentKey; + for (var index = 0; index < length; index++) { + currentKey = keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Convert an object into a list of `[key, value]` pairs. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = createAssigner(_.allKeys); + + // Assigns a given object with all the own properties in the passed-in object(s) + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + _.extendOwn = _.assign = createAssigner(_.keys); + + // Returns the first key on an object that passes a predicate test + _.findKey = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = _.keys(obj), key; + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = function(object, oiteratee, context) { + var result = {}, obj = object, iteratee, keys; + if (obj == null) return result; + if (_.isFunction(oiteratee)) { + keys = _.allKeys(obj); + iteratee = optimizeCb(oiteratee, context); + } else { + keys = flatten(arguments, false, false, 1); + iteratee = function(value, key, obj) { return key in obj; }; + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }; + + // Return a copy of the object without the blacklisted properties. + _.omit = function(obj, iteratee, context) { + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + } else { + var keys = _.map(flatten(arguments, false, false, 1), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; + } + return _.pick(obj, iteratee, context); + }; + + // Fill in a given object with default properties. + _.defaults = createAssigner(_.allKeys, true); + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + _.create = function(prototype, props) { + var result = baseCreate(prototype); + if (props) _.extendOwn(result, props); + return result; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Returns whether an object has a given set of `key:value` pairs. + _.isMatch = function(object, attrs) { + var keys = _.keys(attrs), length = keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + + + // Internal recursive comparison function for `isEqual`. + var eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // A strict comparison is necessary because `null == undefined`. + if (a == null || b == null) return a === b; + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + } + + var areArrays = className === '[object Array]'; + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var keys = _.keys(a), key; + length = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (_.keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = keys[length]; + if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; + return _.keys(obj).length === 0; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return _.has(obj, 'callee'); + }; + } + + // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, + // IE 11 (#1621), and in Safari 8 (#1929). + if (typeof /./ != 'function' && typeof Int8Array != 'object') { + _.isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? (NaN is the only number which does not equal itself). + _.isNaN = function(obj) { + return _.isNumber(obj) && obj !== +obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, key) { + return obj != null && hasOwnProperty.call(obj, key); + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iteratees. + _.identity = function(value) { + return value; + }; + + // Predicate-generating functions. Often useful outside of Underscore. + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + _.property = property; + + // Generates a function for a given object that returns a given property. + _.propertyOf = function(obj) { + return obj == null ? function(){} : function(key) { + return obj[key]; + }; + }; + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + _.matcher = _.matches = function(attrs) { + attrs = _.extendOwn({}, attrs); + return function(obj) { + return _.isMatch(obj, attrs); + }; + }; + + // Run a function **n** times. + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = _.invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); + + // If the value of the named `property` is a function then invoke it with the + // `object` as context; otherwise, return it. + _.result = function(object, property, fallback) { + var value = object == null ? void 0 : object[property]; + if (value === void 0) { + value = fallback; + } + return _.isFunction(value) ? value.call(object) : value; + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escaper, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offest. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + try { + var render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function. Start chaining a wrapped Underscore object. + _.chain = function(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var result = function(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return result(this, func.apply(_, args)); + }; + }); + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return result(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + _.each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return result(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxy for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return '' + this._wrapped; + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (typeof define === 'function' && define.amd) { + define('underscore', [], function() { + return _; + }); + } +}.call(this)); + +},{}],26:[function(require,module,exports){ +arguments[4][19][0].apply(exports,arguments) +},{"dup":19}],27:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],28:[function(require,module,exports){ +(function (process,global){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./support/isBuffer'); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./support/isBuffer":27,"_process":24,"inherits":26}],29:[function(require,module,exports){ +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) + + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + + return wrapper + + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} + +},{}]},{},[7])(7) +}); \ No newline at end of file diff --git a/pr-preview/pr-478/assets/javascripts/workers/search.c7c1ca2c.min.js b/pr-preview/pr-478/assets/javascripts/workers/search.c7c1ca2c.min.js new file mode 100644 index 0000000000..2d6f767082 --- /dev/null +++ b/pr-preview/pr-478/assets/javascripts/workers/search.c7c1ca2c.min.js @@ -0,0 +1,2 @@ +"use strict";(()=>{var xe=Object.create;var G=Object.defineProperty,ve=Object.defineProperties,Se=Object.getOwnPropertyDescriptor,Te=Object.getOwnPropertyDescriptors,Qe=Object.getOwnPropertyNames,J=Object.getOwnPropertySymbols,Ee=Object.getPrototypeOf,Z=Object.prototype.hasOwnProperty,be=Object.prototype.propertyIsEnumerable;var K=Math.pow,X=(t,e,r)=>e in t?G(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,_=(t,e)=>{for(var r in e||(e={}))Z.call(e,r)&&X(t,r,e[r]);if(J)for(var r of J(e))be.call(e,r)&&X(t,r,e[r]);return t},B=(t,e)=>ve(t,Te(e));var Le=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var we=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Qe(e))!Z.call(t,i)&&i!==r&&G(t,i,{get:()=>e[i],enumerable:!(n=Se(e,i))||n.enumerable});return t};var Pe=(t,e,r)=>(r=t!=null?xe(Ee(t)):{},we(e||!t||!t.__esModule?G(r,"default",{value:t,enumerable:!0}):r,t));var W=(t,e,r)=>new Promise((n,i)=>{var s=u=>{try{a(r.next(u))}catch(c){i(c)}},o=u=>{try{a(r.throw(u))}catch(c){i(c)}},a=u=>u.done?n(u.value):Promise.resolve(u.value).then(s,o);a((r=r.apply(t,e)).next())});var re=Le((ee,te)=>{(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i0){var f=t.utils.clone(r)||{};f.position=[a,c],f.index=s.length,s.push(new t.Token(n.slice(a,o),f))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error("Cannot load unregistered function: "+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n1&&(oe&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ou?f+=2:a==u&&(r+=n[c+1]*i[f+1],c+=2,f+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}if(s.str.length==0&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}s.str.length==1&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var f=s.str.charAt(0),g=s.str.charAt(1),l;g in s.node.edges?l=s.node.edges[g]:(l=new t.TokenSet,s.node.edges[g]=l),s.str.length==1&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:f+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n="expecting term or field, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define=="function"&&define.amd?define(r):typeof ee=="object"?te.exports=r():e.lunr=r()}(this,function(){return t})})()});var Y=Pe(re());function ne(t,e=document){let r=ke(t,e);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${t}" to be present`);return r}function ke(t,e=document){return e.querySelector(t)||void 0}Object.entries||(Object.entries=function(t){let e=[];for(let r of Object.keys(t))e.push([r,t[r]]);return e});Object.values||(Object.values=function(t){let e=[];for(let r of Object.keys(t))e.push(t[r]);return e});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(t,e){typeof t=="object"?(this.scrollLeft=t.left,this.scrollTop=t.top):(this.scrollLeft=t,this.scrollTop=e)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...t){let e=this.parentNode;if(e){t.length===0&&e.removeChild(this);for(let r=t.length-1;r>=0;r--){let n=t[r];typeof n=="string"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?e.insertBefore(this.previousSibling,n):e.replaceChild(n,this)}}}));function ie(t){let e=new Map;for(let r of t){let[n]=r.location.split("#"),i=e.get(n);typeof i=="undefined"?e.set(n,r):(e.set(r.location,r),r.parent=i)}return e}function H(t,e,r){var s;e=new RegExp(e,"g");let n,i=0;do{n=e.exec(t);let o=(s=n==null?void 0:n.index)!=null?s:t.length;if(in?e(r,1,n,n=i):t.charAt(i)===">"&&(t.charAt(n+1)==="/"?--s===0&&e(r++,2,n,i+1):t.charAt(i-1)!=="/"&&s++===0&&e(r,0,n,i+1),n=i+1);i>n&&e(r,1,n,i)}function oe(t,e,r,n=!1){return q([t],e,r,n).pop()}function q(t,e,r,n=!1){let i=[0];for(let s=1;s>>2&1023,c=a[0]>>>12;i.push(+(u>c)+i[i.length-1])}return t.map((s,o)=>{let a=0,u=new Map;for(let f of r.sort((g,l)=>g-l)){let g=f&1048575,l=f>>>20;if(i[l]!==o)continue;let m=u.get(l);typeof m=="undefined"&&u.set(l,m=[]),m.push(g)}if(u.size===0)return s;let c=[];for(let[f,g]of u){let l=e[f],m=l[0]>>>12,x=l[l.length-1]>>>12,v=l[l.length-1]>>>2&1023;n&&m>a&&c.push(s.slice(a,m));let d=s.slice(m,x+v);for(let y of g.sort((b,E)=>E-b)){let b=(l[y]>>>12)-m,E=(l[y]>>>2&1023)+b;d=[d.slice(0,b),"",d.slice(b,E),"",d.slice(E)].join("")}if(a=x+v,c.push(d)===2)break}return n&&a{var f;switch(i[f=o+=s]||(i[f]=[]),a){case 0:case 2:i[o].push(u<<12|c-u<<2|a);break;case 1:let g=r[n].slice(u,c);H(g,lunr.tokenizer.separator,(l,m)=>{if(typeof lunr.segmenter!="undefined"){let x=g.slice(l,m);if(/^[MHIK]$/.test(lunr.segmenter.ctype_(x))){let v=lunr.segmenter.segment(x);for(let d=0,y=0;dr){return t.trim().split(/"([^"]+)"/g).map((r,n)=>n&1?r.replace(/^\b|^(?![^\x00-\x7F]|$)|\s+/g," +"):r).join("").replace(/"|(?:^|\s+)[*+\-:^~]+(?=\s+|$)/g,"").split(/\s+/g).reduce((r,n)=>{let i=e(n);return[...r,...Array.isArray(i)?i:[i]]},[]).map(r=>/([~^]$)/.test(r)?`${r}1`:r).map(r=>/(^[+-]|[~^]\d+$)/.test(r)?r:`${r}*`).join(" ")}function ce(t){return ue(t,e=>{let r=[],n=new lunr.QueryLexer(e);n.run();for(let{type:i,str:s,start:o,end:a}of n.lexemes)switch(i){case"FIELD":["title","text","tags"].includes(s)||(e=[e.slice(0,a)," ",e.slice(a+1)].join(""));break;case"TERM":H(s,lunr.tokenizer.separator,(...u)=>{r.push([e.slice(0,o),s.slice(...u),e.slice(a)].join(""))})}return r})}function le(t){let e=new lunr.Query(["title","text","tags"]);new lunr.QueryParser(t,e).parse();for(let n of e.clauses)n.usePipeline=!0,n.term.startsWith("*")&&(n.wildcard=lunr.Query.wildcard.LEADING,n.term=n.term.slice(1)),n.term.endsWith("*")&&(n.wildcard=lunr.Query.wildcard.TRAILING,n.term=n.term.slice(0,-1));return e.clauses}function he(t,e){var i;let r=new Set(t),n={};for(let s=0;s0;){let o=i[--s];for(let u=1;un[o]-u&&(r.add(t.slice(o,o+u)),i[s++]=o+u);let a=o+n[o];n[a]&&ar=>{if(typeof r[e]=="undefined")return;let n=[r.location,e].join(":");return t.set(n,lunr.tokenizer.table=[]),r[e]}}function Re(t,e){let[r,n]=[new Set(t),new Set(e)];return[...new Set([...r].filter(i=>!n.has(i)))]}var U=class{constructor({config:e,docs:r,options:n}){let i=Oe(this.table=new Map);this.map=ie(r),this.options=n,this.index=lunr(function(){this.metadataWhitelist=["position"],this.b(0),e.lang.length===1&&e.lang[0]!=="en"?this.use(lunr[e.lang[0]]):e.lang.length>1&&this.use(lunr.multiLanguage(...e.lang)),this.tokenizer=ae,lunr.tokenizer.separator=new RegExp(e.separator),lunr.segmenter="TinySegmenter"in lunr?new lunr.TinySegmenter:void 0;let s=Re(["trimmer","stopWordFilter","stemmer"],e.pipeline);for(let o of e.lang.map(a=>a==="en"?lunr:lunr[a]))for(let a of s)this.pipeline.remove(o[a]),this.searchPipeline.remove(o[a]);this.ref("location");for(let[o,a]of Object.entries(e.fields))this.field(o,B(_({},a),{extractor:i(o)}));for(let o of r)this.add(o,{boost:o.boost})})}search(e){if(e=e.replace(new RegExp("\\p{sc=Han}+","gu"),s=>[...fe(s,this.index.invertedIndex)].join("* ")),e=ce(e),!e)return{items:[]};let r=le(e).filter(s=>s.presence!==lunr.Query.presence.PROHIBITED),n=this.index.search(e).reduce((s,{ref:o,score:a,matchData:u})=>{let c=this.map.get(o);if(typeof c!="undefined"){c=_({},c),c.tags&&(c.tags=[...c.tags]);let f=he(r,Object.keys(u.metadata));for(let l of this.index.fields){if(typeof c[l]=="undefined")continue;let m=[];for(let d of Object.values(u.metadata))typeof d[l]!="undefined"&&m.push(...d[l].position);if(!m.length)continue;let x=this.table.get([c.location,l].join(":")),v=Array.isArray(c[l])?q:oe;c[l]=v(c[l],x,m,l!=="text")}let g=+!c.parent+Object.values(f).filter(l=>l).length/Object.keys(f).length;s.push(B(_({},c),{score:a*(1+K(g,2)),terms:f}))}return s},[]).sort((s,o)=>o.score-s.score).reduce((s,o)=>{let a=this.map.get(o.location);if(typeof a!="undefined"){let u=a.parent?a.parent.location:a.location;s.set(u,[...s.get(u)||[],o])}return s},new Map);for(let[s,o]of n)if(!o.find(a=>a.location===s)){let a=this.map.get(s);o.push(B(_({},a),{score:0,terms:{}}))}let i;if(this.options.suggest){let s=this.index.query(o=>{for(let a of r)o.term(a.term,{fields:["title"],presence:lunr.Query.presence.REQUIRED,wildcard:lunr.Query.wildcard.TRAILING})});i=s.length?Object.keys(s[0].matchData.metadata):[]}return _({items:[...n.values()]},typeof i!="undefined"&&{suggest:i})}};var de;function Ie(t){return W(this,null,function*(){let e="../lunr";if(typeof parent!="undefined"&&"IFrameWorker"in parent){let n=ne("script[src]"),[i]=n.src.split("/worker");e=e.replace("..",i)}let r=[];for(let n of t.lang){switch(n){case"ja":r.push(`${e}/tinyseg.js`);break;case"hi":case"th":r.push(`${e}/wordcut.js`);break}n!=="en"&&r.push(`${e}/min/lunr.${n}.min.js`)}t.lang.length>1&&r.push(`${e}/min/lunr.multi.min.js`),r.length&&(yield importScripts(`${e}/min/lunr.stemmer.support.min.js`,...r))})}function Fe(t){return W(this,null,function*(){switch(t.type){case 0:return yield Ie(t.data.config),de=new U(t.data),{type:1};case 2:let e=t.data;try{return{type:3,data:de.search(e)}}catch(r){return console.warn(`Invalid query: ${e} \u2013 see https://bit.ly/2s3ChXG`),console.warn(r),{type:3,data:{items:[]}}}default:throw new TypeError("Invalid message type")}})}self.lunr=Y.default;Y.default.utils.warn=console.warn;addEventListener("message",t=>W(void 0,null,function*(){postMessage(yield Fe(t.data))}));})(); diff --git a/pr-preview/pr-478/assets/logo-old.svg b/pr-preview/pr-478/assets/logo-old.svg new file mode 100644 index 0000000000..4354f7f0eb --- /dev/null +++ b/pr-preview/pr-478/assets/logo-old.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/pr-preview/pr-478/assets/logo.svg b/pr-preview/pr-478/assets/logo.svg new file mode 100644 index 0000000000..00be0400d6 --- /dev/null +++ b/pr-preview/pr-478/assets/logo.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/pr-preview/pr-478/assets/stylesheets/glightbox.min.css b/pr-preview/pr-478/assets/stylesheets/glightbox.min.css new file mode 100644 index 0000000000..3c9ff87757 --- /dev/null +++ b/pr-preview/pr-478/assets/stylesheets/glightbox.min.css @@ -0,0 +1 @@ +.glightbox-container{width:100%;height:100%;position:fixed;top:0;left:0;z-index:999999!important;overflow:hidden;-ms-touch-action:none;touch-action:none;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;outline:0}.glightbox-container.inactive{display:none}.glightbox-container .gcontainer{position:relative;width:100%;height:100%;z-index:9999;overflow:hidden}.glightbox-container .gslider{-webkit-transition:-webkit-transform .4s ease;transition:-webkit-transform .4s ease;transition:transform .4s ease;transition:transform .4s ease,-webkit-transform .4s ease;height:100%;left:0;top:0;width:100%;position:relative;overflow:hidden;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.glightbox-container .gslide{width:100%;position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;opacity:0}.glightbox-container .gslide.current{opacity:1;z-index:99999;position:relative}.glightbox-container .gslide.prev{opacity:1;z-index:9999}.glightbox-container .gslide-inner-content{width:100%}.glightbox-container .ginner-container{position:relative;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-width:100%;margin:auto;height:100vh}.glightbox-container .ginner-container.gvideo-container{width:100%}.glightbox-container .ginner-container.desc-bottom,.glightbox-container .ginner-container.desc-top{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.glightbox-container .ginner-container.desc-left,.glightbox-container .ginner-container.desc-right{max-width:100%!important}.gslide iframe,.gslide video{outline:0!important;border:none;min-height:165px;-webkit-overflow-scrolling:touch;-ms-touch-action:auto;touch-action:auto}.gslide:not(.current){pointer-events:none}.gslide-image{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.gslide-image img{max-height:100vh;display:block;padding:0;float:none;outline:0;border:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;max-width:100vw;width:auto;height:auto;-o-object-fit:cover;object-fit:cover;-ms-touch-action:none;touch-action:none;margin:auto;min-width:200px}.desc-bottom .gslide-image img,.desc-top .gslide-image img{width:auto}.desc-left .gslide-image img,.desc-right .gslide-image img{width:auto;max-width:100%}.gslide-image img.zoomable{position:relative}.gslide-image img.dragging{cursor:-webkit-grabbing!important;cursor:grabbing!important;-webkit-transition:none;transition:none}.gslide-video{position:relative;max-width:100vh;width:100%!important}.gslide-video .plyr__poster-enabled.plyr--loading .plyr__poster{display:none}.gslide-video .gvideo-wrapper{width:100%;margin:auto}.gslide-video::before{content:'';position:absolute;width:100%;height:100%;background:rgba(255,0,0,.34);display:none}.gslide-video.playing::before{display:none}.gslide-video.fullscreen{max-width:100%!important;min-width:100%;height:75vh}.gslide-video.fullscreen video{max-width:100%!important;width:100%!important}.gslide-inline{background:#fff;text-align:left;max-height:calc(100vh - 40px);overflow:auto;max-width:100%;margin:auto}.gslide-inline .ginlined-content{padding:20px;width:100%}.gslide-inline .dragging{cursor:-webkit-grabbing!important;cursor:grabbing!important;-webkit-transition:none;transition:none}.ginlined-content{overflow:auto;display:block!important;opacity:1}.gslide-external{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;min-width:100%;background:#fff;padding:0;overflow:auto;max-height:75vh;height:100%}.gslide-media{display:-webkit-box;display:-ms-flexbox;display:flex;width:auto}.zoomed .gslide-media{-webkit-box-shadow:none!important;box-shadow:none!important}.desc-bottom .gslide-media,.desc-top .gslide-media{margin:0 auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.gslide-description{position:relative;-webkit-box-flex:1;-ms-flex:1 0 100%;flex:1 0 100%}.gslide-description.description-left,.gslide-description.description-right{max-width:100%}.gslide-description.description-bottom,.gslide-description.description-top{margin:0 auto;width:100%}.gslide-description p{margin-bottom:12px}.gslide-description p:last-child{margin-bottom:0}.zoomed .gslide-description{display:none}.glightbox-button-hidden{display:none}.glightbox-mobile .glightbox-container .gslide-description{height:auto!important;width:100%;position:absolute;bottom:0;padding:19px 11px;max-width:100vw!important;-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important;max-height:78vh;overflow:auto!important;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,.75)));background:linear-gradient(to bottom,rgba(0,0,0,0) 0,rgba(0,0,0,.75) 100%);-webkit-transition:opacity .3s linear;transition:opacity .3s linear;padding-bottom:50px}.glightbox-mobile .glightbox-container .gslide-title{color:#fff;font-size:1em}.glightbox-mobile .glightbox-container .gslide-desc{color:#a1a1a1}.glightbox-mobile .glightbox-container .gslide-desc a{color:#fff;font-weight:700}.glightbox-mobile .glightbox-container .gslide-desc *{color:inherit}.glightbox-mobile .glightbox-container .gslide-desc .desc-more{color:#fff;opacity:.4}.gdesc-open .gslide-media{-webkit-transition:opacity .5s ease;transition:opacity .5s ease;opacity:.4}.gdesc-open .gdesc-inner{padding-bottom:30px}.gdesc-closed .gslide-media{-webkit-transition:opacity .5s ease;transition:opacity .5s ease;opacity:1}.greset{-webkit-transition:all .3s ease;transition:all .3s ease}.gabsolute{position:absolute}.grelative{position:relative}.glightbox-desc{display:none!important}.glightbox-open{overflow:hidden}.gloader{height:25px;width:25px;-webkit-animation:lightboxLoader .8s infinite linear;animation:lightboxLoader .8s infinite linear;border:2px solid #fff;border-right-color:transparent;border-radius:50%;position:absolute;display:block;z-index:9999;left:0;right:0;margin:0 auto;top:47%}.goverlay{width:100%;height:calc(100vh + 1px);position:fixed;top:-1px;left:0;background:#000;will-change:opacity}.glightbox-mobile .goverlay{background:#000}.gclose,.gnext,.gprev{z-index:99999;cursor:pointer;width:26px;height:44px;border:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.gclose svg,.gnext svg,.gprev svg{display:block;width:25px;height:auto;margin:0;padding:0}.gclose.disabled,.gnext.disabled,.gprev.disabled{opacity:.1}.gclose .garrow,.gnext .garrow,.gprev .garrow{stroke:#fff}.gbtn.focused{outline:2px solid #0f3d81}iframe.wait-autoplay{opacity:0}.glightbox-closing .gclose,.glightbox-closing .gnext,.glightbox-closing .gprev{opacity:0!important}.glightbox-clean .gslide-description{background:#fff}.glightbox-clean .gdesc-inner{padding:22px 20px}.glightbox-clean .gslide-title{font-size:1em;font-weight:400;font-family:arial;color:#000;margin-bottom:19px;line-height:1.4em}.glightbox-clean .gslide-desc{font-size:.86em;margin-bottom:0;font-family:arial;line-height:1.4em}.glightbox-clean .gslide-video{background:#000}.glightbox-clean .gclose,.glightbox-clean .gnext,.glightbox-clean .gprev{background-color:rgba(0,0,0,.75);border-radius:4px}.glightbox-clean .gclose path,.glightbox-clean .gnext path,.glightbox-clean .gprev path{fill:#fff}.glightbox-clean .gprev{position:absolute;top:-100%;left:30px;width:40px;height:50px}.glightbox-clean .gnext{position:absolute;top:-100%;right:30px;width:40px;height:50px}.glightbox-clean .gclose{width:35px;height:35px;top:15px;right:10px;position:absolute}.glightbox-clean .gclose svg{width:18px;height:auto}.glightbox-clean .gclose:hover{opacity:1}.gfadeIn{-webkit-animation:gfadeIn .5s ease;animation:gfadeIn .5s ease}.gfadeOut{-webkit-animation:gfadeOut .5s ease;animation:gfadeOut .5s ease}.gslideOutLeft{-webkit-animation:gslideOutLeft .3s ease;animation:gslideOutLeft .3s ease}.gslideInLeft{-webkit-animation:gslideInLeft .3s ease;animation:gslideInLeft .3s ease}.gslideOutRight{-webkit-animation:gslideOutRight .3s ease;animation:gslideOutRight .3s ease}.gslideInRight{-webkit-animation:gslideInRight .3s ease;animation:gslideInRight .3s ease}.gzoomIn{-webkit-animation:gzoomIn .5s ease;animation:gzoomIn .5s ease}.gzoomOut{-webkit-animation:gzoomOut .5s ease;animation:gzoomOut .5s ease}@-webkit-keyframes lightboxLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes lightboxLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes gfadeIn{from{opacity:0}to{opacity:1}}@keyframes gfadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes gfadeOut{from{opacity:1}to{opacity:0}}@keyframes gfadeOut{from{opacity:1}to{opacity:0}}@-webkit-keyframes gslideInLeft{from{opacity:0;-webkit-transform:translate3d(-60%,0,0);transform:translate3d(-60%,0,0)}to{visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes gslideInLeft{from{opacity:0;-webkit-transform:translate3d(-60%,0,0);transform:translate3d(-60%,0,0)}to{visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes gslideOutLeft{from{opacity:1;visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-60%,0,0);transform:translate3d(-60%,0,0);opacity:0;visibility:hidden}}@keyframes gslideOutLeft{from{opacity:1;visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-60%,0,0);transform:translate3d(-60%,0,0);opacity:0;visibility:hidden}}@-webkit-keyframes gslideInRight{from{opacity:0;visibility:visible;-webkit-transform:translate3d(60%,0,0);transform:translate3d(60%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes gslideInRight{from{opacity:0;visibility:visible;-webkit-transform:translate3d(60%,0,0);transform:translate3d(60%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes gslideOutRight{from{opacity:1;visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(60%,0,0);transform:translate3d(60%,0,0);opacity:0}}@keyframes gslideOutRight{from{opacity:1;visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(60%,0,0);transform:translate3d(60%,0,0);opacity:0}}@-webkit-keyframes gzoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:1}}@keyframes gzoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:1}}@-webkit-keyframes gzoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes gzoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@media (min-width:769px){.glightbox-container .ginner-container{width:auto;height:auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.glightbox-container .ginner-container.desc-top .gslide-description{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.glightbox-container .ginner-container.desc-top .gslide-image,.glightbox-container .ginner-container.desc-top .gslide-image img{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.glightbox-container .ginner-container.desc-left .gslide-description{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.glightbox-container .ginner-container.desc-left .gslide-image{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.gslide-image img{max-height:97vh;max-width:100%}.gslide-image img.zoomable{cursor:-webkit-zoom-in;cursor:zoom-in}.zoomed .gslide-image img.zoomable{cursor:-webkit-grab;cursor:grab}.gslide-inline{max-height:95vh}.gslide-external{max-height:100vh}.gslide-description.description-left,.gslide-description.description-right{max-width:275px}.glightbox-open{height:auto}.goverlay{background:rgba(0,0,0,.92)}.glightbox-clean .gslide-media{-webkit-box-shadow:1px 2px 9px 0 rgba(0,0,0,.65);box-shadow:1px 2px 9px 0 rgba(0,0,0,.65)}.glightbox-clean .description-left .gdesc-inner,.glightbox-clean .description-right .gdesc-inner{position:absolute;height:100%;overflow-y:auto}.glightbox-clean .gclose,.glightbox-clean .gnext,.glightbox-clean .gprev{background-color:rgba(0,0,0,.32)}.glightbox-clean .gclose:hover,.glightbox-clean .gnext:hover,.glightbox-clean .gprev:hover{background-color:rgba(0,0,0,.7)}.glightbox-clean .gprev{top:45%}.glightbox-clean .gnext{top:45%}}@media (min-width:992px){.glightbox-clean .gclose{opacity:.7;right:20px}}@media screen and (max-height:420px){.goverlay{background:#000}} \ No newline at end of file diff --git a/pr-preview/pr-478/assets/stylesheets/main.12320a83.min.css b/pr-preview/pr-478/assets/stylesheets/main.12320a83.min.css new file mode 100644 index 0000000000..b33c690219 --- /dev/null +++ b/pr-preview/pr-478/assets/stylesheets/main.12320a83.min.css @@ -0,0 +1 @@ +@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:#0000;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-scheme=default]{color-scheme:light}[data-md-color-scheme=default] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=default] img[src$="#only-dark"]{display:none}:root,[data-md-color-scheme=default]{--md-hue:225deg;--md-default-fg-color:#000000de;--md-default-fg-color--light:#0000008a;--md-default-fg-color--lighter:#00000052;--md-default-fg-color--lightest:#00000012;--md-default-bg-color:#fff;--md-default-bg-color--light:#ffffffb3;--md-default-bg-color--lighter:#ffffff4d;--md-default-bg-color--lightest:#ffffff1f;--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-bg-color--light:#f5f5f5b3;--md-code-bg-color--lighter:#f5f5f54d;--md-code-hl-color:#4287ff;--md-code-hl-color--light:#4287ff1a;--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-del-color:#f5503d26;--md-typeset-ins-color:#0bd57026;--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-mark-color:#ffff0080;--md-typeset-table-color:#0000001f;--md-typeset-table-color--light:rgba(0,0,0,.035);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-warning-fg-color:#000000de;--md-warning-bg-color:#ff9;--md-footer-fg-color:#fff;--md-footer-fg-color--light:#ffffffb3;--md-footer-fg-color--lighter:#ffffff73;--md-footer-bg-color:#000000de;--md-footer-bg-color--dark:#00000052;--md-shadow-z1:0 0.2rem 0.5rem #0000000d,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #0000001a,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0003,0 0 0.05rem #00000059}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}aside,body,input{font-feature-settings:"kern","liga";color:var(--md-typeset-color);font-family:var(--md-text-font-family)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset a code{color:var(--md-typeset-a-color)}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none;transition:background-color 125ms}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;transition:color 125ms,background-color 125ms;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{cursor:help;text-decoration:none}.md-typeset [data-preview],.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light)}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}.md-typeset ul[type]{list-style-type:revert-layer}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol ol ol ol,.md-typeset ul ol ol ol{list-style-type:upper-alpha}.md-typeset ol ol ol ol ol,.md-typeset ul ol ol ol ol{list-style-type:upper-roman}.md-typeset ol[type],.md-typeset ul[type]{list-style-type:revert-layer}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}[dir=ltr] .md-typeset ol li ol,[dir=ltr] .md-typeset ol li ul,[dir=ltr] .md-typeset ul li ol,[dir=ltr] .md-typeset ul li ul{margin-left:.625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:-moz-fit-content;width:fit-content}.md-typeset figure img{display:block;margin:0 auto}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td>:first-child,.md-typeset table:not([class]) th>:first-child{margin-top:0}.md-typeset table:not([class]) td>:last-child,.md-typeset table:not([class]) th>:last-child{margin-bottom:0}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:var(--md-typeset-table-color--light);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.984375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-typeset .md-author{border-radius:100%;display:block;flex-shrink:0;height:1.6rem;overflow:hidden;position:relative;transition:color 125ms,transform 125ms;width:1.6rem}.md-typeset .md-author img{display:block}.md-typeset .md-author--more{background:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);font-size:.6rem;font-weight:700;line-height:1.6rem;text-align:center}.md-typeset .md-author--long{height:2.4rem;width:2.4rem}.md-typeset a.md-author{transform:scale(1)}.md-typeset a.md-author img{border-radius:100%;filter:grayscale(100%) opacity(75%);transition:filter 125ms}.md-typeset a.md-author:focus,.md-typeset a.md-author:hover{transform:scale(1.1);z-index:1}.md-typeset a.md-author:focus img,.md-typeset a.md-author:hover img{filter:grayscale(0)}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background-color:var(--md-warning-bg-color);color:var(--md-warning-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.no-js .md-banner__button{display:none}.md-banner__button:hover{opacity:.7}html{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.984375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:focus,.md-clipboard:hover{color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:focus code,.md-clipboard--inline:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}:root{--md-code-select-icon:url('data:image/svg+xml;charset=utf-8,');--md-code-copy-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .md-code__content{display:grid}.md-code__nav{background-color:var(--md-code-bg-color--lighter);border-radius:.1rem;display:flex;gap:.2rem;padding:.2rem;position:absolute;right:.25em;top:.25em;transition:background-color .25s;z-index:1}:hover>.md-code__nav{background-color:var(--md-code-bg-color--light)}.md-code__button{color:var(--md-default-fg-color--lightest);cursor:pointer;display:block;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;transition:color .25s;width:1.5em}:hover>*>.md-code__button{color:var(--md-default-fg-color--light)}.md-code__button.focus-visible,.md-code__button:hover{color:var(--md-accent-fg-color)}.md-code__button--active{color:var(--md-default-fg-color)!important}.md-code__button:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-code__button[data-md-type=select]:after{-webkit-mask-image:var(--md-code-select-icon);mask-image:var(--md-code-select-icon)}.md-code__button[data-md-type=copy]:after{-webkit-mask-image:var(--md-code-copy-icon);mask-image:var(--md-code-copy-icon)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:#0000008a;height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.984375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{display:flex;flex-wrap:wrap;place-content:baseline center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}@media print{.md-feedback{display:none}}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{align-items:end;display:flex;flex-grow:0.01;margin-bottom:.4rem;margin-top:1rem;max-width:100%;outline-color:var(--md-accent-fg-color);overflow:hidden;transition:opacity .25s}.md-footer__link:focus,.md-footer__link:hover{opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.984375em){.md-footer__link--prev{flex-shrink:0}.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;margin-bottom:.7rem;max-width:calc(100% - 2.4rem);padding:0 1rem;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;opacity:.7}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{display:inline-flex;gap:.2rem;margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:focus,.md-typeset .md-button:hover{background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:focus,.md-typeset .md-input:hover{border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem #0000,0 .2rem .4rem #0000;color:var(--md-primary-bg-color);display:block;left:0;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.234375em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo img,.md-header__button.md-logo svg{fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-left:1rem;margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem;margin-right:1rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}[data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.md-header__option>input{bottom:0}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}.md-meta{color:var(--md-default-fg-color--light);font-size:.7rem;line-height:1.3}.md-meta__list{display:inline-flex;flex-wrap:wrap;list-style:none;margin:0;padding:0}.md-meta__item:not(:last-child):after{content:"·";margin-left:.2rem;margin-right:.2rem}.md-meta__link{color:var(--md-typeset-a-color)}.md-meta__link:focus,.md-meta__link:hover{color:var(--md-accent-fg-color)}.md-draft{background-color:#ff1744;border-radius:.125em;color:#fff;display:inline-block;font-weight:700;padding-left:.5714285714em;padding-right:.5714285714em}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{color:var(--md-default-fg-color--light);display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo img,.md-nav__title .md-nav__button.md-logo svg{fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__link{align-items:flex-start;display:flex;gap:.4rem;margin-top:.625em;scroll-snap-align:start;transition:color 125ms}.md-nav__link--passed,.md-nav__link--passed code{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active,.md-nav__item .md-nav__link--active code{color:var(--md-typeset-a-color)}.md-nav__link .md-ellipsis{position:relative}.md-nav__link .md-ellipsis code{word-break:normal}[dir=ltr] .md-nav__link .md-icon:last-child{margin-left:auto}[dir=rtl] .md-nav__link .md-icon:last-child{margin-right:auto}.md-nav__link .md-typeset{font-size:.7rem;line-height:1.3}.md-nav__link svg{fill:currentcolor;flex-shrink:0;height:1.3em;position:relative}.md-nav__link[for]:focus,.md-nav__link[for]:hover,.md-nav__link[href]:focus,.md-nav__link[href]:hover{color:var(--md-accent-fg-color);cursor:pointer}.md-nav__link[for]:focus code,.md-nav__link[for]:hover code,.md-nav__link[href]:focus code,.md-nav__link[href]:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__container>.md-nav__link{margin-top:0}.md-nav__container>.md-nav__link:first-child{flex-grow:1;min-width:0}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.234375em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary .md-nav__item,.md-nav--primary .md-nav__title{font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest)}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:focus,.md-nav--primary .md-nav__item--active>.md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link svg{margin-top:.1em}.md-nav--primary .md-nav__link>.md-nav__link{padding:0}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:initial}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{-webkit-backface-visibility:hidden;backface-visibility:hidden}}@media screen and (max-width:59.984375em){.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.234375em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav{margin-bottom:-.4rem}.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}[dir=ltr] .md-nav--secondary .md-nav__list{padding-left:.6rem}[dir=rtl] .md-nav--secondary .md-nav__list{padding-right:.6rem}.md-nav--secondary .md-nav__list{padding-bottom:.4rem}[dir=ltr] .md-nav--secondary .md-nav__item>.md-nav__link{margin-right:.4rem}[dir=rtl] .md-nav--secondary .md-nav__item>.md-nav__link{margin-left:.4rem}}@media screen and (min-width:76.25em){.md-nav{margin-bottom:-.4rem;transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon{display:none}[dir=ltr] .md-nav--primary .md-nav__list{padding-left:.6rem}[dir=rtl] .md-nav--primary .md-nav__list{padding-right:.6rem}.md-nav--primary .md-nav__list{padding-bottom:.4rem}[dir=ltr] .md-nav--primary .md-nav__item>.md-nav__link{margin-right:.4rem}[dir=rtl] .md-nav--primary .md-nav__item>.md-nav__link{margin-left:.4rem}.md-nav__toggle~.md-nav{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .25s,visibility 0ms .25s;visibility:collapse}.md-nav__toggle~.md-nav>.md-nav__list{overflow:hidden}.md-nav__toggle.md-toggle--indeterminate~.md-nav,.md-nav__toggle:checked~.md-nav{grid-template-rows:1fr;opacity:1;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .15s .1s,visibility 0ms;visibility:visible}.md-nav__toggle.md-toggle--indeterminate~.md-nav{transition:none}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700}.md-nav__item--section>.md-nav__link[for]{color:var(--md-default-fg-color--light)}.md-nav__item--section>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav__item--section>.md-nav__link .md-icon,.md-nav__item--section>.md-nav__link>[for]{display:none}[dir=ltr] .md-nav__item--section>.md-nav{margin-left:-.6rem}[dir=rtl] .md-nav__item--section>.md-nav{margin-right:-.6rem}.md-nav__item--section>.md-nav{display:block;opacity:1;visibility:visible}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s;width:.9rem}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;border-radius:100%;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:transform .25s;vertical-align:-.1rem;width:100%}[dir=rtl] .md-nav__icon:after{transform:rotate(180deg)}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon:after,.md-nav__item--nested .md-toggle--indeterminate~.md-nav__link .md-nav__icon:after{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);margin-top:0;position:sticky;top:0;z-index:1}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active.md-nav__item--section{margin:0}[dir=ltr] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav:not(.md-nav--secondary){margin-left:-.6rem}[dir=rtl] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav:not(.md-nav--secondary){margin-right:-.6rem}.md-nav--lifted>.md-nav__list>.md-nav__item>[for]{color:var(--md-default-fg-color--light)}.md-nav--lifted .md-nav[data-md-level="1"]{grid-template-rows:1fr;opacity:1;visibility:visible}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em;opacity:1;visibility:visible}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__list{overflow:visible;padding-bottom:0}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}.md-pagination{font-size:.8rem;font-weight:700;gap:.4rem}.md-pagination,.md-pagination>*{align-items:center;display:flex;justify-content:center}.md-pagination>*{border-radius:.2rem;height:1.8rem;min-width:1.8rem;text-align:center}.md-pagination__current{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light)}.md-pagination__link{transition:color 125ms,background-color 125ms}.md-pagination__link:focus,.md-pagination__link:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-pagination__link:focus svg,.md-pagination__link:hover svg{color:var(--md-accent-fg-color)}.md-pagination__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-pagination__link svg{fill:currentcolor;color:var(--md-default-fg-color--lighter);display:block;max-height:100%;width:1.2rem}:root{--md-path-icon:url('data:image/svg+xml;charset=utf-8,')}.md-path{font-size:.7rem;margin:0 .8rem;overflow:auto;padding-top:1.2rem}.md-path:not([hidden]){display:block}@media screen and (min-width:76.25em){.md-path{margin:0 1.2rem}}.md-path__list{align-items:center;display:flex;gap:.2rem;list-style:none;margin:0;padding:0}.md-path__item:not(:first-child){display:inline-flex;gap:.2rem;white-space:nowrap}.md-path__item:not(:first-child):before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline;height:.8rem;-webkit-mask-image:var(--md-path-icon);mask-image:var(--md-path-icon);width:.8rem}.md-path__link{align-items:center;color:var(--md-default-fg-color--light);display:flex}.md-path__link:focus,.md-path__link:hover{color:var(--md-accent-fg-color)}:root{--md-post-pin-icon:url('data:image/svg+xml;charset=utf-8,')}.md-post__back{border-bottom:.05rem solid var(--md-default-fg-color--lightest);margin-bottom:1.2rem;padding-bottom:1.2rem}@media screen and (max-width:76.234375em){.md-post__back{display:none}}[dir=rtl] .md-post__back svg{transform:scaleX(-1)}.md-post__authors{display:flex;flex-direction:column;gap:.6rem;margin:0 .6rem 1.2rem}.md-post .md-post__meta a{transition:color 125ms}.md-post .md-post__meta a:focus,.md-post .md-post__meta a:hover{color:var(--md-accent-fg-color)}.md-post__title{color:var(--md-default-fg-color--light);font-weight:700}.md-post--excerpt{margin-bottom:3.2rem}.md-post--excerpt .md-post__header{align-items:center;display:flex;gap:.6rem;min-height:1.6rem}.md-post--excerpt .md-post__authors{align-items:center;display:inline-flex;flex-direction:row;gap:.2rem;margin:0;min-height:2.4rem}[dir=ltr] .md-post--excerpt .md-post__meta .md-meta__list{margin-right:.4rem}[dir=rtl] .md-post--excerpt .md-post__meta .md-meta__list{margin-left:.4rem}.md-post--excerpt .md-post__content>:first-child{--md-scroll-margin:6rem;margin-top:0}.md-post>.md-nav--secondary{margin:1em 0}.md-pin{background:var(--md-default-fg-color--lightest);border-radius:1rem;margin-top:-.05rem;padding:.2rem}.md-pin:after{background-color:currentcolor;content:"";display:block;height:.6rem;margin:0 auto;-webkit-mask-image:var(--md-post-pin-icon);mask-image:var(--md-post-pin-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.6rem}.md-profile{align-items:center;display:flex;font-size:.7rem;gap:.6rem;line-height:1.4;width:100%}.md-profile__description{flex-grow:1}.md-content--post{display:flex}@media screen and (max-width:76.234375em){.md-content--post{flex-flow:column-reverse}}.md-content--post>.md-content__inner{min-width:0}@media screen and (min-width:76.25em){[dir=ltr] .md-content--post>.md-content__inner{margin-left:1.2rem}[dir=rtl] .md-content--post>.md-content__inner{margin-right:1.2rem}}@media screen and (max-width:76.234375em){.md-sidebar.md-sidebar--post{padding:0;position:static;width:100%}.md-sidebar.md-sidebar--post .md-sidebar__scrollwrap{overflow:visible}.md-sidebar.md-sidebar--post .md-sidebar__inner{padding:0}.md-sidebar.md-sidebar--post .md-post__meta{margin-left:.6rem;margin-right:.6rem}.md-sidebar.md-sidebar--post .md-nav__item{border:none;display:inline}.md-sidebar.md-sidebar--post .md-nav__list{display:inline-flex;flex-wrap:wrap;gap:.6rem;padding-bottom:.6rem;padding-top:.6rem}.md-sidebar.md-sidebar--post .md-nav__link{padding:0}.md-sidebar.md-sidebar--post .md-nav{height:auto;margin-bottom:0;position:static}}:root{--md-progress-value:0;--md-progress-delay:400ms}.md-progress{background:var(--md-primary-bg-color);height:.075rem;opacity:min(clamp(0,var(--md-progress-value),1),clamp(0,100 - var(--md-progress-value),1));position:fixed;top:0;transform:scaleX(calc(var(--md-progress-value)*1%));transform-origin:left;transition:transform .5s cubic-bezier(.19,1,.22,1),opacity .25s var(--md-progress-delay);width:100%;z-index:4}:root{--md-search-result-icon:url('data:image/svg+xml;charset=utf-8,')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__overlay{left:-2.2rem}[dir=rtl] .md-search__overlay{right:-2.2rem}.md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}[data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){[dir=ltr] .md-search__overlay{left:0}[dir=rtl] .md-search__overlay{right:0}.md-search__overlay{background-color:#0000008a;cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}[data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.984375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.984375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.984375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__inner{left:0}[dir=rtl] .md-search__inner{right:0}.md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}[dir=rtl] .md-search__inner{transform:translateX(-5%)}[data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__inner{float:right}[dir=rtl] .md-search__inner{float:left}.md-search__inner{padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}}@media screen and (min-width:60em) and (max-width:76.234375em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem #0000;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.md-search__form{background-color:#00000042;border-radius:.1rem;height:1.8rem}.md-search__form:hover{background-color:#ffffff1f}}[data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem #00000012;color:var(--md-default-fg-color)}[dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.md-search__input{background:#0000;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.md-search__input::placeholder{transition:color .25s}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}@media screen and (max-width:59.984375em){.md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__input{padding-left:2.2rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input{color:inherit;font-size:.8rem}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}[data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:#0000}}.md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.md-search__icon:hover{opacity:.7}[dir=ltr] .md-search__icon[for=__search]{left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem}.md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__icon[for=__search]{left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem}.md-search__icon[for=__search]{top:.6rem}.md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.md-search__icon[for=__search]{pointer-events:none}.md-search__icon[for=__search] svg:last-child{display:none}}[dir=ltr] .md-search__options{right:.5rem}[dir=rtl] .md-search__options{left:.5rem}.md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__options{right:.8rem}[dir=rtl] .md-search__options{left:.8rem}.md-search__options{top:.6rem}}[dir=ltr] .md-search__options>.md-icon{margin-left:.2rem}[dir=rtl] .md-search__options>.md-icon{margin-right:.2rem}.md-search__options>.md-icon{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-search__options>.md-icon:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>.md-icon{opacity:1;pointer-events:auto;transform:scale(1)}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>.md-icon:hover{opacity:.7}[dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){[dir=ltr] .md-search__suggest{padding-left:2.2rem}[dir=rtl] .md-search__suggest{padding-right:2.2rem}.md-search__suggest{font-size:.8rem}}[data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}[dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}[dir=ltr] .md-search__output,[dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}[dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.984375em){.md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.md-search__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.234375em){.md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){[dir=ltr] .md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.md-search-result__item:first-child{box-shadow:none}.md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.md-search-result__link:focus,.md-search-result__link:hover{background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.md-search-result__more>summary{cursor:pointer;display:block;outline:none;position:sticky;scroll-snap-align:start;top:0;z-index:1}.md-search-result__more>summary::marker{display:none}.md-search-result__more>summary::-webkit-details-marker{display:none}.md-search-result__more>summary>div{color:var(--md-typeset-a-color);font-size:.64rem;padding:.75em .8rem;transition:color .25s,background-color .25s}@media screen and (min-width:60em){[dir=ltr] .md-search-result__more>summary>div{padding-left:2.2rem}[dir=rtl] .md-search-result__more>summary>div{padding-right:2.2rem}}.md-search-result__more>summary:focus>div,.md-search-result__more>summary:hover>div{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more[open]>summary{background-color:var(--md-default-bg-color)}.md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){[dir=ltr] .md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem}}[dir=ltr] .md-search-result__icon{left:0}[dir=rtl] .md-search-result__icon{right:0}.md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.984375em){.md-search-result__icon{display:none}}.md-search-result__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.md-search-result .md-typeset{color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.6}.md-search-result .md-typeset h1{color:var(--md-default-fg-color);font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}.md-search-result .md-typeset h1 mark{text-decoration:none}.md-search-result .md-typeset h2{color:var(--md-default-fg-color);font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.md-search-result .md-typeset h2 mark{text-decoration:none}.md-search-result__terms{color:var(--md-default-fg-color);display:block;font-size:.64rem;font-style:italic;margin:.5em 0}.md-search-result mark{background-color:initial;color:var(--md-accent-fg-color);text-decoration:underline}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select__inner:after{border-bottom:.2rem solid #0000;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid #0000;border-right:.2rem solid #0000;border-top:0;content:"";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:focus,.md-select__link:hover{color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.234375em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{scrollbar-gutter:stable;-webkit-backface-visibility:hidden;backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap:focus-within,.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb:hover,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.234375em){.md-overlay{background-color:#0000008a;height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-source{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-source-file{margin:1em 0}[dir=ltr] .md-source-file__fact{margin-right:.6rem}[dir=rtl] .md-source-file__fact{margin-left:.6rem}.md-source-file__fact{align-items:center;color:var(--md-default-fg-color--light);display:inline-flex;font-size:.68rem;gap:.3rem}.md-source-file__fact .md-icon{flex-shrink:0;margin-bottom:.05rem}[dir=ltr] .md-source-file__fact .md-author{float:left}[dir=rtl] .md-source-file__fact .md-author{float:right}.md-source-file__fact .md-author{margin-right:.2rem}.md-source-file__fact svg{width:.9rem}:root{--md-status:url('data:image/svg+xml;charset=utf-8,');--md-status--new:url('data:image/svg+xml;charset=utf-8,');--md-status--deprecated:url('data:image/svg+xml;charset=utf-8,');--md-status--encrypted:url('data:image/svg+xml;charset=utf-8,')}.md-status:after{background-color:var(--md-default-fg-color--light);content:"";display:inline-block;height:1.125em;-webkit-mask-image:var(--md-status);mask-image:var(--md-status);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-bottom;width:1.125em}.md-status:hover:after{background-color:currentcolor}.md-status--new:after{-webkit-mask-image:var(--md-status--new);mask-image:var(--md-status--new)}.md-status--deprecated:after{-webkit-mask-image:var(--md-status--deprecated);mask-image:var(--md-status--deprecated)}.md-status--encrypted:after{-webkit-mask-image:var(--md-status--encrypted);mask-image:var(--md-status--encrypted)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.234375em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;display:flex;list-style:none;margin:0;overflow:auto;padding:0;scrollbar-width:none;white-space:nowrap}.md-tabs__list::-webkit-scrollbar{display:none}.md-tabs__item{height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__item--active .md-tabs__link{color:inherit;opacity:1}.md-tabs__link{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:flex;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link:focus,.md-tabs__link:hover{color:inherit;opacity:1}[dir=ltr] .md-tabs__link svg{margin-right:.4rem}[dir=rtl] .md-tabs__link svg{margin-left:.4rem}.md-tabs__link svg{fill:currentcolor;height:1.3em}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .md-tags:not([hidden]){display:inline-flex;flex-wrap:wrap;gap:.5em;margin-bottom:.75em;margin-top:-.125em}.md-typeset .md-tag{align-items:center;background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-flex;font-size:.64rem;font-size:min(.8em,.64rem);font-weight:700;gap:.5em;letter-spacing:normal;line-height:1.6;padding:.3125em .78125em}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-shadow{opacity:.5}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon[href]:focus:before,.md-typeset .md-tag-icon[href]:hover:before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{transform:scale(.95)}75%{transform:scale(1)}to{transform:scale(.95)}}:root{--md-annotation-bg-icon:url('data:image/svg+xml;charset=utf-8,');--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,')}.md-tooltip{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}.md-tooltip--inline{font-weight:700;-webkit-user-select:none;user-select:none;width:auto}.md-tooltip--inline:not(.md-tooltip--active){transform:translateY(.2rem) scale(.9)}.md-tooltip--inline .md-tooltip__inner{font-size:.5rem;padding:.2rem .4rem}[hidden]+.md-tooltip--inline{display:none}.focus-visible>.md-tooltip,.md-tooltip:target{outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-style:normal;font-weight:400;outline:none;text-align:initial;vertical-align:text-bottom;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}code .md-annotation{font-family:var(--md-code-font-family);font-size:inherit}.md-annotation:not([hidden]){display:inline-block;line-height:1.25}.md-annotation__index{border-radius:.01px;cursor:pointer;display:inline-block;margin-left:.4ch;margin-right:.4ch;outline:none;overflow:hidden;position:relative;-webkit-user-select:none;user-select:none;vertical-align:text-top;z-index:0}.md-annotation .md-annotation__index{transition:z-index .25s}@media screen{.md-annotation__index{width:2.2ch}[data-md-visible]>.md-annotation__index{animation:pulse 2s infinite}.md-annotation__index:before{background:var(--md-default-bg-color);-webkit-mask-image:var(--md-annotation-bg-icon);mask-image:var(--md-annotation-bg-icon)}.md-annotation__index:after,.md-annotation__index:before{content:"";height:2.2ch;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:-.1ch;width:2.2ch;z-index:-1}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:var(--md-annotation-icon);mask-image:var(--md-annotation-icon);transform:scale(1.0001);transition:background-color .25s,transform .25s}.md-tooltip--active+.md-annotation__index:after{transform:rotate(45deg)}.md-tooltip--active+.md-annotation__index:after,:hover>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}}.md-tooltip--active+.md-annotation__index{animation-play-state:paused;transition-duration:0ms;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block}@media print{.md-annotation__index [data-md-annotation-id]{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);font-weight:700;padding:0 .6ch;white-space:nowrap}.md-annotation__index [data-md-annotation-id]:after{content:attr(data-md-annotation-id)}}.md-typeset .md-annotation-list{counter-reset:xxx;list-style:none}.md-typeset .md-annotation-list li{position:relative}[dir=ltr] .md-typeset .md-annotation-list li:before{left:-2.125em}[dir=rtl] .md-typeset .md-annotation-list li:before{right:-2.125em}.md-typeset .md-annotation-list li:before{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);content:counter(xxx);counter-increment:xxx;font-size:.8875em;font-weight:700;height:2ch;line-height:1.25;min-width:2ch;padding:0 .6ch;position:absolute;text-align:center;top:.25em}:root{--md-tooltip-width:20rem;--md-tooltip-tail:0.3rem}.md-tooltip2{-webkit-backface-visibility:hidden;backface-visibility:hidden;color:var(--md-default-fg-color);font-family:var(--md-text-font-family);opacity:0;pointer-events:none;position:absolute;top:calc(var(--md-tooltip-host-y) + var(--md-tooltip-y));transform:translateY(-.4rem);transform-origin:calc(var(--md-tooltip-host-x) + var(--md-tooltip-x)) 0;transition:transform 0ms .25s,opacity .25s,z-index .25s;width:100%;z-index:0}.md-tooltip2:before{border-left:var(--md-tooltip-tail) solid #0000;border-right:var(--md-tooltip-tail) solid #0000;content:"";display:block;left:clamp(1.5 * .8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-tail),100vw - 2 * var(--md-tooltip-tail) - 1.5 * .8rem);position:absolute;z-index:1}.md-tooltip2--top:before{border-top:var(--md-tooltip-tail) solid var(--md-default-bg-color);bottom:calc(var(--md-tooltip-tail)*-1 + .025rem);filter:drop-shadow(0 1px 0 hsla(0,0%,0%,.05))}.md-tooltip2--bottom:before{border-bottom:var(--md-tooltip-tail) solid var(--md-default-bg-color);filter:drop-shadow(0 -1px 0 hsla(0,0%,0%,.05));top:calc(var(--md-tooltip-tail)*-1 + .025rem)}.md-tooltip2--active{opacity:1;transform:translateY(0);transition:transform .4s cubic-bezier(0,1,.5,1),opacity .25s,z-index 0ms;z-index:2}.md-tooltip2__inner{scrollbar-gutter:stable;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);left:clamp(.8rem,var(--md-tooltip-host-x) - .8rem,100vw - var(--md-tooltip-width) - .8rem);max-height:40vh;max-width:calc(100vw - 1.6rem);position:relative;scrollbar-width:thin}.md-tooltip2__inner::-webkit-scrollbar{height:.2rem;width:.2rem}.md-tooltip2__inner::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-tooltip2__inner::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}[role=dialog]>.md-tooltip2__inner{font-size:.64rem;overflow:auto;padding:0 .8rem;pointer-events:auto;width:var(--md-tooltip-width)}[role=dialog]>.md-tooltip2__inner:after,[role=dialog]>.md-tooltip2__inner:before{content:"";display:block;height:.8rem;position:sticky;width:100%;z-index:10}[role=dialog]>.md-tooltip2__inner:before{background:linear-gradient(var(--md-default-bg-color),#0000 75%);top:0}[role=dialog]>.md-tooltip2__inner:after{background:linear-gradient(#0000,var(--md-default-bg-color) 75%);bottom:0}[role=tooltip]>.md-tooltip2__inner{font-size:.5rem;font-weight:700;left:clamp(.8rem,var(--md-tooltip-host-x) + var(--md-tooltip-x) - var(--md-tooltip-width)/2,100vw - var(--md-tooltip-width) - .8rem);max-width:min(100vw - 2 * .8rem,400px);padding:.2rem .4rem;-webkit-user-select:none;user-select:none;width:-moz-fit-content;width:fit-content}.md-tooltip2__inner.md-typeset>:first-child{margin-top:0}.md-tooltip2__inner.md-typeset>:last-child{margin-bottom:0}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:focus,.md-top:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__alias{margin-left:.3rem;opacity:.7}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:focus-within .md-version__list,.md-version:hover .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (hover:none),(pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:focus,.md-version__link:hover{color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .admonition,.md-typeset details{background-color:var(--md-admonition-bg-color);border:.075rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid;transition:box-shadow 125ms}@media print{.md-typeset .admonition,.md-typeset details{box-shadow:none}}.md-typeset .admonition:focus-within,.md-typeset details:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-left-width:.2rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-right-width:.2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset .admonition-title,.md-typeset summary{background-color:#448aff1a;border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset .admonition-title:last-child,html .md-typeset summary:last-child{margin-bottom:0}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:.6rem}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:.6rem}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset .admonition-title code,.md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.md-typeset .admonition.note,.md-typeset details.note{border-color:#448aff}.md-typeset .admonition.note:focus-within,.md-typeset details.note:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.md-typeset .note>.admonition-title,.md-typeset .note>summary{background-color:#448aff1a}.md-typeset .note>.admonition-title:before,.md-typeset .note>summary:before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset .note>.admonition-title:after,.md-typeset .note>summary:after{color:#448aff}.md-typeset .admonition.abstract,.md-typeset details.abstract{border-color:#00b0ff}.md-typeset .admonition.abstract:focus-within,.md-typeset details.abstract:focus-within{box-shadow:0 0 0 .2rem #00b0ff1a}.md-typeset .abstract>.admonition-title,.md-typeset .abstract>summary{background-color:#00b0ff1a}.md-typeset .abstract>.admonition-title:before,.md-typeset .abstract>summary:before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset .abstract>.admonition-title:after,.md-typeset .abstract>summary:after{color:#00b0ff}.md-typeset .admonition.info,.md-typeset details.info{border-color:#00b8d4}.md-typeset .admonition.info:focus-within,.md-typeset details.info:focus-within{box-shadow:0 0 0 .2rem #00b8d41a}.md-typeset .info>.admonition-title,.md-typeset .info>summary{background-color:#00b8d41a}.md-typeset .info>.admonition-title:before,.md-typeset .info>summary:before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset .info>.admonition-title:after,.md-typeset .info>summary:after{color:#00b8d4}.md-typeset .admonition.tip,.md-typeset details.tip{border-color:#00bfa5}.md-typeset .admonition.tip:focus-within,.md-typeset details.tip:focus-within{box-shadow:0 0 0 .2rem #00bfa51a}.md-typeset .tip>.admonition-title,.md-typeset .tip>summary{background-color:#00bfa51a}.md-typeset .tip>.admonition-title:before,.md-typeset .tip>summary:before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset .tip>.admonition-title:after,.md-typeset .tip>summary:after{color:#00bfa5}.md-typeset .admonition.success,.md-typeset details.success{border-color:#00c853}.md-typeset .admonition.success:focus-within,.md-typeset details.success:focus-within{box-shadow:0 0 0 .2rem #00c8531a}.md-typeset .success>.admonition-title,.md-typeset .success>summary{background-color:#00c8531a}.md-typeset .success>.admonition-title:before,.md-typeset .success>summary:before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset .success>.admonition-title:after,.md-typeset .success>summary:after{color:#00c853}.md-typeset .admonition.question,.md-typeset details.question{border-color:#64dd17}.md-typeset .admonition.question:focus-within,.md-typeset details.question:focus-within{box-shadow:0 0 0 .2rem #64dd171a}.md-typeset .question>.admonition-title,.md-typeset .question>summary{background-color:#64dd171a}.md-typeset .question>.admonition-title:before,.md-typeset .question>summary:before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset .question>.admonition-title:after,.md-typeset .question>summary:after{color:#64dd17}.md-typeset .admonition.warning,.md-typeset details.warning{border-color:#ff9100}.md-typeset .admonition.warning:focus-within,.md-typeset details.warning:focus-within{box-shadow:0 0 0 .2rem #ff91001a}.md-typeset .warning>.admonition-title,.md-typeset .warning>summary{background-color:#ff91001a}.md-typeset .warning>.admonition-title:before,.md-typeset .warning>summary:before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset .warning>.admonition-title:after,.md-typeset .warning>summary:after{color:#ff9100}.md-typeset .admonition.failure,.md-typeset details.failure{border-color:#ff5252}.md-typeset .admonition.failure:focus-within,.md-typeset details.failure:focus-within{box-shadow:0 0 0 .2rem #ff52521a}.md-typeset .failure>.admonition-title,.md-typeset .failure>summary{background-color:#ff52521a}.md-typeset .failure>.admonition-title:before,.md-typeset .failure>summary:before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset .failure>.admonition-title:after,.md-typeset .failure>summary:after{color:#ff5252}.md-typeset .admonition.danger,.md-typeset details.danger{border-color:#ff1744}.md-typeset .admonition.danger:focus-within,.md-typeset details.danger:focus-within{box-shadow:0 0 0 .2rem #ff17441a}.md-typeset .danger>.admonition-title,.md-typeset .danger>summary{background-color:#ff17441a}.md-typeset .danger>.admonition-title:before,.md-typeset .danger>summary:before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset .danger>.admonition-title:after,.md-typeset .danger>summary:after{color:#ff1744}.md-typeset .admonition.bug,.md-typeset details.bug{border-color:#f50057}.md-typeset .admonition.bug:focus-within,.md-typeset details.bug:focus-within{box-shadow:0 0 0 .2rem #f500571a}.md-typeset .bug>.admonition-title,.md-typeset .bug>summary{background-color:#f500571a}.md-typeset .bug>.admonition-title:before,.md-typeset .bug>summary:before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset .bug>.admonition-title:after,.md-typeset .bug>summary:after{color:#f50057}.md-typeset .admonition.example,.md-typeset details.example{border-color:#7c4dff}.md-typeset .admonition.example:focus-within,.md-typeset details.example:focus-within{box-shadow:0 0 0 .2rem #7c4dff1a}.md-typeset .example>.admonition-title,.md-typeset .example>summary{background-color:#7c4dff1a}.md-typeset .example>.admonition-title:before,.md-typeset .example>summary:before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset .example>.admonition-title:after,.md-typeset .example>summary:after{color:#7c4dff}.md-typeset .admonition.quote,.md-typeset details.quote{border-color:#9e9e9e}.md-typeset .admonition.quote:focus-within,.md-typeset details.quote:focus-within{box-shadow:0 0 0 .2rem #9e9e9e1a}.md-typeset .quote>.admonition-title,.md-typeset .quote>summary{background-color:#9e9e9e1a}.md-typeset .quote>.admonition-title:before,.md-typeset .quote>summary:before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset .quote>.admonition-title:after,.md-typeset .quote>summary:after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:hover .footnote-backref,.md-typeset .footnote>ol>li:target .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before svg{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :hover>.headerlink,.md-typeset :target>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset h1:target,.md-typeset h2:target,.md-typeset h3:target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.984375em){.md-typeset div.arithmatex{margin:0 -.8rem}.md-typeset div.arithmatex>*{width:min-content}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset div.arithmatex mjx-assistive-mml{height:0}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset del.critic,.md-typeset ins.critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{-webkit-box-decoration-break:clone;box-decoration-break:clone;color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem;overflow:hidden}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset .emojione,.md-typeset .gemoji,.md-typeset .twemoji{--md-icon-size:1.125em;display:inline-flex;height:var(--md-icon-size);vertical-align:text-top}.md-typeset .emojione svg,.md-typeset .gemoji svg,.md-typeset .twemoji svg{fill:currentcolor;max-height:100%;width:var(--md-icon-size)}.md-typeset .lg,.md-typeset .xl,.md-typeset .xxl,.md-typeset .xxxl{vertical-align:text-bottom}.md-typeset .middle{vertical-align:middle}.md-typeset .lg{--md-icon-size:1.5em}.md-typeset .xl{--md-icon-size:2.25em}.md-typeset .xxl{--md-icon-size:3em}.md-typeset .xxxl{--md-icon-size:4em}.highlight .o,.highlight .ow{color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight .cpf,.highlight .l,.highlight .s,.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sc,.highlight .si,.highlight .ss{color:var(--md-code-hl-string-color)}.highlight .cp,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:var(--md-code-hl-special-color)}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:var(--md-code-hl-number-color)}.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt{color:var(--md-code-hl-keyword-color)}.highlight .kc,.highlight .n{color:var(--md-code-hl-name-color)}.highlight .bp,.highlight .nb,.highlight .no{color:var(--md-code-hl-constant-color)}.highlight .nc,.highlight .ne,.highlight .nf,.highlight .nn{color:var(--md-code-hl-function-color)}.highlight .nd,.highlight .ni,.highlight .nl,.highlight .nt{color:var(--md-code-hl-keyword-color)}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cs,.highlight .sd{color:var(--md-code-hl-comment-color)}.highlight .na,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi{color:var(--md-code-hl-variable-color)}.highlight .ge,.highlight .gh,.highlight .go,.highlight .gp,.highlight .gr,.highlight .gs,.highlight .gt,.highlight .gu{color:var(--md-code-hl-generic-color)}.highlight .gd,.highlight .gi{border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color--light);box-shadow:2px 0 0 0 var(--md-code-hl-color) inset;display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:sticky;-webkit-user-select:none;user-select:none;z-index:3}.highlight code a[id]{position:absolute;visibility:hidden}.highlight code[data-md-copying]{display:initial}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable tbody,.highlighttable td{display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .linenodiv span[class]{padding-right:.5882352941em}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.984375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:after,.md-typeset .keys kbd:before{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-set>input.focus-visible~.tabbed-labels:before{background-color:var(--md-accent-fg-color)}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-default-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,background-color .25s,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid #0000;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-default-fg-color)}.md-typeset .tabbed-labels>label>[href]:first-child{color:inherit}.md-typeset .tabbed-labels--linked>label{padding:0}.md-typeset .tabbed-labels--linked>label>a{display:block;padding:.78125em 1.25em .625em}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,#0000);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,#0000);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.984375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-default-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.md-typeset [role=dialog] .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset [role=dialog] .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset [role=dialog] .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset [role=dialog] .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset [role=dialog] .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset [role=dialog] .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset [role=dialog] .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset [role=dialog] .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset [role=dialog] .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset [role=dialog] .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset [role=dialog] .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset [role=dialog] .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset [role=dialog] .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset [role=dialog] .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset [role=dialog] .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset [role=dialog] .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset [role=dialog] .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset [role=dialog] .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset [role=dialog] .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset [role=dialog] .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),[role=dialog] .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,[role=dialog] .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),[role=dialog] .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),[role=dialog] .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),[role=dialog] .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),[role=dialog] .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),[role=dialog] .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),[role=dialog] .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),[role=dialog] .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),[role=dialog] .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),[role=dialog] .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),[role=dialog] .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),[role=dialog] .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),[role=dialog] .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),[role=dialog] .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),[role=dialog] .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),[role=dialog] .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),[role=dialog] .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),[role=dialog] .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),[role=dialog] .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-default-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}@media print{.giscus,[id=__comments]{display:none}}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color);--md-mermaid-sequence-actor-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actor-fg-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-actor-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-actor-line-color:var(--md-default-fg-color--lighter);--md-mermaid-sequence-actorman-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actorman-line-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-box-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-box-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-label-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-label-fg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-loop-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-loop-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-loop-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-message-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-message-line-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-note-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-border-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-number-bg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-number-fg-color:var(--md-accent-bg-color)}.mermaid{line-height:normal;margin:1em 0}.md-typeset .grid{grid-gap:.4rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));margin:1em 0}.md-typeset .grid.cards>ol,.md-typeset .grid.cards>ul{display:contents}.md-typeset .grid.cards>ol>li,.md-typeset .grid.cards>ul>li,.md-typeset .grid>.card{border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.1rem;display:block;margin:0;padding:.8rem;transition:border .25s,box-shadow .25s}.md-typeset .grid.cards>ol>li:focus-within,.md-typeset .grid.cards>ol>li:hover,.md-typeset .grid.cards>ul>li:focus-within,.md-typeset .grid.cards>ul>li:hover,.md-typeset .grid>.card:focus-within,.md-typeset .grid>.card:hover{border-color:#0000;box-shadow:var(--md-shadow-z2)}.md-typeset .grid.cards>ol>li>hr,.md-typeset .grid.cards>ul>li>hr,.md-typeset .grid>.card>hr{margin-bottom:1em;margin-top:1em}.md-typeset .grid.cards>ol>li>:first-child,.md-typeset .grid.cards>ul>li>:first-child,.md-typeset .grid>.card>:first-child{margin-top:0}.md-typeset .grid.cards>ol>li>:last-child,.md-typeset .grid.cards>ul>li>:last-child,.md-typeset .grid>.card>:last-child{margin-bottom:0}.md-typeset .grid>*,.md-typeset .grid>.admonition,.md-typeset .grid>.highlight>*,.md-typeset .grid>.highlighttable,.md-typeset .grid>.md-typeset details,.md-typeset .grid>details,.md-typeset .grid>pre{margin-bottom:0;margin-top:0}.md-typeset .grid>.highlight>pre:only-child,.md-typeset .grid>.highlight>pre>code,.md-typeset .grid>.highlighttable,.md-typeset .grid>.highlighttable>tbody,.md-typeset .grid>.highlighttable>tbody>tr,.md-typeset .grid>.highlighttable>tbody>tr>.code,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre,.md-typeset .grid>.highlighttable>tbody>tr>.code>.highlight>pre>code{height:100%}.md-typeset .grid>.tabbed-set{margin-bottom:0;margin-top:0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file diff --git a/pr-preview/pr-478/assets/stylesheets/palette.ab4e12ef.min.css b/pr-preview/pr-478/assets/stylesheets/palette.ab4e12ef.min.css new file mode 100644 index 0000000000..75aaf84253 --- /dev/null +++ b/pr-preview/pr-478/assets/stylesheets/palette.ab4e12ef.min.css @@ -0,0 +1 @@ +@media screen{[data-md-color-scheme=slate]{--md-default-fg-color:hsla(var(--md-hue),15%,90%,0.82);--md-default-fg-color--light:hsla(var(--md-hue),15%,90%,0.56);--md-default-fg-color--lighter:hsla(var(--md-hue),15%,90%,0.32);--md-default-fg-color--lightest:hsla(var(--md-hue),15%,90%,0.12);--md-default-bg-color:hsla(var(--md-hue),15%,14%,1);--md-default-bg-color--light:hsla(var(--md-hue),15%,14%,0.54);--md-default-bg-color--lighter:hsla(var(--md-hue),15%,14%,0.26);--md-default-bg-color--lightest:hsla(var(--md-hue),15%,14%,0.07);--md-code-fg-color:hsla(var(--md-hue),18%,86%,0.82);--md-code-bg-color:hsla(var(--md-hue),15%,18%,1);--md-code-bg-color--light:hsla(var(--md-hue),15%,18%,0.9);--md-code-bg-color--lighter:hsla(var(--md-hue),15%,18%,0.54);--md-code-hl-color:#2977ff;--md-code-hl-color--light:#2977ff1a;--md-code-hl-number-color:#e6695b;--md-code-hl-special-color:#f06090;--md-code-hl-function-color:#c973d9;--md-code-hl-constant-color:#9383e2;--md-code-hl-keyword-color:#6791e0;--md-code-hl-string-color:#2fb170;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-kbd-color:hsla(var(--md-hue),15%,90%,0.12);--md-typeset-kbd-accent-color:hsla(var(--md-hue),15%,90%,0.2);--md-typeset-kbd-border-color:hsla(var(--md-hue),15%,14%,1);--md-typeset-mark-color:#4287ff4d;--md-typeset-table-color:hsla(var(--md-hue),15%,95%,0.12);--md-typeset-table-color--light:hsla(var(--md-hue),15%,95%,0.035);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-bg-color:hsla(var(--md-hue),15%,10%,0.87);--md-footer-bg-color--dark:hsla(var(--md-hue),15%,8%,1);--md-shadow-z1:0 0.2rem 0.5rem #0000000d,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #00000040,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0006,0 0 0.05rem #00000059;color-scheme:dark}[data-md-color-scheme=slate] img[src$="#gh-light-mode-only"],[data-md-color-scheme=slate] img[src$="#only-light"]{display:none}[data-md-color-scheme=slate][data-md-color-primary=pink]{--md-typeset-a-color:#ed5487}[data-md-color-scheme=slate][data-md-color-primary=purple]{--md-typeset-a-color:#c46fd3}[data-md-color-scheme=slate][data-md-color-primary=deep-purple]{--md-typeset-a-color:#a47bea}[data-md-color-scheme=slate][data-md-color-primary=indigo]{--md-typeset-a-color:#5488e8}[data-md-color-scheme=slate][data-md-color-primary=teal]{--md-typeset-a-color:#00ccb8}[data-md-color-scheme=slate][data-md-color-primary=green]{--md-typeset-a-color:#71c174}[data-md-color-scheme=slate][data-md-color-primary=deep-orange]{--md-typeset-a-color:#ff764d}[data-md-color-scheme=slate][data-md-color-primary=brown]{--md-typeset-a-color:#c1775c}[data-md-color-scheme=slate][data-md-color-primary=black],[data-md-color-scheme=slate][data-md-color-primary=blue-grey],[data-md-color-scheme=slate][data-md-color-primary=grey],[data-md-color-scheme=slate][data-md-color-primary=white]{--md-typeset-a-color:#5e8bde}[data-md-color-switching] *,[data-md-color-switching] :after,[data-md-color-switching] :before{transition-duration:0ms!important}}[data-md-color-accent=red]{--md-accent-fg-color:#ff1947;--md-accent-fg-color--transparent:#ff19471a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=pink]{--md-accent-fg-color:#f50056;--md-accent-fg-color--transparent:#f500561a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=purple]{--md-accent-fg-color:#df41fb;--md-accent-fg-color--transparent:#df41fb1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=deep-purple]{--md-accent-fg-color:#7c4dff;--md-accent-fg-color--transparent:#7c4dff1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=indigo]{--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=blue]{--md-accent-fg-color:#4287ff;--md-accent-fg-color--transparent:#4287ff1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=light-blue]{--md-accent-fg-color:#0091eb;--md-accent-fg-color--transparent:#0091eb1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=cyan]{--md-accent-fg-color:#00bad6;--md-accent-fg-color--transparent:#00bad61a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=teal]{--md-accent-fg-color:#00bda4;--md-accent-fg-color--transparent:#00bda41a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=green]{--md-accent-fg-color:#00c753;--md-accent-fg-color--transparent:#00c7531a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=light-green]{--md-accent-fg-color:#63de17;--md-accent-fg-color--transparent:#63de171a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=lime]{--md-accent-fg-color:#b0eb00;--md-accent-fg-color--transparent:#b0eb001a;--md-accent-bg-color:#000000de;--md-accent-bg-color--light:#0000008a}[data-md-color-accent=yellow]{--md-accent-fg-color:#ffd500;--md-accent-fg-color--transparent:#ffd5001a;--md-accent-bg-color:#000000de;--md-accent-bg-color--light:#0000008a}[data-md-color-accent=amber]{--md-accent-fg-color:#fa0;--md-accent-fg-color--transparent:#ffaa001a;--md-accent-bg-color:#000000de;--md-accent-bg-color--light:#0000008a}[data-md-color-accent=orange]{--md-accent-fg-color:#ff9100;--md-accent-fg-color--transparent:#ff91001a;--md-accent-bg-color:#000000de;--md-accent-bg-color--light:#0000008a}[data-md-color-accent=deep-orange]{--md-accent-fg-color:#ff6e42;--md-accent-fg-color--transparent:#ff6e421a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-primary=red]{--md-primary-fg-color:#ef5552;--md-primary-fg-color--light:#e57171;--md-primary-fg-color--dark:#e53734;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=pink]{--md-primary-fg-color:#e92063;--md-primary-fg-color--light:#ec417a;--md-primary-fg-color--dark:#c3185d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=purple]{--md-primary-fg-color:#ab47bd;--md-primary-fg-color--light:#bb69c9;--md-primary-fg-color--dark:#8c24a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=deep-purple]{--md-primary-fg-color:#7e56c2;--md-primary-fg-color--light:#9574cd;--md-primary-fg-color--dark:#673ab6;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=indigo]{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=blue]{--md-primary-fg-color:#2094f3;--md-primary-fg-color--light:#42a5f5;--md-primary-fg-color--dark:#1975d2;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=light-blue]{--md-primary-fg-color:#02a6f2;--md-primary-fg-color--light:#28b5f6;--md-primary-fg-color--dark:#0287cf;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=cyan]{--md-primary-fg-color:#00bdd6;--md-primary-fg-color--light:#25c5da;--md-primary-fg-color--dark:#0097a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=teal]{--md-primary-fg-color:#009485;--md-primary-fg-color--light:#26a699;--md-primary-fg-color--dark:#007a6c;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=green]{--md-primary-fg-color:#4cae4f;--md-primary-fg-color--light:#68bb6c;--md-primary-fg-color--dark:#398e3d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=light-green]{--md-primary-fg-color:#8bc34b;--md-primary-fg-color--light:#9ccc66;--md-primary-fg-color--dark:#689f38;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=lime]{--md-primary-fg-color:#cbdc38;--md-primary-fg-color--light:#d3e156;--md-primary-fg-color--dark:#b0b52c;--md-primary-bg-color:#000000de;--md-primary-bg-color--light:#0000008a}[data-md-color-primary=yellow]{--md-primary-fg-color:#ffec3d;--md-primary-fg-color--light:#ffee57;--md-primary-fg-color--dark:#fbc02d;--md-primary-bg-color:#000000de;--md-primary-bg-color--light:#0000008a}[data-md-color-primary=amber]{--md-primary-fg-color:#ffc105;--md-primary-fg-color--light:#ffc929;--md-primary-fg-color--dark:#ffa200;--md-primary-bg-color:#000000de;--md-primary-bg-color--light:#0000008a}[data-md-color-primary=orange]{--md-primary-fg-color:#ffa724;--md-primary-fg-color--light:#ffa724;--md-primary-fg-color--dark:#fa8900;--md-primary-bg-color:#000000de;--md-primary-bg-color--light:#0000008a}[data-md-color-primary=deep-orange]{--md-primary-fg-color:#ff6e42;--md-primary-fg-color--light:#ff8a66;--md-primary-fg-color--dark:#f4511f;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=brown]{--md-primary-fg-color:#795649;--md-primary-fg-color--light:#8d6e62;--md-primary-fg-color--dark:#5d4037;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=grey]{--md-primary-fg-color:#757575;--md-primary-fg-color--light:#9e9e9e;--md-primary-fg-color--dark:#616161;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-typeset-a-color:#4051b5}[data-md-color-primary=blue-grey]{--md-primary-fg-color:#546d78;--md-primary-fg-color--light:#607c8a;--md-primary-fg-color--dark:#455a63;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-typeset-a-color:#4051b5}[data-md-color-primary=light-green]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#72ad2e}[data-md-color-primary=lime]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#8b990a}[data-md-color-primary=yellow]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#b8a500}[data-md-color-primary=amber]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#d19d00}[data-md-color-primary=orange]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#e68a00}[data-md-color-primary=white]{--md-primary-fg-color:hsla(var(--md-hue),0%,100%,1);--md-primary-fg-color--light:hsla(var(--md-hue),0%,100%,0.7);--md-primary-fg-color--dark:hsla(var(--md-hue),0%,0%,0.07);--md-primary-bg-color:hsla(var(--md-hue),0%,0%,0.87);--md-primary-bg-color--light:hsla(var(--md-hue),0%,0%,0.54);--md-typeset-a-color:#4051b5}[data-md-color-primary=white] .md-button{color:var(--md-typeset-a-color)}[data-md-color-primary=white] .md-button--primary{background-color:var(--md-typeset-a-color);border-color:var(--md-typeset-a-color);color:hsla(var(--md-hue),0%,100%,1)}@media screen and (min-width:60em){[data-md-color-primary=white] .md-search__form{background-color:hsla(var(--md-hue),0%,0%,.07)}[data-md-color-primary=white] .md-search__form:hover{background-color:hsla(var(--md-hue),0%,0%,.32)}[data-md-color-primary=white] .md-search__input+.md-search__icon{color:hsla(var(--md-hue),0%,0%,.87)}}@media screen and (min-width:76.25em){[data-md-color-primary=white] .md-tabs{border-bottom:.05rem solid #00000012}}[data-md-color-primary=black]{--md-primary-fg-color:hsla(var(--md-hue),15%,9%,1);--md-primary-fg-color--light:hsla(var(--md-hue),15%,9%,0.54);--md-primary-fg-color--dark:hsla(var(--md-hue),15%,9%,1);--md-primary-bg-color:hsla(var(--md-hue),15%,100%,1);--md-primary-bg-color--light:hsla(var(--md-hue),15%,100%,0.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=black] .md-button{color:var(--md-typeset-a-color)}[data-md-color-primary=black] .md-button--primary{background-color:var(--md-typeset-a-color);border-color:var(--md-typeset-a-color);color:hsla(var(--md-hue),0%,100%,1)}[data-md-color-primary=black] .md-header{background-color:hsla(var(--md-hue),15%,9%,1)}@media screen and (max-width:59.984375em){[data-md-color-primary=black] .md-nav__source{background-color:hsla(var(--md-hue),15%,11%,.87)}}@media screen and (max-width:76.234375em){html [data-md-color-primary=black] .md-nav--primary .md-nav__title[for=__drawer]{background-color:hsla(var(--md-hue),15%,9%,1)}}@media screen and (min-width:76.25em){[data-md-color-primary=black] .md-tabs{background-color:hsla(var(--md-hue),15%,9%,1)}} \ No newline at end of file diff --git a/pr-preview/pr-478/index.html b/pr-preview/pr-478/index.html new file mode 100644 index 0000000000..4b597e8498 --- /dev/null +++ b/pr-preview/pr-478/index.html @@ -0,0 +1,926 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Algoritmekader - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Het algoritmekader

+
+
Wetten en regels, tips en hulpmiddelen voor verantwoord gebruik van algoritmes. + + bètaversie +
+

Deze website is in ontwikkeling. Alle versies ontstaan op een open manier. Iedereen mag opmerkingen of suggesties geven.

+
+
+
+
+ + +




+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/javascripts/extra.js b/pr-preview/pr-478/javascripts/extra.js new file mode 100644 index 0000000000..43c0244413 --- /dev/null +++ b/pr-preview/pr-478/javascripts/extra.js @@ -0,0 +1,174 @@ +// Wait for MkDocs Material content loading events +document$.subscribe(function() { + // Initialize Choices.js when the document is loaded or content is switched + initializeChoices(); + + // Set active navigation link on page load or after navigation + setActiveLink(); + + // Attach event listeners to the filters for table filtering + attachFilterListeners(); + + // Reinitialize Choices.js when content is dynamically updated + document.addEventListener('contentUpdated', function() { + initializeChoices(); + attachFilterListeners(); // Re-attach listeners after content updates + }); +}); + +// Function to initialize Choices.js for multi-select filters +function initializeChoices() { + const elements = document.querySelectorAll('.js-example-basic-multiple'); + + elements.forEach(function(element) { + // Check if Choices.js is already initialized + if (!element.choicesInstance) { + const choices = new Choices(element, { + removeItemButton: true, + placeholder: true, + searchEnabled: true, + noResultsText: 'Geen resultaten', + noChoicesText: 'Geen keuzes beschikbaar', + itemSelectText: 'Klik om te selecteren', + resetScrollPosition: false + }); + + // Store the Choices.js instance to avoid re-initialization + element.choicesInstance = choices; + console.log("Choices.js initialized"); + } + }); +} + +// Function to set active link in the navigation based on the current page +function setActiveLink() { + var currentUrl = window.location.pathname; + + // Remove all existing active classes + document.querySelectorAll('.md-nav__item--active, .md-nav__link--active, .md-nav__dropdown-item--active, .md-nav__dropdown-link--active').forEach(function(el) { + el.classList.remove('md-nav__item--active', 'md-nav__link--active', 'md-nav__dropdown-item--active', 'md-nav__dropdown-link--active'); + }); + + // Don't set any active class if on root URL + if (currentUrl === '/') { + return; + } + + // Function to set the active class for a given element + function setActiveClass(el) { + el.classList.add('md-nav__link--active'); + var item = el.closest('.md-nav__item'); + if (item) { + item.classList.add('md-nav__item--active'); + } + } + + // Function to check if the link matches the current URL + function isPathActive(linkPath) { + return currentUrl === linkPath || currentUrl.startsWith(linkPath + '/'); + } + + // Set active class for top navigation links + document.querySelectorAll('.md-nav--top .md-nav__link').forEach(function(link) { + var linkPath = new URL(link.href).pathname; + if (isPathActive(linkPath)) { + setActiveClass(link); + } + }); + + // Set active class for dropdown links + document.querySelectorAll('.md-nav__dropdown-link').forEach(function(link) { + var linkPath = new URL(link.href).pathname; + if (isPathActive(linkPath)) { + link.classList.add('md-nav__dropdown-link--active'); + var dropdownItem = link.closest('.md-nav__dropdown-item'); + if (dropdownItem) { + dropdownItem.classList.add('md-nav__dropdown-item--active'); + var parentItem = dropdownItem.closest('.md-nav__item'); + if (parentItem) { + parentItem.classList.add('md-nav__item--active'); + } + } + } + }); +} + +// Attach event listeners to trigger table filtering when filters change +function attachFilterListeners() { + var filterSelect = document.getElementById("filterSelect"); + var levenscyclusSelect = document.getElementById("filterLevenscyclusSelect"); + var onderwerpSelect = document.getElementById("filterOnderwerpSelect"); + var filterInput = document.getElementById("filterInput"); + + if (filterSelect) { + filterSelect.addEventListener('change', filterTable); + } + + if (levenscyclusSelect) { + levenscyclusSelect.addEventListener('change', filterTable); + } + + if (onderwerpSelect) { + onderwerpSelect.addEventListener('change', filterTable); + } + + if (filterInput) { + filterInput.addEventListener('input', filterTable); + } +} + +// Example filterTable function for filtering a table based on selected choices +function filterTable() { + console.log("filterTable is aangeroepen"); + + var input = document.getElementById("filterInput"); + var filter = input ? input.value.toUpperCase() : ""; + + var select = document.getElementById("filterSelect"); // Rollen filter + var selectedRoles = Array.from(select.options) + .filter(option => option.selected) + .map(option => option.value.toUpperCase()); + + var levenscyclusSelect = document.getElementById("filterLevenscyclusSelect"); // Levenscyclus filter + var selectedLevenscyclus = Array.from(levenscyclusSelect.options) + .filter(option => option.selected) + .map(option => option.value.toUpperCase()); + + var onderwerpSelect = document.getElementById("filterOnderwerpSelect"); // Onderwerpen filter + var selectedOnderwerpen = Array.from(onderwerpSelect.options) + .filter(option => option.selected) + .map(option => option.value.toUpperCase()); + + var table = document.getElementById("myTable"); + var tr = table ? table.getElementsByTagName("tr") : []; + + for (var i = 1; i < tr.length; i++) { // Skip header row + var td = tr[i].getElementsByTagName("td")[0]; // Maatregelen column (td[0]) + var roles = tr[i].getElementsByTagName("td")[1]; // Rollen column (td[1]) + var lc = tr[i].getElementsByTagName("td")[2]; // Levenscyclus column (td[2]) + var onderwerpen = tr[i].getElementsByTagName("td")[3]; // Onderwerpen column (td[3]) + + if (td && roles && lc && onderwerpen) { + var txtValue = td.textContent || td.innerText; // Maatregelen value + var txtValue2 = roles.textContent || roles.innerText; // Rollen value + var txtValue3 = lc.textContent || lc.innerText; // Levenscyclus value + var txtValue4 = onderwerpen.textContent || onderwerpen.innerText; // Onderwerpen value + + console.log(`Row ${i} values: `, { txtValue, txtValue2, txtValue3, txtValue4 }); + + // Check if all selected filters are present + var roleMatch = selectedRoles.every(role => txtValue2.toUpperCase().indexOf(role) > -1); + var lcMatch = selectedLevenscyclus.every(lc => txtValue3.toUpperCase().indexOf(lc) > -1); + var onderwerpMatch = selectedOnderwerpen.every(onderwerp => txtValue4.toUpperCase().indexOf(onderwerp) > -1); + + if (txtValue.toUpperCase().indexOf(filter) > -1 && roleMatch && lcMatch && onderwerpMatch) { + tr[i].style.display = ""; + } else { + tr[i].style.display = "none"; + } + } + } + + // Trigger contentUpdated to reinitialize Choices.js after filtering + document.dispatchEvent(new Event('contentUpdated')); +} \ No newline at end of file diff --git a/pr-preview/pr-478/javascripts/filtering.js b/pr-preview/pr-478/javascripts/filtering.js new file mode 100644 index 0000000000..08d9647733 --- /dev/null +++ b/pr-preview/pr-478/javascripts/filtering.js @@ -0,0 +1,173 @@ +// Wait for MkDocs Material content loading events +document$.subscribe(function () { + // Ensure order is applied before initializing Choices.js + setLevenscyclusOrder(); + + // Initialize Choices.js after order has been set + initializeChoices(); + + // Attach event listeners to the filters for table filtering + attachFilterListeners(); + + // Reinitialize Choices.js and filter listeners when content is dynamically updated + document.addEventListener('contentUpdated', function () { + setLevenscyclusOrder(); // Reapply order after content update + initializeChoices(); + attachFilterListeners(); + }); +}); + +// Function to initialize Choices.js for multi-select filters +function initializeChoices() { + const elements = document.querySelectorAll('.js-example-basic-multiple'); + + elements.forEach(function (element) { + // Initialize Choices.js for the first time + if (!element.choicesInstance) { + const choices = new Choices(element, { + removeItemButton: true, + placeholder: true, + searchEnabled: true, + noResultsText: 'Geen resultaten', + noChoicesText: 'Geen keuzes beschikbaar', + itemSelectText: 'Klik om te selecteren', + resetScrollPosition: false, + shouldSort: false, // Prevent sorting of options + shouldSortItems: false, // Prevent sorting of selected items + sorter: (a, b) => 0 // Custom sorting function (no sorting) + }); + + // Store the Choices.js instance to avoid re-initialization + element.choicesInstance = choices; + } + }); +} + +// Function to set a specific order to the levenscyclus dropdown +function setLevenscyclusOrder() { + const levenscyclusSelect = document.getElementById("filterLevenscyclusSelect"); + if (levenscyclusSelect) { + // Define the desired order for levenscyclus items + const desiredOrder = [ + 'organisatieverantwoordelijkheden', + 'probleemanalyse', + 'ontwerp', + 'dataverkenning-en-datapreparatie', + 'ontwikkelen', + 'verificatie-en-validatie', + 'implementatie', + 'monitoring-en-beheer', + 'uitfaseren', + ]; + + // Get options and map to their values + const options = Array.from(levenscyclusSelect.options); + + // Sort the options based on the desired order + options.sort((a, b) => { + return desiredOrder.indexOf(a.value) - desiredOrder.indexOf(b.value); + }); + + // Clear the existing options and append them in the correct order + levenscyclusSelect.innerHTML = ''; // Empty the select + + // Append sorted options back into the select + options.forEach(option => levenscyclusSelect.appendChild(option)); + + // Reinitialize Choices.js with the sorted options + if (levenscyclusSelect.choicesInstance) { + // Set the sorted choices back into the Choices.js instance + levenscyclusSelect.choicesInstance.setChoices( + options.map(option => ({ + value: option.value, + label: option.text, + selected: option.selected, + disabled: option.disabled + })), + 'value', + 'label', + false + ); + } + } +} + +// Attach event listeners to trigger table filtering when filters change +function attachFilterListeners() { + var filterSelect = document.getElementById("filterSelect"); + var levenscyclusSelect = document.getElementById("filterLevenscyclusSelect"); + var onderwerpSelect = document.getElementById("filterOnderwerpSelect"); + var filterInput = document.getElementById("filterInput"); + + if (filterSelect) { + filterSelect.addEventListener('change', filterTable); + } + + if (levenscyclusSelect) { + levenscyclusSelect.addEventListener('change', filterTable); + } + + if (onderwerpSelect) { + onderwerpSelect.addEventListener('change', filterTable); + } + + if (filterInput) { + filterInput.addEventListener('input', filterTable); + } +} + +// Function for filtering a table based on selected choices +function filterTable() { + console.log("filterTable is aangeroepen"); + + var input = document.getElementById("filterInput"); + var filter = input ? input.value.toUpperCase() : ""; + + var select = document.getElementById("filterSelect"); // Rollen filter + var selectedRoles = Array.from(select.options) + .filter(option => option.selected) + .map(option => option.value.toUpperCase()); + + var levenscyclusSelect = document.getElementById("filterLevenscyclusSelect"); // Levenscyclus filter + var selectedLevenscyclus = Array.from(levenscyclusSelect.options) + .filter(option => option.selected) + .map(option => option.value.toUpperCase()); + + var onderwerpSelect = document.getElementById("filterOnderwerpSelect"); // Onderwerpen filter + var selectedOnderwerpen = Array.from(onderwerpSelect.options) + .filter(option => option.selected) + .map(option => option.value.toUpperCase()); + + var table = document.getElementById("myTable"); + var tr = table ? table.getElementsByTagName("tr") : []; + + for (var i = 1; i < tr.length; i++) { // Skip header row + var td = tr[i].getElementsByTagName("td")[1]; // Maatregelen column (td[0]) + var roles = tr[i].getElementsByTagName("td")[2]; // Rollen column (td[1]) + var lc = tr[i].getElementsByTagName("td")[3]; // Levenscyclus column (td[2]) + var onderwerpen = tr[i].getElementsByTagName("td")[4]; // Onderwerpen column (td[3]) + + if (td && roles && lc && onderwerpen) { + var txtValue = td.textContent || td.innerText; // Maatregelen value + var txtValue2 = roles.textContent || roles.innerText; // Rollen value + var txtValue3 = lc.textContent || lc.innerText; // Levenscyclus value + var txtValue4 = onderwerpen.textContent || onderwerpen.innerText; // Onderwerpen value + + console.log(`Row ${i} values: `, { txtValue, txtValue2, txtValue3, txtValue4 }); + + // Check if all selected filters are present + var roleMatch = selectedRoles.every(role => txtValue2.toUpperCase().indexOf(role) > -1); + var lcMatch = selectedLevenscyclus.every(lc => txtValue3.toUpperCase().indexOf(lc) > -1); + var onderwerpMatch = selectedOnderwerpen.every(onderwerp => txtValue4.toUpperCase().indexOf(onderwerp) > -1); + + if (txtValue.toUpperCase().indexOf(filter) > -1 && roleMatch && lcMatch && onderwerpMatch) { + tr[i].style.display = ""; + } else { + tr[i].style.display = "none"; + } + } + } + + // Trigger contentUpdated to reinitialize Choices.js after filtering + document.dispatchEvent(new Event('contentUpdated')); +} \ No newline at end of file diff --git a/pr-preview/pr-478/javascripts/tablesort.js b/pr-preview/pr-478/javascripts/tablesort.js new file mode 100644 index 0000000000..c916015f04 --- /dev/null +++ b/pr-preview/pr-478/javascripts/tablesort.js @@ -0,0 +1,6 @@ +document$.subscribe(function() { + var tables = document.querySelectorAll("article table:not([class])") + tables.forEach(function(table) { + new Tablesort(table) + }) + }) \ No newline at end of file diff --git a/pr-preview/pr-478/levenscyclus/Levenscyclus vergelijkingstabel.pdf b/pr-preview/pr-478/levenscyclus/Levenscyclus vergelijkingstabel.pdf new file mode 100644 index 0000000000..26a867405f Binary files /dev/null and b/pr-preview/pr-478/levenscyclus/Levenscyclus vergelijkingstabel.pdf differ diff --git a/pr-preview/pr-478/levenscyclus/dataverkenning-en-datapreparatie/index.html b/pr-preview/pr-478/levenscyclus/dataverkenning-en-datapreparatie/index.html new file mode 100644 index 0000000000..96df2023e5 --- /dev/null +++ b/pr-preview/pr-478/levenscyclus/dataverkenning-en-datapreparatie/index.html @@ -0,0 +1,1241 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dataverkenning en datapreparatie - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Dataverkenning en datapreparatie

+ +

In deze fase worden relevante datasets geïdentificeerd en wanneer nodig wordt nieuwe data verzameld. +In deze fase zal ook de ontwikkelomgeving (verder) worden ingericht indien nodig. +Het is van belang dat voorafgaand aan verzameling is vastgesteld dat de benodigde data mag worden verwerkt en dat de juiste maatregelen worden getroffen, zodra de data kan worden verwerkt. +Denk hierbij aan het anonimiseren, pseudonimiseren of aggregeren van persoonsgegevens. +De data zullen vervolgens worden opgeschoond, geanalyseerd en voorbereid voor verdere verwerking.

+

Het is van belang dat dataverzameling op de juiste manier gebeurt, en dat datasets die gebruikt gaan worden van goede kwaliteit zijn. +In deze fase is het van belang om de datakwaliteit en eventuele bias in de dataset te onderzoeken. +Indien er risico's optreden door bijvoorbeeld missende data of niet representatieve data, is het belangrijk om te kijken wat voor effecten dit heeft op het oorspronkelijke ontwerp van het algoritme. +Dit kan betekenen dat nieuwe keuzes moeten worden gemaakt in het ontwerp en eventueel eerste deze fase van ontwerp (deels) opnieuw moet worden doorlopen.

+

Met voorgaande handelingen wordt het fundament gelegd om het algoritme te kunnen ontwikkelen. +In de praktijk zal bijvoorbeeld het analyseren van de data niet stoppen na deze fase, maar terugkerend zijn in alle fasen die volgen. +Als de verzamelde data van voldoende kwaliteit is en de vereiste maatregelen zijn getroffen, dan kan worden gestart met het ontwikkelen van het algoritme.

+

Vereisten

+
idVereisten
aia-05Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-06Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-33AI-testomgevingen die persoonsgegevens verwerken, voldoen aan strenge voorwaarden
aut-01Auteursrechten zijn beschermd
avg-01Persoonsgegevens worden op een rechtmatige manier verwerkt
avg-02Persoonsgegevens worden zo kort mogelijk bewaard
avg-03Persoonsgegevens worden zo min mogelijk verwerkt
avg-04Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
avg-05Persoonsgegevens zijn juist en actueel
avg-06Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken
avg-08Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
avg-11Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-13Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
dat-01Databanken worden alleen gebruikt met toestemming van de databank-producent
grw-02Algoritmes discrimineren niet
+ +

Maatregelen

+
idMaatregelen
owp-03Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag
owp-02Beschrijf welke data gebruikt wordt voor de beoogde toepassing
owp-16Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output.
dat-01Controleer de datakwaliteit
dat-02Maak waardevolle data vindbaar, toegankelijk, interoperabel en herbruikbaar (FAIR) binnen en buiten de eigen organisatie.
dat-05Bescherm persoonsgegevens door data te anonimiseren, pseudonimiseren of te aggregeren
dat-06Controleer de auteursrechten van eigen data
dat-07Gebruik duurzame datacenters
dat-07Gebruik bij machine learning technieken gescheiden train-, test- en validatiedata en houdt rekening met underfitting en overfitting.
dat-08Zorg dat je controle of eigenaarschap hebt over de data
dat-09Beperk de omvang van datasets voor energie-efficiëntie
imp-02Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren
mon-02Beveilig de software
+ +
+

Disclaimer

+

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/levenscyclus/implementatie/index.html b/pr-preview/pr-478/levenscyclus/implementatie/index.html new file mode 100644 index 0000000000..bbf7d760c2 --- /dev/null +++ b/pr-preview/pr-478/levenscyclus/implementatie/index.html @@ -0,0 +1,1241 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Implementatie - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Implementatie

+ +

In deze fase wordt het algoritme in de praktijk gebracht en duurzaam geïntegreerd in het bedrijfsproces. +In de praktijk worden veelal eerst een pilot uitgevoerd voor een afgebakende periode of over een beperkt aan zaken. +In deze situatie, een pilot, wordt tijdelijk productiedata verwerkt. +Dit vraagt om een goede samenwerking tussen het ontwikkelteam en de gebruikers van het algoritme. +Niet alleen de prestaties van het algoritme worden nogmaals gevalideerd, maar bijvoorbeeld ook of de output zodanig wordt gepresenteerd dat gebruikers hiermee kunnen werken. +Na deze pilot wordt onderzocht in hoeverre het algoritme presteert conform wens en verwachting. +Er kan worden gekozen om het algoritme eerst nog door te ontwikkelen op basis van de bevindingen, uit te faseren of om de oplossing structureel onderdeel te maken van de bedrijfsvoering door het te implementeren.

+

Als een besluit wordt genomen om de oplossing te implementeren, dan is het van belang dat gebruikers goed begrijpen hoe de resultaten van het algoritme moeten worden geïnterpreteerd, dat de rest-risico's bekend zijn, de verantwoordelijkheden belegd zijn en dat er duidelijke werkinstructies zijn over het gebruik van het algoritme. +Service- en incidentmanagement moet volledig worden geoperationaliseerd, zodat gebruikers kunnen worden geholpen bij vragen of incidenten. +Een kenmerkend element van deze fase is dat vanaf nu betrokkenen onderhevig zijn aan de werking van het algoritme. +Beslissingen en besluiten komen nu bijvoorbeeld mede of geheel door de werking van het algoritme tot stand. +Waar passend, bijvoorbeeld bij impactvolle of hoog risico AI-systemen wordt dit duidelijk gecommuniceerd naar betrokken, voordat de oplossing volledig is geïmplementeerd.

+

Vereisten

+
idVereisten
aia-14Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure
aia-15Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring
aia-16Hoog-risico-AI-systemen zijn voorzien van een CE-markering
aia-17Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank
aia-20Hoog-risico-AI-systemen worden gebruikt volgens de gebruiksaanwijzing
aia-24Werknemers weten dat hun organisatie een hoog-risico AI-systeem gebruikt
aia-25Gebruiksverantwoordelijken controleren de registratie van het hoog-risico AI-systeem in de EU-databank
aia-28AI-systemen worden zo ontworpen en gebruikt, dat mensen begrijpen wanneer zij met een AI-systeem communiceren en welke content gemaakt is door een AI-systeem
avg-07Organisaties zijn transparant over het verwerken van persoonsgegevens
avg-10Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
awb-02Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
bzk-01Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister
+ +

Maatregelen

+
idMaatregelen
imp-10Stel een protocol vast voor de situatie dat er (een vermoeden van) discriminatie door een algoritme is geconstateerd en pas dit wanneer nodig toe.
pba-04Overleg regelmatig met belanghebbenden
owp-01Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmes
owp-03Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag
owp-10Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes
owp-17Aansprakelijkheidsvoorwaarden van een aanbieder worden beoordeeld in de aanbesteding
owp-27Maak (contractuele) afspraken over data en artefacten met een aanbieder
dat-07Gebruik duurzame datacenters
owk-02Maak een noodplan voor het stoppen van het algoritme
imp-01Stel een werkinstructie op voor gebruikers.
imp-02Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren
imp-03Richt de juiste menselijke controle in van het algoritme
imp-04Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister
imp-05Spreek af hoe medewerkers omgaan met het algoritme.
imp-07Vermeld het gebruik van persoonsgegevens in een privacyverklaring
imp-09Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme en monitor dit proces.
imp-08Vermeld het gebruik van persoonsgegevens in het verwerkingsregister
imp-01Maak een openbaar besluit over de inzet van het algoritme
+ +
+

Disclaimer

+

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/levenscyclus/index.html b/pr-preview/pr-478/levenscyclus/index.html new file mode 100644 index 0000000000..4f4892e3be --- /dev/null +++ b/pr-preview/pr-478/levenscyclus/index.html @@ -0,0 +1,1175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Levenscyclus - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Levenscyclus algoritmes en AI

+
+
    +
  • +

    Fase 0: Organisatieverantwoordelijkheden

    +
    +

    Voordat je start met de ontwikkeling of het gebruik van een algoritme, zul je moeten zorgen dat je organisatie voldoende ingericht is om algoritmes te gebruiken of te ontwikkelen.

    +
  • +
  • +

    Fase 1: Probleemanalyse

    +
    +

    In deze fase wordt het probleem en de doelstellingen van een opdrachtgever geanalyseerd en beschreven.

    +
  • +
  • +

    Fase 2: Ontwerp

    +
    +

    In de ontwerpfase wordt het conceptuele ontwerp van het AI-systeem uitgedacht.

    +
  • +
  • +

    Fase 3: Dataverkenning en datapreparatie

    +
    +

    Dit is de fase waarin het algoritme of AI-systeem wordt ontwikkeld door het ontwikkelteam.

    +
  • +
  • +

    Fase 4: Ontwikkelen

    +
    +

    Dit is de fase waarin het algoritme of AI-systeem wordt ontwikkeld door het ontwikkelteam.

    +
  • +
  • +

    Fase 5: Verificatie en validatie

    +
    +

    Bij de verificatie en validatie van het algoritme of AI-systeem dient bepaald te worden of het algoritme of AI-systeem gebouwd is volgens de (technische) specificaties en voldoet aan de beoogde doelstellingen.

    +
  • +
  • +

    Fase 6: Implementatie

    +
    +

    In deze fase wordt het algoritme of AI-systeem in de praktijk gebracht en duurzaam geïntegreerd in het bedrijfsproces.

    +
  • +
  • +

    Fase 7: Monitoring en beheer

    +
    +

    Het algoritme of AI-systeem wordt in deze fase voortdurend gemonitord om ervoor te zorgen dat het blijft presteren zoals verwacht en kan worden gebruikt door gebruikers.

    +
  • +
  • +

    Fase 8: Uitfaseren

    +
    +

    Als wordt besloten dat het algoritme of AI-systeem niet langer nodig is of wordt vervangen door een wezenlijk andere versie, wordt het gearchiveerd en uitgefaseerd.

    +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/levenscyclus/monitoring-en-beheer/index.html b/pr-preview/pr-478/levenscyclus/monitoring-en-beheer/index.html new file mode 100644 index 0000000000..99d582a6d0 --- /dev/null +++ b/pr-preview/pr-478/levenscyclus/monitoring-en-beheer/index.html @@ -0,0 +1,1237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Monitoring en beheer - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Monitoring en beheer

+ +

Het algoritme wordt in deze fase voortdurend gemonitord om ervoor te zorgen dat het blijft presteren zoals verwacht en kan worden gebruikt door gebruikers. +Eventuele afwijkingen of degradatie van prestaties worden gesignaleerd en er worden maatregelen getroffen om dit te herstellen. +Dit is van belang vanuit een technisch perspectief (presteert het model nog wel waar het voor ontworpen is), maar ook vanuit een juridische en ethische blik (functioneert het model nog wel rechtmatig en zijn er geen onvoorziene nadelige effecten op mens en maatschappij). +Hierbij dient ook voortdurend gemonitord te worden of de omstandigheden waarin het algoritme wordt gebruikt veranderlijk zijn, en of daar op geanticipeerd moet worden. +Dit kan bijvoorbeeld spelen bij veranderende data of bij het uitvoeren van nieuw beleid of wet- en regelgeving in het werkproces dat wordt ondersteund met het algoritme.

+

Het is van belang dat beheer wordt uitgevoerd over het algoritme, zodat de (gehele) oplossing operationeel blijft. +Een wijziging in onderliggende systemen kan er bijvoorbeeld voor zorgen dat het algoritme niet meer wordt voorzien van de noodzakelijk data om de benodigde output te genereren. +Het beheerteam zorgt ervoor dat dergelijke situaties worden voorkomen of opgelost. Er kunnen ook incidenten worden gemeld door gebruikers die worden opgelost door het beheerteam.

+

Vereisten

+
idVereisten
aia-04Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
aia-07Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
aia-08Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-09Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-10Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-12Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder
aia-13Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder
aia-18Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
aia-22De werking van hoog-risico-AI-systemen wordt gemonitord
aia-23Logs voor hoog-risico-AI-systemen worden bewaard door de gebruiksverantwoordelijke
aia-25Gebruiksverantwoordelijken controleren de registratie van het hoog-risico AI-systeem in de EU-databank
aia-28Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluiten
aia-29AI-modellen voor algemene doeleinden zijn voorzien van voldoende technische documentatie en informatie
aia-30Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico treffen extra maatregelen
aia-31Als AI-modellen voor algemene doeleinden met systeemrisico’s ernstige incidenten veroorzaken, wordt dit gedocumenteerd en gerapporteerd
aia-32AI-modellen voor algemene doeleinden met systeemrisico’s zijn voldoende beveiligd tegen cyberaanvallen
aia-34Hoog-risico-AI-systemen zijn voorzien van een monitoringsysteem
aia-35Ernstige incidenten door hoog-risico-AI-systemen worden gemeld aan de toezichthouder
aia-36Klokkenluiders kunnen veilig melden dat een organisatie zich niet houdt aan de AI-verordening
arc-01Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
avg-07Organisaties zijn transparant over het verwerken van persoonsgegevens
awb-02Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
bzk-01Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister
grw-01Algoritmes schenden geen grondrechten of mensenrechten
grw-02Algoritmes discrimineren niet
+ +

Maatregelen

+
idMaatregelen
org-12Controleer en verbeter regelmatig de kwaliteit van het algoritme
owp-01Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmes
owp-06Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging
owp-09Een model-verwerkersovereenkomst is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt
owp-14Maak het opstellen van een verwerkersovereenkomst onderdeel van de aanbesteding als persoonsgegevens worden verwerkt.
dat-04Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure
dat-07Gebruik duurzame datacenters
owk-03Analyseer de privacy-risico’s en neem maatregelen om deze risico’s laag te houden
owk-04Maak logbestanden waarin staat wie wanneer toegang had tot de data en de code
ver-01Controleer regelmatig of het algoritme werkt zoals het bedoeld is
ver-01Toets het algoritme op bias
imp-02Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren
imp-03Richt de juiste menselijke controle in van het algoritme
imp-04Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister
imp-09Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme en monitor dit proces.
mon-01Maak back-ups van algoritmes
mon-02Beveilig de software
mon-03Maak een noodplan voor beveiligingsincidenten
mon-04Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme.
mon-05Meten, monitoren en rapporteren van milieu-impact van algoritmes
+ +
+

Disclaimer

+

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/levenscyclus/ontwerp/index.html b/pr-preview/pr-478/levenscyclus/ontwerp/index.html new file mode 100644 index 0000000000..7f0b94d0c9 --- /dev/null +++ b/pr-preview/pr-478/levenscyclus/ontwerp/index.html @@ -0,0 +1,1243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ontwerp - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Ontwerp

+ +

In de ontwerpfase wordt het conceptuele ontwerp van het algoritme uitgedacht. +Het is van belang om belangrijke uitgangspunten en beleid, zoals doelarchitectuur en de datastrategie, van de betreffende organisatie meteen te verwerken in het ontwerp en dat het applicatielandschap en de databronnen in beeld wordt gebracht. +In deze fase worden doorgaans veel werkzaamheden verzet, zoals business- en informatieanalyse, om een goed beeld te krijgen hoe aan de beoogde doelstellingen kan worden voldaan met een passende oplossing.

+

Het is goed denkbaar dat meerdere ontwerpen in deze fase tot stand komen voor het te ontwikkelen algoritme. +Het is van belang om deze ontwerpen te toetsen bij bijvoorbeeld de proceseigenaar, opdrachtgever en gebruiker, maar ook bij informatiebeveiligingsadviseurs, privacy officers, informatiebeheerders, architecten of een ethicus. +Deze experts kunnen vanuit hun vakgebied een eerste toets doen in hoeverre het ontwerp haalbaar of gewenst is, aansluit bij de gebruikersbehoefte, aan welke vereisten moet worden voldaan of dat er risicoanalyses moeten worden uitgevoerd en een onafhankelijke commissies moet worden betrokken.

+

Met deze input kan het ontwerp worden verbeterd en vraagstukken over bijvoorbeeld governance en risicomanagement verder worden uitgewerkt. +In deze fase kan ook een eerste stap worden gezet om de vereisten te vertalen naar concrete maatregelen, te structureren en te beleggen bij de betrokken experts. +Als bijvoorbeeld is vastgesteld dat persoonsgegevens noodzakelijkerwijs moeten worden verwerkt en hier een grondslag voor is, dan is het van belang dat voorafgaand aan de dataverkenning en datapreparatie fase voldoende (technische) maatregelen zijn getroffen om de data veilig te verwerken in de beoogde (ontwikkel)omgeving.

+

Daarnaast dient er in de ontwerpfase ook aandacht besteed te worden aan de succesfactoren van een algoritme. +Het is belangrijk om in een multidisciplinaire setting te bepalen hoe het algoritme in de praktijk geëvalueerd kan worden en wanneer we kunnen spreken van een rechtvaardig succes. +Hierbij dient er ook te worden nagedacht over evaluatiemethoden om na te gaan of het algoritme voldoet aan bijvoorbeeld het vereiste van non-discriminatie.

+

Nadat een besluit is genomen over het definitieve ontwerp van het algoritme, kan worden gestart met het inrichten van de ontwikkelomgeving (indien nodig), de dataverkenning, datapreparatie. +Dit besluit betekent dat een akkoord wordt gegeven voor het type algoritme en de beoogde werking.

+

Vereisten

+
idVereisten
aia-02Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd
aia-04Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
aia-08Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-09Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-10Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-12Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder
aia-13Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder
aia-19Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-28Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluiten
aia-29Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
aia-29AI-modellen voor algemene doeleinden zijn voorzien van voldoende technische documentatie en informatie
aut-01Auteursrechten zijn beschermd
avg-01Persoonsgegevens worden op een rechtmatige manier verwerkt
avg-02Persoonsgegevens worden zo kort mogelijk bewaard
avg-03Persoonsgegevens worden zo min mogelijk verwerkt
avg-04Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
avg-06Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken
avg-08Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
avg-10Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
avg-11Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-13Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
awb-01Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
awb-02Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
grw-01Algoritmes schenden geen grondrechten of mensenrechten
+ +

Maatregelen

+
idMaatregelen
pba-04Overleg regelmatig met belanghebbenden
owp-01Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmes
owp-11Voer voorafgaand aan een project een data beschikbaarheid, kwaliteit- en toegankelijkheidsanalayse uit.
owp-03Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag
owp-04Beschrijf welke techniek gebruikt wordt voor de beoogde toepassing
owp-05Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horen
owp-06Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging
owp-07Maak een lijst van de meest kwetsbare groepen en bescherm hen extra
owp-08Bepaal welke documenten voor hoe lang gearchiveerd moeten worden
owp-09Een model-verwerkersovereenkomst is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt
owp-09Stel een multidisciplinair team samen bij het ontwikkelen of inkopen van algoritmes.
owp-10Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes
owp-11Koop duurzaam algoritmes in
owp-02Beschrijf welke data gebruikt wordt voor de beoogde toepassing
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-12Ontwerp algoritmes zo eenvoudig mogelijk
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-14Maak het opstellen van een verwerkersovereenkomst onderdeel van de aanbesteding als persoonsgegevens worden verwerkt.
owp-15Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving.
owp-17Aansprakelijkheidsvoorwaarden van een aanbieder worden beoordeeld in de aanbesteding
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-20Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke.
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-22Bepaal in een aanbesteding of algoritmes van een aanbieder bepalende invloed hebben in een besluit richting personen
owp-23Laat de aanbieder aangeven welke mate van opleiding en ondersteuning bij de implementatie nodig is om de beoogde algoritmes verantwoord te gebruiken.
owp-24Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstraject
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owp-27Maak (contractuele) afspraken over data en artefacten met een aanbieder
pba-04Stel vast welke betrokkenen geïnformeerd moeten worden en welke informatie zij nodig hebben.
owp-07Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.
imp-10Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.
dat-06Controleer de auteursrechten van eigen data
dat-07Gebruik duurzame datacenters
owk-03Analyseer de privacy-risico’s en neem maatregelen om deze risico’s laag te houden
ver-01Toets het algoritme op bias
imp-03Richt de juiste menselijke controle in van het algoritme
mon-05Meten, monitoren en rapporteren van milieu-impact van algoritmes
+ +
+

Disclaimer

+

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/levenscyclus/ontwikkelen/index.html b/pr-preview/pr-478/levenscyclus/ontwikkelen/index.html new file mode 100644 index 0000000000..b3a0a96f94 --- /dev/null +++ b/pr-preview/pr-478/levenscyclus/ontwikkelen/index.html @@ -0,0 +1,1239 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ontwikkelen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Ontwikkelen

+ +

Dit is de fase waarin het algoritme wordt ontwikkeld door het ontwikkelteam. +Als het gaat om AI-systemen, omvat deze fase het trainen van modellen met behulp van de voorbereide gegevens. +Als het gaat om algoritmes op basis van rekenregels, betreft dit het implementeren van deze rekenregels in de (ontwikkelomgeving van de) systemen.

+

Het algoritme technisch correct ontwikkelen, inclusief het kunnen begrijpen van de beperkingen ervan, vraagt om een samenspel van expertise vanuit verschillende disciplines. +Denk hierbij aan de proceseigenaar, domeinexperts van het te ondersteunen werkproces, data scientists, data engineer, (privacy)juristen, beleidsmedewerkers en een ethicus. +Een voorbeeld hiervan is het beoordelen van de zogenaamde inputvariabelen of rekenregels (die voor een groot deel bepalen hoe een algoritme functioneert) van een machine learning model of algoritme. +Deze rollen zijn bijzonder waardevol bij het beoordelen of deze variabelen of rekenregels juridisch zijn toegestaan, ethisch wenselijk zijn, technisch gezien- voldoende significant zijn en of deze van toegevoegde waarde zijn voor gebruikers. +Dit multidisciplinaire team kan tijdens de ontwikkeling continu bijsturen, zodat het algoritme op een verantwoorde wijze functioneert en aansluit bij de beoogde doelstellingen.

+

In deze fase is niet alleen het ontwikkelen van een algoritme, maar ook het documenteren van belangrijke afwegingen en het opstellen van technische documentatie van groot belang. +Daarnaast zullen tal van (technische) maatregelen moeten worden getroffen zoals de verdere beveiliging van het informatiesysteem of bij de ontsluiting van de output naar gebruikers, het automatische genereren van logs en het inrichten van service en incidentmanagementprocedures.

+

Vereisten

+
idVereisten
aia-06Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-07Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
aia-08Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-09Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-10Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-23Logs voor hoog-risico-AI-systemen worden bewaard door de gebruiksverantwoordelijke
aia-28AI-systemen worden zo ontworpen en gebruikt, dat mensen begrijpen wanneer zij met een AI-systeem communiceren en welke content gemaakt is door een AI-systeem
aia-29AI-modellen voor algemene doeleinden zijn voorzien van voldoende technische documentatie en informatie
aia-30Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico treffen extra maatregelen
aia-32AI-modellen voor algemene doeleinden met systeemrisico’s zijn voldoende beveiligd tegen cyberaanvallen
aia-33AI-testomgevingen die persoonsgegevens verwerken, voldoen aan strenge voorwaarden
arc-01Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
avg-02Persoonsgegevens worden zo kort mogelijk bewaard
avg-03Persoonsgegevens worden zo min mogelijk verwerkt
avg-09Betrokkenen kunnen een beroep doen op hun privacyrechten
awb-01Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+ +

Maatregelen

+
idMaatregelen
owp-03Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag
owp-05Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horen
owp-08Bepaal welke documenten voor hoe lang gearchiveerd moeten worden
owp-10Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-12Ontwerp algoritmes zo eenvoudig mogelijk
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
pba-04Stel vast welke betrokkenen geïnformeerd moeten worden en welke informatie zij nodig hebben.
dat-04Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure
dat-05Bescherm persoonsgegevens door data te anonimiseren, pseudonimiseren of te aggregeren
dat-07Gebruik duurzame datacenters
dat-07Gebruik bij machine learning technieken gescheiden train-, test- en validatiedata en houdt rekening met underfitting en overfitting.
dat-09Beperk de omvang van datasets voor energie-efficiëntie
owk-01Ontwerp en ontwikkel het algoritme volgens de principes van ‘security by design’
owk-02Maak een noodplan voor het stoppen van het algoritme
owk-03Analyseer de privacy-risico’s en neem maatregelen om deze risico’s laag te houden
owk-04Maak logbestanden waarin staat wie wanneer toegang had tot de data en de code
owk-05Kies energiezuinige programmeermethoden
owk-06Optimaliseer AI-trainingsprocessen voor energie-efficiëntie
ver-01Controleer regelmatig of het algoritme werkt zoals het bedoeld is
imp-06Spreek af hoe de organisatie omgaat met privacy-verzoeken
mon-01Maak back-ups van algoritmes
mon-02Beveilig de software
+ +
+

Disclaimer

+

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/levenscyclus/organisatieverantwoordelijkheden/index.html b/pr-preview/pr-478/levenscyclus/organisatieverantwoordelijkheden/index.html new file mode 100644 index 0000000000..443106a768 --- /dev/null +++ b/pr-preview/pr-478/levenscyclus/organisatieverantwoordelijkheden/index.html @@ -0,0 +1,1232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Organisatieverantwoordelijkheden - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Organisatieverantwoordelijkheden

+ +

Voordat je start met de ontwikkeling of het gebruik van een algoritme, zul je moeten zorgen dat je organisatie voldoende ingericht is om algoritmes te gebruiken of te ontwikkelen. +In deze fase beschrijven we de randvoorwaarden die je als organisatie moet hebben om aan de slag te gaan. Dit zijn aspecten die je in het ideale geval al regelt voordat je begint aan het gebruik van algoritmes. +Het zijn ook taken die je voortdurend aandacht zal moeten geven, maar die je niet voor ieder algorite opnieuw hoeft te organiseren.

+

Vereisten

+
idVereisten
aia-01Personeel en gebruikers zijn voldoende AI-geletterd
aia-01Verboden AI-systemen mogen niet worden gebruikt.
aia-03Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
aia-11Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-18Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
aia-20Hoog-risico-AI-systemen worden gebruikt volgens de gebruiksaanwijzing
aia-21Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkheden
aia-25Gebruiksverantwoordelijken controleren de registratie van het hoog-risico AI-systeem in de EU-databank
aia-28Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluiten
aia-33AI-testomgevingen die persoonsgegevens verwerken, voldoen aan strenge voorwaarden
aia-35Ernstige incidenten door hoog-risico-AI-systemen worden gemeld aan de toezichthouder
aia-36Klokkenluiders kunnen veilig melden dat een organisatie zich niet houdt aan de AI-verordening
aia-37Klachtrecht aanbieders verder in AI-waardeketen
avg-09Betrokkenen kunnen een beroep doen op hun privacyrechten
avg-12Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
bio-01Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
woo-01Iedereen kan openbare informatie over algoritmes vinden of aanvragen
+ +

Maatregelen

+
idMaatregelen
org-01Bepaal of er genoeg experts beschikbaar zijn
org-04Stel beleid op voor een verantwoorde inzet van algoritmes binnen de organisatie.
org-03Maak een plan voor het omgaan met risico’s
org-04Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid.
org-05Sluit algoritmegovernance aan op bestaande governancestructuren binnen de organisatie.
org-06Gebruik een algoritme volwassenheidsmodel om te weten waar de organisatie staat
org-07Richt een algoritmegovernance in met three lines of defence
org-08Maak gebruik van beslismomenten in de algoritmelevenscyclus
org-09Richt algoritmegovernance op basis van de risicoclassificatie van algoritmes.
org-10Taken en verantwoordelijkheden zijn toebedeeld in de algoritmegovernance
org-11Maak afspraken over het beheer van gebruikers
org-12Controleer en verbeter regelmatig de kwaliteit van het algoritme
org-13Maak afspraken over het beheer van wachtwoorden
org-14Maak afspraken over het wijzigen van de code
imp-10Stel een protocol vast voor de situatie dat er (een vermoeden van) discriminatie door een algoritme is geconstateerd en pas dit wanneer nodig toe.
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
org-02Pas vastgestelde beleidskaders toe
imp-06Spreek af hoe de organisatie omgaat met privacy-verzoeken
imp-01Maak een openbaar besluit over de inzet van het algoritme
mon-03Maak een noodplan voor beveiligingsincidenten
+ +
+

Disclaimer

+

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/levenscyclus/probleemanalyse/index.html b/pr-preview/pr-478/levenscyclus/probleemanalyse/index.html new file mode 100644 index 0000000000..f66a519c20 --- /dev/null +++ b/pr-preview/pr-478/levenscyclus/probleemanalyse/index.html @@ -0,0 +1,1238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Probleemanalyse - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Probleemanalyse

+ +

In deze fase wordt het probleem en de doelstellingen van een opdrachtgever geanalyseerd en beschreven. +Er wordt bijvoorbeeld onderzocht welke publieke taak moet worden ondersteund en welke publieke waarden daarbij moeten worden beschermd of juist gerealiseerd. +In deze fase wordt onderzocht of het ontwikkelen van een algoritme een geschikt middel is om het doel te realiseren en het probleem op te lossen. +Dat hangt van verschillende zaken af.

+

Hierbij kan worden gedacht aan de middelen (capaciteit en financiële middelen) die nodig zijn om algoritmen op een verantwoorde wijze te ontwikkelen, de complexiteit van de oplossing, het in beeld brengen van de verwachte risico's (hoog over), een eerste beeld krijgen bij wat voor data nodig zijn en het in kaart brengen en beleggen van de verschillende verantwoordelijkheden. +Daarnaast is het van belang om het beleid met betrekking tot de inzet van algoritme een organisatie te raadplegen.

+

Er zal een conclusie moeten volgen of de ontwikkeling van een algoritme passend is. +Deze fase wordt doorgaans afgerond met een akkoord van de (gemandateerd) verantwoordelijk(en)/opdrachtgever om een algoritme te ontwikkelen. +Een vastgestelde business case of plan van aanpak vormen veelal de basis om de ontwerpfase te starten met de benodigde experts.

+

Vereisten

+
idVereisten
aia-01Verboden AI-systemen mogen niet worden gebruikt.
avg-01Persoonsgegevens worden op een rechtmatige manier verwerkt
grw-01Algoritmes schenden geen grondrechten of mensenrechten
+ +

Maatregelen

+
idMaatregelen
pba-01Beschrijf het probleem dat het algoritme moet oplossen
pba-02Beschrijf het doel van het algoritme
pba-03Beschrijf waarom een algoritme het probleem moet oplossen
pba-04Overleg regelmatig met belanghebbenden
pba-05Beschrijf de wettelijke grondslag voor de inzet van het algoritme
owp-06Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging
+ +
+

Disclaimer

+

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/levenscyclus/uitfaseren/index.html b/pr-preview/pr-478/levenscyclus/uitfaseren/index.html new file mode 100644 index 0000000000..b1dbae98d4 --- /dev/null +++ b/pr-preview/pr-478/levenscyclus/uitfaseren/index.html @@ -0,0 +1,1241 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Uitfaseren - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Uitfaseren

+ +

Als wordt besloten dat het algoritme niet langer nodig is of wordt vervangen door een wezenlijk andere versie, wordt het gearchiveerd en uitgefaseerd. +Hiermee wordt ervoor gezocht dat later kan worden gereconstrueerd hoe het algoritme heeft gefunctioneerd en dat gebruikers er geen gebruik meer van kunnen maken.

+

Archiveren betekent dat documentatie en eventuele relevante artefacten (zoals logbestanden en de parameters van het model) worden bewaard voor een bepaalde periode. +Het gaat daarbij ook om informatie over het algoritme, bijvoorbeeld het besluit en onderbouwing waarom het niet meer wordt gebruikt en waarom het in het verleden wel gebruikt werd. +Archiveren is niet enkel relevant aan het einde van de levenscyclus, maar is ook gedurende het gebruik van het algoritme van belang. +Er moet tijdig worden vastgesteld welke versies van een model moeten worden gearchiveerd, bijvoorbeeld al tijdens de ontwerpfase.

+

Bij AI-systemen is er in praktijk vaak sprake van hertrainen op nieuwe data, wat het model anders maakt en andere voorspellingen kan doen geven. +Ook meer eenvoudige algoritmes kunnen gedurende de tijd veranderen en andere voorspellingen geven, bijvoorbeeld door veranderende data of veranderende rekenregels. +Er moet worden vastgesteld welke versies van een model moet gearchiveerd.

+

Bij uitfaseren wordt het algoritme verwijderd uit de productieomgeving en, na archivering, wordt de trainingsdata uit de ontwikkelomgeving verwijderd. +Het algoritme is hiermee niet meer te gebruiken door gebruikers. +Gebruikers moeten hier vooraf over worden geïnformeerd en waar passend, bijvoorbeeld bij impactvolle of hoog risico AI-systemen, worden betrokkenen geïnformeerd over het beëindigen van het gebruik.

+

Vereisten

+
idVereisten
aia-12Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder
aia-13Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder
arc-01Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
avg-02Persoonsgegevens worden zo kort mogelijk bewaard
+ +

Maatregelen

+
idMaatregelen
+ +
+

Disclaimer

+

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/levenscyclus/verificatie-en-validatie/index.html b/pr-preview/pr-478/levenscyclus/verificatie-en-validatie/index.html new file mode 100644 index 0000000000..66591011a9 --- /dev/null +++ b/pr-preview/pr-478/levenscyclus/verificatie-en-validatie/index.html @@ -0,0 +1,1243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Verificatie en validatie - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Verificatie en validatie

+ +

Bij de verificatie en validatie van het algoritme dient bepaald te worden of het algoritme gebouwd is volgens de (technische) specificaties en voldoet aan de beoogde doelstellingen. +Hiervoor moeten technische, maar ook organisatorische maatregelen worden getroffen.

+

Bij verificatie kan worden gedacht aan het (laten) controleren of het algoritme voldoet aan de (technische) specificaties, bijvoorbeeld door een interne of externe audit of in de toekomst een conformiteitsbeoordeling voor hoog risico AI-systemen. +Hiermee kan (onafhankelijk) worden vastgesteld of het systeem voldoet aan de vereisten die organisaties daaraan stellen. +Op basis van bevindingen uit een audit of conformiteitsbeoordeling, is het denkbaar dat het ontwikkelteam nog bepaalde maatregelen moet treffen om te voldoen aan de specificaties.

+

Bij het valideren van een algoritme moet worden bepaald of het goed genoeg presteert en of het geschikt is voor het beoogde doel van het systeem. +Wanneer het een AI-systeem betreft, is het belangrijk dat dit gevalideerd wordt op nieuwe, niet eerder geziene data. +Het valideren betreft het iteratief evalueren van de nauwkeurigheid en prestaties van het systeem. +Daarnaast is het ook belangrijk om te valideren of het algoritme gelijke prestaties toont voor verschillende groepen en om te testen hoe het algoritme presteert in uitzonderlijke gevallen. +Het is net als in de ontwerpfase belangrijk dat een multidisciplinair team beoordeelt of de werking passend en bijvoorbeeld non-discriminatoir is. +In het geval van impactvolle algoritmen of hoog risico AI-systemen, is het raadzaam om een onafhankelijke commissie of partij te betrekken die een advies geeft over de werking van het algoritme of AI-systeem.

+

In praktijk zal vaak na validatie weer worden teruggegaan naar de ontwikkelfase om prestaties van het model te verbeteren voorafgaand aan implementatie van de oplossing. +Het is ook denkbaar dat het algoritme onvoldoende aansluit bij de doelstellingen en het gebruik ervan moet wordt beëindigd. +Een andere conclusie kan zijn dat het presteert conform verwachting en naar de implementatiefase kan worden gegaan.

+

Vereisten

+
idVereisten
aia-05Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-06Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-10Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-14Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure
aia-15Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring
aia-29Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
aia-30Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico treffen extra maatregelen
avg-13Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
awb-01Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
grw-01Algoritmes schenden geen grondrechten of mensenrechten
grw-02Algoritmes discrimineren niet
+ +

Maatregelen

+
idMaatregelen
owp-03Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag
owp-06Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging
owp-10Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes
owp-16Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output.
ver-01Controleer regelmatig of het algoritme werkt zoals het bedoeld is
ver-01Toets het algoritme op bias
ver-03Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleid
+ +
+

Disclaimer

+

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/onderwerpen/bias-en-non-discriminatie/index.html b/pr-preview/pr-478/onderwerpen/bias-en-non-discriminatie/index.html new file mode 100644 index 0000000000..5c2af7189b --- /dev/null +++ b/pr-preview/pr-478/onderwerpen/bias-en-non-discriminatie/index.html @@ -0,0 +1,1861 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bias en non-discriminatie - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Bias en non-discriminatie

+ +

Algoritmes worden binnen de overheid veelvuldig ingezet om publieke taken uit te voeren. Dit biedt veel kansen, maar er zijn ook risico's aan verbonden. +Hoewel algoritmes in sommige gevallen kunnen bijdragen aan het tegengaan van discriminatie, kan bias in het algoritme leiden tot een ongelijke en oneerlijke behandeling van burgers of groepen, en kan er sprake zijn van discriminerende effecten. +In dit bouwblok van het algoritmekader besteden we aandacht aan de onderwerpen bias, eerlijkheid en non-discriminatie. +We werken uit wat bias is, hoe bias kan ontstaan, hoe we dit kunnen signaleren, welke maatregelen er genomen kunnen worden om dit te voorkomen en geven we handvatten wat te doen wanneer een (onwenselijke) bias is gesignaleerd.

+

Hierbij is het goed om op te merken dat het omgaan met het thema bias gedurende het ontwikkelen, inkopen of gebruik van het algoritme vraagt om continue aandacht voor dit onderwerp. +Het betreft geen probleem dat eenmalig kan worden weggenomen. Het vraagt voortdurend om reflectie op eerlijkheid en rechtvaardigheid van het systeem.

+

Dit bouwblok wordt uitgewerkt in vereisten die weergeven wat er vanuit wet- en regelgeving en bestaande toetsingskaders vereist is om bias en discriminatie tegen te gaan. +Daarbij worden er suggesties gedaan hoe deze vereisten kunnen worden nageleefd met concrete maatregelen, en welke actoren daarbij betrokken kunnen zijn. +Waar mogelijk worden concrete voorbeelden en best practices uit de praktijk gegeven en zal worden aangegeven bij welk type algoritmen of AI dit relevant is. +Deze vereisten en maatregelen worden ook gekoppeld aan de algoritme levenscyclus. +Dit geeft een beeld van wanneer bepaalde vereisten of maatregelen, bij het ontwikkelen van algoritmen en AI, moeten worden geadresseerd.

+

Door bij de ontwikkeling van algoritmes rekening te houden met vereisten die voorkomen uit wet- en regelgeving, het type algoritme of AI en de potentiële risico’s die ontstaan bij het gebruiken ervan, kunnen negatieve gevolgen worden voorkomen.

+

De onderwerpen bias en non-discriminatie spelen daarom een belangrijke rol bij de totstandkoming van verantwoord ontwikkelde algoritmen en AI en het gebruik daarvan door ambtenaren.

+

Wat is discriminatie en bias?

+

Discriminatie

+

Artikel 1 van de Nederlandse Grondwet verbiedt discriminatie:

+
+

Allen die zich in Nederland bevinden, worden in gelijke gevallen gelijk behandeld. Discriminatie wegens godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, handicap, seksuele gerichtheid of op welke grond dan ook, is niet toegestaan.

+
+

De prominente positie in de Grondwet benadrukt het belang van het mensenrecht in Nederland. +De afgelopen jaren hebben incidenten in de praktijk de aandacht gericht op de discriminatoire effecten die algoritmes kunnen hebben.

+

Bias

+

Bias is een Engelse term die in het Nederlands wordt vertaald als vooroordeel, vooringenomenheid of neiging. +Omdat niet één van die termen helemaal de lading van het begrip bias dekt, maken we in het Algoritmekader gebruik van de term bias. +De term bias heeft verschillende betekenissen afhankelijk van de context waarin het gebruikt wordt en de disciplines die daarbij betrokken zijn. +Vaak wordt er naar bias gekeken als een technisch concept, maar het omvat daarnaast ook menselijke aspecten. +We starten met een verduidelijking hoe het begrip bias in algoritmische context gebruikt wordt en hoe dit in verhouding staat tot discriminatie. +Vervolgens maken we onderscheid tussen drie verschillende aspecten van bias: statistische bias, systemische bias en menselijke bias. +Deze drie aspecten van bias kunnen los van elkaar bestaan, maar kunnen juist in combinatie met elkaar tot problemen leiden.

+

Bias in algoritmische context

+

Het concept bias wordt in algoritmische context gedefinieerd als een systematisch verschil in behandeling van bepaalde objecten, mensen of groepen in vergelijking met anderen.1

+

Dit systematische verschil of onderscheid kan zowel op een directe als op een indirecte manier ontstaan.

+
+

De Algemene wet gelijke behandeling spreekt van direct onderscheid wanneer een persoon op een andere wijze wordt behandeld dan een ander in een vergelijkbare situatie wordt, is of zou worden behandeld, op grond van godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, nationaliteit, hetero- of homoseksuele gerichtheid 2 of burgerlijke staat.

+

De Algemene wet gelijke behandeling spreekt van indirect onderscheid indien een ogenschijnlijk neutrale bepaling, maatstaf of handelwijze personen met een bepaalde godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, nationaliteit, hetero- of homoseksuele gerichtheid 2 of burgerlijke staat in vergelijking met andere personen bijzonder treft.

+
+

Een geconstateerd systematische onderscheid is niet altijd fout en is niet altijd verboden, maar het vraagt wel altijd om aandacht en zorgvuldigheid. +Het geconstateerde onderscheid kan in bepaalde situaties en onder bepaalde strikte voorwaarden gerechtvaardigd zijn. +Voor direct onderscheid kan er bijvoorbeeld sprake zijn van een wettelijke uitzondering die het gemaakte onderscheid toelaat. +Voor indirect onderscheid geldt dat behalve een wettelijke uitzondering er ook een objectieve rechtvaardiging kan bestaan, waarmee het geconstateerde onderscheid in bepaalde gevallen toelaatbaar kan zijn.

+

Het maken van een eventueel onderscheid is in sommige gevallen nauw verbonden met het gebruik van algoritmes. +Soms worden algoritmes en AI bijvoorbeeld juist ingezet om op een zo objectief mogelijke manier te bepalen welke groepen meer of minder belang hebben bij een andere behandeling. +In deze gevallen zal er altijd na moeten worden gegaan of er sprake is van een objectieve rechtvaardiging voor het gemaakte onderscheid.

+

Wanneer er geen rechtvaardiging is voor het gemaakte onderscheid, spreken we van een verboden direct of indirect onderscheid, ofwel discriminatie. +Het algoritme of AI-systeem mag in dat geval niet gebruikt worden. +Bias vormt daarmee een risico op discriminatie.

+
Fairness
+

In de context van algoritmes wordt de term unfairness gebruikt wanneer er sprake is van een ongerechtvaardigd onderscheid waarbij bepaalde groepen meer bevoordeeld worden dan andere.3 +In de Nederlandse taal spreken we dan van oneerlijkheid of onrechtvaardigheid (of in positieve zin van respectievelijk fairness, eerlijkheid en rechtvaardigheid). +Wanneer we het hebben over fairness hebben we het minder over de juridische kant van discriminatie en verboden onderscheid. +Ook als er wel een objectieve rechtvaardiging bestaat voor een gemaakt onderscheid, kan afgevraagd worden of het gemaakte onderscheid ethisch wenselijk is.

+

Statistische bias

+

Statistische bias wordt gedefinieerd als een consistente numerieke afwijking van een schatting ten opzichte van de werkelijke onderliggende waarde.1 +Dit fenomeen kan in allerlei verschillende contexten plaatsvinden, niet alleen bij het gebruik van algoritmes. +Een voorbeeld is wanneer een bepaalde meting van een waarde niet goed gekalibreerd is en er sprake is van een consistente afwijking van de te meten waarde (bijvoorbeeld dat we consistent 10% hoger meten).

+

In de context van algoritmes kan deze vorm van bias voorkomen wanneer er een steekproef wordt gebruikt die niet representatief is voor de populatie, en de schattingen op basis van de steekproef vervolgens systematisch afwijken van de werkelijke waarde in de gebruikte doelpopulatie. +Statistische bias duidt op een systematische fout die gemaakt wordt door het algoritme. +Deze fout kan hetzelfde zijn voor alle groepen en hoeft daardoor niet in alle gevallen te duiden op ongelijke behandeling of discriminerende effecten. +Voorbeelden van statistische bias zijn meetfouten (measurement bias), foute data of data op een te simpele manier representeren (representatie bias).

+

Systemische bias

+

We spreken van systemische bias wanneer bepaalde processen of systemen op zo'n wijze worden gebruikt dat bepaalde groepen bevoordeeld worden en andere groepen benadeeld worden. +Dit is vaak geen bewuste vorm van vooringenomenheid, maar kan bijvoorbeeld ontstaan doordat de meerderheid bestaande regels of normen volgt, en het systeem geoptimaliseerd is op de meerderheid. +Systemische bias heeft een sterk institutioneel karakter. Systemische bias wordt daarom ook wel institutionele vooringenomenheid genoemd. +Deze vooroordelen zijn vaak verweven in de bredere cultuur en samenleving, en zitten daardoor ook in veel datasets. +Een veel voorkomend voorbeeld van systemische bias is historische bias.

+

Menselijke bias

+

Menselijke bias omvat systematische fouten in het menselijk denken. +Deze (onbewuste) menselijke vooroordelen zijn vaak impliciet van aard en hebben betrekking op de manier waarop een individu bepaalde informatie waarneemt en verwerkt om bijvoorbeeld een beslissing te nemen. +In de context van algoritmes kan deze vorm van bias invloed hebben op de verzamelde data, op de wijze waarop het algoritme wordt geoptimaliseerd en de besluiten die door mensen worden genomen op basis van het algoritme. +Voorbeelden van vormen menselijke bias zijn wanneer er voorkeur wordt geven aan de voorspellingen van een algoritme die reeds bestaande overtuigingen bevestigen (bevestigingsbias), of wanneer mensen de neiging hebben om voorkeur te geven aan suggesties die door het algoritme worden gedaan (automatiseringsbias)

+

Overzicht van gebruikte definities

+

Onderstaand bieden we een overzicht van de gebruikte definities in het algoritmekader die betrekking hebben op het onderwerp bias en non-discriminatie.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Term of begripDefinitieBron
direct onderscheidindien een persoon op een andere wijze wordt behandeld dan een ander in een vergelijkbare situatie wordt, is of zou worden behandeld, op grond van godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, nationaliteit, hetero- of homoseksuele gerichtheid2 of burgerlijke staatAlgemene wet gelijke behandeling
indirect onderscheidindien een ogenschijnlijk neutrale bepaling, maatstaf of handelwijze personen met een bepaalde godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, nationaliteit, hetero- of homoseksuele gerichtheid2 of burgerlijke staat in vergelijking met andere personen bijzonder treft.Algemene wet gelijke behandeling
discriminatiemensen anders behandelen, achterstellen of uitsluiten op basis van (persoonlijke) kenmerken.College voor de rechten van de mens
directe discriminatiede ongelijke behandeling van een persoon of groep personen ten opzichte van andere personen in een vergelijkbare situatie, op grond van een beschermd persoonskenmerk (discriminatiegrond).College voor de rechten van de mens, Discriminatie door risicoprofielen - een mensenrechtelijk toetsingskader
indirecte discriminatiewanneer een ogenschijnlijk neutrale bepaling, maatstaf of handelwijze personen met een bepaald beschermd persoonskenmerk (discriminatiegrond) in vergelijking met andere personen in het bijzonder benadeelt, tenzij hiervoor een objectieve rechtvaardiging bestaat.College voor de rechten van de mens, Discriminatie door risicoprofielen - een mensenrechtelijk toetsingskader
algoritmische fairnesshet vakgebied dat bestudeert hoe algoritmische systemen zich moeten gedragen om mensen eerlijk te behandelen, dat wil zeggen zonder discriminatie op grond van beschermde gevoelige kenmerken zoals leeftijd, geslacht, handicap, etnische of raciale afkomst, religie of geloofsovertuiging, of seksuele geaardheidThe fairness handbook
ground truth (NL vertaling?)waarde van de doelvariabele voor een bepaald item van gelabelde invoergegevens. 5NEN-EN-ISO/IEC 22989:2023 en 4
etnisch profilerenHet gebruik door overheidsinstanties van selectiecriteria als ras, huidskleur, taal, religie, nationaliteit of nationale of etnische afkomst bij de uitoefening van toezichts-, handhavings- en opsporingsbevoegdheden, zonder dat daarvoor een objectieve en redelijke rechtvaardiging bestaat.College voor de rechten van de mens, Discriminatie door risicoprofielen - een mensenrechtelijk toetsingskader
discriminatiegrondBeschermde persoonskenmerken op basis waarvan het maken van onderscheid tussen personen verboden is. Bijvoorbeeld: ras, nationaliteit, religie, geslacht, seksuele gerichtheid, handicap of chronische ziekteCollege voor de rechten van de mens, Discriminatie door risicoprofielen - een mensenrechtelijk toetsingskader
risicoprofielEen verzameling van één of meer selectiecriteria op basis waarvan een bepaald risico op normovertreding wordt ingeschat en een selectiebeslissing wordt gemaakt.College voor de rechten van de mens, Discriminatie door risicoprofielen - een mensenrechtelijk toetsingskader
groepdeelverzameling van objecten in een domein die zijn gekoppeld omdat ze gemeenschappelijke kenmerken hebben.ISO/IEC TR 24027:2021 en 4
+

Verschillende vormen van bias

+

Omdat bias op verschillende manieren kan ontstaan, zijn er allerlei verschillende vormen van bias, die hieronder gedefinieerd worden. Deze lijst is niet uitputtend.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BegripDefinitieBron
automatiseringsbiasde neiging van mensen om de voorkeur te geven aan suggesties van geautomatiseerde besluitvormingssystemen en om tegenstrijdige informatie te negeren die zonder automatisering is verkregen, zelfs als deze correct isISO/IEC TR 24027:2021 en 4
data biasdataeigenschappen die, als ze niet worden aangepakt, leiden tot AI-systemen die beter of slechter presteren voor verschillende groepenISO/IEC TR 24027:2021 en 4
statistische biassoort consistente numerieke afwijking in een schatting ten opzichte van de werkelijke onderliggende waarde, inherent aan de meeste schattingenISO/IEC TR 24027:2021 en 4
historische biasverwijzend naar de langdurige vooroordelen die in de loop der tijd in de samenleving zijn gecodeerd. Verwant aan, maar verschillend van, vooroordelen in historische beschrijving, of de interpretatie, analyse en verklaring van de geschiedenis. Een veel voorkomend voorbeeld van historische vooringenomenheid is de neiging om de wereld te bekijken vanuit een Westers of Europees perspectiefNIST, Towards a Standard for identifying and managing bias in artificial intelligence
activiteitenbiaseen soort selectievooroordeel dat optreedt wanneer systemen/platforms hun trainingsgegevens krijgen van de meest actieve gebruikers, in plaats van minder actieve (of inactieve) gebruikers.NIST, Towards a Standard for identifying and managing bias in artificial intelligence
versterkingsbiasontstaat wanneer de verdeling over voorspellingsoutputs scheef is in vergelijking met de prior-verdeling van het voorspellingsdoel.NIST, Towards a Standard for identifying and managing bias in artificial intelligence
cognitieve biaseen brede term die in het algemeen verwijst naar een systematisch patroon van afwijking van rationele oordeels- en besluitvorming. In vele decennia van onderzoek naar oordeelsvorming en besluitvorming is een grote verscheidenheid aan cognitieve vertekeningen geïdentificeerd, waarvan sommige adaptieve mentale snelkoppelingen zijn die bekend staan als heuristieken.NIST, Towards a Standard for identifying and managing bias in artificial intelligence
bevestigingsbiassoort menselijke cognitieve bias die de voorkeur geeft aan voorspellingen van AI-systemen die reeds bestaande overtuigingen of hypotheses bevestigenISO/IEC TR 24027:2021 en 4
implementatie biasontstaat wanneer systemen worden gebruikt als beslissingshulp voor mensen, omdat de menselijke tussenpersoon kan handelen op voorspellingen op manieren die meestal niet zijn gemodelleerd in het systeem. Het zijn echter nog steeds individuen die het gebruikte systeem gebruikenNIST, Towards a Standard for identifying and managing bias in artificial intelligence
evaluatie biasontstaat wanneer de test- of externe benchmarkpopulaties niet in gelijke mate de verschillende delen van de gebruikerspopulatie vertegenwoordigen of door het gebruik van prestatiemaatstaven die niet geschikt zijn voor de manier waarop het model zal worden gebruiktNIST, Towards a Standard for identifying and managing bias in artificial intelligence
meetbiasontstaat wanneer kenmerken en labels benaderingen zijn voor gewenste grootheden, waarbij mogelijk belangrijke factoren worden weggelaten of groeps- of ingangsafhankelijke ruis wordt geïntroduceerd die leidt tot differentiële prestaties.NIST, Towards a Standard for identifying and managing bias in artificial intelligence
representatie biasontstaat doordat subgroepen niet willekeurig worden geselecteerd in een steekproef, waardoor trends die voor één populatie worden geschat, niet generaliseerbaar zijn naar gegevens van een nieuwe populatieNIST, Towards a Standard for identifying and managing bias in artificial intelligence
+

Discriminatiegrond

+

De discriminatiegrond beschrijft de beschermde persoonskenmerken op basis waarvan het maken van onderscheid tussen personen verboden is. Deze gronden zijn in verschillende bronnen vastgelegd.

+

De grondwet

+

De Grondwet stelt dat discriminatie wegens:

+
    +
  • godsdienst
  • +
  • levensovertuiging
  • +
  • politieke gezindheid
  • +
  • ras
  • +
  • geslacht
  • +
  • handicap
  • +
  • seksuele gerichtheid
  • +
  • of op welke grond dan ook
  • +
+

niet is toegestaan.

+

De Algemene wet gelijke behandeling

+

De Algemene wet gelijke behandeling legt een verbod onderscheid neer op grond van:

+
    +
  • godsdienst
  • +
  • levensovertuiging
  • +
  • politieke gezindheid
  • +
  • ras
  • +
  • geslacht
  • +
  • nationaliteit
  • +
  • hetero- of homoseksuele gerichtheid 2
  • +
  • of burgelijke staat.
  • +
+

Het in deze wet neergelegde verbod van onderscheid geldt niet ten aanzien van indirect onderscheid indien dat onderscheid objectief gerechtvaardigd wordt door een legitiem doel en de middelen voor het bereiken van dat doel passend en noodzakelijk zijn.

+

Europees Verdrag voor de Rechten van de Mens

+

Het Europees Verdrag voor de Rechten van de Mens, artikel 14 stelt dat het genot van de rechten en vrijheden die in dat verdrag zijn vermeld, moet worden verzekerd zonder enig onderscheid op welke grond dan ook, zoals:

+
    +
  • geslacht
  • +
  • ras
  • +
  • kleur
  • +
  • taal
  • +
  • godsdienst
  • +
  • politieke of andere mening
  • +
  • nationale of maatschappelijke afkomst
  • +
  • het behoren tot een nationale minderheid
  • +
  • vermogen
  • +
  • geboorte
  • +
  • of andere status.
  • +
+

Handvest van de grondrechten van de Europese Unie

+

Het Handvest van de grondrechten van de Europese Unie, artikel 21 stelt dat iedere discriminatie, met name op grond van:

+
    +
  • geslacht
  • +
  • ras
  • +
  • kleur
  • +
  • etnische of sociale afkomst
  • +
  • genetische kenmerken
  • +
  • taal
  • +
  • godsdienst
  • +
  • politieke of andere denkbeelden
  • +
  • het behoren tot een nationale minderheid
  • +
  • vermogen
  • +
  • geboorte
  • +
  • een handicap
  • +
  • leeftijd
  • +
  • of seksuele gerichtheid
  • +
+

is verboden. Daarnaast wordt expliciet vermeld dat binnen de werkingssfeer van de Verdragen en onverminderd de bijzondere bepalingen ervan, iedere discriminatie op grond van nationaliteit verboden is.

+
+

Disclaimer

+

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

+
+

Vereisten

+
idVereisten
aia-04Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
avg-08Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
grw-02Algoritmes discrimineren niet
+ +

Maatregelen

+
idMaatregelen
imp-10Stel een protocol vast voor de situatie dat er (een vermoeden van) discriminatie door een algoritme is geconstateerd en pas dit wanneer nodig toe.
dat-07Gebruik bij machine learning technieken gescheiden train-, test- en validatiedata en houdt rekening met underfitting en overfitting.
ver-01Controleer regelmatig of het algoritme werkt zoals het bedoeld is
ver-01Toets het algoritme op bias
imp-02Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren
+ +

Mogelijke hulpmiddelen en methoden

+
Hulpmiddelen
The Fairness Handbook
Handreiking non-discriminatie by design
Discriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader
+ +
+
+
    +
  1. +

    Zie ISO/IEC TR 24027:2021 en 4 

    +
  2. +
  3. +

    Er is een wetsvoorstel om de term 'hetero- of homoseksuele gerichtheid' in de Algmemene wet gelijke behandeling (Awgb) te wijzigingen in 'seksuele gerichtheid'. Met deze wijziging sluit de Awgb aan bij een eerdere wijziging van artikel 1 van de Grondwet. 

    +
  4. +
  5. +

    Zie NEN-EN-ISO/IEC 22989:2023 en 4 

    +
  6. +
  7. +

    Hoewel het gebruik van de NEN-ISO-normen in het Algoritmekader auteursrechtelijk is beschermd, heeft het Nederlands Normalisatie Instituut (NEN) voor het gebruik in het Algoritmekader toestemming verleend. Zie nen.nl voor meer informatie over NEN en het gebruik van hun producten. 

    +
  8. +
  9. +

    De term ground truth impliceert niet dat de gelabelde invoergegevens consistent overeenkomen met de werkelijke waarde van de doelvariabelen. 

    +
  10. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/onderwerpen/data/index.html b/pr-preview/pr-478/onderwerpen/data/index.html new file mode 100644 index 0000000000..9b9e4a5369 --- /dev/null +++ b/pr-preview/pr-478/onderwerpen/data/index.html @@ -0,0 +1,1578 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Verantwoord datagebruik - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Verantwoord datagebruik

+

Overheden moeten verantwoord omgaan met de data die hun algoritmes gebruiken. De data moet voldoen aan regels voor bijvoorbeeld privacy. De kwaliteit van de data moet goed zijn. En overheden moeten deze gegevens goed beheren. Anders is het algoritme niet betrouwbaar.

+

Wat is verantwoord datagebruik?

+

Verantwoord datagebruik betekent:

+
    +
  • Rechtmatig gebruik van gegevens
  • +
  • Goede datakwaliteit
  • +
  • Goed databeheer
  • +
+

Rechtmatig gebruik van data

+

Net als organisaties mogen algoritmes niet zomaar gegevens verzamelen en gebruiken. Dit moet rechtmatig gebeuren: volgens de wettelijke regels. Zo moet je rekening houden met auteursrechten. Ook vóórdat het algoritme in gebruik is, moet je rechtmatig omgaan met data. Dus tijdens het trainen, valideren en testen.

+

Andere belangrijke regels gaan over privacy. Zo mag je algoritme alleen de minimale persoonsgegevens gebruiken die nodig zijn om het doel te bereiken. Technieken om dit te doen zijn:

+
    +
  • Anonimiseren: data zoveel mogelijk anoniem maken
  • +
  • Pseudonimiseren: data moeilijker herleidbaar maken naar personen
  • +
  • Aggregeren: data zoveel mogelijk combineren of samenvoegen tot 1 waarde, zoals een totaal of gemiddelde
  • +
+

Goede datakwaliteit

+

Hoe slechter de datakwaliteit, hoe onbetrouwbaarder de uitkomsten van je algoritme.

+

Je bepaalt en controleert zelf de kwaliteit van je dataset. Check bijvoorbeeld of alle gegevens juist, compleet en actueel zijn. En herken bias in je data.

+

Goed databeheer: datagovernance en datamanagement

+

Goed databeheer betekent dat je organisatie duidelijke afspraken maakt over het:

+
    +
  • opslaan en verwerken van data
  • +
  • gebruik van data: welke data mag je waarvoor gebruiken?
  • +
  • beveiligen van data
  • +
  • bewaken van de datakwaliteit, zoals het actueel houden van de gegevens
  • +
  • eigenaarschap van data, bijvoorbeeld de partij die het algoritme ontwikkelt
  • +
  • documenteren en labelen van data (metadata)
  • +
+

Leg de processen en afspraken hierover vast in de datagovernance van je organisatie. In een datamanagementstrategie beschrijf je hoe je organisatie data verzamelt, ordent en gebruikt. Zo kan je organisatie optimaal gebruikmaken van data.

+

Hoe goed je organisatie data beheert, check je met datavolwassenheidsmodellen uit de Toolbox verantwoord datagebruik van de Interbestuurlijke Datastrategie (IBDS). Of gebruik de beslishulp datavolwassenheid.

+

Belang van verantwoord datagebruik

+

Algoritmes kunnen veel schade veroorzaken in de maatschappij als ze de verkeerde gegevens gebruiken.

+

Met verantwoord datagebruik voorkom je:

+
    +
  • verkeerde beslissingen doordat je algoritme resultaten baseert op data van slechte kwaliteit
  • +
  • discriminerende effecten van algoritmes doordat je data bias bevat
  • +
  • lekken van privacygevoelige informatie, zoals persoonsgegevens
  • +
  • gebruik van data die niet rechtenvrij zijn, zoals teksten met auteursrechten
  • +
  • dat resultaten niet te reproduceren zijn, doordat de data niet goed is opgeslagen
  • +
+

Vereisten

+
idVereisten
aia-05Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-33AI-testomgevingen die persoonsgegevens verwerken, voldoen aan strenge voorwaarden
arc-01Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
aut-01Auteursrechten zijn beschermd
avg-09Betrokkenen kunnen een beroep doen op hun privacyrechten
dat-01Databanken worden alleen gebruikt met toestemming van de databank-producent
+ +

Maatregelen

+
idMaatregelen
owp-11Voer voorafgaand aan een project een data beschikbaarheid, kwaliteit- en toegankelijkheidsanalayse uit.
owp-02Beschrijf welke data gebruikt wordt voor de beoogde toepassing
owp-16Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output.
dat-01Controleer de datakwaliteit
dat-02Maak waardevolle data vindbaar, toegankelijk, interoperabel en herbruikbaar (FAIR) binnen en buiten de eigen organisatie.
dat-06Controleer de auteursrechten van eigen data
dat-07Gebruik bij machine learning technieken gescheiden train-, test- en validatiedata en houdt rekening met underfitting en overfitting.
dat-08Zorg dat je controle of eigenaarschap hebt over de data
dat-09Beperk de omvang van datasets voor energie-efficiëntie
imp-06Spreek af hoe de organisatie omgaat met privacy-verzoeken
mon-04Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme.
+ +

Hulpmiddelen

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/onderwerpen/duurzaamheid/index.html b/pr-preview/pr-478/onderwerpen/duurzaamheid/index.html new file mode 100644 index 0000000000..89e945e3f6 --- /dev/null +++ b/pr-preview/pr-478/onderwerpen/duurzaamheid/index.html @@ -0,0 +1,1475 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Duurzaam werken met algoritmes - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Duurzaam werken met algoritmes

+

Overheden moeten duurzaam werken met hun ICT, zoals algoritmes. Dit betekent dat je algoritmes inkoopt, ontwikkelt en gebruikt op een manier die vriendelijk is voor mens en milieu.

+

Wat is duurzaam werken met algoritmes?

+

Je werkt duurzaam met algoritmes als je tijdens de hele levenscyclus keuzes maakt die passen bij de duurzame en sociale doelen van de overheid:

+
    +
  • klimaatneutraal werken in 2030
  • +
  • 50% minder gebruik van grondstoffen direct uit de natuur (zoals olie, gas en lithium) in 2030
  • +
  • circulair werken in 2050: zonder afval, met alleen hergebruikte grondstoffen
  • +
  • meer banen voor mensen met een arbeidsbeperking
  • +
  • geen sociale misstanden in internationale productieketens, zoals slechte arbeidsomstandigheden of schending van mensenrechten
  • +
+

Om bij te dragen aan deze doelen, kies je bijvoorbeeld voor:

+
    +
  • energiezuinig programmeren
  • +
  • energiezuinig trainen van AI-systemen
  • +
  • dataopslag in een duurzaam of ‘groen’ datacenter
  • +
+

Belang van duurzaam werken

+

Algoritmes kunnen veel impact hebben op het milieu. De rekenkracht die algoritmes nodig hebben op computers kost elektriciteit. En de datacenters die nodig zijn voor het opslaan van data, verbruiken veel energie, water en grondstoffen. +Vooral complexe AI-systemen zoals Large Language Models (LLM’s) verbruiken veel energie door training en gebruik en door opslag van grote datasets in datacenters.

+

Vereisten

+
idVereisten
+ +

Maatregelen

+
idMaatregelen
owp-11Koop duurzaam algoritmes in
owp-12Ontwerp algoritmes zo eenvoudig mogelijk
dat-07Gebruik duurzame datacenters
dat-09Beperk de omvang van datasets voor energie-efficiëntie
owk-05Kies energiezuinige programmeermethoden
owk-06Optimaliseer AI-trainingsprocessen voor energie-efficiëntie
mon-05Meten, monitoren en rapporteren van milieu-impact van algoritmes
+ +

Help ons deze pagina te verbeteren

+

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/onderwerpen/fundamentele-rechten/index.html b/pr-preview/pr-478/onderwerpen/fundamentele-rechten/index.html new file mode 100644 index 0000000000..056b4d6d87 --- /dev/null +++ b/pr-preview/pr-478/onderwerpen/fundamentele-rechten/index.html @@ -0,0 +1,1497 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grondrechten beschermen in algoritmes - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Grondrechten beschermen in algoritmes

+

Als overheid moet je de grondrechten van burgers beschermen. Dit geldt ook als je algoritmes gebruikt voor publieke taken.

+

Wat is het beschermen van grondrechten in algoritmes?

+

Dit betekent dat je tijdens het ontwikkelen en gebruiken van algoritmes rekening houdt met de fundamentele rechten van de mens:

+ +

Belang van grondrechten beschermen

+

Algoritmes kunnen grondrechten schenden. Een bekend probleem is bias in algoritmes. Hierdoor worden resultaten onbetrouwbaar en kun je mensen ongelijk behandelen.

+

Belangrijke grondrechten die vaak worden geraakt door algoritmen zijn bijvoorbeeld:

+ +

Als overheid moet je hier goed op letten. Doe dit zo vroeg mogelijk in de levenscyclus. De maatregelen die we adviseren, beginnen al bij het ontwerpen en trainen van algoritmes.

+

Vereisten

+
idVereisten
aia-04Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
aia-28Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluiten
aia-29Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
aia-37Klachtrecht aanbieders verder in AI-waardeketen
avg-04Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
awb-01Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
grw-01Algoritmes schenden geen grondrechten of mensenrechten
+ +

Aanbevolen maatregelen

+
idMaatregelen
pba-04Overleg regelmatig met belanghebbenden
owp-06Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging
owp-07Maak een lijst van de meest kwetsbare groepen en bescherm hen extra
+ +

Hulpmiddelen

+
Hulpmiddelen
Assessment List for Trustworthy Artificial Intelligence (ALTAI)
De Ethische Data Assistent
Impact Assessment Mensenrechten en Algoritmes
The Fairness Handbook
Framework for Meaningful Engagement
Handreiking non-discriminatie by design
Discriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader
+ +

Help ons deze pagina te verbeteren

+

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/onderwerpen/governance/index.html b/pr-preview/pr-478/onderwerpen/governance/index.html new file mode 100644 index 0000000000..2592eb8669 --- /dev/null +++ b/pr-preview/pr-478/onderwerpen/governance/index.html @@ -0,0 +1,1571 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Governance van algoritmes binnen je organisatie - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Governance van algoritmes binnen je organisatie

+

Zorg voor effectieve governance van je algoritmes. Dit is het beleid van je organisatie voor het verantwoordelijk omgaan met algoritmes en AI-systemen. Leg bijvoorbeeld vast wie waarvoor verantwoordelijk is.

+

Wat is governance van algoritmes binnen je organisatie?

+

Algoritme-governance is de manier waarop je organisatie omgaat met algoritmes en AI-systemen. Je maakt duidelijke afspraken over processen, regels en verantwoordelijkheden.

+

Deze afspraken maak je op 2 niveaus:

+

Organisatieniveau

+

Hoe de organisatie met algoritmes in het algemeen omgaat, bijvoorbeeld:

+
    +
  • richtlijnen en gedragscode voor medewerkers
  • +
  • strategie en visie
  • +
  • werkwijze
  • +
  • teamleden en hun verantwoordelijkheden, zoals chief data officers en algoritmefunctionarissen
  • +
+

Toepassingsniveau

+

Dit zijn afspraken over het beheer van de algoritmes zelf, bijvoorbeeld:

+
    +
  • best practices
  • +
  • multidisciplinair ontwikkelen
  • +
  • AI-levenscyclusmodellen
  • +
+

Belang van algoritme-governance

+

Zonder governance verlies je grip op het inkopen, ontwikkelen, gebruiken en uitfaseren van algoritmes en AI. Dit vergroot het risico op overtredingen van wetten en regels zoals de AI-verordening, Grondwet, Algemene Verordening Gegevensbescherming (AVG) en Auteurswet.

+

Goede governance van algoritmes helpt bij het:

+
    +
  • correct uitvoeren van wetten en regels
  • +
  • toepassen van je eigen strategie, doelstellingen en publieke waarden
  • +
+

Aanpak algoritme-governance

+

Algoritme-governance bepaal je zelf als organisatie.

+

Houd in elk geval rekening met:

+ +
+

[!TIP] +Zorg dat iemand verantwoordelijk is voor algoritme-governance. En betrek stakeholders.

+
+

Vereisten

+
idVereisten
aia-01Personeel en gebruikers zijn voldoende AI-geletterd
aia-01Verboden AI-systemen mogen niet worden gebruikt.
aia-02Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd
aia-03Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
aia-11Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-14Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure
aia-15Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring
aia-17Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank
aia-20Hoog-risico-AI-systemen worden gebruikt volgens de gebruiksaanwijzing
aia-21Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkheden
aia-25Gebruiksverantwoordelijken controleren de registratie van het hoog-risico AI-systeem in de EU-databank
aia-28Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluiten
aia-31Als AI-modellen voor algemene doeleinden met systeemrisico’s ernstige incidenten veroorzaken, wordt dit gedocumenteerd en gerapporteerd
aia-32AI-modellen voor algemene doeleinden met systeemrisico’s zijn voldoende beveiligd tegen cyberaanvallen
aia-35Ernstige incidenten door hoog-risico-AI-systemen worden gemeld aan de toezichthouder
aia-36Klokkenluiders kunnen veilig melden dat een organisatie zich niet houdt aan de AI-verordening
aut-01Auteursrechten zijn beschermd
avg-06Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken
+ +

Aanbevolen maatregelen

+
idMaatregelen
org-01Bepaal of er genoeg experts beschikbaar zijn
org-04Stel beleid op voor een verantwoorde inzet van algoritmes binnen de organisatie.
org-03Maak een plan voor het omgaan met risico’s
org-04Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid.
org-05Sluit algoritmegovernance aan op bestaande governancestructuren binnen de organisatie.
org-06Gebruik een algoritme volwassenheidsmodel om te weten waar de organisatie staat
org-07Richt een algoritmegovernance in met three lines of defence
org-08Maak gebruik van beslismomenten in de algoritmelevenscyclus
org-09Richt algoritmegovernance op basis van de risicoclassificatie van algoritmes.
org-10Taken en verantwoordelijkheden zijn toebedeeld in de algoritmegovernance
org-11Maak afspraken over het beheer van gebruikers
org-12Controleer en verbeter regelmatig de kwaliteit van het algoritme
org-13Maak afspraken over het beheer van wachtwoorden
org-14Maak afspraken over het wijzigen van de code
pba-01Beschrijf het probleem dat het algoritme moet oplossen
pba-02Beschrijf het doel van het algoritme
pba-03Beschrijf waarom een algoritme het probleem moet oplossen
pba-04Overleg regelmatig met belanghebbenden
pba-05Beschrijf de wettelijke grondslag voor de inzet van het algoritme
owp-01Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmes
owp-05Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horen
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
org-02Pas vastgestelde beleidskaders toe
owk-02Maak een noodplan voor het stoppen van het algoritme
ver-03Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleid
imp-03Richt de juiste menselijke controle in van het algoritme
imp-06Spreek af hoe de organisatie omgaat met privacy-verzoeken
imp-05Spreek af hoe medewerkers omgaan met het algoritme.
imp-09Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme en monitor dit proces.
imp-01Maak een openbaar besluit over de inzet van het algoritme
mon-03Maak een noodplan voor beveiligingsincidenten
+ +

Aanbevolen hulpmiddelen

+
Hulpmiddelen
Onderzoekskader algoritmes Auditdienst Rijk 2023
Toetsingskader Algoritmes Algemene Rekenkamer
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/onderwerpen/index.html b/pr-preview/pr-478/onderwerpen/index.html new file mode 100644 index 0000000000..46a831463e --- /dev/null +++ b/pr-preview/pr-478/onderwerpen/index.html @@ -0,0 +1,1338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Onderwerpen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Onderwerpen

+
+
    +
  • +

    Bias en non-discriminatie

    +
    +

    Hulp bij het voorkomen van bias en discriminatie in algoritmes. Met aanbevelingen en hulpmiddelen zoals het toetsingskader van het College voor de Rechten van de Mens.

    +
  • +
  • +

    Data

    +
    +

    Hulp bij het verantwoord selecteren en verwerken van data voor je algoritmes. Gebruik bijvoorbeeld de toolbox verantwoord datagebruik.

    +
  • +
  • +

    Duurzaamheid

    +
    +

    Hulp bij het maken van duurzame keuzes voor hardware en software. Bijvoorbeeld voor de aanschaf van apparaten of het energieverbruik van trainen en data-opslag.

    +
  • +
  • +

    Governance

    +
    +

    Hulp bij het verantwoordelijk omgaan met algoritmes. Bijvoorbeeld het vastleggen van rollen en verantwoordelijkheden.

    +
  • +
  • +

    Grondrechten

    +
    +

    Hulp bij het beschermen van grondrechten en mensenrechten in algoritmes. Bijvoorbeeld het beoordelen van de gevolgen per grondrecht.

    +
  • +
  • +

    Menselijke controle

    +
    +

    Hulp bij de controle als mens over algoritmes. Bijvoorbeeld kunnen ingrijpen bij onbetrouwbare resultaten.

    +
  • +
  • +

    Privacy en gegevensbescherming

    +
    +

    Hulp bij verantwoord gebruik van gegevens voor algoritmes, zoals persoonsgegevens en privacygevoelige gegevens.

    +
  • +
  • +

    Publieke inkoop

    +
    +

    Hulp bij het publiek inkopen van software met algoritmen en AI. Met hulpmiddelen zoals modelcontracten en de PIANOo-handreiking Inkoop van algoritmes.

    +
  • +
  • +

    Technische robuustheid en veiligheid

    +
    +

    Hulp bij het bewaken van de prestaties van algoritmes. En beveiliging van de systemen tegen bijvoorbeeld cyberaanvallen.

    +
  • +
  • +

    Transparantie

    +
    +

    Hulp bij transparant zijn over algoritmes, zoals gebruikers informeren en publiceren in het algoritmeregister.

    +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/onderwerpen/menselijke-controle/index.html b/pr-preview/pr-478/onderwerpen/menselijke-controle/index.html new file mode 100644 index 0000000000..35bb3d5293 --- /dev/null +++ b/pr-preview/pr-478/onderwerpen/menselijke-controle/index.html @@ -0,0 +1,1650 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Menselijke controle over algoritmes - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Menselijke controle over algoritmes

+

Algoritmes van de overheid moeten onder controle blijven van mensen. Presteert het algoritme niet goed, dan moet een mens dit kunnen aanpassen of stoppen.

+

Wat is menselijke controle?

+

Menselijke controle over een algoritme of AI-systeem betekent dat mensen invloed hebben op de uitkomsten. Mensen moeten het ontwerp van het algoritme kunnen aanpassen. En mensen moeten het algoritme kunnen stoppen. Zo kun je op tijd ingrijpen als er iets fout gaat.

+

Belang van menselijke controle

+

Algoritmes kunnen schade veroorzaken in de maatschappij. Gebruik je een algoritme voor een publieke taak, dan moet je dit continu op een of andere manier controleren.

+

Ontwerp

+

Tijdens het ontwerp van een algoritme of AI-systeem controleer je bijvoorbeeld of het algoritme op de juiste manier ‘getraind’ wordt. Maakt het bijvoorbeeld gebruik van een goede dataset, zonder bias, die representatief is voor de samenleving? En je controleert of het algoritme bepaalde groepen niet benadeelt.

+

Voordat je een algoritme gaat gebruiken, is het belangrijk om het doel te bepalen.

+

Gebruik

+

Tijdens het gebruik van een algoritme is menselijke controle belangrijk omdat de werking verandert in de loop der tijd:

+
    +
  • Situaties kunnen veranderen. Het algoritme kan daarvan niet op de hoogte zijn. Een routeplanner kent bijvoorbeeld niet alle werkzaamheden of veranderingen aan de wegen.
  • +
  • AI-systemen leren soms nog bij. En soms is het niet duidelijk op welke data de uitkomsten gebaseerd zijn. Een beeldherkenningssysteem herkent bijvoorbeeld honden op foto’s op basis van de achtergrond in plaats van de hond zelf.
  • +
  • Nieuwe mogelijkheden ontstaan door technologische ontwikkelingen. Zo maken leerlingen en studenten massaal gebruik van large language modellen (LLM’s) zoals ChatGPT.
  • +
+

Mensen

+

Er is maatschappelijke consensus dat alleen natuurlijke personen in staat zijn om een goede (ethische) afweging te maken over wanneer en welke controle nodig is. Menselijke controle kan je dus niet automatiseren. Mensen mogen zich hierbij wel laten helpen door computers of andere technologie.

+

Aanpak menselijke controle

+

Je kunt op verschillende manieren controle houden over de prestaties van een algoritme:

+
    +
  • Technische controle: Controle uitoefenen op het algoritme zelf. Je bepaalt bijvoorbeeld dat een AI-systeem alleen mag 'bijleren’ wanneer de data voldoet aan bepaalde voorwaarden voor sociale representativiteit.
  • +
  • Contextuele controle: Controle van de omgeving van het algoritme. Je verbiedt bijvoorbeeld dat je organisatie het algoritme gebruikt in situaties met een hoog risico op schade.
  • +
  • Controle door kennis: Je probeert de werking en risico’s van je algoritmes zo goed mogelijk te begrijpen. Gaat het om een AI-systeem, dan heb je ook voldoende kennis over AI nodig.
  • +
+

Wanneer en hoe je controle uitoefent, hangt af van het soort algoritme en risico, de levenscyclusfase van je project en je expertise.

+

Bepaal in elk geval zo vroeg mogelijk wie in welke levenscyclusfase verantwoordelijk is voor menselijke controle. En beschrijf dit in een RACI-matrix of VERI-matrix. Want menselijke controle is nodig in verschillende fases, door verschillende mensen. Er is nooit 1 persoon verantwoordelijk voor de totale controle.

+

Tijdens het gebruik kun je menselijke controle op de volgende manieren uitoefenen:

+
    +
  • Human in the loop: Een mens moet de acties starten van het algoritme. Het werkt niet uit zichzelf.
  • +
  • Human on the loop: Mensen kunnen acties stoppen van het algoritme.
  • +
  • Human above the loop: Mensen houden overzicht en kunnen ingrijpen bij strategische en ethische beslissingen.
  • +
  • Human before the loop: Het algoritme interpreteert morele modellen die mensen vooraf bedenken. Deze oplossing is bedoeld voor volledig autonome algoritmes. Dit zijn algoritmes die zelf beslissingen moeten nemen, bijvoorbeeld door tijdsdruk.
  • +
+

Feedback

+

Na het bepalen van de manier van controleren, bepaal je de manier waarop je feedback krijgt over het algoritme: Wat voor soort informatie moet bij wie terechtkomen? Aan wie moet een gebruiker bijvoorbeeld rapporteren dat het AI-systeem niet meer goed werkt?

+

Vereisten

+
idVereisten
aia-01Personeel en gebruikers zijn voldoende AI-geletterd
aia-09Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-18Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
aia-19Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-21Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkheden
aia-22De werking van hoog-risico-AI-systemen wordt gemonitord
aia-36Klokkenluiders kunnen veilig melden dat een organisatie zich niet houdt aan de AI-verordening
+ +

Aanbevolen maatregelen

+
idMaatregelen
org-12Controleer en verbeter regelmatig de kwaliteit van het algoritme
pba-03Beschrijf waarom een algoritme het probleem moet oplossen
owk-02Maak een noodplan voor het stoppen van het algoritme
imp-01Stel een werkinstructie op voor gebruikers.
imp-03Richt de juiste menselijke controle in van het algoritme
imp-05Spreek af hoe medewerkers omgaan met het algoritme.
+ +

Hulpmiddelen

+
Hulpmiddelen
Assessment List for Trustworthy Artificial Intelligence (ALTAI)
Framework for Meaningful Engagement
+ +

Help ons deze pagina te verbeteren

+

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/onderwerpen/privacy-en-gegevensbescherming/index.html b/pr-preview/pr-478/onderwerpen/privacy-en-gegevensbescherming/index.html new file mode 100644 index 0000000000..15798a116d --- /dev/null +++ b/pr-preview/pr-478/onderwerpen/privacy-en-gegevensbescherming/index.html @@ -0,0 +1,1415 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Privacy en gegevensbescherming - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Privacy en gegevensbescherming

+ +

Overheidsinstanties verwerken vaak persoonsgegevens om hun taken uit te voeren en maatschappelijke waarden te creëren. Met de opkomst van algoritmes en kunstmatige intelligentie (AI) worden deze gegevens steeds vaker gebruikt om processen te optimaliseren, zoals bij het beoordelen van subsidieaanvragen of het verlenen van vergunningen.

+

Bij het gebruik van algoritmes is van groot belang om aandacht te besteden aan privacy en gegevensbescherming. Deze technologieën variëren van eenvoudige rekenregels tot complexe machine learning-modellen en generatieve AI, elk met hun eigen specifieke risico’s. +Bijvoorbeeld, eenvoudige AI kan basisberekeningen uitvoeren, terwijl complexere AI-voorspellingen kan doen of informatie kan genereren. Ongeacht de complexiteit is het identificeren van risico’s en het implementeren van passende beheersmaatregelen essentieel om de privacy van burgers te waarborgen en gevoelige gegevens te beschermen.

+

Bij de inzet van AI in de publieke sector moeten overheidsinstanties rekening houden met de vereisten uit privacywetgeving, zoals de Algemene Verordening Gegevensbescherming (AVG). Dit omvat onder andere het minimaliseren van gegevensgebruik, implementeren van een privacy by design werkwijze waar mogelijk, en het transparant zijn over hoe en waarom (persoons)gegevens worden verwerkt. +Het toewijzen van verantwoordelijkheden en het opstellen van duidelijke richtlijnen voor gegevensverwerking zijn belangrijke stappen in dit proces.

+

Het bouwblok privacy en gegevensbescherming van algoritmes wordt ook geïntegreerd in de algoritmelevenscyclus. +Dit biedt inzicht in wanneer specifieke vereisten en maatregelen tijdens de ontwikkeling van algoritmes moeten worden toegepast. +Door deze vereisten in de levenscyclus te integreren, kunnen de gebruikers inzichten opdoen wanneer deze maatregelen kunnen worden geïmplementeerd.

+

Vereisten

+
idVereisten
aia-33AI-testomgevingen die persoonsgegevens verwerken, voldoen aan strenge voorwaarden
avg-01Persoonsgegevens worden op een rechtmatige manier verwerkt
avg-02Persoonsgegevens worden zo kort mogelijk bewaard
avg-03Persoonsgegevens worden zo min mogelijk verwerkt
avg-04Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
avg-05Persoonsgegevens zijn juist en actueel
avg-06Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken
avg-07Organisaties zijn transparant over het verwerken van persoonsgegevens
avg-08Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
avg-09Betrokkenen kunnen een beroep doen op hun privacyrechten
avg-10Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
avg-11Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-12Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
avg-13Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
+ +

Maatregelen

+
idMaatregelen
owp-03Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag
owp-09Een model-verwerkersovereenkomst is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt
owp-14Maak het opstellen van een verwerkersovereenkomst onderdeel van de aanbesteding als persoonsgegevens worden verwerkt.
dat-04Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure
dat-05Bescherm persoonsgegevens door data te anonimiseren, pseudonimiseren of te aggregeren
owk-03Analyseer de privacy-risico’s en neem maatregelen om deze risico’s laag te houden
imp-06Spreek af hoe de organisatie omgaat met privacy-verzoeken
imp-07Vermeld het gebruik van persoonsgegevens in een privacyverklaring
imp-08Vermeld het gebruik van persoonsgegevens in het verwerkingsregister
+ +

Hulpmiddelen

+
Hulpmiddelen
Assessment List for Trustworthy Artificial Intelligence (ALTAI)
Data Protection Impact Assessment
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/onderwerpen/publieke-inkoop/index.html b/pr-preview/pr-478/onderwerpen/publieke-inkoop/index.html new file mode 100644 index 0000000000..0b7e94c217 --- /dev/null +++ b/pr-preview/pr-478/onderwerpen/publieke-inkoop/index.html @@ -0,0 +1,1487 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Publieke inkoop - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Publieke inkoop

+ +

Door middel van publieke inkoop wordt door overheidsinstellingen software ingekocht. Deze software wordt ingekocht om ambtenaren te ondersteunen met hun werkzaamheden om zo maatschappelijk waarden te creëren. Het kan bijvoorbeeld gaan om het inkopen van een systeem waarmee een aanvraag voor een subsidie of vergunning kan worden behandeld. Het virtueel vergaderen of het digitaal samenwerken aan documenten zijn hier ook voorbeelden van.

+
+

Disclaimer

+

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

+
+

Software wordt vaak ontwikkeld door gespecialiseerde aanbieders en bevat steeds meer algoritmes. Het komt ook voor dat de overheid deze technologie zelf ontwikkelt. Deze algoritmes kunnen eenvoudig van aard zijn, zoals het maken van een eenvoudige berekening. Zij kunnen complexer van aard zijn, zoals een voorspelling geven of het genereren van informatie. In het laatste geval kan worden gedacht aan ChatGPT, Google Bard of Co-Pilot. +Er zijn verschillende type technologieën die vallen onder het bereik van algoritmes. In dit kader drukken we deze uit als ‘rekenregel’, ‘machine learning’ en ‘generatieve AI’. Elke technologie heeft eigen bijzondere aandachtspunten. Ook de bijbehorende risico’s kunnen per type verschillen. Het identificeren van deze risico’s en het treffen van beheersmaatregelen is daarbij van belang. Dat geldt in het bijzonder als algoritmes bijdragen aan de totstandkoming van overheidsbesluitvorming en impactvolle beslissingen die burgers en ondernemingen raken.

+

Door bij publieke inkoop van software met algoritmes rekening te houden met vereisten die voorkomen uit wet- en regelgeving, toepassen van publieke waarden, het type algoritme of AI en de potentiële risico’s die ontstaan bij het gebruiken ervan, kunnen negatieve gevolgen worden voorkomen. Publieke inkoop speelt daarom een belangrijke rol bij de totstandkoming van verantwoord ontwikkelde algoritmes en het gebruik daarvan door ambtenaren. +In dit deel van het Algoritmekader wordt nader ingegaan op deze vereisten. Er worden suggesties gedaan hoe deze vereisten kunnen worden nageleefd en welke rollen daarbij betrokken kunnen zijn. Waar mogelijk worden concrete voorbeelden uit de praktijk gegeven en zal worden aangegeven bij welk type algoritmes dit relevant is.

+

Het publiek inkopen van algoritmes wordt ook gekoppeld aan de algoritme levenscyclus. Dit geeft een beeld van wanneer bepaalde vereisten en maatregelen, bij het ontwikkelen van algoritmes, moeten worden geadresseerd. Door deze vereisten ook te vertalen naar het inkoopproces, zullen de rollen binnen het inkoopproces beter in staat zijn om te duiden wanneer en hoe dit kan worden geadresseerd. Dit moet bijdragen aan een goed samenspel met aanbieders, zodat de kansen van algoritmes worden benut en de negatieve gevolgen worden voorkomen.

+

Algoritme levenscyclus

+

Algoritmes kunnen een grote impact hebben op onze maatschappij. Daarom is het van belang dat deze op een verantwoorde manier worden ontwikkeld en gebruikt. Het toepassen van de algoritme levenscyclus is hierover een bruikbare leidraad. De algoritme levenscyclus bestaat uit meerdere fasen. De werkzaamheden die noodzakelijk zijn om een verantwoord algoritme of AI te ontwikkelen, kunnen logisch worden gekoppeld aan deze fasen. +Deze levenscyclus kan worden gebruikt voor alle typen algoritmes. Het verschilt uiteraard wel per type wat moet worden gedaan en dit is mede afhankelijk van de risico classificatie. Bij hoog risico toepassing zal meer moeten worden gedaan om risico’s te mitigeren dan als er sprake is van lage risico toepassingen. De levenscyclus geeft een bruikbaar overzicht voor leveranciers en opdrachtgevers wanneer welke werkzaamheden moeten worden uitgevoerd. Het laat ook zien welke werkzaamheden moeten zijn afgerond als algoritmes in de markt mogen worden gezet en klaar zijn voor gebruik.

+

Bij het publiek inkopen van software met bijbehorende algoritmes zijn de wensen van de behoeftesteller en de doelstellingen van de organisatie van groot belang. Dit kan tot verschillende situaties leiden:

+

• Een al ontwikkelde kant-en-klare oplossing voldoet direct aan deze wensen en doelstellingen;

+

• Een al ontwikkelde oplossing moet eerst worden aangepast voordat deze kan worden gebruikt;

+

• Er moet een nieuwe oplossing worden ontwikkeld om te voldoen aan de wensen.

+

Deze inschatting is dus bepalend wat wel en niet van een product mag worden verwacht. Dit is relevant voor zowel de leverancier als de opdrachtgever. Het is aannemelijk dat als het om risicovolle (nog te ontwikkelen) algoritmes gaat, de opdrachtgever een intensieve bijdrage moet leveren aan de samenwerking om het product te kunnen gebruiken. De opdrachtgever zal bijvoorbeeld moeten aangeven wat de juridische en ethische grenzen zijn van de uiteindelijk werking van het algoritme of AI. Als een kant-en-klare oplossing wordt afgenomen, dan zal de leverancier moeten laten zien dat de ontwikkelde algoritmes voldoen aan alle vereisten en moet dit kunnen aantonen.

+

De inzichten uit de algoritme levenscyclus kunnen ondersteunen bij bijvoorbeeld de behoeftestelling, het maken van make-or-buy beslissingen, de te hanteren aanbestedingsvorm, de totstandkoming van de selectie- en gunningseisen, contractspecificaties en de uitvoering en management van het contract. De algoritme levenscyclus kan worden geraadpleegd via het tabblad boven aan deze pagina. Per fase en per type algoritme of AI kan worden bekeken aan welke vereisten moet worden voldaan en welke beheersmaatregelen kunnen worden getroffen.

+

Vereisten

+

Nagenoeg alle vereisten die gelden voor algoritmes kunnen een plek krijgen in het publiek inkoopproces. +Daarom is ervoor gekozen om hier niet een opsomming te geven van al deze vereisten, maar verwijzen we naar het onderdeel vereisten in het Algoritmekader.

+

In de laag van 'maatregelen' wordt ook uitgewerkt wat vanuit publieke inkoop kan worden gedaan om op een betekenisvolle wijze invulling aan te geven aan de betreffende vereiste. +Daarvoor kan ook op het tabblad 'publieke inkoop' worden geklikt om deze maatregelen te filteren.

+

Zie hieronder bij bruikbare informatie en bronnen in het bijzonder de Europese modelcontractbepaling voor (niet) hoog risico AI-systemen en contractvoorwaarden voor algoritmes. +Dit geeft een beeld hoe de vereisten onderdeel kunnen worden gemaakt van contractvoorwaarden.

+

Maatregelen

+

Hieronder volgt een overzicht van de maatregelen die (voor zover zijn uitgewerkt) kunnen worden getroffen om invulling te geven aan de vereisten.

+
idMaatregelen
owp-11Voer voorafgaand aan een project een data beschikbaarheid, kwaliteit- en toegankelijkheidsanalayse uit.
owp-05Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horen
owp-09Een model-verwerkersovereenkomst is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt
owp-09Stel een multidisciplinair team samen bij het ontwikkelen of inkopen van algoritmes.
owp-11Koop duurzaam algoritmes in
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-14Maak het opstellen van een verwerkersovereenkomst onderdeel van de aanbesteding als persoonsgegevens worden verwerkt.
owp-15Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving.
owp-16Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output.
owp-17Aansprakelijkheidsvoorwaarden van een aanbieder worden beoordeeld in de aanbesteding
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-20Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke.
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-22Bepaal in een aanbesteding of algoritmes van een aanbieder bepalende invloed hebben in een besluit richting personen
owp-23Laat de aanbieder aangeven welke mate van opleiding en ondersteuning bij de implementatie nodig is om de beoogde algoritmes verantwoord te gebruiken.
owp-24Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstraject
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owp-27Maak (contractuele) afspraken over data en artefacten met een aanbieder
imp-10Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.
dat-08Zorg dat je controle of eigenaarschap hebt over de data
+ +
+

Disclaimer

+

Het Algoritmekader is nog volop in ontwikkeling. Er wordt momenteel hard gewerkt, mede door de Werkgroep Publieke Inkoop, om maatregelen te definiëren vanuit het perspectief publieke inkoop bij de vereisten. Mocht er iets niet kloppen, laat het ons weten via GitHub of via algoritmes@minbzk.nl.

+
+

Hulpmiddelen

+

Hieronder volgt een overzicht van instrumenten die kunnen worden gebruikt om invulling te geven aan de vereisten en maatregelen.

+
Hulpmiddelen
Inkoopvoorwaarden
+ +

Bruikbare informatie en bronnen

+

Europese modelcontractbepalingen AI-systemen (hoog risico)

+

Europese modelcontractbepalingen AI-systemen (niet hoog risico)

+

Contractvoorwaarden voor algoritmes gemeente Amsterdam

+

Inkoopproces

+

Community of Practise Digitale Innovatie

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/onderwerpen/technische-robuustheid-en-veiligheid/index.html b/pr-preview/pr-478/onderwerpen/technische-robuustheid-en-veiligheid/index.html new file mode 100644 index 0000000000..9e01a65b17 --- /dev/null +++ b/pr-preview/pr-478/onderwerpen/technische-robuustheid-en-veiligheid/index.html @@ -0,0 +1,1754 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Technische robuustheid en veiligheid - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Technische robuustheid en veiligheid

+

Algoritmes van de overheid moeten robuust en veilig zijn. Dit betekent dat je algoritmes in elke situatie goed presteren, ook als er iets onverwachts gebeurt. Gaat er toch iets mis, dan is er een noodplan.

+

Wat is technisch robuust en veilig?

+

Een technisch robuust en veilig algoritme presteert onder elke omstandigheid zoals het bedoeld is.

+

Een robuust algoritme is:

+
    +
  • Nauwkeurig: Het algoritme geeft de juiste uitkomst voor het gewenste doel, of meldt dat de uitkomst onzeker is.
  • +
  • Betrouwbaar: Ook in nieuwe of onverwachte situaties geeft het algoritme de juiste uitkomst.
  • +
  • Reproduceerbaar: In dezelfde situaties vertoont het algoritme hetzelfde gedrag.
  • +
+

Een algoritme is veilig onder deze omstandigheden:

+
    +
  • Geautoriseerde toegang: Alleen personen en systemen met toestemming kunnen het algoritme gebruiken of beheren.
  • +
  • Confidentieel: Het algoritme kan geen vertrouwelijke of gevoelige informatie lekken door aanvallen.
  • +
  • Integer: Kwaadwillenden kunnen nergens in de levenscyclus van het algoritme onbedoeld de controle van het model overnemen.
  • +
  • Beschikbaar: Je kunt op elk moment het algoritme gebruiken waarvoor het bedoeld is. Gaat dit toch fout, dan ontstaat er geen grote schade.
  • +
+

Belang van robuuste, veilige algoritmes

+

Algoritmes kunnen grote schade veroorzaken aan de maatschappij. Met een technisch robuust en goed beveiligd algoritme voorkom je:

+
    +
  • onverwachte schadelijke uitkomsten, zoals verkeerde beslissingen of discriminatie door onvoldoende nauwkeurigheid
  • +
  • uitval van het systeem
  • +
  • lekken van informatie, zoals persoonsgegevens
  • +
  • gebruik van het algoritme voor verkeerde doelen
  • +
  • schade door misbruik of aanvallen van buitenaf
  • +
+

Gebruik algoritmes op de juiste manier

+

Gebruik een algoritme alleen voor het juiste doel en op de juiste manier. Dit is de manier die is getest en gecontroleerd. Wanneer je het algoritme gebruikt voor een ander doel of in een verkeerde context, zijn de resultaten niet meer betrouwbaar.

+

Voorkom dat medewerkers op de verkeerde manier werken met het algoritme. Zij moeten weten wat het algoritme wel en niet kan. En wat ze moeten doen als het algoritme fouten maakt of niet goed werkt. Denk aan technische en organisatorische ondersteuning:

+
    +
  • Leid medewerkers op.
  • +
  • Maak duidelijke afspraken over werkprocessen (governance).
  • +
  • Stuur gebruikers in het juiste gebruik via interactie en technische verbeteringen in het ontwerp.
  • +
+

Controleer regelmatig

+

Begin zo vroeg mogelijk met regelmatige controles van de uitkomst en werking van het algoritme. In de praktijk verandert de omgeving en de situatie waarin het algoritme wordt gebruikt. Controleer daarom regelmatig of het algoritme nog werkt zoals het is bedoeld.

+

Voorbeeld

+

Een algoritme leest kentekens tijdens parkeercontroles. Het herkent de juiste letters en cijfers op elk kenteken. Ook als het bord een andere kleur heeft, op een andere plek zit of vies is. Het algoritme is nauwkeurig en dus robuust.

+

Een algoritme berekent het risico op fraude door mensen. Maar bij personen uit dezelfde groep geeft het algoritme de ene keer als uitkomst ‘hoog risico’ en de andere keer ‘geen risico’. De uitkomst is niet reproduceerbaar. Hierdoor is het algoritme niet robuust.

+

Controles voorbereiden

+

Bereid de controles voor tijdens de levenscyclusfases probleemanalyse, ontwerp en dataverkenning en datapreparatie. Onderzoek de situatie waarin je organisatie het algoritme gaat gebruiken: Wat zijn de risico’s? Welke onderdelen van het algoritme moet je evalueren? Analyseer de kwaliteit en variatie van de data. Bedenk maatregelen waarmee je de risico’s zoveel mogelijk voorkomt. En bedenk met welke methode je de controles gaat evalueren.

+

Ontwikkel je het algoritme zelf, controleer dan tijdens de ontwikkeling al wat er gebeurt in de verschillende situaties die je verwacht. Experimenteer met nieuwe combinaties van de inputdata en gebruik verschillende representatieve test-sets.

+

Controles uitvoeren

+

Voer de controles uit tijdens de ontwikkelfase en de verificatie- en validatiefase. Test het algoritme goed. Evalueer hoe robuust en veilig het algoritme is. Verbeter het algoritme waar nodig. En monitor goed welke data het algoritme gebruikt, zodat je veranderingen in die data snel signaleert. Maak een noodplan voor als blijkt dat het algoritme niet meer werkt zoals het bedoeld was.

+

Blijf regelmatig controleren tijdens de fases implementatie en monitoring en beheer. Dit zijn de fases waarin je het algoritme gebruikt. Presteert het algoritme niet goed, los het probleem dan op of stop het gebruik.

+
+

[!TIP] +Houd rekening met concept drift. Dit betekent dat de eigenschappen van je data in de loop van de tijd kunnen veranderen. Hierdoor trekt je algoritme mogelijk verkeerde conclusies. Zo was er vóór 2020 een verband tussen thuiswerken en ziek zijn. Maar sinds de coronacrisis in 2020 is dit verband minder sterk, omdat gezonde mensen vaker thuiswerken.

+
+

Bescherm algoritmes tegen aanvallen en bedreigingen

+

Beveilig het ICT-systeem waarin het algoritme wordt gebruikt. Dit zijn bijvoorbeeld maatregelen uit de Baseline Informatiebeveiliging Overheid (BIO) die je standaard neemt voor beveiliging van ICT-systemen tegen cyberaanvallen.

+

Beveilig de algoritmes zelf tegen cybercriminelen. Belangrijke bedreigingen voor algoritmes zijn:

+
    +
  • Trainingsdata van een AI-model aanpassen, waardoor het later fouten gaat maken tijdens het gebruik.
  • +
  • Input van een algoritme aanpassen om het normale gedrag te omzeilen, of om het algoritme specifieke, ongewenste output te laten geven.
  • +
  • Een ‘achterdeurtje’ inbouwen met toegang tot het algoritme, waardoor aanvallers het algoritme kunnen misbruiken.
  • +
  • Intellectueel eigendom of kwetsbaarheden afleiden uit de details van een AI-model.
  • +
  • Gevoelige informatie afleiden uit de eigenschappen van trainingsdata.
  • +
+

Lees meer in het TNO-rapport Verkenning van het raakvlak cybersecurity en AI.

+

Aandachtspunten voor het beschermen van algoritmes tegen specifieke dreigingen:

+
    +
  • Controleer of de trainingsdata geschikt, correct en betrouwbaar is.
  • +
  • Controleer of de inputdata geschikt, correct en betrouwbaar is.
  • +
  • Houd bij complexe algoritmes rekening met verborgen en onwenselijke functionaliteiten.
  • +
  • Train je algoritme om bestand te zijn tegen aanvallen.
  • +
  • Stimuleer veilig gebruik van het algoritme door gebruikers.
  • +
  • Maak afspraken met leveranciers en controleer de geleverde algoritmes voor gebruik.
  • +
  • Test periodiek of het algoritme weerbaar is tegen bekende aanvallen.
  • +
+

Hiermee voorkom je:

+
    +
  • misleiding, doordat het algoritme niet werkt op de bedoelde manier
  • +
  • verkeerde implementatie en daardoor een verkeerde werking
  • +
+

Begin zo vroeg mogelijk met beveiligen. Beveilig in elk geval in de fases ontwikkelen, verificatie en validatie, implementatie, monitoring en beheer en uitfaseren.

+

Verklein de kans op schade

+

Veroorzaak zo min mogelijk schade als het toch fout gaat. En maak een noodplan voor incidenten. Het doel van dit plan is ervoor zorgen dat de fout zo min mogelijk gevolgen heeft voor de organisatie en de maatschappij. In het plan staat bijvoorbeeld wie wat moet doen als het systeem uitvalt.

+

Vereisten

+
idVereisten
aia-06Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-07Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
aia-10Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-12Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder
aia-13Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder
aia-18Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
aia-19Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-23Logs voor hoog-risico-AI-systemen worden bewaard door de gebruiksverantwoordelijke
aia-32AI-modellen voor algemene doeleinden met systeemrisico’s zijn voldoende beveiligd tegen cyberaanvallen
aia-34Hoog-risico-AI-systemen zijn voorzien van een monitoringsysteem
avg-12Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
bio-01Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
+ +

Aanbevolen maatregelen

+
idMaatregelen
org-11Maak afspraken over het beheer van gebruikers
org-13Maak afspraken over het beheer van wachtwoorden
org-14Maak afspraken over het wijzigen van de code
owp-04Beschrijf welke techniek gebruikt wordt voor de beoogde toepassing
owp-10Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes
owp-24Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstraject
dat-04Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure
dat-07Gebruik bij machine learning technieken gescheiden train-, test- en validatiedata en houdt rekening met underfitting en overfitting.
owk-01Ontwerp en ontwikkel het algoritme volgens de principes van ‘security by design’
owk-04Maak logbestanden waarin staat wie wanneer toegang had tot de data en de code
ver-01Controleer regelmatig of het algoritme werkt zoals het bedoeld is
imp-02Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren
mon-01Maak back-ups van algoritmes
mon-02Beveilig de software
mon-03Maak een noodplan voor beveiligingsincidenten
mon-04Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme.
+ +

Hulpmiddelen

+
Hulpmiddelen
Assessment List for Trustworthy Artificial Intelligence (ALTAI)
Baseline Informatiebeveiliging Overheid (BIO)
+ +

Bronnen

+ +

Help ons deze pagina te verbeteren

+

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/onderwerpen/transparantie/index.html b/pr-preview/pr-478/onderwerpen/transparantie/index.html new file mode 100644 index 0000000000..5f23e5fbd3 --- /dev/null +++ b/pr-preview/pr-478/onderwerpen/transparantie/index.html @@ -0,0 +1,1606 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Transparant zijn over algoritmes - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Transparant zijn over algoritmes

+

Overheden moeten transparant zijn over hun algoritmes. Dit betekent dat je duidelijke informatie geeft over de algoritmes die je ontwikkelt of gebruikt.

+

Wanneer ben je transparant?

+

Je draagt bij aan transparantie over algoritmes als je duidelijk uitlegt:

+
    +
  • dat je algoritmes ontwikkelt of gebruikt
  • +
  • voor welk doel je deze algoritmes ontwikkelt of gebruikt
  • +
  • wat voor soort algoritmes dit zijn
  • +
  • welke code of programmeertaal je hiervoor gebruikt
  • +
  • welke data je hiervoor gebruikt
  • +
  • hoe uitkomsten tot stand komen
  • +
  • hoe belanghebbenden bezwaar kunnen maken tegen gevolgen van het algoritme
  • +
+

Belang van transparantie

+

Als je open bent over de algoritmes die je ontwikkelt of gebruikt, kunnen burgers en bedrijven zich beter verdedigen tegen mogelijke nadelige gevolgen. Verkeerd gebruik van algoritmes kan iemands leven namelijk ernstig beïnvloeden. Bijvoorbeeld door discriminatie of een besluit dat niet klopt.

+

Door uit te leggen hoe het algoritme werkt, kun je de beslissingen van het algoritme makkelijker controleren. Je leert sneller waarom het bepaalde keuzes maakt en waar de zwakke plekken zitten.

+

Ook je organisatie is makkelijker te controleren. Omdat je transparant bent over algoritmes, kunnen burgers feedback geven. Journalisten zien wat je doet. En andere overheden kunnen hiervan leren.

+

Aanpak transparant werken

+

Hoe je transparantie organiseert, hangt af van:

+
    +
  • het doel van je algoritme
  • +
  • het soort algoritme waarmee je werkt
  • +
  • wie de gebruikers zijn van het algoritme, bijvoorbeeld medewerkers of burgers
  • +
  • de vereisten waar je aan moet voldoen
  • +
  • de maatregelen die je neemt
  • +
  • de doelgroep die je wil bereiken
  • +
  • de levenscyclus-fase van je algoritme
  • +
+

Onderzoek goed welk soort algoritme je gebruikt of wil gebruiken. Hoe groter de impact en het risico, hoe strenger de vereisten.

+

De keuze voor het soort algoritme bepaalt ook hoe transparant je kunt zijn. Van rekenregels kun je namelijk precies uitleggen hoe deze tot een beslissing komen. Maar complexe AI-systemen zijn vaak een black box: niemand weet precies hoe deze systemen beslissingen maken. Volledige transparantie is dan niet mogelijk. In dat geval moet je de werking zo goed mogelijk onderzoeken. Probeer bijvoorbeeld in elk geval ernstige gevolgen zoals discriminatie te voorkomen.

+
+

Tip

+

Rekenregels zijn makkelijker uit te leggen dan AI-systemen. Als een rekenregel voldoende is voor het bereiken van je doel, dan is het ook makkelijker om transparant te zijn.

+
+

Betrokken partijen

+

Stem je informatie af op de betrokken partij. Zo moeten gebruikers de uitkomst van het algoritme voldoende begrijpen voor het nemen van onderbouwde beslissingen. En belanghebbenden zoals burgers moeten weten dat zij te maken hebben met een algoritme. Zij moeten snel en makkelijk kunnen vinden wat hun rechten zijn en hoe zij in beroep kunnen gaan.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DoelgroepInformeer bijvoorbeeld overGeef de informatie bijvoorbeeld via:
Ontwikkelaarde werking, keuzes van het ontwikkelteamtechnische documentatie
Gebruikerhoe uitkomsten tot stand komen, gebruikte data, wat het algoritme wel en niet kangebruiksinstructies, trainingen
Medewerkercontactpersonen, algoritmegebruik binnen de organisatie, afspraken over algoritmemanagement (ook wel: algoritmegovernance)intern algoritmeregister, trainingen
Belanghebbende (iemand voor wie het algoritme gevolgen heeft)hoe een besluit tot stand kwam, mogelijkheden om bezwaar te maken, contactmogelijkhedenbrief over het besluit, webpagina over het algoritme
Geïnteresseerde burgeralgoritmegebruik binnen de organisatiewebpagina over het algoritme, algoritmeregister
Auditorwerking, ontwikkelproces, keuzes van het ontwikkelteam, hoe uitkomsten tot stand komenalgoritmeregister, technische documentatie, programmeercode
Onderzoeker of journalistalgoritmegebruik binnen de organisatiealgoritmeregister, technische documentatie, code
+

Vereisten

+
idVereisten
aia-02Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd
aia-06Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-08Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-16Hoog-risico-AI-systemen zijn voorzien van een CE-markering
aia-17Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank
aia-24Werknemers weten dat hun organisatie een hoog-risico AI-systeem gebruikt
aia-25Gebruiksverantwoordelijken controleren de registratie van het hoog-risico AI-systeem in de EU-databank
aia-28Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluiten
aia-28AI-systemen worden zo ontworpen en gebruikt, dat mensen begrijpen wanneer zij met een AI-systeem communiceren en welke content gemaakt is door een AI-systeem
aia-29AI-modellen voor algemene doeleinden zijn voorzien van voldoende technische documentatie en informatie
aia-30Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico treffen extra maatregelen
aia-31Als AI-modellen voor algemene doeleinden met systeemrisico’s ernstige incidenten veroorzaken, wordt dit gedocumenteerd en gerapporteerd
arc-01Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
avg-07Organisaties zijn transparant over het verwerken van persoonsgegevens
awb-02Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
bzk-01Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister
woo-01Iedereen kan openbare informatie over algoritmes vinden of aanvragen
+ +

Aanbevolen maatregelen

+
idMaatregelen
org-04Stel beleid op voor een verantwoorde inzet van algoritmes binnen de organisatie.
org-04Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid.
pba-01Beschrijf het probleem dat het algoritme moet oplossen
pba-02Beschrijf het doel van het algoritme
pba-05Beschrijf de wettelijke grondslag voor de inzet van het algoritme
owp-08Bepaal welke documenten voor hoe lang gearchiveerd moeten worden
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-20Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke.
owp-22Bepaal in een aanbesteding of algoritmes van een aanbieder bepalende invloed hebben in een besluit richting personen
pba-04Stel vast welke betrokkenen geïnformeerd moeten worden en welke informatie zij nodig hebben.
owp-07Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.
imp-10Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.
org-02Pas vastgestelde beleidskaders toe
ver-03Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleid
imp-01Stel een werkinstructie op voor gebruikers.
imp-04Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister
imp-07Vermeld het gebruik van persoonsgegevens in een privacyverklaring
imp-08Vermeld het gebruik van persoonsgegevens in het verwerkingsregister
imp-01Maak een openbaar besluit over de inzet van het algoritme
+ +

Hulpmiddelen

+
Hulpmiddelen
Assessment List for Trustworthy Artificial Intelligence (ALTAI)
Impact Assessment Mensenrechten en Algoritmes
Algoritmeregister
Framework for Meaningful Engagement
+ +

Help ons deze pagina te verbeteren

+

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/overhetalgoritmekader/CONTRIBUTING/index.html b/pr-preview/pr-478/overhetalgoritmekader/CONTRIBUTING/index.html new file mode 100644 index 0000000000..847966a344 --- /dev/null +++ b/pr-preview/pr-478/overhetalgoritmekader/CONTRIBUTING/index.html @@ -0,0 +1,1174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bijdragen aan het Algoritmekader - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Bijdragen aan het Algoritmekader

+

Allereerst, bedankt dat je de tijd hebt genomen om een bijdrage te leveren! ❤️

+

We waarderen alle soorten bijdragen enorm. Zie die Inhoudsopgave voor verschillende manieren waarop je kan bijdragen aan het Algoritmekader. +Zorg ervoor dat je de relevante hoofdstukken even leest voordat je een bijdrage levert.
+Het zal het voor het team van het Algoritmekader een stuk makkelijker maken en de ervaring voor alle betrokkenen soepeler laten verlopen. +We kijken uit naar alle bijdragen! 🎉

+
+

Opmerking

+

Werken in Github is voor het team Algoritmekader nieuw en experimenteel. +Dit vraagt voor ons om een aangepaste werkwijze en hier is bepaalde expertise voor nodig. +Het begin is gemaakt en het team Algoritmekader is nog lerende om hier optimaal invulling aan te geven. +Hierdoor kan het iets langer duren voordat er wordt gereageerd op suggesties of toevoegingen. +We werken aan een duidelijk proces om hier goed mee om te gaan (deze guidelines zijn daar een voorbeeld van). +Daarnaast werken we niet aan alle bouwblokken tegelijk. Deze worden één voor één opgepakt. +Aanbevelingen over onderwerpen die later op de planning staan kunnen daardoor ook iets langer duren om te verwerken, en worden mogelijk pas verwerkt wanneer dit bouwblok wordt uitgewerkt.

+
+

Inhoudsopgave

+ +

Code of Conduct

+

Dit project en iedereen die eraan deelneemt, valt onder de +Code of Conduct. +Door deel te nemen, wordt van je verwacht dat je je aan deze code houdt. Meld onacceptabel gedrag +aan algoritmes@minbzk.nl.

+

Ik heb een vraag

+

Maak een issue aan

+

Voordat je een Issues gaat aanmaken, kan je bekijken of jouw vraag al tussen de bestaande Issues staat. Wellicht staat er al een issue tussen die jou vraag kan beantwoorden.

+

Als je jouw vraag nog steeds wilt stellen, kan je een Issue aanmaken.

+
    +
  1. Gebruik daarvoor de knop new issue.
  2. +
  3. Schrijf je vraag of opmerking is en geef een heldere toelichting.
  4. +
  5. Anderen kunnen nu opmerkingen toevoegen aan jouw issue.
  6. +
  7. Het team van het Algoritmekader zal deze issue labelen als question en pakt jouw issue zo snel mogelijk op. Mogelijk neemt het team van het Algoritmekader contact op voor een verduidelijking of een oplossing.
  8. +
+

Stel een vraag via mail

+

Je kan je vragen ook altijd stellen door een mail te sturen naar algoritmes@minbzk.nl.

+

Ik wil iets bijdragen

+

Er zijn verschillende manieren waarop je kan bijdragen. Zie hieronder de mogelijkheden.

+
+

Ter kennisgeving

+

Wanneer je bijdraagt aan dit project, moet je ermee akkoord gaan dat je 100% van de inhoud hebt geschreven, dat je de benodigde rechten op de inhoud hebt en dat de inhoud die je bijdraagt mag worden geleverd onder de Code of Conduct.

+
+

Sluit je aan bij een werkgroep

+

Voor sommige bouwblokken wordt er gewerkt met werkgroepen, om de informatie verder uit te werken. Deelname aan een werkgroep kost tijd. Werkgroepen komen regelmatig bij elkaar, en tussendoor worden bepaalde zaken uitgewerkt door werkgroepleden. Wil je op één van de onderwerpen meewerken? Stuur dan een bericht naar algoritmes@minbzk.nl.

+

Neem deel aan een sprint review / klankbord / demo

+

Het team van het algoritmekader werkt in sprints van ongeveer 3 weken. Daarin werken we toe naar de volgende release van het Algoritmekader. Ongeveer eens in de 6 weken vindt er een nieuwe release plaats. Wanneer er een release is, wordt deze altijd toegelicht en gepresenteerd in een open online review / demo. Deze kan je vrijblijvend volgen. Zo blijf je op de hoogte en kun je een bijdrage leveren. Bekijk de agenda op Algoritmes Pleio voor de komende bijeenkomsten.

+

Ik wil een fout of bug melden

+

Heb je een foutje gevonden in het Algoritmekader? Dan kan je deze melden door een Issue aan te maken.

+

Voordat je een Issues gaat aanmaken, kan je bekijken of jouw gevonden fout al tussen de bestaande Issues staat.

+

Als je de gevonden fout nog steeds wilt melden, kan je een Issue aanmaken.

+
    +
  1. Gebruik daarvoor de knop new issue.
  2. +
  3. Beschrijf de fout duidelijk en geef een heldere toelichting. Voeg waar mogelijk een screenshot toe.
  4. +
  5. Het team van het Algoritmekader zal deze issue labelen als bug en pakt jouw issue zo snel mogelijk op. Mogelijk neemt het team van het Algoritmekader contact op voor een verduidelijking of een oplossing.
  6. +
+

Ik wil een verbetering voorstellen

+

Heb je een suggestie of wil je een verbetering voorstellen? Dat kan gaan om een compleet nieuwe functionaliteit van de site of om kleine verbeteringen. Het volgen van onderstaande instructie helpt het team van het algoritmekader om je suggestie te begrijpen en gerelateerde suggesties te vinden.

+

Je kan een suggestie doen door een Issue aan te maken of door een Pull Request te maken.

+

Voordat je een suggestie gaat maken

+
    +
  • Voordat je een suggestie gaat maken, kan je bekijken of jouw suggestie al tussen de bestaande Issues staat. Wellicht bestaat er al een issue die jouw suggestie beschrijft, en zijn we er al mee bezig.
  • +
  • Zoek uit of jouw idee past binnen het doel en de scope van het project. Wat zijn de voordelen van deze functionaliteit of toevoeging? Het is aan jou om het team van het Algoritmekader en de community te overtuigen dat dit een nuttige toevoeging is aan het Algoritmekader. Houd in gedachten dat we functioanliteiten willen die nuttig zijn +voor de meerderheid van onze gebruikers en niet slechts voor een kleine groep.
  • +
+

Een issue aanmaken

+

Als je jouw suggestie nog steeds wilt doen, kan je een Issue aanmaken.

+
    +
  1. Gebruik daarvoor de knop new issue.
  2. +
  3. Beschrijf duidelijk jouw suggestie en geef een heldere toelichting en onderbouwing waarom dit een goede toevoeging zal zijn aan het Algoritmekader
  4. +
  5. Het team van het Algoritmekader zal deze issue labelen als enhancement en pakt jouw issue zo snel mogelijk op. Mogelijk neemt het team van het Algoritmekader contact op voor een verduidelijking of een oplossing.
  6. +
+
+

Afhankelijk van de complexiteit en het onderwerp van jouw suggestie kan het even duren voordat deze wordt opgepakt door het team van het Algoritmekader.

+
+

Een pull-request maken

+

Kun je niet uit de voeten met de issues? +Bijvoorbeeld omdat je verschillende wijzigingsvoorstellen wilt doen? Je kan ook gebruik maken van een Fork en een Pull Request.

+

Het team van Algoritmekader bekijkt daarna jouw aanpassingen en kan bij akkoord jouw aanpassingen mergen. Er zijn ook andere manieren om een pull request te doen. Meer daarover.

+
+

Afhankelijk van de complexiteit en het onderwerp van jouw suggestie kan het even duren voordat deze wordt opgepakt door het team van het Algoritmekader.

+

Preview van een pull-request

+

We maken gebruik van de tool pr-preview-action om automatisch previews te maken van een pull-request. +Dit maakt het mogelijk om de wijzigingen die zijn gedaan in een pull-request al te bekijken in de uiteindelijke omgeving. +Wanneer er een pull-request gedaan wordt via een fork, leidt dit helaas tot een error, zie Issue #79. Dit blokkeert de pull-request niet.

+
+

Hoe we werken op Github

+

We werken met Markdown bestanden. +Dit is bestandsformaat voor platte tekstbestanden en wordt door veel verschillende tools ondersteund. Dit maakt het eenvoudig om versiebeheer op het Algoritmekader toe te passen.

+

Daarnaast maken gebruik van mkdocs en material for mkdocs om de informatie op een interactieve wijze inzichtelijk te maken op de website van het Algoritmekader.

+

Wil je een nieuwe pagina aanmaken?

+

In het mkdocs.yml bestand staan de settings voor deze website. +In principe hoef je hier niets aan aan te passen, maar als je een nieuwe pagina wilt aanmaken kan het nodig zijn om hier een aanpassing in te doen. +Onderdeel van deze settings is namelijk de navigatie voor de site (welke pagina's zijn zichtbaar, en welke pagina's vallen daaronder). Dit staat in de nav: sectie. +Indien je een nieuwe pagina wilt toevoegen, is het vaak nodig deze wijziging ook door te voeren in het mkdocs.yml bestand.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/overhetalgoritmekader/definities/index.html b/pr-preview/pr-478/overhetalgoritmekader/definities/index.html new file mode 100644 index 0000000000..39f6654223 --- /dev/null +++ b/pr-preview/pr-478/overhetalgoritmekader/definities/index.html @@ -0,0 +1,1310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Woordenlijst - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + +
+ + + + + + + + +

Woordenlijst

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BegripDefinitie
aanbiederEen natuurlijke of rechtspersoon, overheidsinstantie, agentschap of ander orgaan die/dat een AI-systeem of een AI-model voor algemene doeleinden ontwikkelt of laat ontwikkelen en dat systeem of model in de handel brengt of het AI-systeem in gebruik stelt onder de eigen naam of merk, al dan niet tegen betaling.
aanbieder verder in de AI-waardeketenEen aanbieder van een AI-systeem, met inbegrip van een AI-systeem voor algemene doeleinden, waarin een AI-model is geïntegreerd, ongeacht of het AI-model door hemzelf wordt verstrekt en verticaal geïntegreerd is of door een andere entiteit wordt aangeboden op basis van contractuele betrekkingen
aangemelde instantieEen conformiteitsbeoordelingsinstantie die overeenkomstig de AI-verordening en andere relevante harmonisatiewetgeving van de Unie is aangemeld
aanmeldende autoriteitDe nationale autoriteit die verantwoordelijk is voor het opzetten en uitvoeren van de noodzakelijke procedures voor de beoordeling, aanwijzing en kennisgeving van de conformiteitsbeoordelingsinstanties en de monitoring hiervan
AI-bureauDe taak van de Commissie waarbij zij bijdraagt aan de uitvoering van, de monitoring van en het toezicht op AI-systemen en AI-modellen voor algemene doeleinden, en AI-governance, als bepaald in het besluit van de Commissie van 24 januari 2024; verwijzingen in deze verordening naar het AI-bureau worden begrepen als verwijzingen naar de Commissie
AI-geletterdheidVaardigheden, kennis en begrip die aanbieders, gebruiksverantwoordelijken en betrokken personen, rekening houdend met hun respectieve rechten en plichten in het kader van de de AI-verordening, in staat stellen met kennis van zaken AI-systemen in te zetten en zich bewuster te worden van de kansen en risico’s van AI en de mogelijke schade die zij kan veroorzaken
AI-model voor algemene doeleindenEen AI-model, ook wanneer het is getraind met een grote hoeveelheid data met behulp van self-supervision op grote schaal, dat een aanzienlijk algemeen karakter vertoont en in staat is op competente wijze een breed scala aan verschillende taken uit te voeren, ongeacht de wijze waarop het model in de handel wordt gebracht, en dat kan worden geïntegreerd in een verscheidenheid aan systemen verder in de AI-waardeketen of toepassingen verder in de AI-waardeketen, met uitzondering van AI-modellen die worden gebruikt voor onderzoek, ontwikkeling of prototypingactiviteiten alvorens zij in de handel worden gebracht.
AI-systeemeen op een machine gebaseerd systeem dat is ontworpen om met verschillende niveaus van autonomie te werken en dat na het inzetten ervan aanpassingsvermogen kan vertonen, en dat, voor expliciete of impliciete doelstellingen, uit de ontvangen input afleidt hoe output te genereren zoals voorspellingen, inhoud, aanbevelingen of beslissingen die van invloed kunnen zijn op fysieke of virtuele omgevingen;
AI-systeem voor algemene doeleindenEen AI-systeem dat is gebaseerd op een AI-model voor algemene doeleinden en dat verschillende doeleinden kan dienen, zowel voor direct gebruik als voor integratie in andere AI-systemen
AI-testomgeving voor regelgevingEen door een bevoegde autoriteit opgezet gecontroleerd kader dat aanbieders of toekomstige aanbieders van AI-systemen de mogelijkheid biedt een innovatief AI-systeem te ontwikkelen, trainen, valideren en testen, zo nodig onder reële omstandigheden, volgens een testomgevingsplan, voor een beperkte periode en onder begeleiding van een toezichthouder.
algoritmeEen set van regels en instructies die een computer geautomatiseerd volgt bij het maken van berekeningen om een probleem op te lossen of een vraag te beantwoorden
auteursrechtHet auteursrecht is het uitsluitend recht van den maker van een werk van letterkunde, wetenschap of kunst, of van diens rechtverkrijgenden, om dit openbaar te maken en te verveelvoudigen, behoudens de beperkingen, bij de wet gesteld.
AVGAlgemene Verordening Gegevensbescherming
AwbAlgemene wet bestuursrecht
beoogd doelHet gebruik waarvoor een AI-systeem door de aanbieder is bedoeld, met inbegrip van de specifieke context en voorwaarden van het gebruik, zoals gespecificeerd in de informatie die door de aanbieder in de gebruiksinstructies, reclame- of verkoopmaterialen en verklaringen, alsook in de technische documentatie is verstrekt
Besluit (Awb)Een schriftelijke beslissing van een bestuursorgaan, inhoudende een publiekrechtelijke rechtshandeling
bijzondere categorieën persoonsgegevensDe categorieën persoonsgegevens als bedoeld in artikel 9, lid 1, van Verordening (EU) 2016/679, artikel 10 van Richtlijn (EU) 2016/680 en artikel 10, lid 1, van Verordening (EU) 2018/1725
biometrische gegevensPersoonsgegevens die het resultaat zijn van een specifieke technische verwerking met betrekking tot de fysieke, fysiologische of gedragsgerelateerde kenmerken van een natuurlijk persoon, zoals gezichtsafbeeldingen of vingerafdrukgegevens
biometrische identificatieDe geautomatiseerde herkenning van fysieke, fysiologische, gedragsgerelateerde of psychologische menselijke kenmerken om de identiteit van een natuurlijk persoon vast te stellen door biometrische gegevens van die persoon te vergelijken met in een databank opgeslagen biometrische gegevens van personen
biometrische verificatieDe geautomatiseerde één-op-éénverificatie, met inbegrip van de authenticatie, van de identiteit van natuurlijke personen door hun biometrische gegevens te vergelijken met eerder verstrekte biometrische gegevens
capaciteiten met een grote impactCapaciteiten die overeenkomen met of groter zijn dan de capaciteiten die worden opgetekend bij de meest geavanceerde AI-modellen voor algemene doeleinden.
CE-markeringEen markering waarmee een aanbieder aangeeft dat een AI-systeem in overeenstemming is met de voorschriften van hoofdstuk III, afdeling 2, van de AI-Verordening en andere toepasselijke harmonisatiewetgeving van de Unie, die in het aanbrengen ervan voorzien
conformiteitsbeoordelingHet proces waarbij de naleving wordt aangetoond van de voorschriften van hoofdstuk III, afdeling 2 van de AI-Verordening in verband met een AI-systeem met een hoog risico
deepfakeDoor AI gegenereerd of gemanipuleerd beeld-, audio- of videomateriaal dat een gelijkenis vertoont met bestaande personen, voorwerpen, plaatsen, entiteiten of gebeurtenissen, en door een persoon ten onrechte voor authentiek of waarheidsgetrouw zou worden aangezien
direct onderscheidIndien een persoon op een andere wijze wordt behandeld dan een ander in een vergelijkbare situatie wordt, is of zou worden behandeld, op grond van godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, nationaliteit, hetero- of homoseksuele gerichtheid of burgerlijke staat;
directe discriminatieDe ongelijke behandeling van een persoon of groep personen ten opzichte van andere personen in een vergelijkbare situatie, op grond van een beschermd persoonskenmerk (discriminatiegrond).
discriminatiegrondBeschermde persoonskenmerken op basis waarvan het maken van onderscheid tussen personen verboden is. Bijvoorbeeld: ras, nationaliteit, religie, geslacht, seksuele gerichtheid, handicap of chronische ziekte.
distributeurEen andere natuurlijke persoon of rechtspersoon in de toeleveringsketen dan de aanbieder of de importeur, die een AI-systeem in de Unie op de markt aanbiedt
downstreamaanbiederEen aanbieder van een AI-systeem, met inbegrip van een AI-systeem voor algemene doeleinden, waarin een AI-model is geïntegreerd, ongeacht of het model door hemzelf wordt verstrekt en verticaal geïntegreerd is of door een andere entiteit wordt aangeboden op basis van contractuele betrekkingen
etnisch profilerenHet gebruik door overheidsinstanties van selectiecriteria als ras, huidskleur, taal, religie, nationaliteit of nationale of etnische afkomst bij de uitoefening van toezichts-, handhavings- en opsporingsbevoegdheden, zonder dat daarvoor een objectieve en redelijke rechtvaardiging bestaat
geharmoniseerde normEen geharmoniseerde norm zoals gedefinieerd in artikel 2, lid 1,punt c), van Verordening (EU) nr. 1025/2012
gemeenschappelijke specificatieeen reeks technische specificaties zoals gedefinieerd in artikel 2, punt 4, van Verordening (EU) nr. 1025/2012, om te voldoen aan bepaalde voorschriften zoals vastgelegd in de AI-verordening
gebruiksinstructiesde door de aanbieder verstrekte informatie om de gebruiksverantwoordelijke te informeren over met name het beoogde doel en juiste gebruik van een AI-systeem
gebruiksverantwoordelijkeEen natuurlijke of rechtspersoon, overheidsinstantie, agentschap of ander orgaan die/dat een AI-systeem onder eigen verantwoordelijkheid gebruikt, tenzij het AI-systeem wordt gebruikt in het kader van een persoonlijke niet- beroepsactiviteit.
geharmoniseerde normEen Europese norm die op verzoek van de Commissie is vastgesteld met het oog op de toepassing van harmonisatiewetgeving van de Unie
geïnformeerde toestemmingDe vrijelijk gegeven, specifieke, ondubbelzinnige en vrijwillige uiting door een proefpersoon van zijn of haar bereidheid deel te nemen aan een bepaalde test onder reële omstandigheden, na geïnformeerd te zijn over alle aspecten van de test die van belang zijn voor zijn of haar beslissing om deel te nemen
gemachtigdeEen natuurlijke of rechtspersoon die zich bevindt of gevestigd is in de Unie die een schriftelijke machtiging heeft gekregen en aanvaard van een aanbieder van een AI-systeem of een AI-model voor algemene doeleinden om namens die aanbieder de verplichtingen en procedures van deze verordening respectievelijk na te komen en uit te voeren;
gemeenschappelijke specificatieEen reeks technische specificaties zoals gedefinieerd in artikel 2, punt 4, van Verordening (EU) nr. 1025/2012, om te voldoen aan bepaalde voorschriften zoals vastgelegd in deze verordening
gevoelige operationele gegevensOperationele gegevens met betrekking tot activiteiten op het gebied van preventie, opsporing, onderzoek of vervolging van strafbare feiten waarvan de openbaarmaking de integriteit van strafprocedures in het gedrang zou kunnen brengen
governanceGovernance gaat over de inrichting van een organisatie en daar bijbehorende processen, regels, gebruiken en bijbehorende verantwoordelijkheden
importeurEen natuurlijke of rechtspersoon die zich bevindt of gevestigd is in de Unie die een AI-systeem in de handel brengt dat de naam of merknaam van een in een derde land gevestigde natuurlijke of rechtspersoon draagt
in de handel brengenHet voor het eerst in de Unie op de markt aanbieden van een AI-systeem of een AI-model voor algemene doeleinden
in gebruik stellenDe directe levering van een AI-systeem door de aanbieder aan de gebruiksverantwoordelijke voor het eerste gebruik of voor eigen gebruik in de Unie voor het beoogde doel
indirect onderscheidIndien een ogenschijnlijk neutrale bepaling, maatstaf of handelwijze personen met een bepaalde godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, nationaliteit, hetero- of homoseksuele gerichtheid of burgerlijke staat in vergelijking met andere personen bijzonder treft.
indirecte discriminatieWanneer een ogenschijnlijk neutrale bepaling, maatstaf of handelwijze personen met een bepaald beschermd persoonskenmerk (discriminatiegrond) in vergelijking met andere personen in het bijzonder benadeelt, tenzij hiervoor een objectieve rechtvaardiging bestaat.
inputdataData die in een AI-systeem worden ingevoerd of direct door een AI-systeem worden verworven en op basis waarvan het systeem een output genereert
kritieke infrastructuurKritieke infrastructuur zoals gedefinieerd in artikel 2, punt 4, van Richtlijn (EU) 2022/2557
legaliteitsbeginselHet legaliteitsbeginsel houdt in dat alle overheidsoptreden moet berusten op een overeenstemmen met - kenbare en voldoende specifieke - algemene regels.
markttoezichtautoriteitDe nationale autoriteit die de activiteiten verricht en maatregelen neemt als bedoeld in Verordening (EU) 2019/1020
nationale bevoegde autoriteitEen aanmeldende autoriteit of een de markttoezichtautoriteit; wat betreft AI-systemen die door instellingen, organen en instanties van de EU in gebruik worden gesteld of worden gebruikt, worden verwijzingen naar nationale bevoegde autoriteiten of markttoezichtautoriteiten in deze verordening begrepen als verwijzingen naar de Europese Toezichthouder voor gegevensbescherming
normEen norm is een vrijwillige afspraak tussen partijen over een product, dienst of proces. Normen zijn geen wetten, maar ’best practices’. Iedereen kan - op vrijwillige basis - hier zijn voordeel mee doen. In zakelijke overeenkomsten hebben normen een belangrijke functie. Ze bieden marktpartijen duidelijkheid over en vertrouwen in producten, diensten of organisaties en dagen de maatschappij uit te innoveren. NEN-normen worden ontwikkeld door inhoudsexperts en specialisten op het gebied van normontwikkeling.
normalisatieNormalisatie is het proces om te komen tot een norm. Dit proces is open, transparant en gericht op consensus en vindt plaats in normcommissies die bestaan uit vertegenwoordigers van alle betrokken partijen. Dit gebeurt niet alleen op nationaal niveau, maar ook in Europees en mondiaal verband.
objectieve rechtvaardigingVan een objectieve rechtvaardiging voor onderscheid is sprake wanneer onderscheid een legitiem doel nastreeft en er een redelijke relatie van evenredigheid bestaat tussen het gemaakte onderscheid en het nagestreefde doel.
op de markt aanbiedenHet in het kader van een handelsactiviteit, al dan niet tegen betaling, verstrekken van een AI-systeem of een AI-model voor algemene doeleinden met het oog op distributie of gebruik op de markt van de Unie
operatorEen aanbieder, productfabrikant, gebruiksverantwoordelijke, gemachtigde, importeur of distributeur
prestaties van een AI-systeemHet vermogen van een AI-systeem om het beoogde doel te verwezenlijken
plan voor testen onder reële omstandighedenEen document waarin de doelstellingen, methode, geografische reikwijdte, betrokken personen, duur, monitoring, organisatie en wijze van uitvoering van een test onder reële omstandigheden worden omschreven
proceseigenaarDe proceseigenaar is verantwoordelijk voor de kwaliteit van het proces en de vastlegging daarvan in een processchema
proefpersoonIn het kader van tests onder reële omstandigheden: een natuurlijk persoon die deelneemt aan een test onder reële omstandigheden
profileringElke vorm van geautomatiseerde verwerking van persoonsgegevens waarbij aan de hand van persoonsgegevens bepaalde persoonlijke aspecten van een natuurlijke persoon worden geëvalueerd, met name met de bedoeling zijn beroepsprestaties, economische situatie, gezondheid, persoonlijke voorkeuren, interesses, betrouwbaarheid, gedrag, locatie of verplaatsingen te analyseren of te voorspellen. Het gaat om een verwerking door een individu met gebruikmaking van diens persoonsgegevens in te delen in een categorie (profiel), vaak in verband met aan dat profiel toegedichte risico's.
publieke inkoopDe verwerving van werken, leveringen of diensten door een overheid of publieke organisatie, van de markt of een andere externe instantie, terwijl zij tegelijkertijd publieke waarde creëren en waarborgen vanuit het perspectief van de eigen organisatie.
rechtsgevolgEen verandering in het geheel van de rechten, aanspraken, bevoegdheden en verplichtingen van één of meer natuurlijke personen of rechtspersonen
redelijkerwijs te voorzien misbruikHet gebruik van een AI-systeem op een wijze die niet in overeenstemming is met het beoogde doel, maar die kan voortvloeien uit redelijkerwijs te voorzien menselijk gedrag of redelijkerwijs te voorziene interactie met andere systemen, waaronder andere AI-systemen
risicoDe combinatie van de kans op schade en de ernst van die schade;
substantiële wijzigingEen verandering van een AI-systeem nadat dit in de handel is gebracht of in gebruik is gesteld, die door de aanbieder niet is voorzien of gepland in de initiële conformiteitsbeoordeling en als gevolg waarvan de overeenstemming van het AI-systeem met de voorschriften van hoofdstuk III, afdeling 2, AI-Verordening wordt beïnvloed, of die leidt tot een wijziging van het beoogde doel waarvoor het AI-systeem is beoordeeld
systeem voor monitoring na het in de handel brengenAlle door aanbieders van AI-systemen verrichte activiteiten voor het verzamelen en evalueren van ervaringen met door hen in de handel gebrachte of in gebruik gestelde AI-systemen, teneinde te kunnen vaststellen of er onmiddellijk corrigerende dan wel preventieve maatregelen nodig zijn
systeem voor het herkennen van emotiesEen AI-systeem dat is bedoeld voor het vaststellen of afleiden van de emoties of intenties van natuurlijke personen op basis van hun biometrische gegevens
systeem voor biometrische categoriseringEen AI-systeem dat is bedoeld voor het indelen van natuurlijke personen in specifieke categorieën op basis van hun biometrische gegevens, tenzij dit een aanvulling vormt op een andere commerciële dienst en om objectieve technische redenen strikt noodzakelijk is
systeem voor biometrische identificatie op afstandEen AI-systeem dat is bedoeld voor het identificeren van natuurlijke personen, zonder dat zij daar actief bij betrokken zijn en doorgaans van een afstand, door middel van vergelijking van de biometrische gegevens van een persoon met de biometrische gegevens die zijn opgenomen in een referentiedatabank
systeem voor biometrische identificatie op afstand in real timeEen systeem voor biometrische identificatie op afstand, waarbij het vastleggen van biometrische gegevens, de vergelijking en de identificatie zonder significante vertraging plaatsvinden, zowel wanneer de identificatie niet enkel onmiddellijk plaatsvindt, maar ook wanneer de identificatie met beperkte korte vertragingen plaatsvindt, om omzeiling te voorkomen
systeem voor biometrische identificatie op afstand achterafEen ander biometrisch systeem voor de identificatie op afstand dan een systeem voor biometrische identificatie op afstand in real time
systeemrisicoEen risico dat specifiek is voor de capaciteiten met een grote impact van AI-modellen voor algemene doeleinden, die aanzienlijke gevolgen hebben voor de markt van de Unie vanwege hun bereik, of vanwege feitelijke of redelijkerwijs te voorziene negatieve gevolgen voor de gezondheid, de veiligheid, de openbare veiligheid, de grondrechten of de samenleving als geheel, en dat op grote schaal in de hele waardeketen kan worden verspreid
terugroepen van een AI-systeemEen maatregel gericht op het retourneren aan de aanbieder, het buiten gebruik stellen of het onbruikbaar maken van een AI-systeem dat aan gebruiksverantwoordelijken ter beschikking is gesteld
testdataData die worden gebruikt voor het verrichten van een onafhankelijke evaluatie van het AI-systeem om de verwachte prestaties van dat systeem te bevestigen voordat het in de handel wordt gebracht of in gebruik wordt gesteld
testomgevingsplanTussen de deelnemende aanbieder en de bevoegde autoriteit overeengekomen document waarin de doelstellingen, de voorwaarden, het tijdschema, de methode en de vereisten voor de in de testomgeving uitgevoerde activiteiten worden beschreven
testen onder reële omstandighedenHet tijdelijk testen van een AI-systeem voor zijn beoogde doel onder reële omstandigheden buiten een laboratorium of anderszins gesimuleerde omgeving teneinde betrouwbare en robuuste gegevens te verkrijgen, en te beoordelen en te verifiëren of het AI-systeem overeenstemt met de voorschriften van de AI-verordening en het wordt niet aangemerkt als het in de handel brengen of in gebruik stellen van het AI-systeem in de zin van de AI-verordening, mits aan alle in artikel 57 of 60 vastgestelde voorwaarden is voldaan
toestemming met kennis van zakenDe vrijelijk gegeven, specifieke, ondubbelzinnige en vrijwillige uiting door een proefpersoon van zijn of haar bereidheid deel te nemen aan een bepaalde test onder reële omstandigheden, na geïnformeerd te zijn over alle aspecten van de test die van belang zijn voor zijn of haar beslissing deel te nemen
trainingsdataData die worden gebruikt voor het trainen van een AI-systeem door de leerbare parameters hiervan aan te passen
uit de handel nemen van een AI-systeemEen maatregel waarmee wordt beoogd te voorkomen dat een AI-systeem dat zich in de toeleveringsketen bevindt, op de markt wordt aangeboden
validatiedataData die worden gebruikt voor het verrichten van een evaluatie van het getrainde AI-systeem en voor het afstemmen van onder andere de niet-leerbare parameters en het leerproces ervan, om underfitting of overfitting te voorkomen
validatiedatasetEen afzonderlijke dataset of deel van de trainingsdataset, als vaste of variabele opdeling.
veiligheidscomponentEen component van een product of systeem die een veiligheidsfunctie voor dat product of systeem vervult of waarvan het falen of gebrekkig functioneren de gezondheid en veiligheid van personen of eigendom in gevaar brengt
verwerkerEen .. rechtspersoon, een overheidsinstantie, een dienst of een ander orgaan die/dat ten behoeve van de verwerkingsverantwoordelijke persoonsgegevens verwerkt.
verwerkersverantwoordelijkeEen rechtspersoon of overheidsinstantie die, alleen of samen met anderen, het doel van en de middelen voor de verwerking van persoonsgegevens vaststelt
zwevendekommabewerking of “floating-point operation (FLOP)Elke wiskundige bewerking of toewijzing met zwevendekommagetallen, die een subset vormen van de reële getallen die gewoonlijk op computers worden gerepresenteerd door een geheel getal met een vaste precisie, geschaald door een gehele exponent van een vaste basis
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/overhetalgoritmekader/index.html b/pr-preview/pr-478/overhetalgoritmekader/index.html new file mode 100644 index 0000000000..f88addcea2 --- /dev/null +++ b/pr-preview/pr-478/overhetalgoritmekader/index.html @@ -0,0 +1,980 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Soorten algoritmes - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Soorten algoritmes

+ +
+
    +
  • +

    Basiskennis algoritmes en AI

    +
    +

    Overzicht van de belangrijkste vereisten voor overheden die algoritmes of AI-systemen ontwikkelen of gebruiken.

    +
  • +
  • +

    Soorten algoritmes

    +
    +

    Om te voldoen aan de vereisten, moet je weten met welk soort algoritme je werkt. Gaat het om simpele rekenregels of een AI-systeem?

    +
  • +
  • +

    Risico en impact van algoritmes

    +
    +

    AI-systemen vallen mogelijk onder een risicogroep uit de AI-verordening. En wat voor impact hebben je algoritmes?

    +
  • +
  • +

    Woordenlijst

    +
    +

    Uitleg van begrippen die je vaak tegenkomt op deze website.

    +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/overhetalgoritmekader/over-het-algoritmekader/index.html b/pr-preview/pr-478/overhetalgoritmekader/over-het-algoritmekader/index.html new file mode 100644 index 0000000000..768cc9fae4 --- /dev/null +++ b/pr-preview/pr-478/overhetalgoritmekader/over-het-algoritmekader/index.html @@ -0,0 +1,1153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Over het Algoritmekader - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + +
+ + + + + + + + +

Over het Algoritmekader

+

Het Algoritmekader is een hulpmiddel voor overheden die algoritmes, waaronder AI (artificiële intelligentie), gebruiken. Hierin vind je de wetten en regels, hulpmiddelen en adviezen per situatie. De informatie in het Algoritmekader is nog niet betrouwbaar. Het is een bètaversie. De definitieve versie verschijnt eind 2024.

+

Verantwoord gebruik van algoritmes

+

In het Algoritmekader vind je informatie over verantwoord gebruik van algoritmes. Bijvoorbeeld:

+
    +
  • Wie is waarvoor verantwoordelijk?
  • +
  • Hoe voorkom je discriminatie (bias) in een algoritme?
  • +
  • Hoe verwerk je gegevens op een veilige manier?
  • +
  • Hoe voorkom je mensenrechtenschendingen?
  • +
  • Welke inkoopvoorwaarden spreek je af voor algoritmes van een externe partij?
  • +
+

De informatie is bedoeld voor medewerkers van de rijksoverheid, provincies, gemeentes en waterschappen.

+

Informatie van de overheid

+

Het Algoritmekader is een website van het Ministerie van Binnenlandse Zaken en Koninkrijksrelaties. Het team Data, AI en Algoritmes stelt de informatie samen, op basis van:

+
    +
  • +

    alle wetten en regels, zoals de AI-verordening en de Algemene wet bestuursrecht

    +
  • +
  • +

    belangrijke hulpmiddelen, zoals de IAMA (Impact Assessment Mensenrechten en Algoritmes)

    +
  • +
  • adviezen en ervaringen van experts, zoals wetenschappers
  • +
+

Versies

+

Algoritmekader is de nieuwe naam van het Implementatiekader 'Verantwoorde inzet van algoritmen'. Dit rapport is de eerste versie. Door het verder ontwikkelen van dit rapport ontstond de website Algoritmekader.

+

Sindsdien verschijnt elke maand een nieuwe bètaversie van het Algoritmekader. Deze bètaversies zijn nog niet betrouwbaar. De informatie is onvolledig. Er kunnen fouten in staan.

+

Versie 2.0 is de definitieve, betrouwbare versie van het Algoritmekader. Deze versie verschijnt eind 2024.

+

Iedereen mag meedenken

+

De informatie in het Algoritmekader komt open source tot stand. Dat betekent dat iedereen kan meekijken en zijn mening mag geven, of een voorstel mag doen:

+ +

Nieuwsbrief

+

Via onze maandelijkse Nieuwsbrief Algoritmes blijf je op de hoogte over de ontwikkelingen van het Algoritmekader.

+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/overhetalgoritmekader/soorten-algoritmes/index.html b/pr-preview/pr-478/overhetalgoritmekader/soorten-algoritmes/index.html new file mode 100644 index 0000000000..346503f2e3 --- /dev/null +++ b/pr-preview/pr-478/overhetalgoritmekader/soorten-algoritmes/index.html @@ -0,0 +1,1240 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Soorten algoritmes - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + +
+ + + + + + + + +

Soorten algoritmes

+

Om te voldoen aan de vereisten, moet je weten met welk soort algoritme je werkt. Gaat het om simpele rekenregels of een AI-systeem? En wat voor impact hebben je algoritmes?

+

Wanneer is het een algoritme?

+

Met een algoritme bedoelen we een set regels en instructies die een computer uitvoert, met 1 of meer van deze doelen:

+
    +
  • problemen oplossen
  • +
  • vragen beantwoorden
  • +
  • taken of processen uitvoeren
  • +
  • besluiten nemen
  • +
+

Rekenregels

+

Rekenregels (ook wel: regelgebaseerde algoritmes) zijn de meest eenvoudige algoritmes. Dit zijn door mensen bedachte regels die het computersysteem precies moet opvolgen: als x gebeurt, dan doe je y.

+

Rekenregels:

+
    +
  • zijn expliciet geprogrammeerd en bedacht door mensen
  • +
  • bestaan uit vaste stappen om een taak uit te voeren
  • +
+

Rekenregels zijn niet kunstmatig intelligent (AI). Rekenregels kunnen wel onderdeel zijn van een AI-systeem.

+

Voorbeelden

+
    +
  • Eenvoudige chatbots die burgers advies geven op basis van door mensen bedachte beslisbomen.
  • +
  • Ondersteuning berekening uitkering dat adviseert over uitkeringen, op basis van door mensen bedachte beslisbomen.
  • +
  • Prestatiemonitor dat risicoscores berekent van scholen, op basis van door mensen bedachte regels.
  • +
+

Zelflerende algoritmes

+

Zelflerende algoritmes zijn algoritmes die zichzelf trainen. Dit proces heet machinelearning. Hierdoor worden computers intelligent zonder dat mensen dit precies zo programmeren. Dit is een veel voorkomende vorm van AI.

+

Zelflerende technieken zijn in elk geval:

+
    +
  • Supervised learning (gecontroleerd leren): Je algoritme leert van gegevens die je labelt met informatie. Je biedt bijvoorbeeld foto’s aan met de labels: dit is wel een kat, dit is geen kat. Voorbeeld: Virtuele assistent Gem.
  • +
  • Unsupervised learning (ongecontroleerd leren): Je laat het algoritme zelf patronen en structuren ontdekken in ongestructureerde gegevens zonder labels. Je biedt bijvoorbeeld foto’s aan van dieren die het algoritme zelf moet groeperen. Voorbeeld: Polis voor participatieplatformen.
  • +
  • Reinforcement learning (bekrachtiginsleren): Het algoritme leert door straf en beloning. Het doel is zo hoog mogelijk scoren in zo min mogelijk tijd. Je geeft bijvoorbeeld punten als het algoritme foto’s sorteert die op katten lijken. Voorbeeld: I-VRI voor verkeerslichten.
  • +
  • Deep learning: Supervised, unsupervised of reinforcement learning gecombineerd met diepe neurale netwerken. Dit zijn kunstmatige neurale netwerken met veel verschillende lagen. Hierdoor kun je nog ingewikkeldere problemen oplossen. Voorbeeld: Geautomatiseerde gezichtsvergelijking bij het RNI-inschrijfproces.
  • +
+

AI-systeem

+

Met een AI-systeem bedoelen we een systeem dat kunstmatig intelligent is volgens de Europese AI-verordening. Dit zijn in elk geval systemen die gebruik maken van:

+
    +
  • supervised learning
  • +
  • unsupervised learning
  • +
  • reinforcement learning
  • +
  • deep learning
  • +
+
+

Tip

+

Twijfel je of je algoritme onderdeel is van een AI-systeem? Raadpleeg een expert. Of beschouw het systeem voor de zekerheid als een AI-systeem.

+
+

Risicogroepen AI-systemen

+

AI-systemen vallen mogelijk onder een van de risicogroepen uit de AI-verordening:

+ +

Het hangt ervan af waarvoor je dit AI-systeem gebruikt.

+

Impact van algoritmes

+

Impactvolle algoritmes moet je publiceren in het Algoritmeregister. Dat moet in elk geval in deze situaties:

+
    +
  • Je algoritme is onderdeel van een hoog-risico-AI-systeem.
  • +
  • Je algoritme heeft invloed op een proces met rechtsgevolgen voor burgers of organisaties. Bijvoorbeeld het wel of niet krijgen van boetes of subsidies.
  • +
  • Je algoritme heeft invloed op de manier waarop de overheid burgers of organisaties indeelt, of contact met hen zoekt. Bijvoorbeeld bij het inschatten van risico’s of het signaleren van fraude.
  • +
  • Je overheidsorganisatie vindt zelf dat het algoritme impact heeft op de maatschappij. Bijvoorbeeld omdat het algoritme ingewikkeld is, veel data gebruikt, vaak in de media komt of onderzocht wordt door een toezichthouder.
  • +
+

Een impactvol algoritme kan schade veroorzaken aan de maatschappij. Daarom zijn de regels strenger voor impactvolle dan voor niet-impactvolle algoritmes.

+
+

Tip

+

Twijfel je of je algoritme impactvol is of niet? Beschouw het algoritme dan als impactvol.

+
+

Meer uitleg en voorbeelden vind je in de Handreiking Algoritmeregister.

+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/rollen/beleid-en-advies/index.html b/pr-preview/pr-478/rollen/beleid-en-advies/index.html new file mode 100644 index 0000000000..6a327a1abd --- /dev/null +++ b/pr-preview/pr-478/rollen/beleid-en-advies/index.html @@ -0,0 +1,1209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beleid en advies - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Beleid en advies

+ +

Dit is degene die gaat over wat wenselijk is en adviseert bij de ontwikkeling en/of inzet van een algoritme. Hierbij horen rollen zoals de beleidsmedewerker, ethicus, CIO-adviseur, architect.

+

Vereisten

+
idVereisten
aia-04Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
aia-08Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-10Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-11Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-29Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
avg-02Persoonsgegevens worden zo kort mogelijk bewaard
avg-08Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
avg-10Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
avg-11Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
awb-01Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
bio-01Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
+ +

Maatregelen

+
idMaatregelen
org-01Bepaal of er genoeg experts beschikbaar zijn
org-04Stel beleid op voor een verantwoorde inzet van algoritmes binnen de organisatie.
org-03Maak een plan voor het omgaan met risico’s
org-04Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid.
org-05Sluit algoritmegovernance aan op bestaande governancestructuren binnen de organisatie.
org-06Gebruik een algoritme volwassenheidsmodel om te weten waar de organisatie staat
org-07Richt een algoritmegovernance in met three lines of defence
org-08Maak gebruik van beslismomenten in de algoritmelevenscyclus
org-09Richt algoritmegovernance op basis van de risicoclassificatie van algoritmes.
org-10Taken en verantwoordelijkheden zijn toebedeeld in de algoritmegovernance
org-11Maak afspraken over het beheer van gebruikers
org-12Controleer en verbeter regelmatig de kwaliteit van het algoritme
imp-10Stel een protocol vast voor de situatie dat er (een vermoeden van) discriminatie door een algoritme is geconstateerd en pas dit wanneer nodig toe.
owp-11Voer voorafgaand aan een project een data beschikbaarheid, kwaliteit- en toegankelijkheidsanalayse uit.
owp-05Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horen
owp-06Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging
owp-07Maak een lijst van de meest kwetsbare groepen en bescherm hen extra
owp-09Een model-verwerkersovereenkomst is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt
owp-09Stel een multidisciplinair team samen bij het ontwikkelen of inkopen van algoritmes.
owp-10Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes
owp-11Koop duurzaam algoritmes in
owp-02Beschrijf welke data gebruikt wordt voor de beoogde toepassing
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-14Maak het opstellen van een verwerkersovereenkomst onderdeel van de aanbesteding als persoonsgegevens worden verwerkt.
owp-15Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving.
owp-16Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output.
owp-17Aansprakelijkheidsvoorwaarden van een aanbieder worden beoordeeld in de aanbesteding
owp-20Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke.
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-22Bepaal in een aanbesteding of algoritmes van een aanbieder bepalende invloed hebben in een besluit richting personen
owp-23Laat de aanbieder aangeven welke mate van opleiding en ondersteuning bij de implementatie nodig is om de beoogde algoritmes verantwoord te gebruiken.
owp-24Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstraject
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
pba-04Stel vast welke betrokkenen geïnformeerd moeten worden en welke informatie zij nodig hebben.
owp-07Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.
imp-10Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.
org-02Pas vastgestelde beleidskaders toe
dat-07Gebruik duurzame datacenters
ver-01Toets het algoritme op bias
imp-03Richt de juiste menselijke controle in van het algoritme
imp-04Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister
imp-06Spreek af hoe de organisatie omgaat met privacy-verzoeken
imp-05Spreek af hoe medewerkers omgaan met het algoritme.
mon-01Maak back-ups van algoritmes
mon-02Beveilig de software
mon-03Maak een noodplan voor beveiligingsincidenten
mon-05Meten, monitoren en rapporteren van milieu-impact van algoritmes
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/rollen/index.html b/pr-preview/pr-478/rollen/index.html new file mode 100644 index 0000000000..3b779fb0b4 --- /dev/null +++ b/pr-preview/pr-478/rollen/index.html @@ -0,0 +1,1134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rollen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Rollen

+
+
    +
  • +

    Beleid en advies

    +
    +

    Dit is degene die gaat over wat wenselijk is en adviseert bij de ontwikkeling en/of inzet van een algoritme. Hierbij horen rollen zoals de beleidsmedewerker, ethicus, CIO-adviseur, architect.

    +
  • +
  • +

    Jurist

    +
    +

    Hier komt een tekstje.

    +
  • +
  • +

    Ontwikkelaar

    +
    +

    De Ontwikkelaar omvat alle technische expertise.

    +
  • +
  • +

    Projectleider

    +
    +

    De projectleider richt zich op het coördineren en aansturen van alle betrokken partijen en processen bij de ontwikkeling van algoritmes.

    +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/rollen/jurist/index.html b/pr-preview/pr-478/rollen/jurist/index.html new file mode 100644 index 0000000000..45a67276d6 --- /dev/null +++ b/pr-preview/pr-478/rollen/jurist/index.html @@ -0,0 +1,1208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Jurist - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Jurist

+ +

Vereisten

+
idVereisten
aia-14Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure
aia-15Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring
aia-33AI-testomgevingen die persoonsgegevens verwerken, voldoen aan strenge voorwaarden
aut-01Auteursrechten zijn beschermd
avg-01Persoonsgegevens worden op een rechtmatige manier verwerkt
avg-03Persoonsgegevens worden zo min mogelijk verwerkt
avg-04Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
avg-06Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken
avg-08Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
avg-11Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-12Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
avg-13Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
dat-01Databanken worden alleen gebruikt met toestemming van de databank-producent
grw-01Algoritmes schenden geen grondrechten of mensenrechten
woo-01Iedereen kan openbare informatie over algoritmes vinden of aanvragen
+ +

Maatregelen

+
idMaatregelen
pba-05Beschrijf de wettelijke grondslag voor de inzet van het algoritme
owp-03Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag
owp-08Bepaal welke documenten voor hoe lang gearchiveerd moeten worden
owp-17Aansprakelijkheidsvoorwaarden van een aanbieder worden beoordeeld in de aanbesteding
owp-27Maak (contractuele) afspraken over data en artefacten met een aanbieder
dat-04Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure
dat-05Bescherm persoonsgegevens door data te anonimiseren, pseudonimiseren of te aggregeren
dat-06Controleer de auteursrechten van eigen data
owk-03Analyseer de privacy-risico’s en neem maatregelen om deze risico’s laag te houden
ver-01Toets het algoritme op bias
ver-03Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleid
imp-06Spreek af hoe de organisatie omgaat met privacy-verzoeken
imp-07Vermeld het gebruik van persoonsgegevens in een privacyverklaring
imp-08Vermeld het gebruik van persoonsgegevens in het verwerkingsregister
mon-03Maak een noodplan voor beveiligingsincidenten
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/rollen/ontwikkelaar/index.html b/pr-preview/pr-478/rollen/ontwikkelaar/index.html new file mode 100644 index 0000000000..dc37925f22 --- /dev/null +++ b/pr-preview/pr-478/rollen/ontwikkelaar/index.html @@ -0,0 +1,1287 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ontwikkelaar - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Ontwikkelaar

+ +

Algemeen

+

De Ontwikkelaar omvat alle technische expertise. Dit zijn professionals die zich bezighouden met het analyseren, ontwikkelen, en implementeren van algoritmes en modellen. Dit zijn de specialisten die zorgen voor de technische kant van de algoritmeontwikkeling, inclusief programmeren, opschonen van data, data-analyse en het ontwerpen van informatieprocessen.

+

Relevantie

+

Mensen met technische expertise spelen een cruciale rol bij het verantwoord ontwerpen en ontwikkelen van algoritmes. Zij zorgen ervoor dat algoritmes voldoen aan technische en ethische standaarden, en passen methodes toe om de duurzaamheid, eerlijkheid en transparantie van modellen te waarborgen. Technische experts zijn vaak ook verantwoordelijk voor het testen en optimaliseren van de algoritmes, en voor het implementeren van maatregelen om privacy en gegevensbescherming te waarborgen. In het Algoritmekader zijn er tal van vereisten, maatregelen en hulpmiddelen die specifiek relevant zijn voor technische experts.

+

Bijbehorende functies

+
    +
  • Data-analist
  • +
  • Data-scientist
  • +
  • Data-engineer
  • +
  • Developer
  • +
  • Informatieanalist
  • +
  • Softwareontwikkelaar
  • +
+

Vereisten

+
idVereisten
aia-05Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-06Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-07Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
aia-08Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-10Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-19Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-20Hoog-risico-AI-systemen worden gebruikt volgens de gebruiksaanwijzing
aia-28AI-systemen worden zo ontworpen en gebruikt, dat mensen begrijpen wanneer zij met een AI-systeem communiceren en welke content gemaakt is door een AI-systeem
aia-30Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico treffen extra maatregelen
aia-32AI-modellen voor algemene doeleinden met systeemrisico’s zijn voldoende beveiligd tegen cyberaanvallen
aia-33AI-testomgevingen die persoonsgegevens verwerken, voldoen aan strenge voorwaarden
arc-01Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
avg-02Persoonsgegevens worden zo kort mogelijk bewaard
avg-03Persoonsgegevens worden zo min mogelijk verwerkt
avg-04Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
avg-05Persoonsgegevens zijn juist en actueel
avg-07Organisaties zijn transparant over het verwerken van persoonsgegevens
avg-09Betrokkenen kunnen een beroep doen op hun privacyrechten
avg-11Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-12Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
awb-02Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
bio-01Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
+ +

Maatregelen

+
idMaatregelen
org-13Maak afspraken over het beheer van wachtwoorden
org-14Maak afspraken over het wijzigen van de code
owp-04Beschrijf welke techniek gebruikt wordt voor de beoogde toepassing
owp-08Bepaal welke documenten voor hoe lang gearchiveerd moeten worden
owp-02Beschrijf welke data gebruikt wordt voor de beoogde toepassing
owp-12Ontwerp algoritmes zo eenvoudig mogelijk
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-20Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke.
owp-22Bepaal in een aanbesteding of algoritmes van een aanbieder bepalende invloed hebben in een besluit richting personen
owp-23Laat de aanbieder aangeven welke mate van opleiding en ondersteuning bij de implementatie nodig is om de beoogde algoritmes verantwoord te gebruiken.
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owp-07Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.
dat-01Controleer de datakwaliteit
dat-02Maak waardevolle data vindbaar, toegankelijk, interoperabel en herbruikbaar (FAIR) binnen en buiten de eigen organisatie.
dat-05Bescherm persoonsgegevens door data te anonimiseren, pseudonimiseren of te aggregeren
dat-07Gebruik duurzame datacenters
dat-07Gebruik bij machine learning technieken gescheiden train-, test- en validatiedata en houdt rekening met underfitting en overfitting.
dat-09Beperk de omvang van datasets voor energie-efficiëntie
owk-01Ontwerp en ontwikkel het algoritme volgens de principes van ‘security by design’
owk-02Maak een noodplan voor het stoppen van het algoritme
owk-04Maak logbestanden waarin staat wie wanneer toegang had tot de data en de code
owk-05Kies energiezuinige programmeermethoden
owk-06Optimaliseer AI-trainingsprocessen voor energie-efficiëntie
ver-01Controleer regelmatig of het algoritme werkt zoals het bedoeld is
ver-01Toets het algoritme op bias
imp-01Stel een werkinstructie op voor gebruikers.
imp-02Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren
imp-09Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme en monitor dit proces.
mon-01Maak back-ups van algoritmes
mon-02Beveilig de software
mon-04Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme.
mon-05Meten, monitoren en rapporteren van milieu-impact van algoritmes
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/rollen/projectleider/index.html b/pr-preview/pr-478/rollen/projectleider/index.html new file mode 100644 index 0000000000..d662e8327e --- /dev/null +++ b/pr-preview/pr-478/rollen/projectleider/index.html @@ -0,0 +1,1285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Projectleider - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Projectleider

+ +

Algemeen

+

De projectleider richt zich op het coördineren en aansturen van alle betrokken partijen en processen bij de ontwikkeling van algoritmes. Projectleiders zorgen ervoor dat projecten door de verschillende fasen van de levenscyclus van algoritmes worden geleid, van probleemanalyse tot monitoring & beheer, of zelfs uitfasering.

+

Relevantie

+

Projectmanagement binnen het Algoritmekader betekent het verbinden van benodigde expertises en het waarborgen dat alle stappen van het ontwikkelproces verantwoord en volgens de gestelde kaders worden uitgevoerd. Projectmanagers maken afspraken over de te navolgen vereisten en stellen prioriteiten in uit te voeren maatregelen. Zij houden contact met opdrachtgevers en verantwoordelijken om te zorgen dat de projectdoelen worden behaald en risico’s worden gemitigeerd. Zij spelen een hoofdrol bij het realiseren van een verantwoorde en effectieve inzet van algoritmes binnen een organisatie.

+

Bijbehorende functies

+
    +
  • Projectleider
  • +
  • Product owner
  • +
  • Proceseigenaar
  • +
  • IT-projectmanager
  • +
+

Vereisten

+
idVereisten
aia-01Personeel en gebruikers zijn voldoende AI-geletterd
aia-01Verboden AI-systemen mogen niet worden gebruikt.
aia-02Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd
aia-03Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
aia-04Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
aia-05Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-06Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-07Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
aia-08Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-09Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-10Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-11Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-12Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder
aia-13Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder
aia-14Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure
aia-15Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring
aia-16Hoog-risico-AI-systemen zijn voorzien van een CE-markering
aia-17Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank
aia-18Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
aia-19Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-20Hoog-risico-AI-systemen worden gebruikt volgens de gebruiksaanwijzing
aia-21Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkheden
aia-22De werking van hoog-risico-AI-systemen wordt gemonitord
aia-23Logs voor hoog-risico-AI-systemen worden bewaard door de gebruiksverantwoordelijke
aia-24Werknemers weten dat hun organisatie een hoog-risico AI-systeem gebruikt
aia-25Gebruiksverantwoordelijken controleren de registratie van het hoog-risico AI-systeem in de EU-databank
aia-28Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluiten
aia-29Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
aia-28AI-systemen worden zo ontworpen en gebruikt, dat mensen begrijpen wanneer zij met een AI-systeem communiceren en welke content gemaakt is door een AI-systeem
aia-29AI-modellen voor algemene doeleinden zijn voorzien van voldoende technische documentatie en informatie
aia-30Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico treffen extra maatregelen
aia-31Als AI-modellen voor algemene doeleinden met systeemrisico’s ernstige incidenten veroorzaken, wordt dit gedocumenteerd en gerapporteerd
aia-33AI-testomgevingen die persoonsgegevens verwerken, voldoen aan strenge voorwaarden
aia-34Hoog-risico-AI-systemen zijn voorzien van een monitoringsysteem
aia-35Ernstige incidenten door hoog-risico-AI-systemen worden gemeld aan de toezichthouder
aia-36Klokkenluiders kunnen veilig melden dat een organisatie zich niet houdt aan de AI-verordening
aia-37Klachtrecht aanbieders verder in AI-waardeketen
arc-01Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
avg-01Persoonsgegevens worden op een rechtmatige manier verwerkt
avg-05Persoonsgegevens zijn juist en actueel
avg-07Organisaties zijn transparant over het verwerken van persoonsgegevens
avg-08Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
avg-10Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
avg-11Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-13Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
awb-01Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
awb-02Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
bzk-01Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister
grw-01Algoritmes schenden geen grondrechten of mensenrechten
grw-02Algoritmes discrimineren niet
woo-01Iedereen kan openbare informatie over algoritmes vinden of aanvragen
+ +

Maatregelen

+
idMaatregelen
org-01Bepaal of er genoeg experts beschikbaar zijn
org-03Maak een plan voor het omgaan met risico’s
org-04Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid.
org-05Sluit algoritmegovernance aan op bestaande governancestructuren binnen de organisatie.
org-06Gebruik een algoritme volwassenheidsmodel om te weten waar de organisatie staat
org-07Richt een algoritmegovernance in met three lines of defence
org-08Maak gebruik van beslismomenten in de algoritmelevenscyclus
org-09Richt algoritmegovernance op basis van de risicoclassificatie van algoritmes.
org-10Taken en verantwoordelijkheden zijn toebedeeld in de algoritmegovernance
org-11Maak afspraken over het beheer van gebruikers
org-12Controleer en verbeter regelmatig de kwaliteit van het algoritme
org-13Maak afspraken over het beheer van wachtwoorden
org-14Maak afspraken over het wijzigen van de code
imp-10Stel een protocol vast voor de situatie dat er (een vermoeden van) discriminatie door een algoritme is geconstateerd en pas dit wanneer nodig toe.
pba-01Beschrijf het probleem dat het algoritme moet oplossen
pba-02Beschrijf het doel van het algoritme
pba-03Beschrijf waarom een algoritme het probleem moet oplossen
pba-04Overleg regelmatig met belanghebbenden
owp-01Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmes
owp-11Voer voorafgaand aan een project een data beschikbaarheid, kwaliteit- en toegankelijkheidsanalayse uit.
owp-03Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag
owp-05Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horen
owp-06Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging
owp-08Bepaal welke documenten voor hoe lang gearchiveerd moeten worden
owp-09Een model-verwerkersovereenkomst is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt
owp-09Stel een multidisciplinair team samen bij het ontwikkelen of inkopen van algoritmes.
owp-10Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes
owp-11Koop duurzaam algoritmes in
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-14Maak het opstellen van een verwerkersovereenkomst onderdeel van de aanbesteding als persoonsgegevens worden verwerkt.
owp-15Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving.
owp-16Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-20Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke.
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-22Bepaal in een aanbesteding of algoritmes van een aanbieder bepalende invloed hebben in een besluit richting personen
owp-23Laat de aanbieder aangeven welke mate van opleiding en ondersteuning bij de implementatie nodig is om de beoogde algoritmes verantwoord te gebruiken.
owp-24Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstraject
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
pba-04Stel vast welke betrokkenen geïnformeerd moeten worden en welke informatie zij nodig hebben.
owp-07Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.
imp-10Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.
org-02Pas vastgestelde beleidskaders toe
dat-04Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure
dat-07Gebruik duurzame datacenters
dat-08Zorg dat je controle of eigenaarschap hebt over de data
dat-09Beperk de omvang van datasets voor energie-efficiëntie
owk-01Ontwerp en ontwikkel het algoritme volgens de principes van ‘security by design’
owk-02Maak een noodplan voor het stoppen van het algoritme
owk-03Analyseer de privacy-risico’s en neem maatregelen om deze risico’s laag te houden
ver-01Controleer regelmatig of het algoritme werkt zoals het bedoeld is
ver-01Toets het algoritme op bias
imp-01Stel een werkinstructie op voor gebruikers.
imp-03Richt de juiste menselijke controle in van het algoritme
imp-04Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister
imp-06Spreek af hoe de organisatie omgaat met privacy-verzoeken
imp-05Spreek af hoe medewerkers omgaan met het algoritme.
imp-07Vermeld het gebruik van persoonsgegevens in een privacyverklaring
imp-09Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme en monitor dit proces.
imp-08Vermeld het gebruik van persoonsgegevens in het verwerkingsregister
imp-01Maak een openbaar besluit over de inzet van het algoritme
mon-02Beveilig de software
mon-03Maak een noodplan voor beveiligingsincidenten
mon-05Meten, monitoren en rapporteren van milieu-impact van algoritmes
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/search/search_index.json b/pr-preview/pr-478/search/search_index.json new file mode 100644 index 0000000000..1589d58985 --- /dev/null +++ b/pr-preview/pr-478/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["nl"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Het algoritmekader","text":"Wetten en regels, tips en hulpmiddelen voor verantwoord gebruik van algoritmes. b\u00e8taversie

Deze website is in ontwikkeling. Alle versies ontstaan op een open manier. Iedereen mag opmerkingen of suggesties geven.

Onderwerpen
  • Bias en non-discriminatie
  • Governance
  • Transparantie
  • Privacy & gegevensbescherming
  • Publieke inkoop
Bekijk alle onderwerpen Informatie per rol
  • Beleid en advies
  • Jurist
  • Ontwikkelaar
  • Projectleider
Bekijk alle rollen Levenscyclus
  • Probleemanalyse
  • Ontwerpen
  • Dataverkenning & datapreparatie
  • Ontwikkelen
  • Monitoring & beheer
Bekijk de hele levenscyclus Voldoen aan wetten en regels
  • Vereisten
  • Aanbevolen maatregelen
  • Aanbevolen hulpmiddelen

"},{"location":"version/","title":"Version","text":""},{"location":"version/#-","title":"---","text":""},{"location":"version/#huidige-versie","title":"Huidige versie","text":"

v1.6.1-36-g2cca4342e

"},{"location":"levenscyclus/","title":"Levenscyclus algoritmes en AI","text":"
  • Fase 0: Organisatieverantwoordelijkheden

    Voordat je start met de ontwikkeling of het gebruik van een algoritme, zul je moeten zorgen dat je organisatie voldoende ingericht is om algoritmes te gebruiken of te ontwikkelen.

  • Fase 1: Probleemanalyse

    In deze fase wordt het probleem en de doelstellingen van een opdrachtgever geanalyseerd en beschreven.

  • Fase 2: Ontwerp

    In de ontwerpfase wordt het conceptuele ontwerp van het AI-systeem uitgedacht.

  • Fase 3: Dataverkenning en datapreparatie

    Dit is de fase waarin het algoritme of AI-systeem wordt ontwikkeld door het ontwikkelteam.

  • Fase 4: Ontwikkelen

    Dit is de fase waarin het algoritme of AI-systeem wordt ontwikkeld door het ontwikkelteam.

  • Fase 5: Verificatie en validatie

    Bij de verificatie en validatie van het algoritme of AI-systeem dient bepaald te worden of het algoritme of AI-systeem gebouwd is volgens de (technische) specificaties en voldoet aan de beoogde doelstellingen.

  • Fase 6: Implementatie

    In deze fase wordt het algoritme of AI-systeem in de praktijk gebracht en duurzaam ge\u00efntegreerd in het bedrijfsproces.

  • Fase 7: Monitoring en beheer

    Het algoritme of AI-systeem wordt in deze fase voortdurend gemonitord om ervoor te zorgen dat het blijft presteren zoals verwacht en kan worden gebruikt door gebruikers.

  • Fase 8: Uitfaseren

    Als wordt besloten dat het algoritme of AI-systeem niet langer nodig is of wordt vervangen door een wezenlijk andere versie, wordt het gearchiveerd en uitgefaseerd.

"},{"location":"levenscyclus/dataverkenning-en-datapreparatie/","title":"Dataverkenning en datapreparatie","text":"

In deze fase worden relevante datasets ge\u00efdentificeerd en wanneer nodig wordt nieuwe data verzameld. In deze fase zal ook de ontwikkelomgeving (verder) worden ingericht indien nodig. Het is van belang dat voorafgaand aan verzameling is vastgesteld dat de benodigde data mag worden verwerkt en dat de juiste maatregelen worden getroffen, zodra de data kan worden verwerkt. Denk hierbij aan het anonimiseren, pseudonimiseren of aggregeren van persoonsgegevens. De data zullen vervolgens worden opgeschoond, geanalyseerd en voorbereid voor verdere verwerking.

Het is van belang dat dataverzameling op de juiste manier gebeurt, en dat datasets die gebruikt gaan worden van goede kwaliteit zijn. In deze fase is het van belang om de datakwaliteit en eventuele bias in de dataset te onderzoeken. Indien er risico's optreden door bijvoorbeeld missende data of niet representatieve data, is het belangrijk om te kijken wat voor effecten dit heeft op het oorspronkelijke ontwerp van het algoritme. Dit kan betekenen dat nieuwe keuzes moeten worden gemaakt in het ontwerp en eventueel eerste deze fase van ontwerp (deels) opnieuw moet worden doorlopen.

Met voorgaande handelingen wordt het fundament gelegd om het algoritme te kunnen ontwikkelen. In de praktijk zal bijvoorbeeld het analyseren van de data niet stoppen na deze fase, maar terugkerend zijn in alle fasen die volgen. Als de verzamelde data van voldoende kwaliteit is en de vereiste maatregelen zijn getroffen, dan kan worden gestart met het ontwikkelen van het algoritme.

"},{"location":"levenscyclus/implementatie/","title":"Implementatie","text":"

In deze fase wordt het algoritme in de praktijk gebracht en duurzaam ge\u00efntegreerd in het bedrijfsproces. In de praktijk worden veelal eerst een pilot uitgevoerd voor een afgebakende periode of over een beperkt aan zaken. In deze situatie, een pilot, wordt tijdelijk productiedata verwerkt. Dit vraagt om een goede samenwerking tussen het ontwikkelteam en de gebruikers van het algoritme. Niet alleen de prestaties van het algoritme worden nogmaals gevalideerd, maar bijvoorbeeld ook of de output zodanig wordt gepresenteerd dat gebruikers hiermee kunnen werken. Na deze pilot wordt onderzocht in hoeverre het algoritme presteert conform wens en verwachting. Er kan worden gekozen om het algoritme eerst nog door te ontwikkelen op basis van de bevindingen, uit te faseren of om de oplossing structureel onderdeel te maken van de bedrijfsvoering door het te implementeren.

Als een besluit wordt genomen om de oplossing te implementeren, dan is het van belang dat gebruikers goed begrijpen hoe de resultaten van het algoritme moeten worden ge\u00efnterpreteerd, dat de rest-risico's bekend zijn, de verantwoordelijkheden belegd zijn en dat er duidelijke werkinstructies zijn over het gebruik van het algoritme. Service- en incidentmanagement moet volledig worden geoperationaliseerd, zodat gebruikers kunnen worden geholpen bij vragen of incidenten. Een kenmerkend element van deze fase is dat vanaf nu betrokkenen onderhevig zijn aan de werking van het algoritme. Beslissingen en besluiten komen nu bijvoorbeeld mede of geheel door de werking van het algoritme tot stand. Waar passend, bijvoorbeeld bij impactvolle of hoog risico AI-systemen wordt dit duidelijk gecommuniceerd naar betrokken, voordat de oplossing volledig is ge\u00efmplementeerd.

"},{"location":"levenscyclus/monitoring-en-beheer/","title":"Monitoring en beheer","text":"

Het algoritme wordt in deze fase voortdurend gemonitord om ervoor te zorgen dat het blijft presteren zoals verwacht en kan worden gebruikt door gebruikers. Eventuele afwijkingen of degradatie van prestaties worden gesignaleerd en er worden maatregelen getroffen om dit te herstellen. Dit is van belang vanuit een technisch perspectief (presteert het model nog wel waar het voor ontworpen is), maar ook vanuit een juridische en ethische blik (functioneert het model nog wel rechtmatig en zijn er geen onvoorziene nadelige effecten op mens en maatschappij). Hierbij dient ook voortdurend gemonitord te worden of de omstandigheden waarin het algoritme wordt gebruikt veranderlijk zijn, en of daar op geanticipeerd moet worden. Dit kan bijvoorbeeld spelen bij veranderende data of bij het uitvoeren van nieuw beleid of wet- en regelgeving in het werkproces dat wordt ondersteund met het algoritme.

Het is van belang dat beheer wordt uitgevoerd over het algoritme, zodat de (gehele) oplossing operationeel blijft. Een wijziging in onderliggende systemen kan er bijvoorbeeld voor zorgen dat het algoritme niet meer wordt voorzien van de noodzakelijk data om de benodigde output te genereren. Het beheerteam zorgt ervoor dat dergelijke situaties worden voorkomen of opgelost. Er kunnen ook incidenten worden gemeld door gebruikers die worden opgelost door het beheerteam.

"},{"location":"levenscyclus/ontwerp/","title":"Ontwerp","text":"

In de ontwerpfase wordt het conceptuele ontwerp van het algoritme uitgedacht. Het is van belang om belangrijke uitgangspunten en beleid, zoals doelarchitectuur en de datastrategie, van de betreffende organisatie meteen te verwerken in het ontwerp en dat het applicatielandschap en de databronnen in beeld wordt gebracht. In deze fase worden doorgaans veel werkzaamheden verzet, zoals business- en informatieanalyse, om een goed beeld te krijgen hoe aan de beoogde doelstellingen kan worden voldaan met een passende oplossing.

Het is goed denkbaar dat meerdere ontwerpen in deze fase tot stand komen voor het te ontwikkelen algoritme. Het is van belang om deze ontwerpen te toetsen bij bijvoorbeeld de proceseigenaar, opdrachtgever en gebruiker, maar ook bij informatiebeveiligingsadviseurs, privacy officers, informatiebeheerders, architecten of een ethicus. Deze experts kunnen vanuit hun vakgebied een eerste toets doen in hoeverre het ontwerp haalbaar of gewenst is, aansluit bij de gebruikersbehoefte, aan welke vereisten moet worden voldaan of dat er risicoanalyses moeten worden uitgevoerd en een onafhankelijke commissies moet worden betrokken.

Met deze input kan het ontwerp worden verbeterd en vraagstukken over bijvoorbeeld governance en risicomanagement verder worden uitgewerkt. In deze fase kan ook een eerste stap worden gezet om de vereisten te vertalen naar concrete maatregelen, te structureren en te beleggen bij de betrokken experts. Als bijvoorbeeld is vastgesteld dat persoonsgegevens noodzakelijkerwijs moeten worden verwerkt en hier een grondslag voor is, dan is het van belang dat voorafgaand aan de dataverkenning en datapreparatie fase voldoende (technische) maatregelen zijn getroffen om de data veilig te verwerken in de beoogde (ontwikkel)omgeving.

Daarnaast dient er in de ontwerpfase ook aandacht besteed te worden aan de succesfactoren van een algoritme. Het is belangrijk om in een multidisciplinaire setting te bepalen hoe het algoritme in de praktijk ge\u00ebvalueerd kan worden en wanneer we kunnen spreken van een rechtvaardig succes. Hierbij dient er ook te worden nagedacht over evaluatiemethoden om na te gaan of het algoritme voldoet aan bijvoorbeeld het vereiste van non-discriminatie.

Nadat een besluit is genomen over het definitieve ontwerp van het algoritme, kan worden gestart met het inrichten van de ontwikkelomgeving (indien nodig), de dataverkenning, datapreparatie. Dit besluit betekent dat een akkoord wordt gegeven voor het type algoritme en de beoogde werking.

"},{"location":"levenscyclus/ontwikkelen/","title":"Ontwikkelen","text":"

Dit is de fase waarin het algoritme wordt ontwikkeld door het ontwikkelteam. Als het gaat om AI-systemen, omvat deze fase het trainen van modellen met behulp van de voorbereide gegevens. Als het gaat om algoritmes op basis van rekenregels, betreft dit het implementeren van deze rekenregels in de (ontwikkelomgeving van de) systemen.

Het algoritme technisch correct ontwikkelen, inclusief het kunnen begrijpen van de beperkingen ervan, vraagt om een samenspel van expertise vanuit verschillende disciplines. Denk hierbij aan de proceseigenaar, domeinexperts van het te ondersteunen werkproces, data scientists, data engineer, (privacy)juristen, beleidsmedewerkers en een ethicus. Een voorbeeld hiervan is het beoordelen van de zogenaamde inputvariabelen of rekenregels (die voor een groot deel bepalen hoe een algoritme functioneert) van een machine learning model of algoritme. Deze rollen zijn bijzonder waardevol bij het beoordelen of deze variabelen of rekenregels juridisch zijn toegestaan, ethisch wenselijk zijn, technisch gezien- voldoende significant zijn en of deze van toegevoegde waarde zijn voor gebruikers. Dit multidisciplinaire team kan tijdens de ontwikkeling continu bijsturen, zodat het algoritme op een verantwoorde wijze functioneert en aansluit bij de beoogde doelstellingen.

In deze fase is niet alleen het ontwikkelen van een algoritme, maar ook het documenteren van belangrijke afwegingen en het opstellen van technische documentatie van groot belang. Daarnaast zullen tal van (technische) maatregelen moeten worden getroffen zoals de verdere beveiliging van het informatiesysteem of bij de ontsluiting van de output naar gebruikers, het automatische genereren van logs en het inrichten van service en incidentmanagementprocedures.

"},{"location":"levenscyclus/organisatieverantwoordelijkheden/","title":"Organisatieverantwoordelijkheden","text":"

Voordat je start met de ontwikkeling of het gebruik van een algoritme, zul je moeten zorgen dat je organisatie voldoende ingericht is om algoritmes te gebruiken of te ontwikkelen. In deze fase beschrijven we de randvoorwaarden die je als organisatie moet hebben om aan de slag te gaan. Dit zijn aspecten die je in het ideale geval al regelt voordat je begint aan het gebruik van algoritmes. Het zijn ook taken die je voortdurend aandacht zal moeten geven, maar die je niet voor ieder algorite opnieuw hoeft te organiseren.

"},{"location":"levenscyclus/probleemanalyse/","title":"Probleemanalyse","text":"

In deze fase wordt het probleem en de doelstellingen van een opdrachtgever geanalyseerd en beschreven. Er wordt bijvoorbeeld onderzocht welke publieke taak moet worden ondersteund en welke publieke waarden daarbij moeten worden beschermd of juist gerealiseerd. In deze fase wordt onderzocht of het ontwikkelen van een algoritme een geschikt middel is om het doel te realiseren en het probleem op te lossen. Dat hangt van verschillende zaken af.

Hierbij kan worden gedacht aan de middelen (capaciteit en financi\u00eble middelen) die nodig zijn om algoritmen op een verantwoorde wijze te ontwikkelen, de complexiteit van de oplossing, het in beeld brengen van de verwachte risico's (hoog over), een eerste beeld krijgen bij wat voor data nodig zijn en het in kaart brengen en beleggen van de verschillende verantwoordelijkheden. Daarnaast is het van belang om het beleid met betrekking tot de inzet van algoritme een organisatie te raadplegen.

Er zal een conclusie moeten volgen of de ontwikkeling van een algoritme passend is. Deze fase wordt doorgaans afgerond met een akkoord van de (gemandateerd) verantwoordelijk(en)/opdrachtgever om een algoritme te ontwikkelen. Een vastgestelde business case of plan van aanpak vormen veelal de basis om de ontwerpfase te starten met de benodigde experts.

"},{"location":"levenscyclus/uitfaseren/","title":"Uitfaseren","text":"

Als wordt besloten dat het algoritme niet langer nodig is of wordt vervangen door een wezenlijk andere versie, wordt het gearchiveerd en uitgefaseerd. Hiermee wordt ervoor gezocht dat later kan worden gereconstrueerd hoe het algoritme heeft gefunctioneerd en dat gebruikers er geen gebruik meer van kunnen maken.

Archiveren betekent dat documentatie en eventuele relevante artefacten (zoals logbestanden en de parameters van het model) worden bewaard voor een bepaalde periode. Het gaat daarbij ook om informatie over het algoritme, bijvoorbeeld het besluit en onderbouwing waarom het niet meer wordt gebruikt en waarom het in het verleden wel gebruikt werd. Archiveren is niet enkel relevant aan het einde van de levenscyclus, maar is ook gedurende het gebruik van het algoritme van belang. Er moet tijdig worden vastgesteld welke versies van een model moeten worden gearchiveerd, bijvoorbeeld al tijdens de ontwerpfase.

Bij AI-systemen is er in praktijk vaak sprake van hertrainen op nieuwe data, wat het model anders maakt en andere voorspellingen kan doen geven. Ook meer eenvoudige algoritmes kunnen gedurende de tijd veranderen en andere voorspellingen geven, bijvoorbeeld door veranderende data of veranderende rekenregels. Er moet worden vastgesteld welke versies van een model moet gearchiveerd.

Bij uitfaseren wordt het algoritme verwijderd uit de productieomgeving en, na archivering, wordt de trainingsdata uit de ontwikkelomgeving verwijderd. Het algoritme is hiermee niet meer te gebruiken door gebruikers. Gebruikers moeten hier vooraf over worden ge\u00efnformeerd en waar passend, bijvoorbeeld bij impactvolle of hoog risico AI-systemen, worden betrokkenen ge\u00efnformeerd over het be\u00ebindigen van het gebruik.

"},{"location":"levenscyclus/verificatie-en-validatie/","title":"Verificatie en validatie","text":"

Bij de verificatie en validatie van het algoritme dient bepaald te worden of het algoritme gebouwd is volgens de (technische) specificaties en voldoet aan de beoogde doelstellingen. Hiervoor moeten technische, maar ook organisatorische maatregelen worden getroffen.

Bij verificatie kan worden gedacht aan het (laten) controleren of het algoritme voldoet aan de (technische) specificaties, bijvoorbeeld door een interne of externe audit of in de toekomst een conformiteitsbeoordeling voor hoog risico AI-systemen. Hiermee kan (onafhankelijk) worden vastgesteld of het systeem voldoet aan de vereisten die organisaties daaraan stellen. Op basis van bevindingen uit een audit of conformiteitsbeoordeling, is het denkbaar dat het ontwikkelteam nog bepaalde maatregelen moet treffen om te voldoen aan de specificaties.

Bij het valideren van een algoritme moet worden bepaald of het goed genoeg presteert en of het geschikt is voor het beoogde doel van het systeem. Wanneer het een AI-systeem betreft, is het belangrijk dat dit gevalideerd wordt op nieuwe, niet eerder geziene data. Het valideren betreft het iteratief evalueren van de nauwkeurigheid en prestaties van het systeem. Daarnaast is het ook belangrijk om te valideren of het algoritme gelijke prestaties toont voor verschillende groepen en om te testen hoe het algoritme presteert in uitzonderlijke gevallen. Het is net als in de ontwerpfase belangrijk dat een multidisciplinair team beoordeelt of de werking passend en bijvoorbeeld non-discriminatoir is. In het geval van impactvolle algoritmen of hoog risico AI-systemen, is het raadzaam om een onafhankelijke commissie of partij te betrekken die een advies geeft over de werking van het algoritme of AI-systeem.

In praktijk zal vaak na validatie weer worden teruggegaan naar de ontwikkelfase om prestaties van het model te verbeteren voorafgaand aan implementatie van de oplossing. Het is ook denkbaar dat het algoritme onvoldoende aansluit bij de doelstellingen en het gebruik ervan moet wordt be\u00ebindigd. Een andere conclusie kan zijn dat het presteert conform verwachting en naar de implementatiefase kan worden gegaan.

"},{"location":"onderwerpen/","title":"Onderwerpen","text":"
  • Bias en non-discriminatie

    Hulp bij het voorkomen van bias en discriminatie in algoritmes. Met aanbevelingen en hulpmiddelen zoals het toetsingskader van het College voor de Rechten van de Mens.

  • Data

    Hulp bij het verantwoord selecteren en verwerken van data voor je algoritmes. Gebruik bijvoorbeeld de toolbox verantwoord datagebruik.

  • Duurzaamheid

    Hulp bij het maken van duurzame keuzes voor hardware en software. Bijvoorbeeld voor de aanschaf van apparaten of het energieverbruik van trainen en data-opslag.

  • Governance

    Hulp bij het verantwoordelijk omgaan met algoritmes. Bijvoorbeeld het vastleggen van rollen en verantwoordelijkheden.

  • Grondrechten

    Hulp bij het beschermen van grondrechten en mensenrechten in algoritmes. Bijvoorbeeld het beoordelen van de gevolgen per grondrecht.

  • Menselijke controle

    Hulp bij de controle als mens over algoritmes. Bijvoorbeeld kunnen ingrijpen bij onbetrouwbare resultaten.

  • Privacy en gegevensbescherming

    Hulp bij verantwoord gebruik van gegevens voor algoritmes, zoals persoonsgegevens en privacygevoelige gegevens.

  • Publieke inkoop

    Hulp bij het publiek inkopen van software met algoritmen en AI. Met hulpmiddelen zoals modelcontracten en de PIANOo-handreiking Inkoop van algoritmes.

  • Technische robuustheid en veiligheid

    Hulp bij het bewaken van de prestaties van algoritmes. En beveiliging van de systemen tegen bijvoorbeeld cyberaanvallen.

  • Transparantie

    Hulp bij transparant zijn over algoritmes, zoals gebruikers informeren en publiceren in het algoritmeregister.

"},{"location":"onderwerpen/bias-en-non-discriminatie/","title":"Bias en non-discriminatie","text":"

Algoritmes worden binnen de overheid veelvuldig ingezet om publieke taken uit te voeren. Dit biedt veel kansen, maar er zijn ook risico's aan verbonden. Hoewel algoritmes in sommige gevallen kunnen bijdragen aan het tegengaan van discriminatie, kan bias in het algoritme leiden tot een ongelijke en oneerlijke behandeling van burgers of groepen, en kan er sprake zijn van discriminerende effecten. In dit bouwblok van het algoritmekader besteden we aandacht aan de onderwerpen bias, eerlijkheid en non-discriminatie. We werken uit wat bias is, hoe bias kan ontstaan, hoe we dit kunnen signaleren, welke maatregelen er genomen kunnen worden om dit te voorkomen en geven we handvatten wat te doen wanneer een (onwenselijke) bias is gesignaleerd.

Hierbij is het goed om op te merken dat het omgaan met het thema bias gedurende het ontwikkelen, inkopen of gebruik van het algoritme vraagt om continue aandacht voor dit onderwerp. Het betreft geen probleem dat eenmalig kan worden weggenomen. Het vraagt voortdurend om reflectie op eerlijkheid en rechtvaardigheid van het systeem.

Dit bouwblok wordt uitgewerkt in vereisten die weergeven wat er vanuit wet- en regelgeving en bestaande toetsingskaders vereist is om bias en discriminatie tegen te gaan. Daarbij worden er suggesties gedaan hoe deze vereisten kunnen worden nageleefd met concrete maatregelen, en welke actoren daarbij betrokken kunnen zijn. Waar mogelijk worden concrete voorbeelden en best practices uit de praktijk gegeven en zal worden aangegeven bij welk type algoritmen of AI dit relevant is. Deze vereisten en maatregelen worden ook gekoppeld aan de algoritme levenscyclus. Dit geeft een beeld van wanneer bepaalde vereisten of maatregelen, bij het ontwikkelen van algoritmen en AI, moeten worden geadresseerd.

Door bij de ontwikkeling van algoritmes rekening te houden met vereisten die voorkomen uit wet- en regelgeving, het type algoritme of AI en de potenti\u00eble risico\u2019s die ontstaan bij het gebruiken ervan, kunnen negatieve gevolgen worden voorkomen.

De onderwerpen bias en non-discriminatie spelen daarom een belangrijke rol bij de totstandkoming van verantwoord ontwikkelde algoritmen en AI en het gebruik daarvan door ambtenaren.

"},{"location":"onderwerpen/bias-en-non-discriminatie/#wat-is-discriminatie-en-bias","title":"Wat is discriminatie en bias?","text":""},{"location":"onderwerpen/bias-en-non-discriminatie/#discriminatie","title":"Discriminatie","text":"

Artikel 1 van de Nederlandse Grondwet verbiedt discriminatie:

Allen die zich in Nederland bevinden, worden in gelijke gevallen gelijk behandeld. Discriminatie wegens godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, handicap, seksuele gerichtheid of op welke grond dan ook, is niet toegestaan.

De prominente positie in de Grondwet benadrukt het belang van het mensenrecht in Nederland. De afgelopen jaren hebben incidenten in de praktijk de aandacht gericht op de discriminatoire effecten die algoritmes kunnen hebben.

"},{"location":"onderwerpen/bias-en-non-discriminatie/#bias","title":"Bias","text":"

Bias is een Engelse term die in het Nederlands wordt vertaald als vooroordeel, vooringenomenheid of neiging. Omdat niet \u00e9\u00e9n van die termen helemaal de lading van het begrip bias dekt, maken we in het Algoritmekader gebruik van de term bias. De term bias heeft verschillende betekenissen afhankelijk van de context waarin het gebruikt wordt en de disciplines die daarbij betrokken zijn. Vaak wordt er naar bias gekeken als een technisch concept, maar het omvat daarnaast ook menselijke aspecten. We starten met een verduidelijking hoe het begrip bias in algoritmische context gebruikt wordt en hoe dit in verhouding staat tot discriminatie. Vervolgens maken we onderscheid tussen drie verschillende aspecten van bias: statistische bias, systemische bias en menselijke bias. Deze drie aspecten van bias kunnen los van elkaar bestaan, maar kunnen juist in combinatie met elkaar tot problemen leiden.

"},{"location":"onderwerpen/bias-en-non-discriminatie/#bias-in-algoritmische-context","title":"Bias in algoritmische context","text":"

Het concept bias wordt in algoritmische context gedefinieerd als een systematisch verschil in behandeling van bepaalde objecten, mensen of groepen in vergelijking met anderen.1

Dit systematische verschil of onderscheid kan zowel op een directe als op een indirecte manier ontstaan.

De Algemene wet gelijke behandeling spreekt van direct onderscheid wanneer een persoon op een andere wijze wordt behandeld dan een ander in een vergelijkbare situatie wordt, is of zou worden behandeld, op grond van godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, nationaliteit, hetero- of homoseksuele gerichtheid 2 of burgerlijke staat.

De Algemene wet gelijke behandeling spreekt van indirect onderscheid indien een ogenschijnlijk neutrale bepaling, maatstaf of handelwijze personen met een bepaalde godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, nationaliteit, hetero- of homoseksuele gerichtheid 2 of burgerlijke staat in vergelijking met andere personen bijzonder treft.

Een geconstateerd systematische onderscheid is niet altijd fout en is niet altijd verboden, maar het vraagt wel altijd om aandacht en zorgvuldigheid. Het geconstateerde onderscheid kan in bepaalde situaties en onder bepaalde strikte voorwaarden gerechtvaardigd zijn. Voor direct onderscheid kan er bijvoorbeeld sprake zijn van een wettelijke uitzondering die het gemaakte onderscheid toelaat. Voor indirect onderscheid geldt dat behalve een wettelijke uitzondering er ook een objectieve rechtvaardiging kan bestaan, waarmee het geconstateerde onderscheid in bepaalde gevallen toelaatbaar kan zijn.

Het maken van een eventueel onderscheid is in sommige gevallen nauw verbonden met het gebruik van algoritmes. Soms worden algoritmes en AI bijvoorbeeld juist ingezet om op een zo objectief mogelijke manier te bepalen welke groepen meer of minder belang hebben bij een andere behandeling. In deze gevallen zal er altijd na moeten worden gegaan of er sprake is van een objectieve rechtvaardiging voor het gemaakte onderscheid.

Wanneer er geen rechtvaardiging is voor het gemaakte onderscheid, spreken we van een verboden direct of indirect onderscheid, ofwel discriminatie. Het algoritme of AI-systeem mag in dat geval niet gebruikt worden. Bias vormt daarmee een risico op discriminatie.

"},{"location":"onderwerpen/bias-en-non-discriminatie/#fairness","title":"Fairness","text":"

In de context van algoritmes wordt de term unfairness gebruikt wanneer er sprake is van een ongerechtvaardigd onderscheid waarbij bepaalde groepen meer bevoordeeld worden dan andere.3 In de Nederlandse taal spreken we dan van oneerlijkheid of onrechtvaardigheid (of in positieve zin van respectievelijk fairness, eerlijkheid en rechtvaardigheid). Wanneer we het hebben over fairness hebben we het minder over de juridische kant van discriminatie en verboden onderscheid. Ook als er wel een objectieve rechtvaardiging bestaat voor een gemaakt onderscheid, kan afgevraagd worden of het gemaakte onderscheid ethisch wenselijk is.

"},{"location":"onderwerpen/bias-en-non-discriminatie/#statistische-bias","title":"Statistische bias","text":"

Statistische bias wordt gedefinieerd als een consistente numerieke afwijking van een schatting ten opzichte van de werkelijke onderliggende waarde.1 Dit fenomeen kan in allerlei verschillende contexten plaatsvinden, niet alleen bij het gebruik van algoritmes. Een voorbeeld is wanneer een bepaalde meting van een waarde niet goed gekalibreerd is en er sprake is van een consistente afwijking van de te meten waarde (bijvoorbeeld dat we consistent 10% hoger meten).

In de context van algoritmes kan deze vorm van bias voorkomen wanneer er een steekproef wordt gebruikt die niet representatief is voor de populatie, en de schattingen op basis van de steekproef vervolgens systematisch afwijken van de werkelijke waarde in de gebruikte doelpopulatie. Statistische bias duidt op een systematische fout die gemaakt wordt door het algoritme. Deze fout kan hetzelfde zijn voor alle groepen en hoeft daardoor niet in alle gevallen te duiden op ongelijke behandeling of discriminerende effecten. Voorbeelden van statistische bias zijn meetfouten (measurement bias), foute data of data op een te simpele manier representeren (representatie bias).

"},{"location":"onderwerpen/bias-en-non-discriminatie/#systemische-bias","title":"Systemische bias","text":"

We spreken van systemische bias wanneer bepaalde processen of systemen op zo'n wijze worden gebruikt dat bepaalde groepen bevoordeeld worden en andere groepen benadeeld worden. Dit is vaak geen bewuste vorm van vooringenomenheid, maar kan bijvoorbeeld ontstaan doordat de meerderheid bestaande regels of normen volgt, en het systeem geoptimaliseerd is op de meerderheid. Systemische bias heeft een sterk institutioneel karakter. Systemische bias wordt daarom ook wel institutionele vooringenomenheid genoemd. Deze vooroordelen zijn vaak verweven in de bredere cultuur en samenleving, en zitten daardoor ook in veel datasets. Een veel voorkomend voorbeeld van systemische bias is historische bias.

"},{"location":"onderwerpen/bias-en-non-discriminatie/#menselijke-bias","title":"Menselijke bias","text":"

Menselijke bias omvat systematische fouten in het menselijk denken. Deze (onbewuste) menselijke vooroordelen zijn vaak impliciet van aard en hebben betrekking op de manier waarop een individu bepaalde informatie waarneemt en verwerkt om bijvoorbeeld een beslissing te nemen. In de context van algoritmes kan deze vorm van bias invloed hebben op de verzamelde data, op de wijze waarop het algoritme wordt geoptimaliseerd en de besluiten die door mensen worden genomen op basis van het algoritme. Voorbeelden van vormen menselijke bias zijn wanneer er voorkeur wordt geven aan de voorspellingen van een algoritme die reeds bestaande overtuigingen bevestigen (bevestigingsbias), of wanneer mensen de neiging hebben om voorkeur te geven aan suggesties die door het algoritme worden gedaan (automatiseringsbias)

"},{"location":"onderwerpen/bias-en-non-discriminatie/#overzicht-van-gebruikte-definities","title":"Overzicht van gebruikte definities","text":"

Onderstaand bieden we een overzicht van de gebruikte definities in het algoritmekader die betrekking hebben op het onderwerp bias en non-discriminatie.

Term of begrip Definitie Bron direct onderscheid indien een persoon op een andere wijze wordt behandeld dan een ander in een vergelijkbare situatie wordt, is of zou worden behandeld, op grond van godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, nationaliteit, hetero- of homoseksuele gerichtheid2 of burgerlijke staat Algemene wet gelijke behandeling indirect onderscheid indien een ogenschijnlijk neutrale bepaling, maatstaf of handelwijze personen met een bepaalde godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, nationaliteit, hetero- of homoseksuele gerichtheid2 of burgerlijke staat in vergelijking met andere personen bijzonder treft. Algemene wet gelijke behandeling discriminatie mensen anders behandelen, achterstellen of uitsluiten op basis van (persoonlijke) kenmerken. College voor de rechten van de mens directe discriminatie de ongelijke behandeling van een persoon of groep personen ten opzichte van andere personen in een vergelijkbare situatie, op grond van een beschermd persoonskenmerk (discriminatiegrond). College voor de rechten van de mens, Discriminatie door risicoprofielen - een mensenrechtelijk toetsingskader indirecte discriminatie wanneer een ogenschijnlijk neutrale bepaling, maatstaf of handelwijze personen met een bepaald beschermd persoonskenmerk (discriminatiegrond) in vergelijking met andere personen in het bijzonder benadeelt, tenzij hiervoor een objectieve rechtvaardiging bestaat. College voor de rechten van de mens, Discriminatie door risicoprofielen - een mensenrechtelijk toetsingskader algoritmische fairness het vakgebied dat bestudeert hoe algoritmische systemen zich moeten gedragen om mensen eerlijk te behandelen, dat wil zeggen zonder discriminatie op grond van beschermde gevoelige kenmerken zoals leeftijd, geslacht, handicap, etnische of raciale afkomst, religie of geloofsovertuiging, of seksuele geaardheid The fairness handbook ground truth (NL vertaling?) waarde van de doelvariabele voor een bepaald item van gelabelde invoergegevens. 5 NEN-EN-ISO/IEC 22989:2023 en 4 etnisch profileren Het gebruik door overheidsinstanties van selectiecriteria als ras, huidskleur, taal, religie, nationaliteit of nationale of etnische afkomst bij de uitoefening van toezichts-, handhavings- en opsporingsbevoegdheden, zonder dat daarvoor een objectieve en redelijke rechtvaardiging bestaat. College voor de rechten van de mens, Discriminatie door risicoprofielen - een mensenrechtelijk toetsingskader discriminatiegrond Beschermde persoonskenmerken op basis waarvan het maken van onderscheid tussen personen verboden is. Bijvoorbeeld: ras, nationaliteit, religie, geslacht, seksuele gerichtheid, handicap of chronische ziekte College voor de rechten van de mens, Discriminatie door risicoprofielen - een mensenrechtelijk toetsingskader risicoprofiel Een verzameling van \u00e9\u00e9n of meer selectiecriteria op basis waarvan een bepaald risico op normovertreding wordt ingeschat en een selectiebeslissing wordt gemaakt. College voor de rechten van de mens, Discriminatie door risicoprofielen - een mensenrechtelijk toetsingskader groep deelverzameling van objecten in een domein die zijn gekoppeld omdat ze gemeenschappelijke kenmerken hebben. ISO/IEC TR 24027:2021 en 4"},{"location":"onderwerpen/bias-en-non-discriminatie/#verschillende-vormen-van-bias","title":"Verschillende vormen van bias","text":"

Omdat bias op verschillende manieren kan ontstaan, zijn er allerlei verschillende vormen van bias, die hieronder gedefinieerd worden. Deze lijst is niet uitputtend.

Begrip Definitie Bron automatiseringsbias de neiging van mensen om de voorkeur te geven aan suggesties van geautomatiseerde besluitvormingssystemen en om tegenstrijdige informatie te negeren die zonder automatisering is verkregen, zelfs als deze correct is ISO/IEC TR 24027:2021 en 4 data bias dataeigenschappen die, als ze niet worden aangepakt, leiden tot AI-systemen die beter of slechter presteren voor verschillende groepen ISO/IEC TR 24027:2021 en 4 statistische bias soort consistente numerieke afwijking in een schatting ten opzichte van de werkelijke onderliggende waarde, inherent aan de meeste schattingen ISO/IEC TR 24027:2021 en 4 historische bias verwijzend naar de langdurige vooroordelen die in de loop der tijd in de samenleving zijn gecodeerd. Verwant aan, maar verschillend van, vooroordelen in historische beschrijving, of de interpretatie, analyse en verklaring van de geschiedenis. Een veel voorkomend voorbeeld van historische vooringenomenheid is de neiging om de wereld te bekijken vanuit een Westers of Europees perspectief NIST, Towards a Standard for identifying and managing bias in artificial intelligence activiteitenbias een soort selectievooroordeel dat optreedt wanneer systemen/platforms hun trainingsgegevens krijgen van de meest actieve gebruikers, in plaats van minder actieve (of inactieve) gebruikers. NIST, Towards a Standard for identifying and managing bias in artificial intelligence versterkingsbias ontstaat wanneer de verdeling over voorspellingsoutputs scheef is in vergelijking met de prior-verdeling van het voorspellingsdoel. NIST, Towards a Standard for identifying and managing bias in artificial intelligence cognitieve bias een brede term die in het algemeen verwijst naar een systematisch patroon van afwijking van rationele oordeels- en besluitvorming. In vele decennia van onderzoek naar oordeelsvorming en besluitvorming is een grote verscheidenheid aan cognitieve vertekeningen ge\u00efdentificeerd, waarvan sommige adaptieve mentale snelkoppelingen zijn die bekend staan als heuristieken. NIST, Towards a Standard for identifying and managing bias in artificial intelligence bevestigingsbias soort menselijke cognitieve bias die de voorkeur geeft aan voorspellingen van AI-systemen die reeds bestaande overtuigingen of hypotheses bevestigen ISO/IEC TR 24027:2021 en 4 implementatie bias ontstaat wanneer systemen worden gebruikt als beslissingshulp voor mensen, omdat de menselijke tussenpersoon kan handelen op voorspellingen op manieren die meestal niet zijn gemodelleerd in het systeem. Het zijn echter nog steeds individuen die het gebruikte systeem gebruiken NIST, Towards a Standard for identifying and managing bias in artificial intelligence evaluatie bias ontstaat wanneer de test- of externe benchmarkpopulaties niet in gelijke mate de verschillende delen van de gebruikerspopulatie vertegenwoordigen of door het gebruik van prestatiemaatstaven die niet geschikt zijn voor de manier waarop het model zal worden gebruikt NIST, Towards a Standard for identifying and managing bias in artificial intelligence meetbias ontstaat wanneer kenmerken en labels benaderingen zijn voor gewenste grootheden, waarbij mogelijk belangrijke factoren worden weggelaten of groeps- of ingangsafhankelijke ruis wordt ge\u00efntroduceerd die leidt tot differenti\u00eble prestaties. NIST, Towards a Standard for identifying and managing bias in artificial intelligence representatie bias ontstaat doordat subgroepen niet willekeurig worden geselecteerd in een steekproef, waardoor trends die voor \u00e9\u00e9n populatie worden geschat, niet generaliseerbaar zijn naar gegevens van een nieuwe populatie NIST, Towards a Standard for identifying and managing bias in artificial intelligence"},{"location":"onderwerpen/bias-en-non-discriminatie/#discriminatiegrond","title":"Discriminatiegrond","text":"

De discriminatiegrond beschrijft de beschermde persoonskenmerken op basis waarvan het maken van onderscheid tussen personen verboden is. Deze gronden zijn in verschillende bronnen vastgelegd.

"},{"location":"onderwerpen/bias-en-non-discriminatie/#de-grondwet","title":"De grondwet","text":"

De Grondwet stelt dat discriminatie wegens:

  • godsdienst
  • levensovertuiging
  • politieke gezindheid
  • ras
  • geslacht
  • handicap
  • seksuele gerichtheid
  • of op welke grond dan ook

niet is toegestaan.

"},{"location":"onderwerpen/bias-en-non-discriminatie/#de-algemene-wet-gelijke-behandeling","title":"De Algemene wet gelijke behandeling","text":"

De Algemene wet gelijke behandeling legt een verbod onderscheid neer op grond van:

  • godsdienst
  • levensovertuiging
  • politieke gezindheid
  • ras
  • geslacht
  • nationaliteit
  • hetero- of homoseksuele gerichtheid 2
  • of burgelijke staat.

Het in deze wet neergelegde verbod van onderscheid geldt niet ten aanzien van indirect onderscheid indien dat onderscheid objectief gerechtvaardigd wordt door een legitiem doel en de middelen voor het bereiken van dat doel passend en noodzakelijk zijn.

"},{"location":"onderwerpen/bias-en-non-discriminatie/#europees-verdrag-voor-de-rechten-van-de-mens","title":"Europees Verdrag voor de Rechten van de Mens","text":"

Het Europees Verdrag voor de Rechten van de Mens, artikel 14 stelt dat het genot van de rechten en vrijheden die in dat verdrag zijn vermeld, moet worden verzekerd zonder enig onderscheid op welke grond dan ook, zoals:

  • geslacht
  • ras
  • kleur
  • taal
  • godsdienst
  • politieke of andere mening
  • nationale of maatschappelijke afkomst
  • het behoren tot een nationale minderheid
  • vermogen
  • geboorte
  • of andere status.
"},{"location":"onderwerpen/bias-en-non-discriminatie/#handvest-van-de-grondrechten-van-de-europese-unie","title":"Handvest van de grondrechten van de Europese Unie","text":"

Het Handvest van de grondrechten van de Europese Unie, artikel 21 stelt dat iedere discriminatie, met name op grond van:

  • geslacht
  • ras
  • kleur
  • etnische of sociale afkomst
  • genetische kenmerken
  • taal
  • godsdienst
  • politieke of andere denkbeelden
  • het behoren tot een nationale minderheid
  • vermogen
  • geboorte
  • een handicap
  • leeftijd
  • of seksuele gerichtheid

is verboden. Daarnaast wordt expliciet vermeld dat binnen de werkingssfeer van de Verdragen en onverminderd de bijzondere bepalingen ervan, iedere discriminatie op grond van nationaliteit verboden is.

Disclaimer

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

"},{"location":"onderwerpen/bias-en-non-discriminatie/#mogelijke-hulpmiddelen-en-methoden","title":"Mogelijke hulpmiddelen en methoden","text":"HulpmiddelenThe Fairness HandbookHandreiking non-discriminatie by designDiscriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader
  1. Zie ISO/IEC TR 24027:2021 en 4 \u21a9\u21a9

  2. Er is een wetsvoorstel om de term 'hetero- of homoseksuele gerichtheid' in de Algmemene wet gelijke behandeling (Awgb) te wijzigingen in 'seksuele gerichtheid'. Met deze wijziging sluit de Awgb aan bij een eerdere wijziging van artikel 1 van de Grondwet.\u00a0\u21a9\u21a9\u21a9\u21a9\u21a9

  3. Zie NEN-EN-ISO/IEC 22989:2023 en 4 \u21a9

  4. Hoewel het gebruik van de NEN-ISO-normen in het Algoritmekader auteursrechtelijk is beschermd, heeft het Nederlands Normalisatie Instituut (NEN) voor het gebruik in het Algoritmekader toestemming verleend. Zie nen.nl voor meer informatie over NEN en het gebruik van hun producten.\u00a0\u21a9\u21a9\u21a9\u21a9\u21a9\u21a9\u21a9\u21a9

  5. De term ground truth impliceert niet dat de gelabelde invoergegevens consistent overeenkomen met de werkelijke waarde van de doelvariabelen.\u00a0\u21a9

"},{"location":"onderwerpen/data/","title":"Verantwoord datagebruik","text":"

Overheden moeten verantwoord omgaan met de data die hun algoritmes gebruiken. De data moet voldoen aan regels voor bijvoorbeeld privacy. De kwaliteit van de data moet goed zijn. En overheden moeten deze gegevens goed beheren. Anders is het algoritme niet betrouwbaar.

"},{"location":"onderwerpen/data/#wat-is-verantwoord-datagebruik","title":"Wat is verantwoord datagebruik?","text":"

Verantwoord datagebruik betekent:

  • Rechtmatig gebruik van gegevens
  • Goede datakwaliteit
  • Goed databeheer
"},{"location":"onderwerpen/data/#rechtmatig-gebruik-van-data","title":"Rechtmatig gebruik van data","text":"

Net als organisaties mogen algoritmes niet zomaar gegevens verzamelen en gebruiken. Dit moet rechtmatig gebeuren: volgens de wettelijke regels. Zo moet je rekening houden met auteursrechten. Ook v\u00f3\u00f3rdat het algoritme in gebruik is, moet je rechtmatig omgaan met data. Dus tijdens het trainen, valideren en testen.

Andere belangrijke regels gaan over privacy. Zo mag je algoritme alleen de minimale persoonsgegevens gebruiken die nodig zijn om het doel te bereiken. Technieken om dit te doen zijn:

  • Anonimiseren: data zoveel mogelijk anoniem maken
  • Pseudonimiseren: data moeilijker herleidbaar maken naar personen
  • Aggregeren: data zoveel mogelijk combineren of samenvoegen tot 1 waarde, zoals een totaal of gemiddelde
"},{"location":"onderwerpen/data/#goede-datakwaliteit","title":"Goede datakwaliteit","text":"

Hoe slechter de datakwaliteit, hoe onbetrouwbaarder de uitkomsten van je algoritme.

Je bepaalt en controleert zelf de kwaliteit van je dataset. Check bijvoorbeeld of alle gegevens juist, compleet en actueel zijn. En herken bias in je data.

"},{"location":"onderwerpen/data/#goed-databeheer-datagovernance-en-datamanagement","title":"Goed databeheer: datagovernance en datamanagement","text":"

Goed databeheer betekent dat je organisatie duidelijke afspraken maakt over het:

  • opslaan en verwerken van data
  • gebruik van data: welke data mag je waarvoor gebruiken?
  • beveiligen van data
  • bewaken van de datakwaliteit, zoals het actueel houden van de gegevens
  • eigenaarschap van data, bijvoorbeeld de partij die het algoritme ontwikkelt
  • documenteren en labelen van data (metadata)

Leg de processen en afspraken hierover vast in de datagovernance van je organisatie. In een datamanagementstrategie beschrijf je hoe je organisatie data verzamelt, ordent en gebruikt. Zo kan je organisatie optimaal gebruikmaken van data.

Hoe goed je organisatie data beheert, check je met datavolwassenheidsmodellen uit de Toolbox verantwoord datagebruik van de Interbestuurlijke Datastrategie (IBDS). Of gebruik de beslishulp datavolwassenheid.

"},{"location":"onderwerpen/data/#belang-van-verantwoord-datagebruik","title":"Belang van verantwoord datagebruik","text":"

Algoritmes kunnen veel schade veroorzaken in de maatschappij als ze de verkeerde gegevens gebruiken.

Met verantwoord datagebruik voorkom je:

  • verkeerde beslissingen doordat je algoritme resultaten baseert op data van slechte kwaliteit
  • discriminerende effecten van algoritmes doordat je data bias bevat
  • lekken van privacygevoelige informatie, zoals persoonsgegevens
  • gebruik van data die niet rechtenvrij zijn, zoals teksten met auteursrechten
  • dat resultaten niet te reproduceren zijn, doordat de data niet goed is opgeslagen
"},{"location":"onderwerpen/data/#hulpmiddelen","title":"Hulpmiddelen","text":"
  • Toolbox verantwoord datagebruik, Interbestuurlijke Datastrategie (IBDS)
  • Richtlijnen voor \u2018FAIR\u2019 data, GO FAIR Foundation
"},{"location":"onderwerpen/duurzaamheid/","title":"Duurzaam werken met algoritmes","text":"

Overheden moeten duurzaam werken met hun ICT, zoals algoritmes. Dit betekent dat je algoritmes inkoopt, ontwikkelt en gebruikt op een manier die vriendelijk is voor mens en milieu.

"},{"location":"onderwerpen/duurzaamheid/#wat-is-duurzaam-werken-met-algoritmes","title":"Wat is duurzaam werken met algoritmes?","text":"

Je werkt duurzaam met algoritmes als je tijdens de hele levenscyclus keuzes maakt die passen bij de duurzame en sociale doelen van de overheid:

  • klimaatneutraal werken in 2030
  • 50% minder gebruik van grondstoffen direct uit de natuur (zoals olie, gas en lithium) in 2030
  • circulair werken in 2050: zonder afval, met alleen hergebruikte grondstoffen
  • meer banen voor mensen met een arbeidsbeperking
  • geen sociale misstanden in internationale productieketens, zoals slechte arbeidsomstandigheden of schending van mensenrechten

Om bij te dragen aan deze doelen, kies je bijvoorbeeld voor:

  • energiezuinig programmeren
  • energiezuinig trainen van AI-systemen
  • dataopslag in een duurzaam of \u2018groen\u2019 datacenter
"},{"location":"onderwerpen/duurzaamheid/#belang-van-duurzaam-werken","title":"Belang van duurzaam werken","text":"

Algoritmes kunnen veel impact hebben op het milieu. De rekenkracht die algoritmes nodig hebben op computers kost elektriciteit. En de datacenters die nodig zijn voor het opslaan van data, verbruiken veel energie, water en grondstoffen. Vooral complexe AI-systemen zoals Large Language Models (LLM\u2019s) verbruiken veel energie door training en gebruik en door opslag van grote datasets in datacenters.

"},{"location":"onderwerpen/duurzaamheid/#help-ons-deze-pagina-te-verbeteren","title":"Help ons deze pagina te verbeteren","text":"

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

"},{"location":"onderwerpen/fundamentele-rechten/","title":"Grondrechten beschermen in algoritmes","text":"

Als overheid moet je de grondrechten van burgers beschermen. Dit geldt ook als je algoritmes gebruikt voor publieke taken.

"},{"location":"onderwerpen/fundamentele-rechten/#wat-is-het-beschermen-van-grondrechten-in-algoritmes","title":"Wat is het beschermen van grondrechten in algoritmes?","text":"

Dit betekent dat je tijdens het ontwikkelen en gebruiken van algoritmes rekening houdt met de fundamentele rechten van de mens:

  • grondrechten uit de Grondwet
  • mensenrechtenverdragen zoals het Europees Verdrag tot bescherming van de rechten van de mens en de fundamentele vrijheden (EVRM).
"},{"location":"onderwerpen/fundamentele-rechten/#belang-van-grondrechten-beschermen","title":"Belang van grondrechten beschermen","text":"

Algoritmes kunnen grondrechten schenden. Een bekend probleem is bias in algoritmes. Hierdoor worden resultaten onbetrouwbaar en kun je mensen ongelijk behandelen.

Belangrijke grondrechten die vaak worden geraakt door algoritmen zijn bijvoorbeeld:

  • recht op persoonsgegevensbescherming
  • verbod op ongelijke behandeling
  • recht op eerbiediging van de persoonlijke levenssfeer

Als overheid moet je hier goed op letten. Doe dit zo vroeg mogelijk in de levenscyclus. De maatregelen die we adviseren, beginnen al bij het ontwerpen en trainen van algoritmes.

"},{"location":"onderwerpen/fundamentele-rechten/#aanbevolen-maatregelen","title":"Aanbevolen maatregelen","text":"idMaatregelenpba-04Overleg regelmatig met belanghebbendenowp-06Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafwegingowp-07Maak een lijst van de meest kwetsbare groepen en bescherm hen extra"},{"location":"onderwerpen/fundamentele-rechten/#hulpmiddelen","title":"Hulpmiddelen","text":"HulpmiddelenAssessment List for Trustworthy Artificial Intelligence (ALTAI)De Ethische Data AssistentImpact Assessment Mensenrechten en AlgoritmesThe Fairness HandbookFramework for Meaningful EngagementHandreiking non-discriminatie by designDiscriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader"},{"location":"onderwerpen/fundamentele-rechten/#help-ons-deze-pagina-te-verbeteren","title":"Help ons deze pagina te verbeteren","text":"

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

"},{"location":"onderwerpen/governance/","title":"Governance van algoritmes binnen je organisatie","text":"

Zorg voor effectieve governance van je algoritmes. Dit is het beleid van je organisatie voor het verantwoordelijk omgaan met algoritmes en AI-systemen. Leg bijvoorbeeld vast wie waarvoor verantwoordelijk is.

"},{"location":"onderwerpen/governance/#wat-is-governance-van-algoritmes-binnen-je-organisatie","title":"Wat is governance van algoritmes binnen je organisatie?","text":"

Algoritme-governance is de manier waarop je organisatie omgaat met algoritmes en AI-systemen. Je maakt duidelijke afspraken over processen, regels en verantwoordelijkheden.

Deze afspraken maak je op 2 niveaus:

"},{"location":"onderwerpen/governance/#organisatieniveau","title":"Organisatieniveau","text":"

Hoe de organisatie met algoritmes in het algemeen omgaat, bijvoorbeeld:

  • richtlijnen en gedragscode voor medewerkers
  • strategie en visie
  • werkwijze
  • teamleden en hun verantwoordelijkheden, zoals chief data officers en algoritmefunctionarissen
"},{"location":"onderwerpen/governance/#toepassingsniveau","title":"Toepassingsniveau","text":"

Dit zijn afspraken over het beheer van de algoritmes zelf, bijvoorbeeld:

  • best practices
  • multidisciplinair ontwikkelen
  • AI-levenscyclusmodellen
"},{"location":"onderwerpen/governance/#belang-van-algoritme-governance","title":"Belang van algoritme-governance","text":"

Zonder governance verlies je grip op het inkopen, ontwikkelen, gebruiken en uitfaseren van algoritmes en AI. Dit vergroot het risico op overtredingen van wetten en regels zoals de AI-verordening, Grondwet, Algemene Verordening Gegevensbescherming (AVG) en Auteurswet.

Goede governance van algoritmes helpt bij het:

  • correct uitvoeren van wetten en regels
  • toepassen van je eigen strategie, doelstellingen en publieke waarden
"},{"location":"onderwerpen/governance/#aanpak-algoritme-governance","title":"Aanpak algoritme-governance","text":"

Algoritme-governance bepaal je zelf als organisatie.

Houd in elk geval rekening met:

  • organisatieverantwoordelijkheden: de minimale voorwaarden om te starten met algoritmes
  • levenscyclus van algoritmes: waar je per fase op moet letten

[!TIP] Zorg dat iemand verantwoordelijk is voor algoritme-governance. En betrek stakeholders.

"},{"location":"onderwerpen/governance/#vereisten","title":"Vereisten","text":"idVereistenaia-01Personeel en gebruikers zijn voldoende AI-geletterdaia-01Verboden AI-systemen mogen niet worden gebruikt.aia-02Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerdaia-03Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteemaia-11Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteemaia-14Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedureaia-15Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaringaia-17Hoog-risico-AI-systemen zijn geregistreerd in de EU-databankaia-20Hoog-risico-AI-systemen worden gebruikt volgens de gebruiksaanwijzingaia-21Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkhedenaia-25Gebruiksverantwoordelijken controleren de registratie van het hoog-risico AI-systeem in de EU-databankaia-28Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluitenaia-31Als AI-modellen voor algemene doeleinden met systeemrisico\u2019s ernstige incidenten veroorzaken, wordt dit gedocumenteerd en gerapporteerdaia-32AI-modellen voor algemene doeleinden met systeemrisico\u2019s zijn voldoende beveiligd tegen cyberaanvallenaia-35Ernstige incidenten door hoog-risico-AI-systemen worden gemeld aan de toezichthouderaia-36Klokkenluiders kunnen veilig melden dat een organisatie zich niet houdt aan de AI-verordeningaut-01Auteursrechten zijn beschermdavg-06Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken"},{"location":"onderwerpen/governance/#aanbevolen-maatregelen","title":"Aanbevolen maatregelen","text":"idMaatregelenorg-01Bepaal of er genoeg experts beschikbaar zijnorg-04Stel beleid op voor een verantwoorde inzet van algoritmes binnen de organisatie.org-03Maak een plan voor het omgaan met risico\u2019sorg-04Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid.org-05Sluit algoritmegovernance aan op bestaande governancestructuren binnen de organisatie.org-06Gebruik een algoritme volwassenheidsmodel om te weten waar de organisatie staatorg-07Richt een algoritmegovernance in met three lines of defenceorg-08Maak gebruik van beslismomenten in de algoritmelevenscyclusorg-09Richt algoritmegovernance op basis van de risicoclassificatie van algoritmes.org-10Taken en verantwoordelijkheden zijn toebedeeld in de algoritmegovernanceorg-11Maak afspraken over het beheer van gebruikersorg-12Controleer en verbeter regelmatig de kwaliteit van het algoritmeorg-13Maak afspraken over het beheer van wachtwoordenorg-14Maak afspraken over het wijzigen van de codepba-01Beschrijf het probleem dat het algoritme moet oplossenpba-02Beschrijf het doel van het algoritmepba-03Beschrijf waarom een algoritme het probleem moet oplossenpba-04Overleg regelmatig met belanghebbendenpba-05Beschrijf de wettelijke grondslag voor de inzet van het algoritmeowp-01Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmesowp-05Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horenowp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.org-02Pas vastgestelde beleidskaders toeowk-02Maak een noodplan voor het stoppen van het algoritmever-03Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleidimp-03Richt de juiste menselijke controle in van het algoritmeimp-06Spreek af hoe de organisatie omgaat met privacy-verzoekenimp-05Spreek af hoe medewerkers omgaan met het algoritme.imp-09Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme en monitor dit proces.imp-01Maak een openbaar besluit over de inzet van het algoritmemon-03Maak een noodplan voor beveiligingsincidenten"},{"location":"onderwerpen/governance/#aanbevolen-hulpmiddelen","title":"Aanbevolen hulpmiddelen","text":"HulpmiddelenOnderzoekskader algoritmes Auditdienst Rijk 2023Toetsingskader Algoritmes Algemene Rekenkamer"},{"location":"onderwerpen/menselijke-controle/","title":"Menselijke controle over algoritmes","text":"

Algoritmes van de overheid moeten onder controle blijven van mensen. Presteert het algoritme niet goed, dan moet een mens dit kunnen aanpassen of stoppen.

"},{"location":"onderwerpen/menselijke-controle/#wat-is-menselijke-controle","title":"Wat is menselijke controle?","text":"

Menselijke controle over een algoritme of AI-systeem betekent dat mensen invloed hebben op de uitkomsten. Mensen moeten het ontwerp van het algoritme kunnen aanpassen. En mensen moeten het algoritme kunnen stoppen. Zo kun je op tijd ingrijpen als er iets fout gaat.

"},{"location":"onderwerpen/menselijke-controle/#belang-van-menselijke-controle","title":"Belang van menselijke controle","text":"

Algoritmes kunnen schade veroorzaken in de maatschappij. Gebruik je een algoritme voor een publieke taak, dan moet je dit continu op een of andere manier controleren.

"},{"location":"onderwerpen/menselijke-controle/#ontwerp","title":"Ontwerp","text":"

Tijdens het ontwerp van een algoritme of AI-systeem controleer je bijvoorbeeld of het algoritme op de juiste manier \u2018getraind\u2019 wordt. Maakt het bijvoorbeeld gebruik van een goede dataset, zonder bias, die representatief is voor de samenleving? En je controleert of het algoritme bepaalde groepen niet benadeelt.

Voordat je een algoritme gaat gebruiken, is het belangrijk om het doel te bepalen.

"},{"location":"onderwerpen/menselijke-controle/#gebruik","title":"Gebruik","text":"

Tijdens het gebruik van een algoritme is menselijke controle belangrijk omdat de werking verandert in de loop der tijd:

  • Situaties kunnen veranderen. Het algoritme kan daarvan niet op de hoogte zijn. Een routeplanner kent bijvoorbeeld niet alle werkzaamheden of veranderingen aan de wegen.
  • AI-systemen leren soms nog bij. En soms is het niet duidelijk op welke data de uitkomsten gebaseerd zijn. Een beeldherkenningssysteem herkent bijvoorbeeld honden op foto\u2019s op basis van de achtergrond in plaats van de hond zelf.
  • Nieuwe mogelijkheden ontstaan door technologische ontwikkelingen. Zo maken leerlingen en studenten massaal gebruik van large language modellen (LLM\u2019s) zoals ChatGPT.
"},{"location":"onderwerpen/menselijke-controle/#mensen","title":"Mensen","text":"

Er is maatschappelijke consensus dat alleen natuurlijke personen in staat zijn om een goede (ethische) afweging te maken over wanneer en welke controle nodig is. Menselijke controle kan je dus niet automatiseren. Mensen mogen zich hierbij wel laten helpen door computers of andere technologie.

"},{"location":"onderwerpen/menselijke-controle/#aanpak-menselijke-controle","title":"Aanpak menselijke controle","text":"

Je kunt op verschillende manieren controle houden over de prestaties van een algoritme:

  • Technische controle: Controle uitoefenen op het algoritme zelf. Je bepaalt bijvoorbeeld dat een AI-systeem alleen mag 'bijleren\u2019 wanneer de data voldoet aan bepaalde voorwaarden voor sociale representativiteit.
  • Contextuele controle: Controle van de omgeving van het algoritme. Je verbiedt bijvoorbeeld dat je organisatie het algoritme gebruikt in situaties met een hoog risico op schade.
  • Controle door kennis: Je probeert de werking en risico\u2019s van je algoritmes zo goed mogelijk te begrijpen. Gaat het om een AI-systeem, dan heb je ook voldoende kennis over AI nodig.

Wanneer en hoe je controle uitoefent, hangt af van het soort algoritme en risico, de levenscyclusfase van je project en je expertise.

Bepaal in elk geval zo vroeg mogelijk wie in welke levenscyclusfase verantwoordelijk is voor menselijke controle. En beschrijf dit in een RACI-matrix of VERI-matrix. Want menselijke controle is nodig in verschillende fases, door verschillende mensen. Er is nooit 1 persoon verantwoordelijk voor de totale controle.

Tijdens het gebruik kun je menselijke controle op de volgende manieren uitoefenen:

  • Human in the loop: Een mens moet de acties starten van het algoritme. Het werkt niet uit zichzelf.
  • Human on the loop: Mensen kunnen acties stoppen van het algoritme.
  • Human above the loop: Mensen houden overzicht en kunnen ingrijpen bij strategische en ethische beslissingen.
  • Human before the loop: Het algoritme interpreteert morele modellen die mensen vooraf bedenken. Deze oplossing is bedoeld voor volledig autonome algoritmes. Dit zijn algoritmes die zelf beslissingen moeten nemen, bijvoorbeeld door tijdsdruk.
"},{"location":"onderwerpen/menselijke-controle/#feedback","title":"Feedback","text":"

Na het bepalen van de manier van controleren, bepaal je de manier waarop je feedback krijgt over het algoritme: Wat voor soort informatie moet bij wie terechtkomen? Aan wie moet een gebruiker bijvoorbeeld rapporteren dat het AI-systeem niet meer goed werkt?

"},{"location":"onderwerpen/menselijke-controle/#aanbevolen-maatregelen","title":"Aanbevolen maatregelen","text":"idMaatregelenorg-12Controleer en verbeter regelmatig de kwaliteit van het algoritmepba-03Beschrijf waarom een algoritme het probleem moet oplossenowk-02Maak een noodplan voor het stoppen van het algoritmeimp-01Stel een werkinstructie op voor gebruikers.imp-03Richt de juiste menselijke controle in van het algoritmeimp-05Spreek af hoe medewerkers omgaan met het algoritme."},{"location":"onderwerpen/menselijke-controle/#hulpmiddelen","title":"Hulpmiddelen","text":"HulpmiddelenAssessment List for Trustworthy Artificial Intelligence (ALTAI)Framework for Meaningful Engagement"},{"location":"onderwerpen/menselijke-controle/#help-ons-deze-pagina-te-verbeteren","title":"Help ons deze pagina te verbeteren","text":"

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

"},{"location":"onderwerpen/privacy-en-gegevensbescherming/","title":"Privacy en gegevensbescherming","text":"

Overheidsinstanties verwerken vaak persoonsgegevens om hun taken uit te voeren en maatschappelijke waarden te cre\u00ebren. Met de opkomst van algoritmes en kunstmatige intelligentie (AI) worden deze gegevens steeds vaker gebruikt om processen te optimaliseren, zoals bij het beoordelen van subsidieaanvragen of het verlenen van vergunningen.

Bij het gebruik van algoritmes is van groot belang om aandacht te besteden aan privacy en gegevensbescherming. Deze technologie\u00ebn vari\u00ebren van eenvoudige rekenregels tot complexe machine learning-modellen en generatieve AI, elk met hun eigen specifieke risico\u2019s. Bijvoorbeeld, eenvoudige AI kan basisberekeningen uitvoeren, terwijl complexere AI-voorspellingen kan doen of informatie kan genereren. Ongeacht de complexiteit is het identificeren van risico\u2019s en het implementeren van passende beheersmaatregelen essentieel om de privacy van burgers te waarborgen en gevoelige gegevens te beschermen.

Bij de inzet van AI in de publieke sector moeten overheidsinstanties rekening houden met de vereisten uit privacywetgeving, zoals de Algemene Verordening Gegevensbescherming (AVG). Dit omvat onder andere het minimaliseren van gegevensgebruik, implementeren van een privacy by design werkwijze waar mogelijk, en het transparant zijn over hoe en waarom (persoons)gegevens worden verwerkt. Het toewijzen van verantwoordelijkheden en het opstellen van duidelijke richtlijnen voor gegevensverwerking zijn belangrijke stappen in dit proces.

Het bouwblok privacy en gegevensbescherming van algoritmes wordt ook ge\u00efntegreerd in de algoritmelevenscyclus. Dit biedt inzicht in wanneer specifieke vereisten en maatregelen tijdens de ontwikkeling van algoritmes moeten worden toegepast. Door deze vereisten in de levenscyclus te integreren, kunnen de gebruikers inzichten opdoen wanneer deze maatregelen kunnen worden ge\u00efmplementeerd.

"},{"location":"onderwerpen/privacy-en-gegevensbescherming/#hulpmiddelen","title":"Hulpmiddelen","text":"HulpmiddelenAssessment List for Trustworthy Artificial Intelligence (ALTAI)Data Protection Impact Assessment"},{"location":"onderwerpen/publieke-inkoop/","title":"Publieke inkoop","text":"

Door middel van publieke inkoop wordt door overheidsinstellingen software ingekocht. Deze software wordt ingekocht om ambtenaren te ondersteunen met hun werkzaamheden om zo maatschappelijk waarden te cre\u00ebren. Het kan bijvoorbeeld gaan om het inkopen van een systeem waarmee een aanvraag voor een subsidie of vergunning kan worden behandeld. Het virtueel vergaderen of het digitaal samenwerken aan documenten zijn hier ook voorbeelden van.

Disclaimer

Het Algoritmekader is nog volop in ontwikkeling. Op deze plek willen we vooral aan de slag gaan op een open en transparante wijze. Het is dus niet definitief. Dat betekent dat er dingen opstaan die niet af zijn en soms zelfs fout. Mocht er iets niet kloppen, laat het ons weten via GitHub.

Software wordt vaak ontwikkeld door gespecialiseerde aanbieders en bevat steeds meer algoritmes. Het komt ook voor dat de overheid deze technologie zelf ontwikkelt. Deze algoritmes kunnen eenvoudig van aard zijn, zoals het maken van een eenvoudige berekening. Zij kunnen complexer van aard zijn, zoals een voorspelling geven of het genereren van informatie. In het laatste geval kan worden gedacht aan ChatGPT, Google Bard of Co-Pilot. Er zijn verschillende type technologie\u00ebn die vallen onder het bereik van algoritmes. In dit kader drukken we deze uit als \u2018rekenregel\u2019, \u2018machine learning\u2019 en \u2018generatieve AI\u2019. Elke technologie heeft eigen bijzondere aandachtspunten. Ook de bijbehorende risico\u2019s kunnen per type verschillen. Het identificeren van deze risico\u2019s en het treffen van beheersmaatregelen is daarbij van belang. Dat geldt in het bijzonder als algoritmes bijdragen aan de totstandkoming van overheidsbesluitvorming en impactvolle beslissingen die burgers en ondernemingen raken.

Door bij publieke inkoop van software met algoritmes rekening te houden met vereisten die voorkomen uit wet- en regelgeving, toepassen van publieke waarden, het type algoritme of AI en de potenti\u00eble risico\u2019s die ontstaan bij het gebruiken ervan, kunnen negatieve gevolgen worden voorkomen. Publieke inkoop speelt daarom een belangrijke rol bij de totstandkoming van verantwoord ontwikkelde algoritmes en het gebruik daarvan door ambtenaren. In dit deel van het Algoritmekader wordt nader ingegaan op deze vereisten. Er worden suggesties gedaan hoe deze vereisten kunnen worden nageleefd en welke rollen daarbij betrokken kunnen zijn. Waar mogelijk worden concrete voorbeelden uit de praktijk gegeven en zal worden aangegeven bij welk type algoritmes dit relevant is.

Het publiek inkopen van algoritmes wordt ook gekoppeld aan de algoritme levenscyclus. Dit geeft een beeld van wanneer bepaalde vereisten en maatregelen, bij het ontwikkelen van algoritmes, moeten worden geadresseerd. Door deze vereisten ook te vertalen naar het inkoopproces, zullen de rollen binnen het inkoopproces beter in staat zijn om te duiden wanneer en hoe dit kan worden geadresseerd. Dit moet bijdragen aan een goed samenspel met aanbieders, zodat de kansen van algoritmes worden benut en de negatieve gevolgen worden voorkomen.

"},{"location":"onderwerpen/publieke-inkoop/#algoritme-levenscyclus","title":"Algoritme levenscyclus","text":"

Algoritmes kunnen een grote impact hebben op onze maatschappij. Daarom is het van belang dat deze op een verantwoorde manier worden ontwikkeld en gebruikt. Het toepassen van de algoritme levenscyclus is hierover een bruikbare leidraad. De algoritme levenscyclus bestaat uit meerdere fasen. De werkzaamheden die noodzakelijk zijn om een verantwoord algoritme of AI te ontwikkelen, kunnen logisch worden gekoppeld aan deze fasen. Deze levenscyclus kan worden gebruikt voor alle typen algoritmes. Het verschilt uiteraard wel per type wat moet worden gedaan en dit is mede afhankelijk van de risico classificatie. Bij hoog risico toepassing zal meer moeten worden gedaan om risico\u2019s te mitigeren dan als er sprake is van lage risico toepassingen. De levenscyclus geeft een bruikbaar overzicht voor leveranciers en opdrachtgevers wanneer welke werkzaamheden moeten worden uitgevoerd. Het laat ook zien welke werkzaamheden moeten zijn afgerond als algoritmes in de markt mogen worden gezet en klaar zijn voor gebruik.

Bij het publiek inkopen van software met bijbehorende algoritmes zijn de wensen van de behoeftesteller en de doelstellingen van de organisatie van groot belang. Dit kan tot verschillende situaties leiden:

\u2022 Een al ontwikkelde kant-en-klare oplossing voldoet direct aan deze wensen en doelstellingen;

\u2022 Een al ontwikkelde oplossing moet eerst worden aangepast voordat deze kan worden gebruikt;

\u2022 Er moet een nieuwe oplossing worden ontwikkeld om te voldoen aan de wensen.

Deze inschatting is dus bepalend wat wel en niet van een product mag worden verwacht. Dit is relevant voor zowel de leverancier als de opdrachtgever. Het is aannemelijk dat als het om risicovolle (nog te ontwikkelen) algoritmes gaat, de opdrachtgever een intensieve bijdrage moet leveren aan de samenwerking om het product te kunnen gebruiken. De opdrachtgever zal bijvoorbeeld moeten aangeven wat de juridische en ethische grenzen zijn van de uiteindelijk werking van het algoritme of AI. Als een kant-en-klare oplossing wordt afgenomen, dan zal de leverancier moeten laten zien dat de ontwikkelde algoritmes voldoen aan alle vereisten en moet dit kunnen aantonen.

De inzichten uit de algoritme levenscyclus kunnen ondersteunen bij bijvoorbeeld de behoeftestelling, het maken van make-or-buy beslissingen, de te hanteren aanbestedingsvorm, de totstandkoming van de selectie- en gunningseisen, contractspecificaties en de uitvoering en management van het contract. De algoritme levenscyclus kan worden geraadpleegd via het tabblad boven aan deze pagina. Per fase en per type algoritme of AI kan worden bekeken aan welke vereisten moet worden voldaan en welke beheersmaatregelen kunnen worden getroffen.

"},{"location":"onderwerpen/publieke-inkoop/#hulpmiddelen","title":"Hulpmiddelen","text":"

Hieronder volgt een overzicht van instrumenten die kunnen worden gebruikt om invulling te geven aan de vereisten en maatregelen.

HulpmiddelenInkoopvoorwaarden"},{"location":"onderwerpen/publieke-inkoop/#bruikbare-informatie-en-bronnen","title":"Bruikbare informatie en bronnen","text":"

Europese modelcontractbepalingen AI-systemen (hoog risico)

Europese modelcontractbepalingen AI-systemen (niet hoog risico)

Contractvoorwaarden voor algoritmes gemeente Amsterdam

Inkoopproces

Community of Practise Digitale Innovatie

"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/","title":"Technische robuustheid en veiligheid","text":"

Algoritmes van de overheid moeten robuust en veilig zijn. Dit betekent dat je algoritmes in elke situatie goed presteren, ook als er iets onverwachts gebeurt. Gaat er toch iets mis, dan is er een noodplan.

"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#wat-is-technisch-robuust-en-veilig","title":"Wat is technisch robuust en veilig?","text":"

Een technisch robuust en veilig algoritme presteert onder elke omstandigheid zoals het bedoeld is.

Een robuust algoritme is:

  • Nauwkeurig: Het algoritme geeft de juiste uitkomst voor het gewenste doel, of meldt dat de uitkomst onzeker is.
  • Betrouwbaar: Ook in nieuwe of onverwachte situaties geeft het algoritme de juiste uitkomst.
  • Reproduceerbaar: In dezelfde situaties vertoont het algoritme hetzelfde gedrag.

Een algoritme is veilig onder deze omstandigheden:

  • Geautoriseerde toegang: Alleen personen en systemen met toestemming kunnen het algoritme gebruiken of beheren.
  • Confidentieel: Het algoritme kan geen vertrouwelijke of gevoelige informatie lekken door aanvallen.
  • Integer: Kwaadwillenden kunnen nergens in de levenscyclus van het algoritme onbedoeld de controle van het model overnemen.
  • Beschikbaar: Je kunt op elk moment het algoritme gebruiken waarvoor het bedoeld is. Gaat dit toch fout, dan ontstaat er geen grote schade.
"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#belang-van-robuuste-veilige-algoritmes","title":"Belang van robuuste, veilige algoritmes","text":"

Algoritmes kunnen grote schade veroorzaken aan de maatschappij. Met een technisch robuust en goed beveiligd algoritme voorkom je:

  • onverwachte schadelijke uitkomsten, zoals verkeerde beslissingen of discriminatie door onvoldoende nauwkeurigheid
  • uitval van het systeem
  • lekken van informatie, zoals persoonsgegevens
  • gebruik van het algoritme voor verkeerde doelen
  • schade door misbruik of aanvallen van buitenaf
"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#gebruik-algoritmes-op-de-juiste-manier","title":"Gebruik algoritmes op de juiste manier","text":"

Gebruik een algoritme alleen voor het juiste doel en op de juiste manier. Dit is de manier die is getest en gecontroleerd. Wanneer je het algoritme gebruikt voor een ander doel of in een verkeerde context, zijn de resultaten niet meer betrouwbaar.

Voorkom dat medewerkers op de verkeerde manier werken met het algoritme. Zij moeten weten wat het algoritme wel en niet kan. En wat ze moeten doen als het algoritme fouten maakt of niet goed werkt. Denk aan technische en organisatorische ondersteuning:

  • Leid medewerkers op.
  • Maak duidelijke afspraken over werkprocessen (governance).
  • Stuur gebruikers in het juiste gebruik via interactie en technische verbeteringen in het ontwerp.
"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#controleer-regelmatig","title":"Controleer regelmatig","text":"

Begin zo vroeg mogelijk met regelmatige controles van de uitkomst en werking van het algoritme. In de praktijk verandert de omgeving en de situatie waarin het algoritme wordt gebruikt. Controleer daarom regelmatig of het algoritme nog werkt zoals het is bedoeld.

"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#voorbeeld","title":"Voorbeeld","text":"

Een algoritme leest kentekens tijdens parkeercontroles. Het herkent de juiste letters en cijfers op elk kenteken. Ook als het bord een andere kleur heeft, op een andere plek zit of vies is. Het algoritme is nauwkeurig en dus robuust.

Een algoritme berekent het risico op fraude door mensen. Maar bij personen uit dezelfde groep geeft het algoritme de ene keer als uitkomst \u2018hoog risico\u2019 en de andere keer \u2018geen risico\u2019. De uitkomst is niet reproduceerbaar. Hierdoor is het algoritme niet robuust.

"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#controles-voorbereiden","title":"Controles voorbereiden","text":"

Bereid de controles voor tijdens de levenscyclusfases probleemanalyse, ontwerp en dataverkenning en datapreparatie. Onderzoek de situatie waarin je organisatie het algoritme gaat gebruiken: Wat zijn de risico\u2019s? Welke onderdelen van het algoritme moet je evalueren? Analyseer de kwaliteit en variatie van de data. Bedenk maatregelen waarmee je de risico\u2019s zoveel mogelijk voorkomt. En bedenk met welke methode je de controles gaat evalueren.

Ontwikkel je het algoritme zelf, controleer dan tijdens de ontwikkeling al wat er gebeurt in de verschillende situaties die je verwacht. Experimenteer met nieuwe combinaties van de inputdata en gebruik verschillende representatieve test-sets.

"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#controles-uitvoeren","title":"Controles uitvoeren","text":"

Voer de controles uit tijdens de ontwikkelfase en de verificatie- en validatiefase. Test het algoritme goed. Evalueer hoe robuust en veilig het algoritme is. Verbeter het algoritme waar nodig. En monitor goed welke data het algoritme gebruikt, zodat je veranderingen in die data snel signaleert. Maak een noodplan voor als blijkt dat het algoritme niet meer werkt zoals het bedoeld was.

Blijf regelmatig controleren tijdens de fases implementatie en monitoring en beheer. Dit zijn de fases waarin je het algoritme gebruikt. Presteert het algoritme niet goed, los het probleem dan op of stop het gebruik.

[!TIP] Houd rekening met concept drift. Dit betekent dat de eigenschappen van je data in de loop van de tijd kunnen veranderen. Hierdoor trekt je algoritme mogelijk verkeerde conclusies. Zo was er v\u00f3\u00f3r 2020 een verband tussen thuiswerken en ziek zijn. Maar sinds de coronacrisis in 2020 is dit verband minder sterk, omdat gezonde mensen vaker thuiswerken.

"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#bescherm-algoritmes-tegen-aanvallen-en-bedreigingen","title":"Bescherm algoritmes tegen aanvallen en bedreigingen","text":"

Beveilig het ICT-systeem waarin het algoritme wordt gebruikt. Dit zijn bijvoorbeeld maatregelen uit de Baseline Informatiebeveiliging Overheid (BIO) die je standaard neemt voor beveiliging van ICT-systemen tegen cyberaanvallen.

Beveilig de algoritmes zelf tegen cybercriminelen. Belangrijke bedreigingen voor algoritmes zijn:

  • Trainingsdata van een AI-model aanpassen, waardoor het later fouten gaat maken tijdens het gebruik.
  • Input van een algoritme aanpassen om het normale gedrag te omzeilen, of om het algoritme specifieke, ongewenste output te laten geven.
  • Een \u2018achterdeurtje\u2019 inbouwen met toegang tot het algoritme, waardoor aanvallers het algoritme kunnen misbruiken.
  • Intellectueel eigendom of kwetsbaarheden afleiden uit de details van een AI-model.
  • Gevoelige informatie afleiden uit de eigenschappen van trainingsdata.

Lees meer in het TNO-rapport Verkenning van het raakvlak cybersecurity en AI.

Aandachtspunten voor het beschermen van algoritmes tegen specifieke dreigingen:

  • Controleer of de trainingsdata geschikt, correct en betrouwbaar is.
  • Controleer of de inputdata geschikt, correct en betrouwbaar is.
  • Houd bij complexe algoritmes rekening met verborgen en onwenselijke functionaliteiten.
  • Train je algoritme om bestand te zijn tegen aanvallen.
  • Stimuleer veilig gebruik van het algoritme door gebruikers.
  • Maak afspraken met leveranciers en controleer de geleverde algoritmes voor gebruik.
  • Test periodiek of het algoritme weerbaar is tegen bekende aanvallen.

Hiermee voorkom je:

  • misleiding, doordat het algoritme niet werkt op de bedoelde manier
  • verkeerde implementatie en daardoor een verkeerde werking

Begin zo vroeg mogelijk met beveiligen. Beveilig in elk geval in de fases ontwikkelen, verificatie en validatie, implementatie, monitoring en beheer en uitfaseren.

"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#verklein-de-kans-op-schade","title":"Verklein de kans op schade","text":"

Veroorzaak zo min mogelijk schade als het toch fout gaat. En maak een noodplan voor incidenten. Het doel van dit plan is ervoor zorgen dat de fout zo min mogelijk gevolgen heeft voor de organisatie en de maatschappij. In het plan staat bijvoorbeeld wie wat moet doen als het systeem uitvalt.

"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#aanbevolen-maatregelen","title":"Aanbevolen maatregelen","text":"idMaatregelenorg-11Maak afspraken over het beheer van gebruikersorg-13Maak afspraken over het beheer van wachtwoordenorg-14Maak afspraken over het wijzigen van de codeowp-04Beschrijf welke techniek gebruikt wordt voor de beoogde toepassingowp-10Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmesowp-24Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstrajectdat-04Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsproceduredat-07Gebruik bij machine learning technieken gescheiden train-, test- en validatiedata en houdt rekening met underfitting en overfitting.owk-01Ontwerp en ontwikkel het algoritme volgens de principes van \u2018security by design\u2019owk-04Maak logbestanden waarin staat wie wanneer toegang had tot de data en de codever-01Controleer regelmatig of het algoritme werkt zoals het bedoeld isimp-02Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie\u2019 te controlerenmon-01Maak back-ups van algoritmesmon-02Beveilig de softwaremon-03Maak een noodplan voor beveiligingsincidentenmon-04Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme."},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#hulpmiddelen","title":"Hulpmiddelen","text":"HulpmiddelenAssessment List for Trustworthy Artificial Intelligence (ALTAI)Baseline Informatiebeveiliging Overheid (BIO)"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#bronnen","title":"Bronnen","text":"
  • Natalia D\u00edaz-Rodr\u00edguez et al, 2023, Connecting the dots in trustworthy Artificial Intelligence: From AI principles, ethics, and key requirements to responsible AI systems and regulation, Information Fusion 99.
  • Andrea Tocchetti, Lorenzo Corti, Agathe Balayn, Mireia Yurrita, Philip Lippmann, Marco Brambilla, and Jie Yang. 2022. A.I. Robustness: a Human-Centered Perspective on Technological Challenges and Opportunities. In ACM, New York, NY, USA
  • Ronan Hamon, Henrik Junklewitz, Ignacio Sanchez, 2020, Robustness and Explainability of Artificial Intelligence: from technical to policy solutions, JRC Technical Report, EUR 30040 EN
  • Bhanu Chander, Chinju John, Lekha Warrier, Gopalakrishnan Kumaravelan, 2024, Toward Trustworthy AI in the Context of Explainability and Robustness, ACM Computing Surveys
  • Niels Brink, Yori Kamphuis, Yuri Maas, Gwen Jansen-Ferdinandus, Jip van Stijn, Bram Poppink, Puck de Haan, Irina Chiscop, 2023, Adversarial AI in de cyber domain, TNO-2023-R10292-EN
"},{"location":"onderwerpen/technische-robuustheid-en-veiligheid/#help-ons-deze-pagina-te-verbeteren","title":"Help ons deze pagina te verbeteren","text":"

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

"},{"location":"onderwerpen/transparantie/","title":"Transparant zijn over algoritmes","text":"

Overheden moeten transparant zijn over hun algoritmes. Dit betekent dat je duidelijke informatie geeft over de algoritmes die je ontwikkelt of gebruikt.

"},{"location":"onderwerpen/transparantie/#wanneer-ben-je-transparant","title":"Wanneer ben je transparant?","text":"

Je draagt bij aan transparantie over algoritmes als je duidelijk uitlegt:

  • dat je algoritmes ontwikkelt of gebruikt
  • voor welk doel je deze algoritmes ontwikkelt of gebruikt
  • wat voor soort algoritmes dit zijn
  • welke code of programmeertaal je hiervoor gebruikt
  • welke data je hiervoor gebruikt
  • hoe uitkomsten tot stand komen
  • hoe belanghebbenden bezwaar kunnen maken tegen gevolgen van het algoritme
"},{"location":"onderwerpen/transparantie/#belang-van-transparantie","title":"Belang van transparantie","text":"

Als je open bent over de algoritmes die je ontwikkelt of gebruikt, kunnen burgers en bedrijven zich beter verdedigen tegen mogelijke nadelige gevolgen. Verkeerd gebruik van algoritmes kan iemands leven namelijk ernstig be\u00efnvloeden. Bijvoorbeeld door discriminatie of een besluit dat niet klopt.

Door uit te leggen hoe het algoritme werkt, kun je de beslissingen van het algoritme makkelijker controleren. Je leert sneller waarom het bepaalde keuzes maakt en waar de zwakke plekken zitten.

Ook je organisatie is makkelijker te controleren. Omdat je transparant bent over algoritmes, kunnen burgers feedback geven. Journalisten zien wat je doet. En andere overheden kunnen hiervan leren.

"},{"location":"onderwerpen/transparantie/#aanpak-transparant-werken","title":"Aanpak transparant werken","text":"

Hoe je transparantie organiseert, hangt af van:

  • het doel van je algoritme
  • het soort algoritme waarmee je werkt
  • wie de gebruikers zijn van het algoritme, bijvoorbeeld medewerkers of burgers
  • de vereisten waar je aan moet voldoen
  • de maatregelen die je neemt
  • de doelgroep die je wil bereiken
  • de levenscyclus-fase van je algoritme

Onderzoek goed welk soort algoritme je gebruikt of wil gebruiken. Hoe groter de impact en het risico, hoe strenger de vereisten.

De keuze voor het soort algoritme bepaalt ook hoe transparant je kunt zijn. Van rekenregels kun je namelijk precies uitleggen hoe deze tot een beslissing komen. Maar complexe AI-systemen zijn vaak een black box: niemand weet precies hoe deze systemen beslissingen maken. Volledige transparantie is dan niet mogelijk. In dat geval moet je de werking zo goed mogelijk onderzoeken. Probeer bijvoorbeeld in elk geval ernstige gevolgen zoals discriminatie te voorkomen.

Tip

Rekenregels zijn makkelijker uit te leggen dan AI-systemen. Als een rekenregel voldoende is voor het bereiken van je doel, dan is het ook makkelijker om transparant te zijn.

"},{"location":"onderwerpen/transparantie/#betrokken-partijen","title":"Betrokken partijen","text":"

Stem je informatie af op de betrokken partij. Zo moeten gebruikers de uitkomst van het algoritme voldoende begrijpen voor het nemen van onderbouwde beslissingen. En belanghebbenden zoals burgers moeten weten dat zij te maken hebben met een algoritme. Zij moeten snel en makkelijk kunnen vinden wat hun rechten zijn en hoe zij in beroep kunnen gaan.

Doelgroep Informeer bijvoorbeeld over Geef de informatie bijvoorbeeld via: Ontwikkelaar de werking, keuzes van het ontwikkelteam technische documentatie Gebruiker hoe uitkomsten tot stand komen, gebruikte data, wat het algoritme wel en niet kan gebruiksinstructies, trainingen Medewerker contactpersonen, algoritmegebruik binnen de organisatie, afspraken over algoritmemanagement (ook wel: algoritmegovernance) intern algoritmeregister, trainingen Belanghebbende (iemand voor wie het algoritme gevolgen heeft) hoe een besluit tot stand kwam, mogelijkheden om bezwaar te maken, contactmogelijkheden brief over het besluit, webpagina over het algoritme Ge\u00efnteresseerde burger algoritmegebruik binnen de organisatie webpagina over het algoritme, algoritmeregister Auditor werking, ontwikkelproces, keuzes van het ontwikkelteam, hoe uitkomsten tot stand komen algoritmeregister, technische documentatie, programmeercode Onderzoeker of journalist algoritmegebruik binnen de organisatie algoritmeregister, technische documentatie, code"},{"location":"onderwerpen/transparantie/#aanbevolen-maatregelen","title":"Aanbevolen maatregelen","text":"idMaatregelenorg-04Stel beleid op voor een verantwoorde inzet van algoritmes binnen de organisatie.org-04Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid.pba-01Beschrijf het probleem dat het algoritme moet oplossenpba-02Beschrijf het doel van het algoritmepba-05Beschrijf de wettelijke grondslag voor de inzet van het algoritmeowp-08Bepaal welke documenten voor hoe lang gearchiveerd moeten wordenowp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.owp-20Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke.owp-22Bepaal in een aanbesteding of algoritmes van een aanbieder bepalende invloed hebben in een besluit richting personenpba-04Stel vast welke betrokkenen ge\u00efnformeerd moeten worden en welke informatie zij nodig hebben.owp-07Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.imp-10Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.org-02Pas vastgestelde beleidskaders toever-03Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleidimp-01Stel een werkinstructie op voor gebruikers.imp-04Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregisterimp-07Vermeld het gebruik van persoonsgegevens in een privacyverklaringimp-08Vermeld het gebruik van persoonsgegevens in het verwerkingsregisterimp-01Maak een openbaar besluit over de inzet van het algoritme"},{"location":"onderwerpen/transparantie/#hulpmiddelen","title":"Hulpmiddelen","text":"HulpmiddelenAssessment List for Trustworthy Artificial Intelligence (ALTAI)Impact Assessment Mensenrechten en AlgoritmesAlgoritmeregisterFramework for Meaningful Engagement"},{"location":"onderwerpen/transparantie/#help-ons-deze-pagina-te-verbeteren","title":"Help ons deze pagina te verbeteren","text":"

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

"},{"location":"overhetalgoritmekader/","title":"Soorten algoritmes","text":"
  • Basiskennis algoritmes en AI

    Overzicht van de belangrijkste vereisten voor overheden die algoritmes of AI-systemen ontwikkelen of gebruiken.

  • Soorten algoritmes

    Om te voldoen aan de vereisten, moet je weten met welk soort algoritme je werkt. Gaat het om simpele rekenregels of een AI-systeem?

  • Risico en impact van algoritmes

    AI-systemen vallen mogelijk onder een risicogroep uit de AI-verordening. En wat voor impact hebben je algoritmes?

  • Woordenlijst

    Uitleg van begrippen die je vaak tegenkomt op deze website.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/","title":"Bijdragen aan het Algoritmekader","text":"

Allereerst, bedankt dat je de tijd hebt genomen om een bijdrage te leveren! \u2764\ufe0f

We waarderen alle soorten bijdragen enorm. Zie die Inhoudsopgave voor verschillende manieren waarop je kan bijdragen aan het Algoritmekader. Zorg ervoor dat je de relevante hoofdstukken even leest voordat je een bijdrage levert. Het zal het voor het team van het Algoritmekader een stuk makkelijker maken en de ervaring voor alle betrokkenen soepeler laten verlopen. We kijken uit naar alle bijdragen! \ud83c\udf89

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#opmerking","title":"Opmerking","text":"

Werken in Github is voor het team Algoritmekader nieuw en experimenteel. Dit vraagt voor ons om een aangepaste werkwijze en hier is bepaalde expertise voor nodig. Het begin is gemaakt en het team Algoritmekader is nog lerende om hier optimaal invulling aan te geven. Hierdoor kan het iets langer duren voordat er wordt gereageerd op suggesties of toevoegingen. We werken aan een duidelijk proces om hier goed mee om te gaan (deze guidelines zijn daar een voorbeeld van). Daarnaast werken we niet aan alle bouwblokken tegelijk. Deze worden \u00e9\u00e9n voor \u00e9\u00e9n opgepakt. Aanbevelingen over onderwerpen die later op de planning staan kunnen daardoor ook iets langer duren om te verwerken, en worden mogelijk pas verwerkt wanneer dit bouwblok wordt uitgewerkt.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#inhoudsopgave","title":"Inhoudsopgave","text":"
  • Code of Conduct
  • Ik heb een vraag
  • Ik wil iets bijdragen
  • Ik wil een fout of bug melden
  • Hoe we werken op GitHub
"},{"location":"overhetalgoritmekader/CONTRIBUTING/#code-of-conduct","title":"Code of Conduct","text":"

Dit project en iedereen die eraan deelneemt, valt onder de Code of Conduct. Door deel te nemen, wordt van je verwacht dat je je aan deze code houdt. Meld onacceptabel gedrag aan algoritmes@minbzk.nl.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#ik-heb-een-vraag","title":"Ik heb een vraag","text":""},{"location":"overhetalgoritmekader/CONTRIBUTING/#maak-een-issue-aan","title":"Maak een issue aan","text":"

Voordat je een Issues gaat aanmaken, kan je bekijken of jouw vraag al tussen de bestaande Issues staat. Wellicht staat er al een issue tussen die jou vraag kan beantwoorden.

Als je jouw vraag nog steeds wilt stellen, kan je een Issue aanmaken.

  1. Gebruik daarvoor de knop new issue.
  2. Schrijf je vraag of opmerking is en geef een heldere toelichting.
  3. Anderen kunnen nu opmerkingen toevoegen aan jouw issue.
  4. Het team van het Algoritmekader zal deze issue labelen als question en pakt jouw issue zo snel mogelijk op. Mogelijk neemt het team van het Algoritmekader contact op voor een verduidelijking of een oplossing.
"},{"location":"overhetalgoritmekader/CONTRIBUTING/#stel-een-vraag-via-mail","title":"Stel een vraag via mail","text":"

Je kan je vragen ook altijd stellen door een mail te sturen naar algoritmes@minbzk.nl.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#ik-wil-iets-bijdragen","title":"Ik wil iets bijdragen","text":"

Er zijn verschillende manieren waarop je kan bijdragen. Zie hieronder de mogelijkheden.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#ter-kennisgeving","title":"Ter kennisgeving","text":"

Wanneer je bijdraagt aan dit project, moet je ermee akkoord gaan dat je 100% van de inhoud hebt geschreven, dat je de benodigde rechten op de inhoud hebt en dat de inhoud die je bijdraagt mag worden geleverd onder de Code of Conduct.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#sluit-je-aan-bij-een-werkgroep","title":"Sluit je aan bij een werkgroep","text":"

Voor sommige bouwblokken wordt er gewerkt met werkgroepen, om de informatie verder uit te werken. Deelname aan een werkgroep kost tijd. Werkgroepen komen regelmatig bij elkaar, en tussendoor worden bepaalde zaken uitgewerkt door werkgroepleden. Wil je op \u00e9\u00e9n van de onderwerpen meewerken? Stuur dan een bericht naar algoritmes@minbzk.nl.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#neem-deel-aan-een-sprint-review-klankbord-demo","title":"Neem deel aan een sprint review / klankbord / demo","text":"

Het team van het algoritmekader werkt in sprints van ongeveer 3 weken. Daarin werken we toe naar de volgende release van het Algoritmekader. Ongeveer eens in de 6 weken vindt er een nieuwe release plaats. Wanneer er een release is, wordt deze altijd toegelicht en gepresenteerd in een open online review / demo. Deze kan je vrijblijvend volgen. Zo blijf je op de hoogte en kun je een bijdrage leveren. Bekijk de agenda op Algoritmes Pleio voor de komende bijeenkomsten.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#ik-wil-een-fout-of-bug-melden","title":"Ik wil een fout of bug melden","text":"

Heb je een foutje gevonden in het Algoritmekader? Dan kan je deze melden door een Issue aan te maken.

Voordat je een Issues gaat aanmaken, kan je bekijken of jouw gevonden fout al tussen de bestaande Issues staat.

Als je de gevonden fout nog steeds wilt melden, kan je een Issue aanmaken.

  1. Gebruik daarvoor de knop new issue.
  2. Beschrijf de fout duidelijk en geef een heldere toelichting. Voeg waar mogelijk een screenshot toe.
  3. Het team van het Algoritmekader zal deze issue labelen als bug en pakt jouw issue zo snel mogelijk op. Mogelijk neemt het team van het Algoritmekader contact op voor een verduidelijking of een oplossing.
"},{"location":"overhetalgoritmekader/CONTRIBUTING/#ik-wil-een-verbetering-voorstellen","title":"Ik wil een verbetering voorstellen","text":"

Heb je een suggestie of wil je een verbetering voorstellen? Dat kan gaan om een compleet nieuwe functionaliteit van de site of om kleine verbeteringen. Het volgen van onderstaande instructie helpt het team van het algoritmekader om je suggestie te begrijpen en gerelateerde suggesties te vinden.

Je kan een suggestie doen door een Issue aan te maken of door een Pull Request te maken.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#voordat-je-een-suggestie-gaat-maken","title":"Voordat je een suggestie gaat maken","text":"
  • Voordat je een suggestie gaat maken, kan je bekijken of jouw suggestie al tussen de bestaande Issues staat. Wellicht bestaat er al een issue die jouw suggestie beschrijft, en zijn we er al mee bezig.
  • Zoek uit of jouw idee past binnen het doel en de scope van het project. Wat zijn de voordelen van deze functionaliteit of toevoeging? Het is aan jou om het team van het Algoritmekader en de community te overtuigen dat dit een nuttige toevoeging is aan het Algoritmekader. Houd in gedachten dat we functioanliteiten willen die nuttig zijn voor de meerderheid van onze gebruikers en niet slechts voor een kleine groep.
"},{"location":"overhetalgoritmekader/CONTRIBUTING/#een-issue-aanmaken","title":"Een issue aanmaken","text":"

Als je jouw suggestie nog steeds wilt doen, kan je een Issue aanmaken.

  1. Gebruik daarvoor de knop new issue.
  2. Beschrijf duidelijk jouw suggestie en geef een heldere toelichting en onderbouwing waarom dit een goede toevoeging zal zijn aan het Algoritmekader
  3. Het team van het Algoritmekader zal deze issue labelen als enhancement en pakt jouw issue zo snel mogelijk op. Mogelijk neemt het team van het Algoritmekader contact op voor een verduidelijking of een oplossing.

Afhankelijk van de complexiteit en het onderwerp van jouw suggestie kan het even duren voordat deze wordt opgepakt door het team van het Algoritmekader.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#een-pull-request-maken","title":"Een pull-request maken","text":"

Kun je niet uit de voeten met de issues? Bijvoorbeeld omdat je verschillende wijzigingsvoorstellen wilt doen? Je kan ook gebruik maken van een Fork en een Pull Request.

Het team van Algoritmekader bekijkt daarna jouw aanpassingen en kan bij akkoord jouw aanpassingen mergen. Er zijn ook andere manieren om een pull request te doen. Meer daarover.

Afhankelijk van de complexiteit en het onderwerp van jouw suggestie kan het even duren voordat deze wordt opgepakt door het team van het Algoritmekader.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#preview-van-een-pull-request","title":"Preview van een pull-request","text":"

We maken gebruik van de tool pr-preview-action om automatisch previews te maken van een pull-request. Dit maakt het mogelijk om de wijzigingen die zijn gedaan in een pull-request al te bekijken in de uiteindelijke omgeving. Wanneer er een pull-request gedaan wordt via een fork, leidt dit helaas tot een error, zie Issue #79. Dit blokkeert de pull-request niet.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#hoe-we-werken-op-github","title":"Hoe we werken op Github","text":"

We werken met Markdown bestanden. Dit is bestandsformaat voor platte tekstbestanden en wordt door veel verschillende tools ondersteund. Dit maakt het eenvoudig om versiebeheer op het Algoritmekader toe te passen.

Daarnaast maken gebruik van mkdocs en material for mkdocs om de informatie op een interactieve wijze inzichtelijk te maken op de website van het Algoritmekader.

"},{"location":"overhetalgoritmekader/CONTRIBUTING/#wil-je-een-nieuwe-pagina-aanmaken","title":"Wil je een nieuwe pagina aanmaken?","text":"

In het mkdocs.yml bestand staan de settings voor deze website. In principe hoef je hier niets aan aan te passen, maar als je een nieuwe pagina wilt aanmaken kan het nodig zijn om hier een aanpassing in te doen. Onderdeel van deze settings is namelijk de navigatie voor de site (welke pagina's zijn zichtbaar, en welke pagina's vallen daaronder). Dit staat in de nav: sectie. Indien je een nieuwe pagina wilt toevoegen, is het vaak nodig deze wijziging ook door te voeren in het mkdocs.yml bestand.

"},{"location":"overhetalgoritmekader/over-het-algoritmekader/","title":"Over het Algoritmekader","text":"

Het Algoritmekader is een hulpmiddel voor overheden die algoritmes, waaronder AI (artifici\u00eble intelligentie), gebruiken. Hierin vind je de wetten en regels, hulpmiddelen en adviezen per situatie. De informatie in het Algoritmekader is nog niet betrouwbaar. Het is een b\u00e8taversie. De definitieve versie verschijnt eind 2024.

"},{"location":"overhetalgoritmekader/over-het-algoritmekader/#verantwoord-gebruik-van-algoritmes","title":"Verantwoord gebruik van algoritmes","text":"

In het Algoritmekader vind je informatie over verantwoord gebruik van algoritmes. Bijvoorbeeld:

  • Wie is waarvoor verantwoordelijk?
  • Hoe voorkom je discriminatie (bias) in een algoritme?
  • Hoe verwerk je gegevens op een veilige manier?
  • Hoe voorkom je mensenrechtenschendingen?
  • Welke inkoopvoorwaarden spreek je af voor algoritmes van een externe partij?

De informatie is bedoeld voor medewerkers van de rijksoverheid, provincies, gemeentes en waterschappen.

"},{"location":"overhetalgoritmekader/over-het-algoritmekader/#informatie-van-de-overheid","title":"Informatie van de overheid","text":"

Het Algoritmekader is een website van het Ministerie van Binnenlandse Zaken en Koninkrijksrelaties. Het team Data, AI en Algoritmes stelt de informatie samen, op basis van:

  • alle wetten en regels, zoals de AI-verordening en de Algemene wet bestuursrecht

  • belangrijke hulpmiddelen, zoals de IAMA (Impact Assessment Mensenrechten en Algoritmes)

  • adviezen en ervaringen van experts, zoals wetenschappers
"},{"location":"overhetalgoritmekader/over-het-algoritmekader/#versies","title":"Versies","text":"

Algoritmekader is de nieuwe naam van het Implementatiekader 'Verantwoorde inzet van algoritmen'. Dit rapport is de eerste versie. Door het verder ontwikkelen van dit rapport ontstond de website Algoritmekader.

Sindsdien verschijnt elke maand een nieuwe b\u00e8taversie van het Algoritmekader. Deze b\u00e8taversies zijn nog niet betrouwbaar. De informatie is onvolledig. Er kunnen fouten in staan.

Versie 2.0 is de definitieve, betrouwbare versie van het Algoritmekader. Deze versie verschijnt eind 2024.

"},{"location":"overhetalgoritmekader/over-het-algoritmekader/#iedereen-mag-meedenken","title":"Iedereen mag meedenken","text":"

De informatie in het Algoritmekader komt open source tot stand. Dat betekent dat iedereen kan meekijken en zijn mening mag geven, of een voorstel mag doen:

  • Geef je vraag of wijziging door.
  • Sluit je aan bij een werkgroep.
  • Doe mee aan een (online) vergadering zoals onze demo na een nieuwe release van het Algoritmekader.
"},{"location":"overhetalgoritmekader/over-het-algoritmekader/#nieuwsbrief","title":"Nieuwsbrief","text":"

Via onze maandelijkse Nieuwsbrief Algoritmes blijf je op de hoogte over de ontwikkelingen van het Algoritmekader.

"},{"location":"overhetalgoritmekader/soorten-algoritmes/","title":"Soorten algoritmes","text":"

Om te voldoen aan de vereisten, moet je weten met welk soort algoritme je werkt. Gaat het om simpele rekenregels of een AI-systeem? En wat voor impact hebben je algoritmes?

"},{"location":"overhetalgoritmekader/soorten-algoritmes/#wanneer-is-het-een-algoritme","title":"Wanneer is het een algoritme?","text":"

Met een algoritme bedoelen we een set regels en instructies die een computer uitvoert, met 1 of meer van deze doelen:

  • problemen oplossen
  • vragen beantwoorden
  • taken of processen uitvoeren
  • besluiten nemen
"},{"location":"overhetalgoritmekader/soorten-algoritmes/#rekenregels","title":"Rekenregels","text":"

Rekenregels (ook wel: regelgebaseerde algoritmes) zijn de meest eenvoudige algoritmes. Dit zijn door mensen bedachte regels die het computersysteem precies moet opvolgen: als x gebeurt, dan doe je y.

Rekenregels:

  • zijn expliciet geprogrammeerd en bedacht door mensen
  • bestaan uit vaste stappen om een taak uit te voeren

Rekenregels zijn niet kunstmatig intelligent (AI). Rekenregels kunnen wel onderdeel zijn van een AI-systeem.

"},{"location":"overhetalgoritmekader/soorten-algoritmes/#voorbeelden","title":"Voorbeelden","text":"
  • Eenvoudige chatbots die burgers advies geven op basis van door mensen bedachte beslisbomen.
  • Ondersteuning berekening uitkering dat adviseert over uitkeringen, op basis van door mensen bedachte beslisbomen.
  • Prestatiemonitor dat risicoscores berekent van scholen, op basis van door mensen bedachte regels.
"},{"location":"overhetalgoritmekader/soorten-algoritmes/#zelflerende-algoritmes","title":"Zelflerende algoritmes","text":"

Zelflerende algoritmes zijn algoritmes die zichzelf trainen. Dit proces heet machinelearning. Hierdoor worden computers intelligent zonder dat mensen dit precies zo programmeren. Dit is een veel voorkomende vorm van AI.

Zelflerende technieken zijn in elk geval:

  • Supervised learning (gecontroleerd leren): Je algoritme leert van gegevens die je labelt met informatie. Je biedt bijvoorbeeld foto\u2019s aan met de labels: dit is wel een kat, dit is geen kat. Voorbeeld: Virtuele assistent Gem.
  • Unsupervised learning (ongecontroleerd leren): Je laat het algoritme zelf patronen en structuren ontdekken in ongestructureerde gegevens zonder labels. Je biedt bijvoorbeeld foto\u2019s aan van dieren die het algoritme zelf moet groeperen. Voorbeeld: Polis voor participatieplatformen.
  • Reinforcement learning (bekrachtiginsleren): Het algoritme leert door straf en beloning. Het doel is zo hoog mogelijk scoren in zo min mogelijk tijd. Je geeft bijvoorbeeld punten als het algoritme foto\u2019s sorteert die op katten lijken. Voorbeeld: I-VRI voor verkeerslichten.
  • Deep learning: Supervised, unsupervised of reinforcement learning gecombineerd met diepe neurale netwerken. Dit zijn kunstmatige neurale netwerken met veel verschillende lagen. Hierdoor kun je nog ingewikkeldere problemen oplossen. Voorbeeld: Geautomatiseerde gezichtsvergelijking bij het RNI-inschrijfproces.
"},{"location":"overhetalgoritmekader/soorten-algoritmes/#ai-systeem","title":"AI-systeem","text":"

Met een AI-systeem bedoelen we een systeem dat kunstmatig intelligent is volgens de Europese AI-verordening. Dit zijn in elk geval systemen die gebruik maken van:

  • supervised learning
  • unsupervised learning
  • reinforcement learning
  • deep learning

Tip

Twijfel je of je algoritme onderdeel is van een AI-systeem? Raadpleeg een expert. Of beschouw het systeem voor de zekerheid als een AI-systeem.

"},{"location":"overhetalgoritmekader/soorten-algoritmes/#risicogroepen-ai-systemen","title":"Risicogroepen AI-systemen","text":"

AI-systemen vallen mogelijk onder een van de risicogroepen uit de AI-verordening:

  • Risico op misleiding
  • Hoog-risico-AI-systemen
  • Verboden AI-systemen

Het hangt ervan af waarvoor je dit AI-systeem gebruikt.

"},{"location":"overhetalgoritmekader/soorten-algoritmes/#impact-van-algoritmes","title":"Impact van algoritmes","text":"

Impactvolle algoritmes moet je publiceren in het Algoritmeregister. Dat moet in elk geval in deze situaties:

  • Je algoritme is onderdeel van een hoog-risico-AI-systeem.
  • Je algoritme heeft invloed op een proces met rechtsgevolgen voor burgers of organisaties. Bijvoorbeeld het wel of niet krijgen van boetes of subsidies.
  • Je algoritme heeft invloed op de manier waarop de overheid burgers of organisaties indeelt, of contact met hen zoekt. Bijvoorbeeld bij het inschatten van risico\u2019s of het signaleren van fraude.
  • Je overheidsorganisatie vindt zelf dat het algoritme impact heeft op de maatschappij. Bijvoorbeeld omdat het algoritme ingewikkeld is, veel data gebruikt, vaak in de media komt of onderzocht wordt door een toezichthouder.

Een impactvol algoritme kan schade veroorzaken aan de maatschappij. Daarom zijn de regels strenger voor impactvolle dan voor niet-impactvolle algoritmes.

Tip

Twijfel je of je algoritme impactvol is of niet? Beschouw het algoritme dan als impactvol.

Meer uitleg en voorbeelden vind je in de Handreiking Algoritmeregister.

"},{"location":"rollen/","title":"Rollen","text":"
  • Beleid en advies

    Dit is degene die gaat over wat wenselijk is en adviseert bij de ontwikkeling en/of inzet van een algoritme. Hierbij horen rollen zoals de beleidsmedewerker, ethicus, CIO-adviseur, architect.

  • Jurist

    Hier komt een tekstje.

  • Ontwikkelaar

    De Ontwikkelaar omvat alle technische expertise.

  • Projectleider

    De projectleider richt zich op het co\u00f6rdineren en aansturen van alle betrokken partijen en processen bij de ontwikkeling van algoritmes.

"},{"location":"rollen/beleid-en-advies/","title":"Beleid en advies","text":"

Dit is degene die gaat over wat wenselijk is en adviseert bij de ontwikkeling en/of inzet van een algoritme. Hierbij horen rollen zoals de beleidsmedewerker, ethicus, CIO-adviseur, architect.

"},{"location":"rollen/jurist/","title":"Jurist","text":""},{"location":"rollen/ontwikkelaar/","title":"Ontwikkelaar","text":""},{"location":"rollen/ontwikkelaar/#algemeen","title":"Algemeen","text":"

De Ontwikkelaar omvat alle technische expertise. Dit zijn professionals die zich bezighouden met het analyseren, ontwikkelen, en implementeren van algoritmes en modellen. Dit zijn de specialisten die zorgen voor de technische kant van de algoritmeontwikkeling, inclusief programmeren, opschonen van data, data-analyse en het ontwerpen van informatieprocessen.

"},{"location":"rollen/ontwikkelaar/#relevantie","title":"Relevantie","text":"

Mensen met technische expertise spelen een cruciale rol bij het verantwoord ontwerpen en ontwikkelen van algoritmes. Zij zorgen ervoor dat algoritmes voldoen aan technische en ethische standaarden, en passen methodes toe om de duurzaamheid, eerlijkheid en transparantie van modellen te waarborgen. Technische experts zijn vaak ook verantwoordelijk voor het testen en optimaliseren van de algoritmes, en voor het implementeren van maatregelen om privacy en gegevensbescherming te waarborgen. In het Algoritmekader zijn er tal van vereisten, maatregelen en hulpmiddelen die specifiek relevant zijn voor technische experts.

"},{"location":"rollen/ontwikkelaar/#bijbehorende-functies","title":"Bijbehorende functies","text":"
  • Data-analist
  • Data-scientist
  • Data-engineer
  • Developer
  • Informatieanalist
  • Softwareontwikkelaar
"},{"location":"rollen/projectleider/","title":"Projectleider","text":""},{"location":"rollen/projectleider/#algemeen","title":"Algemeen","text":"

De projectleider richt zich op het co\u00f6rdineren en aansturen van alle betrokken partijen en processen bij de ontwikkeling van algoritmes. Projectleiders zorgen ervoor dat projecten door de verschillende fasen van de levenscyclus van algoritmes worden geleid, van probleemanalyse tot monitoring & beheer, of zelfs uitfasering.

"},{"location":"rollen/projectleider/#relevantie","title":"Relevantie","text":"

Projectmanagement binnen het Algoritmekader betekent het verbinden van benodigde expertises en het waarborgen dat alle stappen van het ontwikkelproces verantwoord en volgens de gestelde kaders worden uitgevoerd. Projectmanagers maken afspraken over de te navolgen vereisten en stellen prioriteiten in uit te voeren maatregelen. Zij houden contact met opdrachtgevers en verantwoordelijken om te zorgen dat de projectdoelen worden behaald en risico\u2019s worden gemitigeerd. Zij spelen een hoofdrol bij het realiseren van een verantwoorde en effectieve inzet van algoritmes binnen een organisatie.

"},{"location":"rollen/projectleider/#bijbehorende-functies","title":"Bijbehorende functies","text":"
  • Projectleider
  • Product owner
  • Proceseigenaar
  • IT-projectmanager
"},{"location":"voldoen-aan-wetten-en-regels/","title":"Voldoen aan wetten en regels","text":"
  • Vereisten

    Overzicht van de belangrijkste vereisten voor overheden die algoritmes of AI-systemen ontwikkelen of gebruiken.

  • Maatregelen

    Overzicht van aanbevolen maatregelen voor verantwoord gebruik van algoritmes en AI-systemen. Het zijn adviezen om te voldoen aan de vereisten voor overheden. Andere maatregelen zijn ook mogelijk.

  • Hulpmiddelen

    Overzicht van aanbevolen hulpmiddelen voor het verantwoord ontwikkelen, gebruiken, beoordelen en monitoren van algoritmes en AI-systemen.

  • AI-verordening in het kort

    In de AI-verordening staan de Europese regels voor het verantwoord ontwikkelen en gebruiken van AI. Ongewenste AI is verboden vanaf 2 februari 2025. Andere AI-systemen moeten vanaf 2026 of v\u00f3\u00f3r 2030 voldoen aan bepaalde vereisten.

  • Beslishulp AI-verordening

    Stel snel en gemakkelijk vast of de AI-verordening geldt voor jouw overheidsorganisatie. En aan welke vereisten je dan moet voldoen.

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/","title":"AI-verordening in het kort","text":"

In de AI-verordening staan de Europese regels voor het verantwoord ontwikkelen en gebruiken van AI. Ongewenste AI is verboden vanaf 2 februari 2025. Andere AI-systemen moeten vanaf 2026 of v\u00f3\u00f3r 2030 voldoen aan bepaalde vereisten.

Verordening (EU) 2024/1689 (AI-verordening)

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#over-de-ai-verordening","title":"Over de AI-verordening","text":"

De AI-verordening is de eerste uitgebreide wet over artifici\u00eble intelligentie (AI) ter wereld. De regels gelden voor alle Europese lidstaten.

De AI-verordening trad in werking op 1 augustus 2024 en gaat stap voor stap gelden. De eerste regels gaan in op 2 februari 2025. Vanaf 2 augustus 2025 geldt de volgende set regels. Op 2 augustus 2027 gaan de laatste regels in. Dan is de hele AI-verordening van kracht.

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#europese-regels-voor-het-ontwikkelen-en-gebruiken-van-ai","title":"Europese regels voor het ontwikkelen en gebruiken van AI","text":"

De AI-verordening geldt in deze 3 situaties samen:

  • Je ontwikkelt of gebruikt AI.
  • Dit doe je namens een overheid, bedrijf of andere organisatie.
  • Je organisatie is gevestigd in een EU-land.

Het maakt niet uit waar je AI-producten ontwikkelt. Ontwikkel je buiten de EU, maar is je organisatie gevestigd in een EU-land? Dan geldt de EU-verordening.

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#verantwoord-gebruik-van-ai","title":"Verantwoord gebruik van AI","text":"

Het doel van de AI-verordening is om verantwoord gebruik van AI te stimuleren in de hele EU. Daarom gelden in alle EU-landen dezelfde regels voor het:

  • Verkleinen van risico\u2019s voor de gezondheid, veiligheid en grondrechten van mensen
  • Beschermen van de democratie, de rechtsstaat en het milieu

Het gaat dan om nieuwe risico\u2019s, zoals misleiding en discriminatie door AI-systemen. Bestaande regels zoals de Algemene verordening gegevensbescherming (AVG) en de Algemene wet bestuursrecht (Awb) beschermen voor een deel tegen de risico\u2019s van AI. De AI-verordening vult deze regels aan.

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#definitie-van-een-ai-systeem","title":"Definitie van een AI-systeem","text":"

De AI-verordening geldt voor AI-systemen. Volgens de verordening is dit:

'(\u2026) een op een machine gebaseerd systeem dat is ontworpen om met verschillende niveaus van autonomie te werken en dat na de uitrol aanpassingsvermogen kan vertonen, en dat, voor expliciete of impliciete doelstellingen, uit de ontvangen input afleidt hoe output te genereren zoals voorspellingen, inhoud, aanbevelingen of beslissingen.'

Hieronder vallen systemen die kunstmatig intelligent zijn door zelflerende technieken zoals:

  • supervised learning
  • unsupervised learning
  • reinforcement learning (bekrachtiginsleren)
  • deep learning

Onder AI-systemen vallen ook systemen die gebruik maken van op logica en kennis gebaseerde benaderingen (knowledge and logic-based approaches) die leren, redeneren of modelleren mogelijk maken.

Symbolische AI is meestal ook een AI-systeem.

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#uitzondering","title":"Uitzondering","text":"

Onder AI-systemen vallen geen systemen die gebaseerd zijn op door mensen gemaakte regels om automatisch handelingen uit te voeren.

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#risicogroepen","title":"Risicogroepen","text":"

De AI-verordening deelt AI op in risicogroepen. Hoe groter het risico van AI voor de samenleving, hoe strenger de regels uit de AI-verordening. Het hangt ervan af waarvoor je dit AI-systeem gebruikt.

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#risico-op-misleiding","title":"Risico op misleiding","text":"

Dit zijn AI-systemen die je gebruikt voor:

  • interactie met mensen, zoals AI-chatbots
  • genereren van content, zoals afbeeldingen laten maken door Dall-E en of audio en tekst

Over deze systemen moet je transparant zijn. Gebruikers mogen niet denken dat zij te maken hebben met echte mensen of originele content.

Zie AI-verordening, hoofdstuk IV.

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#hoog-risico-ai-systemen","title":"Hoog-risico-AI-systemen","text":"

Dit zijn AI-systemen die je gebruikt als veiligheidsonderdeel van bepaalde producten of AI-systemen die je gebruikt voor bepaalde diensten of processen.

'Gebruiken als veiligheidsonderdeel' betekent dat je AI-systeem een belangrijke rol speelt in de veiligheid van een product. En dit product valt onder de harmonisatiewetgeving van de EU, zoals:

  • machines
  • speelgoed
  • liften
  • uitrusting en beveiligingssystemen voor plaatsen met ontploffingsgevaar
  • radioapparatuur
  • drukapparatuur
  • pleziervaartuigen
  • kabelbaaninstallaties
  • gastoestellen
  • medische hulpmiddelen
  • hulpmiddelen voor het testen van menselijk materiaal (in-vitrodiagnostiek)
  • auto-industrie
  • luchtvaartindustrie

Zie AI-verordening, bijlage I.

'Gebruik voor bepaalde diensten of processen' zijn:

  • Biometrie, zoals het herkennen of indelen van mensen op basis van hun vingerafdruk, gezicht of andere lichamelijke kenmerken.
  • Kritieke infrastructuur, zoals het veilig houden van digitale netwerken en verkeersnetwerken en het leveren van elektriciteit, water, gas en warmte.
  • Onderwijs en beroepsopleiding, zoals het bepalen welke studenten je toelaat en het beoordelen van hun prestaties of gedrag.
  • Werkgelegenheid, personeelsbeheer en toegang tot zelfstandige arbeid, zoals het werven en selecteren van mensen, besluiten nemen die invloed hebben op hun contract en het beoordelen van hun prestaties of gedrag.
  • Essenti\u00eble particuliere en openbare diensten, zoals bepalen wie recht heeft op uitkeringen, gezondheidszorg en andere belangrijke diensten en wie noodhulp krijgt van politie, brandweer en ambulance, het beoordelen van iemands financi\u00eble situatie, fraude opsporen en het bepalen van risico\u2019s en prijzen voor levensverzekeringen en ziektekostenverzekeringen.
  • Rechtshandhaving, zoals iemands kans inschatten om slachtoffer of dader te worden, het gebruik van een leugendetector, het beoordelen van bewijsmateriaal en het opsporen van verdachten.
  • Migratie, asiel en grenzen, zoals inschatten wat de kans is dat iemand gevaarlijk of illegaal is, het behandelen van aanvragen en klachten en het herkennen of opsporen van mensen.
  • Rechtsbedeling en democratische processen, zoals het uitleggen van de wet aan een rechtbank, gerechtshof of de Hoge Raad, advies geven bij een geschil of het be\u00efnvloeden van de uitslag van een verkiezing.

Zie AI-verordening, bijlage III.

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#verboden-ai-systemen","title":"Verboden AI-systemen","text":"

Dit zijn AI-systemen die:

  • misleiden
  • misbruik maken van kwetsbaarheden of gevoelige situaties, zoals het overhalen van mensen met schulden om iets te kopen
  • sociale scores bijhouden voor gedrag van mensen en hen hiervoor straffen
  • beoordelen hoe groot het risico is dat iemand een strafbaar feit pleegt
  • afbeeldingen van gezichten \u2018scrapen\u2019 (verzamelen) via internet of bewakingscamera\u2019s en deze opslaan in een databank
  • emoties herkennen van mensen op hun werkplek of op school
  • biometrisch categoriseren: mensen indelen in gevoelige categorie\u00ebn zoals ras en geloof, op basis van lichamelijke kenmerken zoals huidskleur
  • biometrisch identificeren op afstand voor rechtshandhaving, zoals gezichten herkennen via camera\u2019s op een openbaar plein (hiervoor gelden uitzonderingen in ernstige situaties zoals ontvoeringen en terrorisme)

Zie AI-verordening, artikel 5.

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#2-februari-2025-stoppen-met-verboden-ai","title":"2 februari 2025: stoppen met verboden AI","text":"

Organisaties die verboden AI ontwikkelen of gebruiken, moeten deze producten v\u00f3\u00f3r 2 februari 2025 uitfaseren.

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#2-augustus-2026-ai-ontwikkelen-volgens-vereisten","title":"2 augustus 2026: AI ontwikkelen volgens vereisten","text":"

Organisaties die AI-systemen ontwikkelen, moeten ervoor zorgen dat deze producten v\u00f3\u00f3r 2026 voldoen aan bepaalde vereisten, zoals:

  • Personen die toezicht houden op het systeem beschikken over de juiste kennis, kunde en autoriteit.
  • Inputdata is voldoende relevant en representatief, voor zover dat mogelijk is.
  • Als een gebruiksverantwoordelijke aanneemt dat het systeem niet meer voldoet aan de eisen uit de AI-verordening, stelt deze de aanbieder op de hoogte en onderbreekt het gebruik.
  • Organisaties die beslissingen nemen over mensen met behulp van een hoog-risico-AI-systeem, informeren deze mensen hierover.
  • Organisaties die AI gebruiken voor emotieherkenning of biometrische categorisatie van mensen, informeren deze mensen hierover.
"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#toezicht","title":"Toezicht","text":"
  • Nationale toezichthouders: controleren organisaties en kunnen straffen opleggen zoals een product uit de handel nemen
  • AI-board: Europese raad voor artifici\u00eble intelligentie (nog in oprichting)
  • AI-bureau: stelt richtlijnen op voor de AI-board
  • Wetenschappelijk panel: advies van wetenschappers
  • Adviesforum: advies van belanghebbenden
"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#beslishulp-ai-verordening","title":"Beslishulp AI-verordening","text":"

Met de beslishulp AI-verordening bepaal je snel en gemakkelijk of jouw AI-product onder de AI-verordening valt. En wat je dan moet doen.

"},{"location":"voldoen-aan-wetten-en-regels/ai-verordening/#help-ons-deze-pagina-te-verbeteren","title":"Help ons deze pagina te verbeteren","text":"

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/","title":"Hulpmiddelen","text":"

Overzicht van aanbevolen hulpmiddelen voor het verantwoord ontwikkelen, gebruiken, beoordelen en monitoren van algoritmes en AI-systemen.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/#richtlijnen-en-andere-hulpmiddelen","title":"Richtlijnen en andere hulpmiddelen","text":"

Met hulpmiddelen bedoelen we hulpmiddelen voor verantwoord en effectief gebruik van algoritmes en AI-systemen, zoals:

  • richtlijnen
  • standaarden
  • leidraden
  • handboeken

Deze hulpmiddelen helpen je bij het op een rij zetten, beoordelen en verbeteren van de kenmerken, prestaties, effecten en risico\u2019s van algoritmes en AI.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/#hoe-we-hulpmiddelen-selecteren","title":"Hoe we hulpmiddelen selecteren","text":"

Hulpmiddelen die we aanbevelen, zijn:

  • relatief bekend onder ambtenaren
  • in gebruik door overheid, wetenschap of industrie
  • positief beoordeeld door gebruikers
  • geschikt voor algoritmes of AI-systemen van overheden

Staat een instrument niet in onze selectie, dan kan het nog steeds een goed instrument zijn voor jouw organisatie. Er zijn dus meer hulpmiddelen mogelijk. We maken een selectie om 2 redenen:

  • Een selectie is duidelijker. Als we alle hulpmiddelen aanbieden, is het voor gebruikers moeilijker te bepalen welk instrument of welke combinatie het meest geschikt is. Daarvoor lijken de hulpmiddelen te veel op elkaar.
  • Een selectie kunnen we controleren op kwaliteit. We kunnen niet alle hulpmiddelen controleren.
"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/#sommige-hulpmiddelen-zijn-verplicht","title":"Sommige hulpmiddelen zijn verplicht","text":"

Als een instrument verplicht is, staat dit er duidelijk bij. Een verplicht hulpmiddel is bijvoorbeeld de Data protection impact assessment (DPIA).

De meeste hulpmiddelen zijn niet verplicht. Bepaal zelf of je er gebruik van maakt.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/#overzicht-hulpmiddelen","title":"Overzicht hulpmiddelen","text":"HulpmiddelenAssessment List for Trustworthy Artificial Intelligence (ALTAI)Baseline Informatiebeveiliging Overheid (BIO)De Ethische Data AssistentData Protection Impact AssessmentImpact Assessment Mensenrechten en AlgoritmesAlgoritmeregisterThe Fairness HandbookFramework for Meaningful EngagementHandreiking non-discriminatie by designInkoopvoorwaardenDiscriminatie door risicoprofielen - Een mensenrechtelijk toetsingskaderOnderzoekskader algoritmes Auditdienst Rijk 2023StandaardenToetsingskader Algoritmes Algemene Rekenkamer"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/#help-ons-deze-pagina-te-verbeteren","title":"Help ons deze pagina te verbeteren","text":"

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/ALTAI/","title":"Assessment List for Trustworthy Artificial Intelligence (ALTAI)","text":"

OntwerpOntwikkelenJuristOntwikkelaarProjectleiderBeleid en adviesPrivacy en gegevensbeschermingDuurzaamheidFundamentele rechtenTechnische robuustheid en veiligheidTransparantieMenselijke controleData

Direct naar de ALTAI

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/ALTAI/#hulpmiddel","title":"Hulpmiddel","text":"

In 2019 publiceerde de High-Level Expert Group on Artificial Intelligence (AI HLEG), opgericht door de Europese Commissie, de Ethics Guidelines for Trustworthy Artificial Intelligence. De ALTAI is een hulpmiddel dat ontwikkelaars en organisaties helpt hun AI-systemen te beoordelen, gebaseerd op deze Ethics Guidelines for Trustworthy Artificial Intelligence. Het helpt te bepalen of het AI-systeem dat wordt ontwikkeld, ingezet, aangeschaft of gebruikt, voldoet aan zeven vereisten van betrouwbare AI:

  • Menselijke tussenkomst en toezicht;
  • Technische robuustheid en veiligheid;
  • Privacy en gegevensbeheer;
  • Transparantie;
  • Diversiteit, non-discriminatie en eerlijkheid;
  • Maatschappelijk en ecologisch welzijn;
  • Verantwoordelijkheid

De ALTAI is bedoeld voor zelfevaluatie. Het hulpmiddel is verankerd in de bescherming van de fundamentele rechten van mensen, de term die in de Europese Unie wordt gebruikt om te verwijzen naar de mensenrechten die zijn vastgelegd in de EU-verdragen, het Handvest van de Grondrechten, en het internationale mensenrechtenrecht.

De ALTAI is bedoeld voor flexibele inzet: organisaties kunnen gebruikmaken van de relevante onderdelen van dit hulpmiddel voor een specifiek AI-systeem of er elementen aan toevoegen die zij passend achten, rekening houdend met de sector waarin zij opereren. Het helpt organisaties te begrijpen wat betrouwbare AI inhoudt, in het bijzonder welke risico's een AI-systeem zou kunnen meebrengen en hoe deze risico's kunnen worden geminimaliseerd terwijl de kansen van AI worden gemaximaliseerd. Organisaties halen het meeste waarde uit de ALTAI door de gestelde vragen uitgebreid te beantwoorden, die zijn bedoeld om zorgvuldige reflectie te stimuleren en passende vervolgacties aan te formuleren, en een organisatiecultuur te bevorderen die zich inzet voor de ontwikkeling van betrouwbare AI-systemen. Het vergroot het bewustzijn van de mogelijke impact van AI op de samenleving, het milieu, consumenten, werknemers en burgers (in het bijzonder kinderen en mensen die tot gemarginaliseerde groepen behoren).

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/ALTAI/#relevantie","title":"Relevantie","text":"

De ALTAI biedt houvast bij het evalueren van in hoeverre een betreffend AI-systeem voldoet aan de zeven vereisten van betrouwbare AI, zoals geformuleerd door de EU. Deze zeven vereisten en de ALTAI hebben samen de basis gevormd voor de AI-verordening.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/ALTAI/#auteur","title":"Auteur","text":"

De ALTAI is ontwikkeld door de High-Level Expert Group on Artificial Intelligence van de Europese Commissie.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/ALTAI/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"Maatregelpba-03 - Beschrijf waarom een algoritme het probleem moet oplossenowp-06 - Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafwegingimp-03 - Richt de juiste menselijke controle in van het algoritme6-imp-06-proces-privacyrechtenmon-02 - Beveilig de softwarepba-05 - Beschrijf de wettelijke grondslag voor de inzet van het algoritmeowp-03 - Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag3-dat-03-persoonsgegevens-beschrijvendat-04 - Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedureowp-07 - Maak een lijst van de meest kwetsbare groepen en bescherm hen extraimp-04 - Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregisterver-01 - Toets het algoritme op biasver-01 - Controleer regelmatig of het algoritme werkt zoals het bedoeld isowk-03 - Analyseer de privacy-risico\u2019s en neem maatregelen om deze risico\u2019s laag te houdenowk-01 - Ontwerp en ontwikkel het algoritme volgens de principes van \u2018security by design\u2019"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/BIO/","title":"Baseline Informatiebeveiliging Overheid (BIO)","text":"

OntwerpImplementatieMonitoring en beheerJuristOntwikkelaarProjectleiderTechnische robuustheid en veiligheid

Direct naar de BIO

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/BIO/#hulpmiddel","title":"Hulpmiddel","text":"

De BIO is het basisnormenkader voor informatiebeveiliging voor alle overheidslagen, waardoor een gezamenlijke norm voor informatiebeveiliging is ontstaan. Het gebruik van 1 normenkader voor de gehele overheid biedt een aantal voordelen:

  • Het versterken van de informatieveiligheid door betere afstemming binnen ketens van overheden en andere partijen;
  • Administratieve lastenverlichting bij overheid en bedrijven, zowel afnemers als leveranciers, door uniforme beveiligingsnormen bij de overheid;
  • Aansluiting bij internationale regelgeving en standaarden;
  • Vermindering van onderhoudskosten.

Op dit moment wordt er gewerkt aan de BIO2.0. Omdat de BIO2.0 pas eind 2024 van kracht zal worden, is op 1 juni 2023 de handreiking BIO2.0-opmaat opgeleverd. In deze handreiking is de indeling van de controls, doelstellingen en overheidsmaatregelen in deel 2 van de BIO in lijn gebracht met de 2022-versie van de ISO-27002. Naast tekstuele wijzigingen, zijn ook een aantal overheidsmaatregelen geactualiseerd, vanwege nieuwe dreigingen, zoals ransomware. Naast de verhoging van de feitelijke veiligheid, wordt ook geanticipeerd op aanpassingen die in de BIO2.0 zullen worden doorgevoerd. Overheidsorganisaties doen er goed aan deze actualisatie in hun beveiliging door te voeren.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/BIO/#relevantie","title":"Relevantie","text":"

Iedere overheidsorganisatie is verplicht de BIO in te voeren. De BIO is in december 2018 vastgesteld door de ministerraad voor de Rijksoverheid. Daarvoor was door de gemeenten, waterschappen en provincie reeds besloten tot invoering van de BIO. De overheidslagen zijn per 1 januari 2019 gestart met de implementatie van de BIO. Iedere overheidslaag heeft daarvoor zelf een implementatiepad opgesteld. De minister van BZK heeft bepaald dat in het digitale verkeer met het Rijk de BIO wordt gehanteerd.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/BIO/#auteur","title":"Auteur","text":"

De interbestuurlijke werkgroep-BIO draagt zorg voor het onderhoud op de BIO. Onder het voorzitterschap van BZK zijn in de werkgroep de 4 overheidskoepels vertegenwoordigd: CIO Rijk, Vereniging Nederlandse Gemeenten, InterProvinciaal Overleg en Unie van Waterschappen. Verder bestaat de werkgroep uit een aantal grote uitvoeringsorganisaties, het Forum Standaardisatie, het Nationaal Cybersecurity Centrum en het Centrum voor Informatiebeveiliging & Privacybescherming. Besluitvorming over de BIO vindt plaats in het kern-IBO, waarin onder voorzitterschap van BZK vertegenwoordigers van de 4 overheidskoepels zitting hebben.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/BIO/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"MaatregelNone"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/DEDA/","title":"De Ethische Data Assistent","text":"

ProbleemanalyseOntwerpBeleid en adviesJuristOntwikkelaarProjectleiderDataFundamentele rechten

Direct naar DEDA

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/DEDA/#hulpmiddel","title":"Hulpmiddel","text":"

DEDA is ontwikkeld door de Data School van de Universiteit Utrecht en bestaat uit een toolkit die helpt bij het in kaart brengen van ethische kwesties bij dataprojecten, bij het documenteren van het beraadslagingsproces en bij de bevordering van de verantwoording aan de diverse stakeholders en het publiek.

DEDA bestaat uit een poster voor brainstormsessies, een interactieve vragenlijst en een handleiding. Alle tools zijn gepubliceerd door de Data School van de Universiteit Utrecht.

DEDA bevordert verantwoordingsplicht, onderwijst gebruikers, communiceert problemen en ondersteunt projectmanagement.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/DEDA/#relevantie","title":"Relevantie","text":"

DEDA is een belangrijk hulpmiddel omdat het helpt bij de vroege identificatie en bespreking van ethische kwesties in dataprojecten. Net als de IAMA, biedt DEDA een gestructureerde aanpak om de implicaties van datagebruik en algoritmische besluitvorming te beoordelen. Het ondersteunt overheden bij het naleven van het zorgvuldigheidsbeginsel en maakt ethische afwegingen inzichtelijk als onderdeel van de besluitvorming. Door een interactieve vragenlijst en documentatie bevordert DEDA verantwoordingsplicht en transparantie.

DEDA stimuleert interdisciplinaire samenwerking en helpt beleidsmakers, juristen en ontwikkelaars de ethische dimensies van data-analyse beter te begrijpen. Dit draagt bij aan zorgvuldige en rechtvaardige datagedreven oplossingen binnen de publieke sector. DEDA draagt bij aan transparantie en uitlegbaarheid van datagebruik, essentieel voor publiek vertrouwen.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/DEDA/#auteur","title":"Auteur","text":"

DEDA is ontwikkeld door de Data School van de Universiteit Utrecht. DEDA is in nauwe samenwerking met data-analisten ontwikkeld. Inmiddels is DEDA een wijdverspreid instrument, waar de Utrecht Data School ook trainingen en begeleiding bij geeft. Via deze link is meer informatie te vinden.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/DEDA/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"Maatregelpba-03 - Beschrijf waarom een algoritme het probleem moet oplossen2-owp-02-gebruikte-data"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/DPIA/","title":"Data Protection Impact Assessment","text":"

ProbleemanalyseOntwerpDataverkenning en datapreparatieBeleid en adviesJuristProjectleiderPrivacy en gegevensbescherming

Direct naar de DPIA

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/DPIA/#hulpmiddel","title":"Hulpmiddel","text":"

Is je organisatie van plan persoonsgegevens te verwerken, maar levert dat waarschijnlijk een hoog privacyrisico op? Dan is je organisatie verplicht eerst een 'data protection impact assessment' (DPIA) uit te voeren. Als organisatie moet je zelf bepalen of de gegevensverwerking een hoog privacyrisico oplevert. En je dus een DPIA moet uitvoeren. De volgende criteria kunnen hierbij helpen:

  • Wat er in de Algemene verordening gegevensbescherming (AVG) staat over wanneer je een DPIA moet uitvoeren.
  • De lijst van de Autoriteit Persoonsgegevens (AP) met soorten verwerkingen waarvoor je een DPIA moet uitvoeren.
  • De 9 criteria voor een DPIA van de Europese privacytoezichthouders.

De AVG geeft aan dat je in ieder geval een DPIA moet uitvoeren als je als organisatie:

  • Systematisch en uitgebreid persoonlijke aspecten van mensen beoordeelt en dit gebeurt op basis van geautomatiseerde verwerking van persoonsgegevens, waaronder profiling. En hierop besluiten baseert die gevolgen hebben voor mensen. Bijvoorbeeld dat zij geen lening kunnen afsluiten. Een voorbeeld hiervan is creditscoring.
  • Op grote schaal bijzondere persoonsgegevens verwerkt.
  • Strafrechtelijke gegevens verwerkt.
  • Op grote schaal en systematisch mensen volgt in een publiek toegankelijk gebied. Bijvoorbeeld met cameratoezicht.

Een DPIA moet in een vroeg stadium van de beleids- of projectontwikkeling worden uitgevoerd. Op dat moment kan namelijk nog zonder vooroordelen worden nagedacht over de gevolgen en kan het voorstel nog makkelijker worden herzien. Dit voorkomt ook latere, kostbare aanpassingen in processen, herontwerp van systemen of zelfs stopzetten van een project. Behalve aan het begin van een project kan een DPIA ook op andere momenten en meermaals worden uitgevoerd en geactualiseerd. Als het voorstel wijzigt, wordt een DPIA opnieuw uitgevoerd. Als de gegevensverwerkingen of de gevolgen ervan veranderen, moet de DPIA worden geactualiseerd. Volgens de European Data Protection Board (EDPB) moet een DPIA iedere drie jaar worden ge\u00ebvalueerd.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/DPIA/#relevantie","title":"Relevantie","text":"

Een organisatie is bij wet verplicht een DPIA uit te voeren wanneer de verwerking van persoonsgegevens een hoog privacyrisico oplevert. Wanneer hier sprake van is binnen jouw organisatie, dan is de DPIA per definitie relevant voor jou.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/DPIA/#auteur","title":"Auteur","text":"

De DPIA is ontwikkeld door de Europese Unie in het kader van de AVG.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/DPIA/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"Maatregelowk-03 - Analyseer de privacy-risico\u2019s en neem maatregelen om deze risico\u2019s laag te houden"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/IAMA/","title":"Impact Assessment Mensenrechten en Algoritmes","text":"

ProbleemanalyseOntwerpVerificatie en validatieMonitoring en beheerProjectleiderOntwikkelaarJuristBeleid en adviesFundamentele rechtenTransparantie

Direct naar het IAMA

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/IAMA/#hulpmiddel","title":"Hulpmiddel","text":"

Het Impact Assessment voor Mensenrechten bij de inzet van Algoritmes (IAMA) is een instrument voor overheidsorganen om een interdisciplinaire dialoog en besluitvorming te faciliteren bij de ontwikkeling en inzet van algoritmische systemen. Het IAMA stelt een reeks vragen die moeten worden besproken en beantwoord om een zorgvuldige afweging van de inzet van algoritmen te waarborgen. Dit proces is onderverdeeld in drie fasen: voorbereiding, input en throughput, en output en toezicht, waarbij steeds aandacht wordt besteed aan het vierde onderdeel van het IAMA: de impact op mensenrechten. Het IAMA fungeert als naslagwerk voor de besluitvorming en is gekoppeld aan andere relevante richtlijnen en instrumenten, zoals de gegevensbeschermingseffectbeoordeling (ook wel DPIA). Hierdoor biedt het een overkoepelend kader dat helpt om algoritmen verantwoord te implementeren en mogelijke risico\u2019s, zoals inbreuken op grondrechten, te identificeren en te mitigeren.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/IAMA/#relevantie","title":"Relevantie","text":"

Het IAMA kan op dit moment op veel politieke en internationale belangstelling rekenen. In zowel de Eerste als Tweede Kamer zijn hierover moties ingediend en vragen gesteld. Daarbij is het IAMA een van de weinige instrumenten in de EU die een interdisciplinaire discussie rondom (de ontwikkeling, inzet en monitoring van) algoritmes, AI en grondrechten initieert en bevordert.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/IAMA/#auteur","title":"Auteur","text":"

Het IAMA is ontwikkeld door de Utrecht Data School. De auteurs van het IAMA zijn prof. mr. Janneke Gerards, dr. Mirko Tobias Sch\u00e4fer, Arthur Vankan en Iris Muis, allen werkzaam aan de Universiteit Utrecht. Opdrachtgever voor de ontwikkeling is het Ministerie van Binnenlandse Zaken.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/IAMA/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"

Geen maatregelen beschikbaar voor dit hulpmiddel.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/IAMA/#bronnen","title":"Bronnen","text":"

Impact Assessment Mensenrechten en Algoritmes

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/IAMA/#voorbeeld","title":"Voorbeeld","text":"

Benieuwd naar ervaringen in de praktijk? Bekijk het rapport IAMA in Actie voor de lessons learned van 15 IAMA-trajecten bij Nederlandse overheidsorganisaties.

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/algoritmeregister/","title":"Algoritmeregister","text":"

Monitoring en beheerProjectleiderOntwikkelaarTransparantie

Direct naar het Algoritmeregister

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/algoritmeregister/#hulpmiddel","title":"Hulpmiddel","text":"

De regering wil dat de overheid algoritmes verantwoord gebruikt. Mensen moeten erop kunnen vertrouwen dat algoritmes voldoen aan de waarden en normen van de samenleving. En er moet uitleg zijn over hoe algoritmes werken. Het Algoritmeregister helpt hierbij. Wanneer overheidsorganisaties open zijn over algoritmes en hun toepassing, kunnen burgers, organisaties en media de overheid kritisch volgen.

Je kunt hier meer lezen over de doelen van het Algoritmeregister.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/algoritmeregister/#relevantie","title":"Relevantie","text":"

In de Handreiking Algoritmeregister staan bruikbare handvatten voor overheidsorganisaties om met publicatie van hun algoritmes aan de slag te gaan. Hierin wordt bijvoorbeeld duidelijkheid gegeven over welke doelen we ermee bereiken, welke algoritmes erin thuishoren en welke organisaties erin kunnen publiceren.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/algoritmeregister/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"Maatregelimp-04 - Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/algoritmeregister/#bronnen","title":"Bronnen","text":"

Algoritmeregister

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/algoritmeregister/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/fairness-handbook/","title":"The Fairness Handbook","text":"

ProbleemanalyseOntwerpProjectleiderBias en non discriminatieFundamentele rechten

Direct naar het Fairness Handbook

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/fairness-handbook/#hulpmiddel","title":"Hulpmiddel","text":"

Het Fairness Handbook biedt overheidsorganisaties een gedetailleerde richtlijn om eerlijkheid in algoritmen te waarborgen en schadelijke vooroordelen binnen AI-systemen te verminderen. Het handboek, dat origineel is ontwikkeld voor de Gemeente Amsterdam, richt zich op het voorkomen en mitigeren van vooroordelen en oneerlijke uitkomsten (bias) door middel van een gestructureerde Fairness Pipeline. Deze pipeline behandelt alle fasen van het ontwikkelproces, van het formuleren van het probleem tot de uiteindelijke implementatie en monitoring. Dit hulpmiddel biedt inzicht in de soorten schadelijke effecten van AI (zoals representatiebias en denigratieschade) en introduceert specifieke technieken, zoals het uitvoeren van een bias-analyse en het gebruik van contra-feitelijke scenario's (counterfactual fairness), om te controleren of de algoritmen rechtvaardige resultaten opleveren.

Naast praktische technieken voor het meten en mitigeren van vooroordelen, definieert het Fairness Handbook verschillende eerlijkheidsprincipes en bijbehorende statistische metrics. Deze metrics helpen ontwikkelaars en beleidsmakers om de prestaties van modellen te analyseren en verschillen in modelprestaties tussen verschillende groepen te detecteren. Door de nadruk te leggen op transparantie, zowel in de keuze van datasets als in de manier waarop het model beslissingen neemt, helpt het handboek om het vertrouwen in AI-systemen te vergroten en discriminerend gedrag in algoritmen te verminderen.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/fairness-handbook/#relevantie","title":"Relevantie","text":"

Het Fairness Handbook biedt ondersteuning voor overheden die streven naar verantwoorde, niet-discriminerende algoritmische besluitvorming. Het handboek ondersteunt overheidsinstanties bij het identificeren en corrigeren van vooroordelen in datasets en algoritmes, waardoor het risico op schadelijke effecten, zoals ongelijke verdeling van kansen of kwaliteit van dienstverlening, wordt geminimaliseerd. Het hulpmiddel sluit nauw aan bij andere hulpmiddelen, zoals de IAMA, door richtlijnen te geven voor het beoordelen van specifieke eerlijkheidsaspecten in de context van datagebruik en algoritmeontwikkeling.

Door de combinatie van technische en niet-technische benaderingen bevordert het Fairness Handbook een holistische benadering van algoritmische eerlijkheid. Er wordt rekening gehouden met zowel de technische als de sociale en ethische dimensies. Dit maakt het een bruikbaar hulpmiddel voor diverse overheidsprojecten, waaronder de ontwikkeling van AI-toepassingen in het sociaal domein en besluitvormingsprocessen waarbij kansengelijkheid van groot belang is.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/fairness-handbook/#auteurs-en-ontwikkeling","title":"Auteurs en Ontwikkeling","text":"

Het Fairness Handbook is ontwikkeld in 2022 door de Gemeente Amsterdam, met als doel de eerlijkheid en transparantie van haar AI-systemen te verbeteren. Het project is tot stand gekomen in samenwerking met diverse stakeholders, waaronder datawetenschappers, ethici en beleidsmakers, om ervoor te zorgen dat het handboek aansluit bij de bredere maatschappelijke behoeften en regelgeving. Door deze samenwerking biedt het Fairness Handbook een gebalanceerd perspectief, met aandacht voor zowel technische oplossingen als ethische en juridische overwegingen die nodig zijn voor verantwoorde AI-toepassingen.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/fairness-handbook/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"Maatregeldat-01 - Controleer de datakwaliteitver-01 - Toets het algoritme op biasimp-02 - Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie\u2019 te controleren"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/fairness-handbook/#bronnen","title":"Bronnen","text":"

The Fairness Handbook

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/fairness-handbook/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld van het gebruik van het Fairness Handbook op het gebied van algoritmen? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/framework-meaningful-engagement/","title":"Framework for Meaningful Engagement","text":"

ProbleemanalyseOntwerpProjectleiderBeleid en adviesMenselijke controleTransparantieFundamentele rechten

Direct naar het Framework for Meaningful Engagement

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/framework-meaningful-engagement/#hulpmiddel","title":"Hulpmiddel","text":"

Het Framework for Meaningful Engagement biedt organisaties een praktische aanpak om verschillende stakeholders effectief te betrekken in processen rondom AI en algoritmes. Het beschrijft stapsgewijs hoe men betrokkenheid kan ontwerpen en uitvoeren, met de nadruk op drie pijlers:

  1. een gedeelde doelstelling
  2. een betrouwbaar proces
  3. een zichtbare impact

Het framework helpt organisaties om input van belanghebbenden daadwerkelijk te integreren, wat leidt tot duurzamere, inclusievere besluitvorming.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/framework-meaningful-engagement/#relevantie-voor-het-algoritmekader","title":"Relevantie voor het Algoritmekader","text":"

Betekenisvolle betrokkenheid van stakeholders is cruciaal voor verantwoord algoritmegebruik. Voor overheden biedt dit framework handvatten om transparanter te zijn over de ontwikkeling en impact van algoritmes en om een goed proces in te richten bij het gebruik van een algoritme. Dit sluit aan bij eisen rond menselijke controle.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/framework-meaningful-engagement/#auteurs-en-ontwikkeling","title":"Auteurs en ontwikkeling","text":"

Het framework is ontwikkeld door de European Center for Not-for-Profit Law Stichting (ECNL) en SocietyInside, als onderdeel van de Deense Tech for Democracy Initiative. De totstandkoming vond plaats via een consultatieproces met bijdragen van meer dan 150 individuen en organisaties wereldwijd, waaronder belanghebbenden uit het maatschappelijk middenveld, bedrijfsleven en overheden. Het framework bouwt voort op de VN-richtlijnen voor bedrijfs- en mensenrechten.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/framework-meaningful-engagement/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"Maatregelimp-03 - Richt de juiste menselijke controle in van het algoritmever-03 - Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleidver-01 - Controleer regelmatig of het algoritme werkt zoals het bedoeld isowp-06 - Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafwegingowp-07 - Maak een lijst van de meest kwetsbare groepen en bescherm hen extrapba-01 - Beschrijf het probleem dat het algoritme moet oplossenpba-02 - Beschrijf het doel van het algoritmepba-03 - Beschrijf waarom een algoritme het probleem moet oplossenpba-04 - Overleg regelmatig met belanghebbendenorg-01 - Bepaal of er genoeg experts beschikbaar zijn"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/framework-meaningful-engagement/#bronnen","title":"Bronnen","text":"
  • ECNL - Framework for Meaningful Engagement
"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/","title":"Handreiking non-discriminatie by design","text":"

OntwikkelenImplementatieProjectleiderOntwikkelaarBias en non discriminatieFundamentele rechten

Direct naar de Handreiking non-discriminatie by design

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/#hulpmiddel","title":"Hulpmiddel","text":"

Deze handreiking legt uit welke vragen en principes leidend zijn bij het ontwikkelen en implementeren van een AI-systeem met het oog op het discriminatieverbod, vanuit zowel juridisch, technisch, als organisatorisch perspectief. De handreiking is een praktisch toepasbaar ontwerpkader dat ontwikkelaars helpt om al in de ontwikkelfase van een AI-systeem discriminerende patronen zoveel mogelijk te identificeren, te voorkomen en te bestrijden.

Er zijn 4 uitgangspunten die leidend zijn in de handreiking:

  1. Diversiteit
  2. Context
  3. Controleerbaarheid
  4. Evaluatie.
"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/#relevantie","title":"Relevantie","text":"

Stuk over relevantie voor het AK volgt nog. Net als bij het IAMA, is dit document een manier om een multidisciplinaire discussie te faciliteren en stimuleren. Hierbij kunnen verschillende rollen betrokken worden door de projectleider: data-scientists, juristen, de functionaris gegevensbescherming (FG), aangevuld met domeinspecialisten.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/#wanneer-toepassen","title":"Wanneer toepassen?","text":"

De handreiking is primair geschreven voor teams die zelf AI-systemen bouwen. Het gaat in op verschillende fases van ontwikkeling: probleemanalyse, dataverkenning en datapreparatie, ontwikkeling, implementatie en evaluatie. Daarnaast kan deze handreiking dienen voor opdrachtgevers van AI-systemen, ofwel om vooraf offrerende partijen te vragen aan te geven hoe zij rekening zullen houden met de diverse punten uit de handreiking, ofwel om tijdens het proces mee te kijken en op relevante punten aanwijzingen te geven, ofwel om achteraf te controleren of een opgeleverd product aan alle relevante voorwaarden voldoet.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/#relatie-tot-iama","title":"Relatie tot IAMA","text":"

Gebruikers van zowel de Handreiking non-discriminatie by design als het IAMA geven enkele verschillen tussen de twee instrumenten. Deze bevindingen zijn te vinden in het rapport 'Bekendheid, toepasbaarheid en toegevoegde waarde handreiking \u201cnon-discriminatie by design\"' van de Auditdienst Rijk.

Zij geven aan dat het IAMA wordt gezien als instrument voor het nagaan van de impact van grondrechten in algemenere zin, waar de Handreiking zich specifiek richt op discriminatie. De handreiking bevat dan weer meer praktische voorbeelden die kunnen helpen bij begrip en afwegingen, waar de IAMA wat abstracter is.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/#relatie-tot-het-fairness-handbook","title":"Relatie tot het Fairness Handbook","text":"

Over het Fairness Handbook werd in het rapport aangegeven dat het een technischere uitwerking bevat dan de Handreiking. Het Handbook biedt wellicht meer houvast voor iemand die analyses maakt om inzicht te geven in de prestaties van het algoritme met het oog op \u2018fairness\u2019 en \u2018bias\u2019. Dit komt doordat het Handbook meer details geeft over de technische stappen die nodig zijn om te komen tot bepaalde analyses.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/#relatie-tot-toetsingskader-risicoprofielen-van-college-voor-de-rechten-van-de-mens","title":"Relatie tot Toetsingskader Risicoprofielen van College voor de Rechten van de Mens","text":"

Ook het toetsingskader voor discriminatie door risicoprofielen van het College voor de Rechten van de Mens kan worden gebruikt om te bepalen of er discriminatie plaatsvindt. Dit kader is afkomstig uit 2021 en er wordt gewerkt aan een nieuwe versie, die waarschijnlijk eind 2024 zal verschijnen. De verschillende stappen die daarin gebruikt worden om te bepalen of een risicoprofiel tot discriminatie leidt op grond van ras of nationaliteit, zijn zeer relevant. Daarvoor hebben zij een beslisboom ontwikkeld.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"Maatregeldat-01 - Controleer de datakwaliteitver-01 - Toets het algoritme op biasimp-02 - Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie\u2019 te controleren"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/#bronnen","title":"Bronnen","text":"
  • Handreiking non-discriminatie by design
  • Onderzoeksrapport Bekendheid, toepasbaarheid en toegevoegde waarde handreiking 'non-discriminatie by design'
  • Toetsingskader voor discriminatie door risicoprofielen van het College voor de Rechten van de Mens (2021)
"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld van het gebruik van de Handreiking non-discriminatie by design op het gebied van algoritmen? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/","title":"Inkoopvoorwaarden","text":"

ProbleemanalyseOntwerpJuristProjectleiderBeleid en adviesPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/#hulpmiddel","title":"Hulpmiddel","text":"

Voorbeelden of templates van inkoopvoorwaarden kunnen helpen om een contract op te stellen dat een organisatie in staat stelt veilige en verantwoorde algoritmen of AI-systemen in te kopen. Deze worden ook wel eens modelcontractbepalingen genoemd. Deze voorwaarden of bepalingen kunnen opgenomen worden wanneer er een contract wordt afgesloten met een leverancier van een algoritme of algoritmisch systeem. Er kunnen dan bijvoorbeeld beperkingen gelden om onaanvaardbare risico's van AI te vermijden, of bepaalde voorwaarden gesteld worden waaraan een algoritme juist moet voldoen. Ook kunnen bepaalde voorwaarden worden opgenomen op basis van de vereisten in het Algoritmekader.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/#europese-commissie","title":"Europese Commissie","text":"

De Europese contractvoorwaarden voor AI bieden aanbestedende organisaties de mogelijkheid om specifieke clausules op te nemen in de overeenkomst. Op deze manier worden afspraken gemaakt over onderwerpen die in lijn zijn met de aankomende AI-Act. Er zijn 2 versies van de AI-inkoopvoorwaarden opgesteld: een set voorwaarden voor AI-toepassingen met een hoog-risicoprofiel en een set voorwaarden voor AI-toepassingen met een laag-risicoprofiel.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/#gemeente-amsterdam","title":"Gemeente Amsterdam","text":"

De Europese contractvoorwaarden voor AI zijn gebaseerd op onder andere de modelbepalingen die de Gemeente Amsterdam al eerder opstelde. Deze dienen als voorbeeld voor andere gemeenten die algoritmische toepassingen willen inkopen.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/#ai-module-bij-arbit-2022","title":"AI-module bij ARBIT-2022","text":"

De AI-module bij de ARBIT is gebaseerd op het gepubliceerd model van de Europese Commissie dat hierboven beschreven wordt. Via een verwijzing in de gebruikte modelovereenkomst kan de AI-module onderdeel gaan uitmaken van een onder de ARBIT te sluiten overeenkomst.

De ARBIT zijn de Algemene Rijksinkoopvoorwaarden bij IT\u2011overeenkomsten (ARBIT) en zijn bedoeld voor kleine en middelgrote IT-inkopen door de overheid. Lees meer hierover op de website van PIANOo.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/#relevantie","title":"Relevantie","text":"

Steeds meer organisaties kopen algoritmische toepassingen in die veel impact hebben op gebruikers of beslissingen. Het is daarom van belang dat aanbestedende overheidsorganisaties afspraken maken met leveranciers, zodat de werking van de algoritmische toepassing transparant is en op een veilige en verantwoorde manier gebruikt wordt. Verschillende organisaties hebben daarom (voorbeeld-)contractvoorwaarden voor het inkopen van AI-systemen beschikbaar gesteld. Denk aan de Europese Commissie en de Gemeente Amsterdam.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"Maatregeldat-08 - Zorg dat je controle of eigenaarschap hebt over de dataowp-16 - Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output.owp-15 - Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving.owp-13 - Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.owp-23 - Laat de aanbieder aangeven welke mate van opleiding en ondersteuning bij de implementatie nodig is om de beoogde algoritmes verantwoord te gebruiken.2-owp-11-data-beschikbaarheid"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/#bronnen","title":"Bronnen","text":"
  • Modelbepalingen voor gemeenten voor verantwoord gebruik van Algoritmische toepassingen
  • Contractvoorwaarden voor het inkopen van artifici\u00eble intelligentie (AI)
  • AI-module bij de modelovereenkomst ARBIT-2022
"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld van het gebruik van modelbepalingen of contractvoorwaarden op het gebied van algoritmen? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/mensenrechtelijktoetsingskader/","title":"Discriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader","text":"

ProbleemanalyseOntwerpBeleid en adviesJuristBias en non discriminatieFundamentele rechten

Direct naar het Mensenrechtelijk Toetsingskader

Let op!

Dit toetsingskader wordt momenteel vernieuwd. Een nieuwe versie wordt hier gepubliceerd zodra beschikbaar.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/mensenrechtelijktoetsingskader/#hulpmiddel","title":"Hulpmiddel","text":"

Dit toetsingskader helpt overheidsfunctionarissen om te bepalen wanneer risicoprofielen leiden tot discriminatie op grond van ras of nationaliteit. Het presenteert de (denk)stappen die doorlopen moeten worden om te toetsen of een risicoprofiel binnen de grenzen van het discriminatieverbod blijft. Het is belangrijk om te benadrukken dat het hierbij gaat om de juridische ondergrens van het discriminatieverbod, zoals geformuleerd door internationale en nationale rechters. Aan de regels uit dit toetsingskader moet de overheid zich dus ten minste houden. Dit laat onverlet dat de overheid kan beslissen om strengere regels te hanteren.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/mensenrechtelijktoetsingskader/#noot-voor-de-lezer","title":"Noot voor de lezer","text":"

Dit toetsingskader is gebaseerd op geldende verdragen, wetten en jurisprudentie tot aan november 2021. De normen en jurisprudentie op dit terrein zijn echter continu in ontwikkeling. Zo heeft het gerechtshof Den Haag in 2023 in een belangrijke uitspraak vastgesteld dat het gebruik van etnische kenmerken als een van de selectiecriteria voor controle, zoals dat plaatsvond binnen het \u2018Mobiel Toezicht Veiligheid\u2019 door de Koninklijke Marechaussee, in strijd is met het discriminatieverbod.

Ook op Europees niveau is er nieuwe relevante jurisprudentie verschenen. Dit alles biedt een verdere aanscherping en concretisering van de geldende normen. Het College werkt daarom op dit moment aan een aangepast en doorontwikkeld toetsingskader waarin alle nieuwe ontwikkelingen worden verwerkt.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/mensenrechtelijktoetsingskader/#relevantie","title":"Relevantie","text":"

Het spreekt voor zich dat overheidsinstanties zich bij het uitvoeren van hun taken moeten onthouden van discriminatie. Recente voorbeelden zoals de Kinderopvangtoeslagaffaire laten echter zien dat het in de praktijk toch mis kan gaan. Duidelijk is dat discriminerende elementen toch in risicoprofielen voorkomen. Dat heeft er mede mee te maken dat het voor medewerkers van uitvoeringsinstanties niet altijd duidelijk is wat in welke context wel en niet mag.

Er komt daarbij veel kijken bij de beoordeling of een risicoprofiel binnen de grenzen van het discriminatieverbod blijft, zeker wanneer afkomst-gerelateerde kenmerken als selectiecriteria binnen dit risicoprofiel een rol spelen. In alle gevallen zal nauwkeurig afgewogen moeten worden welke kenmerken voor welke doeleinden worden gebruikt en hoe zich dat verhoudt tot het toepasselijke wettelijke kader. Dit toetsings- kader biedt handvatten voor het maken van deze afweging.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/mensenrechtelijktoetsingskader/#auteur","title":"Auteur","text":"

Het Mensenrechtelijk Toetsingskader is ontwikkeld door het College voor de Rechten van de Mens.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/mensenrechtelijktoetsingskader/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"Maatregelver-01 - Toets het algoritme op bias"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/onderzoekskader-adr/","title":"Onderzoekskader algoritmes Auditdienst Rijk 2023","text":"

OntwerpImplementatieMonitoring en beheerProjectleiderBeleid en adviesGovernance

Direct naar het Onderzoekskader Algoritmes

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/onderzoekskader-adr/#hulpmiddel","title":"Hulpmiddel","text":"

Dit onderzoekskader is een instrument om de beheersing van algoritmes in kaart te brengen. Het geeft inzicht in de risico\u2019s die algoritmes met zich meebrengen en met welke maatregelen deze risico\u2019s beheerst (kunnen) worden.

Het onderzoekskader is in eerste instantie bedoeld als instrument voor auditors om de beheersing en werking van algoritmes binnen overheidsorganisaties te onderzoeken, maar is ook bruikbaar voor andere partijen om inzicht te krijgen in de huidige en/of gewenste beheersing van algoritme(s).

Het kader richt zich op algoritmes die binnen overheidsorganisaties gebruikt worden. Het is ingericht op algoritmes die zelf van voorbeelden leren, zoals machine learning, maar is ook toepasbaar op regelgebaseerde algoritmes. Het kader is ook bruikbaar voor andere organisaties en kan bij verschillende fases van de levenscyclus van een algoritme worden ingezet. Mogelijk zijn niet alle thema\u2019s relevant gezien de context van het algoritme. De opdrachtgever en auditor(s) dienen daarom voorafgaand aan een onderzoek te analyseren en te bepalen welke thema\u2019s en onderwerpen worden onderzocht. Het onderzoekskader is ingedeeld in 4 thema\u2019s:

  • Sturing en Verantwoording
  • Privacy
  • Data en Model
  • Informatiebeveiliging

Ethiek raakt alle thema\u2019s en komt daarom bij elk thema in het kader terug. Elk thema bevat deelgebieden en de risico\u2019s en beheersmaatregelen die daarbij horen (inclusief de bron). Ook deze kunnen weer gerelateerd zijn aan een ander thema. Een apart werkbestand voor auditors is opgesteld wat kan worden gebruikt bij het uitvoeren van een onderzoek. Dit bestand heeft dezelfde opbouw, maar bevat ook invulvelden om als auditor het risico (kans x impact) in te schatten en de bevindingen op te nemen. Daarnaast zijn toelichtingen en voorbeelden van checks en evidence opgenomen per beheersmaatregel.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/onderzoekskader-adr/#relevantie","title":"Relevantie","text":"

Het onderzoekskader is ontwikkeld met behulp van nationale en internationale richtlijnen en kaders, rapporten en instrumenten, zoals de Ethics guidelines for trustworthy AI van de Europese Commissie (EC), Impact Assessment voor Mensenrechten bij de inzet van Algoritmes (IAMA), de richtlijnen van het ministerie van JenV, het DPIA model Rijksoverheid (gebaseerd op o.a. AVG) en de Guiding Principles Trustworthy AI Investigations van NOREA (beroepsvereniging IT-auditors Nederland). De bron van de betreffende risico\u2019s en beheersmaatregelen is tevens opgenomen.

Dit onderzoekskader is erg overkoepelend (net als het toetsingskader van de Algemene Rekenkamer). Er zijn dan ook veel maatregelen in het Algoritmekader gebaseerd op maatregelen die in het kader van de ADR staan. Bekijk alle maatregelen van het Algoritmekader hier.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/onderzoekskader-adr/#auteur","title":"Auteur","text":"

Het Onderzoekskader Algoritmes is ontwikkeld door de Auditdienst Rijk

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/onderzoekskader-adr/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"

Geen maatregelen beschikbaar voor dit hulpmiddel.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/","title":"Standaarden","text":""},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#wat-zijn-standaarden","title":"Wat zijn standaarden?","text":"

Standaarden zijn afspraken die worden vastgelegd om ervoor te zorgen dat producten, processen of diensten voldoen aan specifieke eisen op het gebied van kwaliteit, veiligheid en prestaties. Ze worden ontwikkeld door standaardisatieorganisaties, meestal op initiatief van belanghebbenden die een behoefte aan een bepaalde standaard zien, zoals de Europese Commissie, bij of na het ontwikkelen van Europese regelgeving.

Er zijn verschillende soorten standaarden, zoals normen, Technische Rapporten (TR) en Technische Specificaties (TS).

  • Normen zijn formele, breed geaccepteerde afspraken, vaak ontwikkeld door internationale organisaties zoals ISO/IEC.
  • Technische Rapporten (TR) hebben een meer informatief karakter. Een TR wordt gebruikt om informatie te delen die niet geschikt is voor een norm, bijvoorbeeld gegevens uit onderzoeken of enqu\u00eates. Een TR is vaak de opmaat voor het opstellen van een norm.
  • Technische Specificaties (TS) zijn normatief, en bieden voorlopige specificaties, vooral voor technologie\u00ebn in ontwikkeling. Een TS kan in een later stadium worden omgezet in een volledige norm als er voldoende consensus voor is.

Nog geen norm, maar toch interessant!

Zowel een Technisch Rapport als een Technische Specificatie bieden dus ondersteuning in situaties waar nog geen norm bestaat of waar consensus nog niet is bereikt. Dus een TS of TR kan ook zeker interessante informatie bevatten voor organisaties, maar ze hebben niet de status of juridische binding van een norm.

Daarnaast is er onderscheid tussen internationale normen (ISO), Europese normen (EN) en Nederlandse normen (NEN). Europese normen zijn essentieel voor de AI Verordening, omdat ze geharmoniseerde standaarden bieden die juridische zekerheid verschaffen, met name voor hoog-risico AI-systemen. Veel Europese normen beginnen als internationale ISO-normen en worden vervolgens aangepast aan de Europese context.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#waarom-zijn-standaarden-belangrijk-voor-de-ai-verordening","title":"Waarom zijn standaarden belangrijk voor de AI-verordening?","text":"

Wanneer AI-systemen worden ontworpen of gebruikt, bieden standaarden praktische richtlijnen en technische kaders (praktische meerwaarde) waarmee compliance aantoonbaar kan worden gemaakt (juridische meerwaarde).

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#juridische-waarde-van-standaarden","title":"Juridische waarde van standaarden","text":"

Als een organisatie zich houdt aan de bij de wet behorende geharmoniseerde Europese normen, wordt er vanuit gegaan dat er wordt voldaan aan de AI-verordening (Presumption of Conformity). Dit betekent dat het AI-systeem wordt beschouwd als conform de wettelijke vereisten, wat zorgt voor juridische zekerheid en eenvoudiger toezicht\u200b. Hoewel het gebruik van standaarden vrijwillig is, bewijst naleving ervan dat producten en diensten een bepaald niveau van kwaliteit, veiligheid en betrouwbaarheid bereiken. In sommige gevallen worden standaarden in de wetgeving genoemd als een voorkeursmethode of zelfs als een verplichte vereiste om aan specifieke wetten te voldoen, zoals veiligheidswetgeving of interoperabiliteitsvereisten.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#praktische-waarde-van-standaarden","title":"Praktische waarde van standaarden","text":"

Geharmoniseerde normen hebben daarnaast een duidelijke praktische waarde. Ze vertalen abstracte wettelijke verplichtingen uit de AI-verordening naar concrete technische en organisatorische eisen, bijvoorbeeld op het gebied van risicomanagement en kwaliteitsmanagement, maar ook voor duurzaamheid en transparantie\u200b. Zo helpen standaarden organisaties dus bij het ontwikkelen en implementeren van betrouwbare AI-systemen.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#wat-is-er-al-beschikbaar-een-overzicht-van-bestaande-standaarden","title":"Wat is er al beschikbaar? Een overzicht van bestaande standaarden","text":""},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#belangrijke-internationale-isoiec-en-europese-normen","title":"Belangrijke internationale (ISO/IEC) en Europese normen","text":""},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#overzicht-van-actuele-standaarden-die-relevant-zijn-voor-de-ai-verordening","title":"Overzicht van actuele standaarden die relevant zijn voor de AI-verordening","text":""},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#de-rol-van-de-jtc-21","title":"De rol van de JTC 21","text":""},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#wat-moeten-nederlandse-overheidsorganisaties-doen","title":"Wat moeten Nederlandse overheidsorganisaties doen?","text":"

Hoe gebruik je bestaande AI-standaarden?

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#verwachte-ontwikkelingen","title":"Verwachte ontwikkelingen","text":""},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#bronnen","title":"Bronnen","text":"

Lijst van gebruikte bronnen, standaarden, en aanvullende documentatie - Standards in Europe -

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#beslishulp-ai-verordening","title":"Beslishulp AI-verordening","text":"

Met de beslishulp AI-verordening bepaal je snel en gemakkelijk of jouw AI-product onder de AI-verordening valt. En wat je dan moet doen.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/#help-ons-deze-pagina-te-verbeteren","title":"Help ons deze pagina te verbeteren","text":"

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/toetsingskader-algemene-rekenkamer/","title":"Toetsingskader Algoritmes Algemene Rekenkamer","text":"

Monitoring en beheerVerificatie en validatieProjectleiderBeleid en adviesJuristGovernance

Direct naar het Toetsingskader

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/toetsingskader-algemene-rekenkamer/#hulpmiddel","title":"Hulpmiddel","text":"

Het toetsingskader omvat 5 perspectieven op algoritmes, elk met hun belangrijkste risico's geformuleerd. Het gaat om Sturing en Verantwoordelijkheid, Model en Data, Privacy, IT-beheer en Ethiek. Voor elk risico is er een specifieke onderzoeksvraag opgesteld. Door deze vragen te beantwoorden en een score toe te kennen, krijgt de gebruiker inzicht in hoe goed het gekozen algoritme de risico's beheerst.

De mate van risico voor een specifiek algoritme wordt bepaald door twee factoren: de gebruikte geavanceerde technieken en de impact van het algoritme op de burger.

Het toetsingskader is in eerste instantie bedoeld als toetsinstrument voor auditors (controleurs en toezichthouders). Zij kunnen dit kader gebruiken om de risico's van het beoordeelde algoritme in beeld te krijgen.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/toetsingskader-algemene-rekenkamer/#relevantie","title":"Relevantie","text":"

Het digitale toetsingskader 'Aandacht voor algoritmes' is ontwikkeld vanwege de toenemende maatschappelijke aandacht voor algoritmes en de behoefte aan een integraal instrument voor toetsing en analyse. Het is gebaseerd op bestaande informatie en raamwerken, zowel binnen het Rijk als door externe partijen zoals NOREA en grote accountantskantoren.

Dit onderzoekskader is erg overkoepelend (net als het onderzoekskader van de ADR). Er zijn dan ook veel maatregelen in het Algoritmekader gebaseerd op maatregelen die in het kader van de Algemene Rekenkamer staan. Bekijk alle maatregelen van het Algoritmekader hier.

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/toetsingskader-algemene-rekenkamer/#auteur","title":"Auteur","text":"

Het Toetsingskader Algoritmes is ontwikkeld door de Algemene Rekenkamer

"},{"location":"voldoen-aan-wetten-en-regels/hulpmiddelen/toetsingskader-algemene-rekenkamer/#bijbehorende-maatregelen","title":"Bijbehorende maatregelen","text":"

Geen maatregelen beschikbaar voor dit hulpmiddel.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/","title":"Maatregelen","text":"

Overzicht van aanbevolen maatregelen voor verantwoord gebruik van algoritmes en AI-systemen. Het zijn adviezen om te voldoen aan de vereisten voor overheden. Andere maatregelen zijn ook mogelijk.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/#alle-maatregelen-zijn-adviezen","title":"Alle maatregelen zijn adviezen","text":"

De maatregelen zijn niet verplicht. Het zijn adviezen uit:

  • Toetsingskader Algoritmes, Algemene Rekenkamer
  • Onderzoekskader algoritmes, Auditdienst Rijk
  • nationale en internationale standaarden (NEN, JTC21 en ISO)
  • onze werkgroepen
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/#voorbeeld","title":"Voorbeeld","text":"

Onderzoek het ontwikkelde algoritme op onbewuste vooringenomenheid (discriminatie) door middel van een bias-analyse.

Deze maatregel helpt om te voldoen aan de vereiste om niet te discrimineren. Maar deze maatregel is niet verplicht. Je organisatie mag ook eigen maatregelen nemen. Zolang je uiteindelijk maar voldoet aan de vereiste.

Tip

Aantal maatregelen verschilt per situatie

Welke maatregelen handig zijn in jouw situatie, hangt af van:

  • de fase in de levenscyclus van je project
  • de vereisten waar jouw organisatie aan moet voldoen
  • jouw rol in de organisatie

Tip

Met \u00e9\u00e9n maatregel voldoe je soms aan meerdere vereisten.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/#help-ons-deze-pagina-te-verbeteren","title":"Help ons deze pagina te verbeteren","text":"

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-01-benodigde-expertise-en-capaciteit/","title":"Bepaal of er genoeg experts beschikbaar zijn","text":"

org-01OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-01-benodigde-expertise-en-capaciteit/#maatregel","title":"Maatregel","text":"

Bepaal welke expertise en capaciteit noodzakelijk is voor het ontwikkelen, inkopen en gebruiken van algoritmes en stel vast of er voldoende expertise en capaciteit beschikbaar is.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-01-benodigde-expertise-en-capaciteit/#toelichting","title":"Toelichting","text":"
  • Bepaal welke expertise en capaciteit binnen de organisatie noodzakelijk is voor het ontwikkelen, inkopen en gebruiken van algoritmes.
  • Dit is sterk afhankelijk van de specifieke toepassing en de inzichten die voortkomen uit risicoanalyses. Hoe complexer en risicovoller de toepassing, des te meer expertise en capaciteit noodzakelijk is.
  • Interne en externe actoren die betrokken zijn bij het ontwikkelen, inkopen en gebruik moeten over voldoende expertise en capaciteit beschikken om hun taken naar behoren uit te voeren.
  • Stel vast of er afhankelijkheden van externe aanbieders ontstaan.
  • Bepaal voorafgaand aan het (laten) ontwikkelen of inkopen van algoritmes of voldoende expertise en capaciteit beschikbaar is om tot een verantwoorde inzet ervan te komen.
  • Leg vast of er voldoende expertise en capaciteit beschikbaar is en onderbouw dit in projectdocumentatie.
  • Om menselijke controle te kunnen uitoefenen in verschillende fases van de ontwikkeling (of inkoop) van algortimes moet de mens bepaalde kennis, tijd en vaardigheden hebben. Alleen met de juiste kennis, tijd en vaardigheden kunnen risico\u2019s op tijd ge\u00efdentificeerd en afgedekt worden. Deze kennis en expertise kan ook buiten de organisatie liggen, maar dan is het belangrijk om verantwoordelijkheden goed vast te leggen.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-01-benodigde-expertise-en-capaciteit/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.12
  • Toetsingskader Algoritmes Algemene Rekenkamer, 1.04
  • Competencies and governance practices for AI in the public sector. Zie hoofdstuk 4
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-01-benodigde-expertise-en-capaciteit/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-02-beleid_opstellen_inzet_algoritmes/","title":"Stel beleid op voor een verantwoorde inzet van algoritmes binnen de organisatie.","text":"

org-04OrganisatieverantwoordelijkhedenBeleid en adviesGovernanceTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-02-beleid_opstellen_inzet_algoritmes/#maatregel","title":"Maatregel","text":"

Stel beleid op voor een verantwoorde inzet van algoritmes binnen de organisatie.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-02-beleid_opstellen_inzet_algoritmes/#toelichting","title":"Toelichting","text":"

Een duidelijk beleid over de inzet van algoritmes helpt organisaties te voldoen aan de vereisten voor het verantwoord gebruik ervan. Hierin worden zaken beschreven als:

  • Hoe de inzet van algoritmes gaat bijdragen aan het realiseren van de organisatiedoelstellingen.

  • Het beschrijven van de stappen die moeten worden gezet om algoritmes op een verantwoorde wijze in te gaan zetten. Dit is afhankelijk en verschilt per type algoritme en de bijbehorende risicoclassificatie.

  • Het beschrijven van welke hulpmiddelen in welke gevallen moeten worden ingezet om te voldoen aan de vereisten die gelden voor algoritmes. Hierbij kan worden gedacht aan:

    • Een Impact Assessment Mensenrechten en Algoritmes.
    • Een Data Protection Impact Assessment.
    • Het hanteren van inkoopvoorwaarden.
  • Hoe burgers worden ge\u00efnformeerd over de inzet van algoritmes door de organisatie (communicatiestrategie) en welke kanalen hiervoor kunnen worden gebruikt. Hierbij kan worden gedacht aan:

    • Het Algoritmeregister voor het publiceren van hoog risico AI-systemen of impactvolle algoritmes.
    • Een algemene pagina op de website met informatie over de inzet van algoritmes.
    • Het verwerkingsregister.
    • Een intern registratiesysteem, bijvoorbeeld voor het registreren van laag risico of niet-impactvolle algoritmes zodat deze informatie voor medewerkers beschikbaar is.
    • In welke gevallen een (openbaar) besluit wordt genomen door het bestuur over de inzet van een algoritme.
  • Er is beschreven welke informatie over welke typen algoritmes wordt gecommuniceerd met betrokkenen bij de ontwikkeling of gebruik ervan door de organisatie.

  • Er is beschreven welke stappen worden gezetten in het geval dat er incidenten ontstaan rondom de inzet van algoritmes, denk hierbij aan een discriminatieprotocol.

  • Dit beleidsdocument is beschikbaar en toegankelijk voor ge\u00efnteresseerden.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-02-beleid_opstellen_inzet_algoritmes/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-02-beleid_opstellen_inzet_algoritmes/#risico","title":"Risico","text":"

Zonder duidelijk beleid over de inzet van algoritmes kan het gebeuren dat algoritmes worden ontwikkeld of gebruikt die niet passend zijn binnen de organisatie.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-02-beleid_opstellen_inzet_algoritmes/#voorbeelden","title":"Voorbeelden","text":"
  • Controle op algoritmes
  • ISO/IEC 42001: Artificial intelligence (AI) Management System
  • Webpagina van gemeente Amsterdam over algoritmes.

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-03-toepassen_risicobeheer/","title":"Maak een plan voor het omgaan met risico\u2019s","text":"

org-03OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-03-toepassen_risicobeheer/#maatregel","title":"Maatregel","text":"

Pas risicobeheer gestructureerd toe voorafgaand en gedurende de ontwikkeling en gebruik van algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-03-toepassen_risicobeheer/#toelichting","title":"Toelichting","text":"
  • Bepaal tijdig, bijvoorbeeld in de probleemanalyse- of ontwikkelfase, om wat voor toepassing het gaat (algoritme of AI-systeem) en bepaal welke risicoclassificatie hierbij hoort.
  • Bepaal op basis van de toepassing en de risicoclassificatie, welke aspecten van risicobeheer moeten worden toegepast.
  • Inventariseer tijdig, bijvoorbeeld in de probleemanalayse- of ontwikkelfase, bij betrokken experts welke beleidskaders en hulpmiddelen binnen de organisatie moeten worden ingezet om risicobeheer toe te passen.
  • Bepaal op basis van de levenscyclus van een algoritme of AI-systeem wanneer welke aspecten van risicobeheer moeten worden toegepast.
  • Maak inzichtelijk op welke niveaus risicobeheer kan en moet worden belegd bij het ontwikkelen en gebruiken van algoritmes.
  • Daarbij gaat het om het identificeren, analyseren, evalueren (afhankelijk van de risicobereidheid), behandelen (risicoreactie, o.a. maatregelen), monitoren & beoordelen en communiceren & rapporteren van risico's.
  • Gedurende de levenscyclus van een algoritme of AI-systemen kunnen nieuwe risico's ontstaan waar mogelijk nieuwe maatregelen voor moeten worden getroffen. Het is van belang dat iteratief wordt gewerkt aan mitigerende maatregelen en dat risicobeheer periodiek wordt toegepast.

Let op! Sommige maatregelen in het Algoritmekader gaan dieper in op het uitvoeren van risicoanalyses.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-03-toepassen_risicobeheer/#risico","title":"Risico","text":"

Risico's worden niet (tijdig) vastgesteld en adequaat geadresseerd en behandeld.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-03-toepassen_risicobeheer/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.13
  • Toetsingskader Algoritmes Algemene Rekenkamer, 1.03
  • Algoritmekader
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-03-toepassen_risicobeheer/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-04-politiek-bestuurlijke-verantwoordelijkheid/","title":"Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid.","text":"

org-04OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernanceTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-04-politiek-bestuurlijke-verantwoordelijkheid/#maatregel","title":"Maatregel","text":"

Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-04-politiek-bestuurlijke-verantwoordelijkheid/#toelichting","title":"Toelichting","text":"
  • Voor een passende algoritmegovernance is politiek-bestuurlijk bewustzijn, betrokkenheid en verantwoordelijkheid essentieel.
  • De kernvraag voor publieke organisaties bij de inzet van algoritmen is altijd: Hoe wegen we (als publieke organisatie of samenleving) de voordelen en nadelen van de inzet van algoritmen?
  • Dit is per definitie een kwalitatieve en politieke vraag.
  • Dit gaat niet alleen over direct opbrengsten maar ook over lange termijn en indirecte effecten, de mate waarin de inzet van technologie bijdraagt aan de legitimiteit van publieke organisatie en hoe burgers met deze technologie worden bejegend.
  • Om te zorgen voor politiek-bestuurlijke betrokkenheid kan het helpen om een meerjarige visie/strategie rondom verantwoorde inzet te formuleren waar een communicatiestrategie richting burgers onderdeel van is.
  • Zorg ervoor dat bestuurders bewust zijn van de voor- en nadelen van de inzet van algoritmes en daarnaar kunnen handelen.
  • Dit ondersteunt teams bij het maken van de juiste overwegingen bij de ontwikkeling en gebruik van algoritmes. Het geeft ook inzicht wanneer de politiek of bestuurlijk verantwoordelijke(n) moeten worden betrokken bij het project om beslissingen te nemen, bijvoorbeeld of de mate van onbewuste vooringenomenheid (bias) binnen acceptabele grenzen ligt.
  • Het doorlopen van een concrete casus voor de ontwikkeling en gebruik van een algoritme, inclusief het uitvoeren van een IAMA, kan waardevolle informatiegeven om een meerjarige visie of strategie op te stellen.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-04-politiek-bestuurlijke-verantwoordelijkheid/#bronnen","title":"Bronnen","text":"

Kleur bekennen - vervolgonderzoek algoritmes

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-04-politiek-bestuurlijke-verantwoordelijkheid/#risico","title":"Risico","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-04-politiek-bestuurlijke-verantwoordelijkheid/#voorbeelden","title":"Voorbeelden","text":"

Voorbeeld gemeente Rotterdam

\u00c9\u00e9n van de belangrijkste hoofdconclusies van het rapport Kleur Bekennen van de gemeente Rotterdam, opgesteld door de Algemene Rekenkamer, onderstreept het belang van actief bestuur binnen algoritme- en AI-governance:

\"Het ontbreekt aan een politiek-bestuurlijk kader dat duidelijk maakt welke normen en principes leidend zijn bij de ontwikkeling en het gebruik van algoritmes. Dit heeft als effect dat belangrijke besluit over bijvoorbeeld wenselijkheid, haalbaarheid, transparantie en bias bij de ambtelijke organisatie komen te liggen. Deze besluiten vragen om een politieke afweging\".

De algoritmegovernance van de Gemeente Rotterdam bestaat uit de volgende onderdelen:

  1. een visie op de inzet van algoritmes;
  2. instrumentarium voor risicobeheersing dat onder andere bestaat uit een risico-assessment en een mensenrechtenassessment;
  3. een uiteenzetting van rollen en verantwoordelijkheden en;
  4. een omschrijving van de verantwoordelijkheden voor controle en advies.

Deze stappen volgen kan helpen bij het inrichten van een algoritmegovernance.

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-05-bestaande-governance/","title":"Sluit algoritmegovernance aan op bestaande governancestructuren binnen de organisatie.","text":"

org-05OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-05-bestaande-governance/#maatregel","title":"Maatregel","text":"

Sluit algoritmegovernance aan op bestaande governancestructuren binnen de organisatie.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-05-bestaande-governance/#toelichting","title":"Toelichting","text":"

Bij de vormgeving van een algoritmegovernance van een organisatie is het van belang om aansluiting en samenwerking te bewerkstelligen met huidige governancestructuren binnen de organisatie, zoals:

  • IT governance

  • datagovernance

  • informatiebeveiliging zoals governance rondom de NIS2 richtlijn

  • privacygovernance

Deze governancestructuren kunnen waardevolle aanknopingspunten bieden voor algoritmegovernance, omdat hierin vaak al duidelijke afspraken zijn gemaakt en processen zijn geschreven om bijvoorbeeld risico's zo goed mogelijk te managen. In veel organisaties werken bijvoorbeeld privacy- en informatiebeveiliging en informatiebeheerders nauw samen van strategisch organisatieniveau tot operationeel, omdat deze onderwerpen raken aan beide domeinen. Voor een verantwoorde inzet van algoritmes zullen deze expertise moeten gaan samengewerkt met andere expertise, zoals die van data science en ethiek. Het is van belang dat deze expertises tijdig en voldoende ruimte krijgen om samen te werken, zodat de functionele en niet functionele requirements kunnen worden gedefinieerd voor een verantwoorde inzet van algoritmes. Stel vast waar deze expertise elkaar nodig hebben en waar deze zelfstandige taken en verantwoordelijkheden hebben. Voorgaande geeft inzichten om te bepalen in hoeverre algoritmegovernance, naast de bestaande governancestructuren, moet worden ingericht.

De volgende vragen kunnen bedragen om bovenstaande inzichtelijk te krijgen: - Welke lessen zijn geleerd met de implementatie van de AVG of de toepassing van de BIO? - Is er iemand intern verantwoordelijk gemaakt voor (toezicht op) algoritmes? - Hoe werken experts vanuit verschillende onderwerpen zoals privacy, informatiebeheer, informatiebeveiliging en data op dit moment samen als het gaat om de inzet van algoritmes?

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-05-bestaande-governance/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-05-bestaande-governance/#risico","title":"Risico","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-05-bestaande-governance/#voorbeelden","title":"Voorbeelden","text":"

Een concreet voorbeeld van samen optrekken is deze handreiking om de IAMA en DPIA gezamelijk uit te voeren.

Voorbeeld: Ervaringen Kadaster

  1. Bij inwerkingtreding van de AVG ging men snel aan de slag met DPIA\u2019s, vinkenlijstjes. Let op voor een schijndossier: Begrijp wat er toegepast moet worden, voordat je aan de slag gaat; niet uitvoeren om maar te laten zien dat je eraan voldoet.
  2. Nadenken over governance. De FG is bij de wet geregeld, maar er is meer nodig. Welke profielen heeft de ondersteuning voor de uitvoering; (centrale) privacy officers en is hier ruimte voor?
  3. Zorg dat interpretaties over wet- en regelgeving gelijk zijn binnen de organisatie en de collega\u2019s die binnen de governance structuur samenwerken.
  4. Er is beleid gemaakt, maar in de praktijk is te weinig capaciteit om dit uit te voeren. Stel een realistisch beleidsplan op om de gestelde doelen daadwerkelijk te kunnen realiseren.

Centrale privacy officer Kadaster

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/","title":"Gebruik een algoritme volwassenheidsmodel om te weten waar de organisatie staat","text":"

org-06OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/#maatregel","title":"Maatregel","text":"

Breng de volwassenheid van je organisatie op het gebied van algoritmes in kaart.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/#toelichting","title":"Toelichting","text":"
  • Om tot een passende algoritmegovernance voor een organisatie te komen, moet eerst worden vastgesteld wat op dit moment al is ingericht binnen een organisatie op het gebied van algoritmes.
  • Hiervoor kan een volwassenheidsmodel worden toegepast.
  • Op basis hiervan kunnen vervolgstappen worden gedefinieerd, zodat je een handelingsperspectief hebt om je organisatie te organiseren. Ook kunnen deze uitkomsten helpen bewustzijn over de uitdagingen te vergroten.
  • Het is denkbaar dat het realiseren van algoritmegovernance vraagt om een organisatieverandering. De noodzaak voor implementatie van de AI-Verordening kan hier een katalysator voor zijn. Pas daarom verandermanagementtechnieken toe.
  • Deel deze informatie met het bestuur en zorg dat hier bewustzijn ontstaat. Bepaal vervolgens hoe algoritmegovernance moet worden ingericht.
  • Het is aan te raden om verantwoordelijkheden te beleggen voor het realiseren van algoritmegovernance.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/#risico","title":"Risico","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/#voorbeelden-van-volwassenheidsmodellen","title":"Voorbeelden van volwassenheidsmodellen","text":"

Er zijn verschillende modellen om het volwassenheidsniveau te bepalen. Deze modellen richten zich niet altijd specifiek op het beheer van algoritmes, maar kijken breder naar algoritmes in de organisatie of naar ethische vraagstukken. Governance is altijd een onderdeel van deze modellen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/#ai-ethics-maturity-model-van-krijger-thuis-de-ruiter-ligthart-broekman-2023","title":"AI ethics maturity model van Krijger, Thuis, de Ruiter, Ligthart & Broekman (2023)","text":"

Het AI ethics maturity model van Krijger, Thuis, de Ruiter, Ligthart & Broekman (2023) brengt de volwassenheid op verschillende niveau's in kaart op basis van zes categorie\u00ebn:

  • awareness & culture
  • policy
  • governance
  • communication & training
  • pevelopment proces
  • tooling
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/#het-datavolwassenheidsmodel-van-de-ibds","title":"Het Datavolwassenheidsmodel van de IBDS","text":"

Het datavolwassenheidmodel van de Interbestuurlijke Datastrategie (IBDS) kijkt naar hoe goed organisaties omgaan met data. Dit model is ook belangrijk voor kunstmatige intelligentie (AI), omdat data daar een grote rol speelt. Het model heeft een beslishulp datavolwassenheid waarmee bepaald kan worden hoe volwassen een organisatie is met data. IBDS biedt ook een gids met verschillende manieren om de datavolwassenheid in kaart te brengen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/#innovatie-en-volwassenheid","title":"Innovatie en volwassenheid","text":"

Het gebruik van algoritmes wordt vaak gezien als een vorm van innovatie. Hoe kan AI helpen bij het ondersteunen van nieuwe idee\u00ebn en het vinden van nieuwe toepassingen? Een voorbeeld van een volwassenheidsmodel over innovatie is de Innovatie Maturity Scan van Innoveren met Impact.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/#mitre-ai-maturity-model-en-organizational-assessment-tool","title":"MITRE AI Maturity Model en Organizational Assessment Tool","text":"

Het AI Maturity Model en de bijbehorende Organizational Assessment Tool zijn ontwikkeld door de Amerikaanse organisatie MITRE. MITRE is een non-profitorganisatie en enigzins vergelijkbaar met het Nederlandse TNO. Dit volwassenheidsmodel onderscheidt een zestal pijlers in de AI volwassenheid van een organisatie en daarbij een vijftal volwassenheidsniveaus. Het volwassenheidsmodel en assessment zijn goed gedocumenteerd.

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes\\@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-07-intern-toezicht/","title":"Richt een algoritmegovernance in met three lines of defence","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-07-intern-toezicht/#maatregel","title":"Maatregel","text":"

Richt een algoritmegovernance in met three lines of defence.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-07-intern-toezicht/#toelichting","title":"Toelichting","text":"

Een inrichting van algoritmegovernance die vaak wordt toegepast is het three lines of defence model:

  • De eerste linie gaat over eigenaarschap, ontwikkeling, gebruik en risicobeheersing van algoritmes.
  • De tweede linie identificeert, beoordeelt en rapporteert over risico\u2019s en het uitgevoerde gebruik algoritmes.
  • De derde verdedigingslinie controleert de werking van de governance en betreft interne advisering en toetsing.

Schuett (2022) presenteert het three lines of defence model als volgt:

Het toepassen van een 'three lines of defence' is slechts \u00e9\u00e9n aspect van het toepassen van algoritmegoverance.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-07-intern-toezicht/#voorbeelden","title":"Voorbeelden","text":"

Onder andere de UWV en de Gemeente Rotterdam hanteren dit model met drie linies. Bij de gemeente Rotterdam zijn bijvoorbeeld de drie lijnen ingevuld via de volgende rollen en verantwoordelijkheden: \u201cDe eerste lijn bestaat uit de proceseigenaren en de operationeel verantwoordelijken. Proceseigenaren zijn verantwoordelijk voor de gehele algoritmetoepassing en de operationeel verantwoordelijken voor de ontwikkeling. De tweede lijn is de algoritme expert, die een onafhankelijke toezicht- en adviestaak heeft. De derde lijn wordt volgens de stukken die gaan over de algoritme governance vervuld door Financial audit.\u201d (Rekenkamer Rotterdam, 2024)

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-08-beslismoment-levenscyclus/","title":"Maak gebruik van beslismomenten in de algoritmelevenscyclus","text":"

org-08OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-08-beslismoment-levenscyclus/#maatregel","title":"Maatregel","text":"

Maak gebruik van beslismomenten in de levenscyclus van een algoritme.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-08-beslismoment-levenscyclus/#toelichting","title":"Toelichting","text":"
  • Algoritmegovernance kan op de levenscyclus aansluiten door 'gates' of controlepunten in te voeren. Deze gates bevatten belangrijke mijlpalen om te beoordelen of de juiste taken zijn uitgevoerd, of ethische afwegingen zijn geamaakt, of documentatie heeft plaatsgevonden en of akkoord is ingewonnen (go/no-go moment) bij de verantwoordelijke(n) om naar de volgende fase te mogen.
  • Het is belangrijk om te weten dat toepassing van deze \u2018gates\u2019 niet altijd hetzelfde is. Dit kan namelijk verschillen afhankelijk van het type algoritme.
  • Een hoog-risico-AI-systeem moet aan meer vereisten voldoen dan een niet impactvol algoritme. Een hoog-risico AI-systeem moet daarom binnen de gates worden getoetst op meer onderdelen dan een niet impactvol algoritme.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-08-beslismoment-levenscyclus/#bronnen","title":"Bronnen","text":"
  • Hulpmiddel handelingsruimte waardevolle AI in de zorg ([presentatie](https://nlaic.com/wp-content/uploads/2022/06/04a.
  • Hulpmiddel-Handelingsruimte-Waardevolle-AI-voor-gezondheid-en-zorg.pdf))(samenvatting) is beschikbaar via de NL AI Coalitie en Data voor gezondheid
  • UWV Beleidsdocument model risico management, Modellevenscyclus (blz 21), 29 september 2021
  • Lifecyclemanagement in het toetsingskader van de Algemene Rekenkamer nr (1.07) .
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-08-beslismoment-levenscyclus/#risico","title":"Risico","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-08-beslismoment-levenscyclus/#voorbeelden","title":"Voorbeelden","text":"

Hieronder volgen twee voorbeelden van hoe governance effectief kan worden ge\u00efntegreerd in de levenscyclus van algoritmen en AI-modellen:

Ministerie VWS In de levenscyclus

In het hulpmiddel handelingsruimte waardevolle AI in de zorg is tussen elke fase in de levenscyclus een \u2018gate\u2019 geplaatst. Tussen de afronding van een fase en de start van de daaropvolgende fase wordt een formele poort geplaatst. Om door deze poort te gaan, moet de voorgaande fase volledig zijn afgerond: vraagstukken dienen beantwoord te zijn, activiteiten uitgevoerd en aan interne en externe vereisten dient te zijn voldaan. Deze zaken kunnen in de vorm van documentatie aan de organisatie worden opgeleverd, waarna een gesprek of review kan plaatsvinden.

Het vormgeven van deze overgangen geeft verantwoordelijke stakeholders binnen de organisatie een structuur om de ontwikkeling en inzet van algoritmen in elke fase te beoordelen en bij te sturen. De gezamenlijke kernvraag voor alle betrokkenen in de gates is: Geloven we dat de voordelen van de inzet (en ontwikkeling) van dit algoritme opwegen tegen eventueel te verwachten nadelen? En hoe gaan we om met deze dilemma's? Daarbij kunnen opvolgende fasen in de levenscyclus een eigen accentvraag kennen, zoals \u201cIs het beoogde algoritme wenselijk?\u201d in de probleemanalyse fase tot \u201cLevert het algoritme nog de waarde op die we beogen?\u201d tijdens de monitoring- en beheerfase.

Voorbeeld: Het UWV

In haar modellevenscyclus [^3] maakt het UWV gebruik van een gelaagdheid in de \u201cgates\u201d door gebruik te maken van een zachte en harde knip tussen de opvolgende fasen. Enerzijds is er een zachte knip voorzien door aan het eind van elke fase de mogelijkheid te laten om een stap terug te zetten in de levenscyclus. Mocht het onduidelijk zijn wat de beoogde voordelen zijn ten opzichte van de nadelen, of er onvoldoende invulling gegeven is aan de vereisten/activiteiten, dan kan het algoritme of AI-model ontwikkelproces bij een zachte knip een stap terugnemen in de levenscyclus. Anderzijds zijn er 4 harde grenzen in de levenscyclus aangebracht waarin formele vereisten aan het ontwikkeltraject worden opgelegd.

Voorbeeld: BD (Analytische en Cognitieve Technologie - CoE Cognitieve Oplossingen)

Enkele ervaringen m.b.t. levencyclus: Plot sleutelmomenten en mijlpaal momenen in die nodig zijn om het proces te kunnen laten werken en bepaal de requirements die daarmee samenhangen. Richt als eerste een basis (b.v. voor low risk) de AI-governance in op operationeel niveau, implementeer deze basis en stel gaandeweg/ondertussen op basis van o.a. best practices de requirements op naar de \"wereld\" er om heen (tactisch en strategisch niveau).

Voorbeeld: Algoritmeprocesmodel Ministerie van Defensie

Het Ministerie van Defensie heeft een \"algoritmeprocesmodel\" ontwikkeld. Op level 1 is het een levenscyclus zoals ook in het Algoritmekader. Op level 2 wordt ingegaan op de rollen en verantwoordelijkheden. Op level 3 zijn ook formulieren om op specifieke momenten in de AI-levenscyclus de juiste documentatie op te leveren. N.B.: Defensie heeft dit ingericht in Sharepoint, waardoor verantwoordelijken te koppelen zijn aan activiteiten in de levenscyclus.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-09-governance-per-risicocategorie/","title":"Richt algoritmegovernance op basis van de risicoclassificatie van algoritmes.","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-09-governance-per-risicocategorie/#maatregel","title":"Maatregel","text":"

Richt algoritmegovernance in op basis van de risicoclassificatie van algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-09-governance-per-risicocategorie/#toelichting","title":"Toelichting","text":"
  • Er is een verschil in de vereisten die van toepassing zijn op type algoritmes. Dit is mede afhankelijk van de risioclassificatie en de impact van het algoritme op betrokkenen.
  • Zo zullen op basis van de AI-verordening meer vereisten moeten worden nageleefd bij hoog-risico AI-systemen, dan voor een AI-systeem met een beperkt risico.
  • Dit betekent dat algoritmegovernance uitgebreider moet zijn voor de risicovollere, complexere toepassingen dan voor de eenvoudige, niet-risicovolle toepassingen.

  • Stel daarom tijdig vast om welk type algoritme het gaat en welke vereisten hiervoor gelden. Dat draagt eraan bij dan alleen wordt gefocust op het realiseren van de vereisten waar daadwerkelijk aan moet worden voldaan. Dit zorgt ervoor dat projecten sneller kunnen worden gerealiseerd.

  • Let op dat niet enkel naar de AI-verordening wordt gekeken. Ook op impactvolle algoritmes die niet vallen onder het bereik van de AI-Verordening zijn ook vereisten van toepassing, en moet algoritmegovernance op worden toegepast.
  • Is algoritmegovernance nieuw bij jouw organisatie, dan kan het helpen om een use-case met beperkt risico grondig te doorlopen om hiervan te leren.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-09-governance-per-risicocategorie/#bronnen","title":"Bronnen","text":"Bekijk alle vereisten

Geen vereisten beschikbaar voor deze maatregel.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-09-governance-per-risicocategorie/#risico","title":"Risico","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-09-governance-per-risicocategorie/#voorbeelden","title":"Voorbeelden","text":"

De gemeente Rotterdam kiest ervoor om de algoritmegovernance alleen in te zetten bij hoog-risico AI-toepassingen. Deze risicoclassificatie volgt de AI-Verordening. Voor laag-risico toepassingen geldt de standaard governance van de gemeente: de informatiebeveiligings- en privacy governance (Kleur Bekennen, Rekenkamer Rotterdam, 2024, p.71). Tabel 1 geeft inzicht in verschillende typen algoritmen en AI-toepassingen. De afbeelding uit hetzelfde rapport geeft een flowchart van hoe de governance anders is afhankelijk van de risico-categorie.

In dit voorbeeld is ook het principe gehanteerd dat naast hoog-risico volgens de AI-verordening, bij ieder algoritme aan de hand van een drietal vragen moet worden besloten of een uitgebreidere algoritmegovernance nodig is. * Is de werking van het algoritme niet volledig \u00e9n beknopt uit te leggen aan een gemiddelde Rotterdammer? * Ontbreekt er een menselijke beoordeling voordat de uitkomst van het algoritme in de praktijk wordt gebracht door middel van een concrete handeling van de gemeente? * Is het voorstelbaar dat de algoritmetoepassing uitmondt in een onrechtvaardige handeling van de gemeente tegen burgers of bedrijven

Kijk zelf goed wat passend is voor jouw organisatie.

Voorbeeld BD (Analytische en Cognitieve Technologie | CoE Cognitieve Oplossingen): * Richt als eerste een basis (b.v. voor low risk) algoritmegovernance in op operationeel niveau, implementeer deze basis en stel gaandeweg/ondertussen op basis van o.a. best practices de requirements op naar de \"wereld\" er om heen (tactisch en strategisch niveau).

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-10-inrichten-taken-en-verantwoordelijkheden-algoritmegovernance/","title":"Taken en verantwoordelijkheden zijn toebedeeld in de algoritmegovernance","text":"

org-10OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-10-inrichten-taken-en-verantwoordelijkheden-algoritmegovernance/#maatregel","title":"Maatregel","text":"

Taken en verantwoordelijkheden zijn toebedeeld in de algoritmegovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-10-inrichten-taken-en-verantwoordelijkheden-algoritmegovernance/#toelichting","title":"Toelichting","text":"
  • Bij het vormgeven van een doeltreffende algoritmegovernance is het beleggen van expliciete taken en verantwoordelijkheden cruciaal.
  • Het beleggen van deze taken en verantwoordelijkheden zorgt voor een actiegerichte structuur waarin duidelijkheid bestaat over wie wanneer aan zet is.
  • Denk hierbij aan het opstellen van een RACI-matrix en pas dit binnen de organisatie toe per risicoclassificatie voor algoritmes.
  • Rollen en verantwoordelijkheden kunnen worden gekoppeld aan de vereisten en maatregelen die moeten worden gerealiseerd in de verschillende fasen van de levenscyclus van een algoritme.
  • Organisaties zullen zelf moeten beoordelen welke taken en verantwoordelijkheden ze willen koppelen aan de beschikbare (of nieuwe) rollen binnen hun organisaties.
  • Zie hieronder een mogelijk voorbeeld van hoe dit eruit kan zien.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-10-inrichten-taken-en-verantwoordelijkheden-algoritmegovernance/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-10-inrichten-taken-en-verantwoordelijkheden-algoritmegovernance/#risico","title":"Risico","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-10-inrichten-taken-en-verantwoordelijkheden-algoritmegovernance/#voorbeelden","title":"Voorbeelden","text":"

Three lines of defence - diverse organisaties

Het three lines of defence model dat zowel de gemeente Rotterdam als het UWV hanteert biedt hiervoor handvatten. De essentie van dit model is het scheiden van drie niveau\u2019s in verantwoordelijkheden om effectieve governance mogelijk te maken. Daarnaast wordt in veel governance structuren een RACI model opgesteld om rollen en verantwoordelijkheden expliciet te maken.

RACI matrix - diverse organisaties

RACI is de afkorting voor Responsible (Verantwoordelijk \u2013 uitvoerder van de taak), Accountable (Aanspreekbaar \u2013 eigenaar van de taak), Consulted (Geconsulteerd) en Informed (Ge\u00efnformeerd). De gemeente Rotterdam heeft de interactie tussen rollen/verantwoordelijkheden van algoritme/AI governance en de volledige datamanagement structuur in een RACI model vormgegeven (Bron: Kleur bekennen rekenkamer Rotterdam). Wees bewust dat iedere organisatie anders is, en waarschijnlijk op een andere RACI-matrix uitkomt.

Niet alles town down vast te leggen - CoE Belastingdienst

Het te regide vastleggen van functies en bijbehorende taken en verantwoordelijkheden kan nadelen hebben. Een team bij de belastingdienst (Analytische en Cognitieve Technologie | CoE Cognitieve Oplossingen) heeft ervaren dat het definieren van werkpakketten in plaats van uitwerkte functies beter werkt. Alles dient belegd te zijn, maar alles op microniveau vastleggen is vaak niet te doen zonder in de praktijk te staan, en kan avenrechts werken. Wees als algoritmegovernance nog nieuw is zeker in het begin bewust dat inrichting altijd beter kan; ga grondig maar ook flexibel te werk.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-11-gebruikersbeheer/","title":"Maak afspraken over het beheer van gebruikers","text":"

org-11OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesTechnische robuustheid en veiligheidGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-11-gebruikersbeheer/#maatregel","title":"Maatregel","text":"

Richt gebruikersbeheer in, waarmee bepaald wordt wie toegang heeft tot wat, en wat er bijvoorbeeld gebeurt bij indiensttreding, functiewijziging en uitdiensttreding.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-11-gebruikersbeheer/#toelichting","title":"Toelichting","text":"

Gebruikersbeheer zorgt ervoor dat accounts en autorisaties beheerst worden aangevraagd, geautoriseerd, gewijzigd en ingetrokken bij indiensttreding, functiewijziging en uitdiensttreding. Ook wordt functievermenging voorkomen bij toegang en gebruik van het algoritme, de data of de uitkomsten van een algoritme.

Bij het inrichten van gebruikersbeheer moeten aan de volgende elementen worden gedacht:

  • Gebruikers en beheerders krijgen slechts toegang tot functionaliteit die zij uit hoofde van hun functie nodig hebben (need to know, need to use). Daartoe is een beschrijving beschikbaar welke rollen en rechten per applicatie bij een functie horen (BIO 6.1.2, 9.2.2 en 9.4).
  • Het verlenen en muteren van accounts en toegangsrechten vindt plaats na goedkeuring door een bevoegde functionaris. Dit aan de hand van een actueel mandaatregister waaruit blijkt welke personen beslissende bevoegdheden hebben voor het verlenen van een bepaald type (niveau) toegangsrechten danwel functieprofielen (BIO 9.2.1.2, 9.2.2.1, 9.4).
  • Er bestaat functiescheiding tussen het aanvragen, autoriseren en doorvoeren van wijzigingen in gebruikersaccounts en toegangsrechten (BIO 9.2.1.2, 9.2.2.1, 9.2.3).
  • Functiewijzigingen en uitdiensttredingen worden bewaakt voor aanpassen van de toegangsrechten en voor intrekken van de identiteits- en authenticatiemiddelen (BIO 9.2.2, 9.2.6).
  • Het aantal accounts met verhoogde rechten is beperkt en verklaard, en staat in logische verhouding tot de beheerders en of ICT-afdeling (BIO 9.1.2.(1), 9.2.3, 9.2.4).
  • Gebruikersaccounts en beheeraccounts dienen altijd persoonsgebonden en verklaard te zijn, zodat handelingen altijd te herleiden zijn naar \u00e9\u00e9n verantwoordelijke (BIO 9.1, 9.4.2).
  • Eindgebruikers hebben geen directe toegang tot de onderliggende componenten (zoals de database) (BIO 9.2.3, 13.1.3).
  • Toegangsrechten op onderliggende componenten dienen periodiek, minimaal jaarlijks, ge\u00ebvalueerd te worden. Dit interval dient te zijn beschreven in het toegangsbeleid en zijn bepaald op basis van het risiconiveau. De uitkomsten van de evaluatie en de opvolging daarvan worden vastgelegd (BIO 9.2.5).

Voor deze maatregelen is het van belang om aandacht te hebben voor de volgende zaken:

  • Autorisatiematrix en beschrijving rollen/rechten per systeem(laag)
  • Lijst met wijzigingen rollen en bijbehorende goedkeuringen
  • Overzicht aantallen en rechten per (systeem)laag
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-11-gebruikersbeheer/#risico","title":"Risico","text":"

Er bestaan meerdere risico's wanneer er geen gebruikersbeheer is: - Toegangsrechten kunnen niet meer up-to-date zijn, bijvoorbeeld wanneer er geen rekening wordt gehouden met het IDU-proces (). Er bestaat dan het risico dat gebruikers toegang tot de omgeving van het algoritme, de data of de uitkomsten van het algoritme hebben die zij niet zouden mogen hebben. - Wanneer functievermenging niet wordt voorkomen bij toegang en gebruik van het algoritme, bestaat het risico dat er ongeautoriseerde wijzigingen worden doorgevoerd aan het algoritme, de data of de uitkomsten van het algoritme. - Wanneer gebruik wordt gemaakt van generieke-, groeps- of onpersoonlijke accounts, bestaat het risico dat handelingen niet te herleiden zijn naar een verantwoordelijke persoon.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-11-gebruikersbeheer/#bronnen","title":"Bronnen","text":"
  • Baseline Informatiebeveiliging Overheid
  • Onderzoekskader Algoritmes Auditdienst Rijk, IB.10 t/m IB.17
  • Toetsingskader Algoritmes Algemene Rekenkamer, 4.01, 4.02, 4.04, 4.05
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-11-gebruikersbeheer/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-12-periodieke-evaluatie-kwaliteit/","title":"Controleer en verbeter regelmatig de kwaliteit van het algoritme","text":"

org-12OrganisatieverantwoordelijkhedenMonitoring en beheerProjectleiderBeleid en adviesGovernanceMenselijke controle

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-12-periodieke-evaluatie-kwaliteit/#maatregel","title":"Maatregel","text":"

Richt een proces in voor een periodieke evaluatie van de kwaliteit van het algoritme.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-12-periodieke-evaluatie-kwaliteit/#toelichting","title":"Toelichting","text":"
  • Het is van belang dat een proces wordt ingericht waarmee periodiek de kwaliteit van algoritmes wordt ge\u00ebvalueerd.
  • Bij kwaliteit van een algoritme kan worden gedacht aan doeltreffenheid, doelmatigheid, betrouwbaarheid en accuraatheid (geschiktheid), non-discriminatie en menselijke controle.
  • Hieronder vallen het analyseren en evalueren van ingediende klachten en incidenten.
  • Hieronder vallen ook het analyseren evalueren van besluiten door of aan de hand van het algoritmen.
  • Na verloop van tijd kan de accuraatheid van machine learning modellen bijvoorbeeld wijzigen of kan het gebeuren dat bepaalde groepen (indien van toepassing) anders worden behandeld.
  • Het is van belang dat monitoringsactiviteiten worden ingericht om deze kwaliteitsaspecten tijdig te beoordelen.
  • Als er ongewenste wijzigingen plaatsvinden met betrekking tot de kwaliteit, moeten die worden ge\u00ebvalueerd en zullen maatregelen moeten worden getroffen om deze te herstellen.
  • Het proces moet er voor zorgen dat de juiste experts of stakeholders worden betrokken bij het proces van evaluatie en het treffen van passende maatregelen.

Let op! Sommige maatregelen in het Algoritmekader gaan dieper in op het uitvoeren van risicoanalyses.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-12-periodieke-evaluatie-kwaliteit/#risico","title":"Risico","text":"

Zonder evaluatie van de kwaliteit van het algoritme is er geen goede sturing, beheersing en verantwoording mogelijk als er ongewenste wijzigingen plaatsvinden in het algoritme of AI-systeem.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-12-periodieke-evaluatie-kwaliteit/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.15, SV.16, SV.17
  • Toetsingskader Algoritmes Algemene Rekenkamer, 1.08
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-12-periodieke-evaluatie-kwaliteit/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-13-wachtwoordbeheer/","title":"Maak afspraken over het beheer van wachtwoorden","text":"

org-13OrganisatieverantwoordelijkhedenProjectleiderOntwikkelaarTechnische robuustheid en veiligheidGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-13-wachtwoordbeheer/#maatregel","title":"Maatregel","text":"

Richt wachtwoordbeheer in, waarmee bepaald wordt hoe wachtwoorden worden opgeslagen, wanneer wijzigingen moeten plaatsvinden en waaraan wachtwoorden moeten voldoen. Hiermee wordt de toegang tot bijvoorbeeld ontwikkelomgevingen geregeld op een veilige manier.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-13-wachtwoordbeheer/#toelichting","title":"Toelichting","text":"

Bij het inrichten van wachtwoordbeheer moeten de volgende zaken worden toegepast:

  • Alle wachtwoorden van gebruikers en beheerders dienen periodiek te worden gewijzigd, met een maximum van 1 jaar (BIO 9.4.3). Initi\u00eble wachtwoorden en wachtwoorden die gereset zijn, hebben een maximale geldigheidsduur van 24 uur en moeten bij het eerste gebruik worden gewijzigd.
  • Voor toegang vanuit een onvertrouwde omgeving dient twee-factor authenticatie te worden gebruikt (BIO 9.4.2.1). Als er geen gebruik wordt gemaakt van two-factor authenticatie, is de wachtwoordlengte minimaal 8 posities en complex van samenstelling. In situaties waar geen two-factor authenticatie mogelijk is, wordt minimaal halfjaarlijks het wachtwoord vernieuwd.
  • Na een periode van maximaal 15 minuten inactiviteit dient de toegang tot de applicatie te worden vergrendeld en na 10 foutieve inlogpogingen dient het account geblokkeerd te worden (BIO 11.2.9, BIO 9.4.3). De tijdsduur dat een account wordt geblokkeerd na overschrijding van het aantal keer foutief inloggen is vastgelegd.
  • Wachtwoorden mogen niet in originele vorm (plaintext) worden opgeslagen, maar dienen versleuteld te worden. (NIST 5.1.1.2)
  • De eisen aan wachtwoorden moeten geautomatiseerd worden afgedwongen.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-13-wachtwoordbeheer/#risico","title":"Risico","text":"

Als het wachtwoordbeheer van onvoldoende kwaliteit is, kan oneigenlijke toegang plaatsvinden tot het algoritme of uitkomsten van het algoritme, bijvoorbeeld doordat het wachtwoord te eenvoudig is.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-13-wachtwoordbeheer/#bronnen","title":"Bronnen","text":"
  • Baseline Informatiebeveiliging Overheid
  • Onderzoekskader Algoritmes Auditdienst Rijk, IB.6 t/m IB.9
  • Toetsingskader Algoritmes Algemene Rekenkamer, 4.03
  • NIST 5.1.1.2
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-13-wachtwoordbeheer/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-14-wijzigingenproces/","title":"Maak afspraken over het wijzigen van de code","text":"

org-14OrganisatieverantwoordelijkhedenProjectleiderOntwikkelaarTechnische robuustheid en veiligheidGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-14-wijzigingenproces/#maatregel","title":"Maatregel","text":"

Richt een wijzigingenproces in, waarmee bepaald wordt hoe codewijzigingen plaatsvinden.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-14-wijzigingenproces/#toelichting","title":"Toelichting","text":"

Bij het inrichten van een proces om wijzigingen aan de code te mogen aanbrengen, kunnen aan de volgende elementen worden gedacht:

  • Wijzigingen dienen van te voren te worden geautoriseerd door de systeemeigenaar of product owner. (BIO 12.1.2)
  • Wijzigingen worden getest in een andere omgeving dan de productieomgeving. (BIO 12.1.4, 14.2.3, 14.2.9, 14.3.1)
  • Wijzigingen worden door de systeemeigenaar of product owner goedgekeurd op basis van gedocumenteerde testresultaten en pas daarna doorgevoerd in de productieomgeving. (BIO 12.1.2, 14.2.2, 14.2.9)
  • Er dient functiescheiding te zijn ingericht tussen het aanvragen, goedkeuren en doorvoeren van wijzigingen om onbevoegde en onbedoelde wijzigingen te beperken. (BIO 6.1.2, 14.2.2)
  • Er dient periodiek controle plaats te vinden op wijzigingen aan het systeem, zodanig dat oneigenlijke wijzigingen worden gesignaleerd. (BIO 9.4.4, 12.4.1)
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-14-wijzigingenproces/#risico","title":"Risico","text":"

Als een formeel wijzigingenproces ontbreekt bestaat het risico van ongeautoriseerde toegang, wijziging of beschadiging van de code van het algoritme, of de uitkomsten van het algoritme.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-14-wijzigingenproces/#bronnen","title":"Bronnen","text":"
  • Baseline Informatiebeveiliging Overheid
  • Onderzoekskader Algoritmes Auditdienst Rijk, IB.1 t/m IB.5
  • Toetsingskader Algoritmes Algemene Rekenkamer, 4.07
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-14-wijzigingenproces/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/","title":"Stel een protocol vast voor de situatie dat er (een vermoeden van) discriminatie door een algoritme is geconstateerd en pas dit wanneer nodig toe.","text":"

imp-10OrganisatieverantwoordelijkhedenImplementatieProjectleiderBeleid en adviesBias en non discriminatie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/#maatregel","title":"Maatregel","text":"

Stel een protocol vast voor de situatie dat er (een vermoeden van) discriminatie door een algoritme is geconstateerd en pas dit wanneer nodig toe.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/#toelichting","title":"Toelichting","text":"

De inzet van algoritme kan onbedoeld leiden tot discriminerende effecten. Het is van belang om als organisatie een protocol te hebben vastgesteld waarin is uitgewerkt hoe wordt omgegaan met situaties waarin (een vermoeden van) discriminatie door een algoritme is geconstateerd. In een dergelijk protocol kunnen de handelingen worden beschreven die moeten worden uitgevoerd om deze situatie te gaan herstellen. Het vaststellen van een dergelijk protocol geeft ontwikkelaar en gebruikers (vooraf) duidelijkheid wat van hen wordt verwacht en wat zij kunnen doen om discriminatie door algoritmes te voorkomen. Een voorbeeld hiervan is het analyseren van de data op datakwaliteit en bias in de data en toets regelmatig je algoritmisch systeem op bias.

Het Ministerie van Binnenlandse Zaken en Koninkrijksrelaties heeft een discriminatieprotocol opgesteld wat organisaties handvatten biedt.

Een discriminatieprotocol kan de volgende stappen bevatten:

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/#stap-1-vermoeden-van-onrechtmatigheid","title":"Stap 1: Vermoeden van onrechtmatigheid","text":"

Een vermoeden van bevooroordeeldheid of discriminatie kan vanuit verschillende partijen gemeld worden. Signalen hiervoor kunnen worden ontvangen vanuit de interne organisatie, bijvoorbeeld door de betrokken ontwikkelaars, gebruikers of beheerders, of door externe partijen, zoals belanghebbenden, toezichthouder, journalisten.

  • Zorg dat signalen tijdig bij de goede medewerkers terecht komen.
  • Indien er sprake is van zo'n vermoeden, zorg je dat bijvoorbeeld de uitvoerend directeur, de interne toezichthouder en/of de CIO en CDO hierover worden ge\u00efnformeerd.
  • Maak met de verantwoordelijken een afweging of het betreffende systeem in werking kan blijven of dat bijvoorbeeld het noodplan voor het stopzetten van het algoritme (tijdelijk) in gang moet worden gezet.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/#stap-2-inzicht-en-overzicht","title":"Stap 2: Inzicht en overzicht","text":"

Het is van belang om inzicht en overzicht te krijgen over de oorzaak en de gevolgen van eventuele discriminerende effecten van het algoritme. Daarvoor kan worden gedacht aan het uitvoeren van een bias analyse.

  • Bepaal wie er verantwoordelijk is voor het uitvoeren van het onderzoek.
  • Bepaal of je een onafhankelijk onderzoek wilt doen naar het algoritme.
  • Breng in kaart wat de omvang van het probleem is. Hoe lang doet het probleem zich al voort, en hoeveel mensen betreft het?
  • Ga snel met (vertegenwoordigers van) gedupeerden in gesprek over de gevolgen en de mogelijke schade
  • Trek een conclusie of er sprake is van discriminatie, of een sterk vermoeden van discriminatie.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/#stap-3-beperken-schade","title":"Stap 3: Beperken schade","text":"

Bepaal welke mitigerende maatregelen er genomen moeten worden. Als er in het onderzoek is vastgesteld dat er sprake is van discriminatie, dan moet het betreffende systeem worden stopgezet. Hierbij kan je denken aan:

  • Het in werking stellen van het het noodplan voor het stopzetten van het algoritme, indien dat in stap 1 nog niet gebeurd is.
  • Aanpassingen in het algoritme, de werkinstructies of de bijbehorende processen.
  • Indien het algoritme essentieel is in de uitvoer kan er sprake zijn van een een proportionaliteitsvraagstuk. In dat geval moet er worden bezien wat de alternatieven zijn, en of er delen van het systeem kunnen worden uitgeschakeld.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/#stap-4-melden-en-informeren","title":"Stap 4: Melden en informeren","text":"

De conclusies van de eerdere stappen moeten, indien nodig, worden gemeld bij de betreffende instanties. De eventuele gedupeerde burgers dienen te worden ge\u00efnformeerd over de gevolgen.

  • Als er sprake is van een hoog-risico-AI-systeem moeten ernstige incidenten worden gemeld bij de markttoezichtautoriteiten. Zie artikel 73 van de AI-verordening en artikel 3 (49.c) van de AI-verordening.
  • Voor alle algoritmes geldt: Informeer de interne toezichthouder, de externe toezichthouder en de politiek, afhankelijk van hoeveel mensen geraakt en gedupeerd zijn en de impact.
  • Informeer de betrokken burgers over de sitatie. Maak indien nodig excuses en geef de mensen die (mogelijk) geraakt zijn uitleg zodat zij:

    • begrijpen wat er is gebeurd
    • weten wat de waarschijnlijke gevolgen zijn
    • welke mitigerende maatregelen zijn genomen
    • waar mensen terecht kunnen met vragen
    • op de hoogte zijn van het proces rondom de afhandeling van de schade.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/#stap-5-registratie-en-afhandeling","title":"Stap 5: Registratie en afhandeling","text":"
  • Registreer het algoritme in het algoritmeregister, indien dat nog niet gebeurd is.
  • Zorg voor goede klachtenafhandeling en herstelprocedures.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/#bronnen","title":"Bronnen","text":"
  • Discriminatieprotcol van het Ministerie van Binnenlandse Zaken en Koninkrijksrelaties
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-01-formuleren-probleemdefinitie/","title":"Beschrijf het probleem dat het algoritme moet oplossen","text":"

pba-01ProbleemanalyseProjectleiderGovernanceTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-01-formuleren-probleemdefinitie/#maatregel","title":"Maatregel","text":"

Formuleer en documenteer wat de aanleiding is om een algoritme in te willen zetten. Formuleer duidelijk de probleemdefinitie en probleemafbakening waarvoor het algoritme een oplossing zou moeten vormen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-01-formuleren-probleemdefinitie/#toelichting","title":"Toelichting","text":"

Formuleer de probleemdefinitie en probleemafbakening zo concreet en precies mogelijk. Maak dit waar mogelijk kwantificeerbaar.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-01-formuleren-probleemdefinitie/#risico","title":"Risico","text":"

Het algoritme dient niet het onderliggende probleem. Zonder eenduidigheid over het op te lossen probleem is geen sturing op en verantwoording over het algoritme mogelijk.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-01-formuleren-probleemdefinitie/#bronnen","title":"Bronnen","text":"
  • Impact Assessment Mensenrechten en Algoritmes, 1.01
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.1
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-01-formuleren-probleemdefinitie/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-02-formuleren-doelstelling/","title":"Beschrijf het doel van het algoritme","text":"

pba-02ProbleemanalyseProjectleiderGovernanceTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-02-formuleren-doelstelling/#maatregel","title":"Maatregel","text":"

Het doel en de eventuele subdoelen van het algoritme moeten zo specifiek mogelijk zijn geformuleerd, en waar mogelijk gekwantificeerd. Maak de consequenties van het algoritme specifiek en zorg dat het doel van het algoritme formeel is vastgesteld en vastgelegd.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-02-formuleren-doelstelling/#toelichting","title":"Toelichting","text":"
  • Het doel van de inzet van een algoritme dient zo concreet en specifiek mogelijk gedefinieerd te worden. Indien er meerdere doelen zijn, is het belangrijk om een zekere rangorde te maken: wat zijn de belangrijkste doelen? En waarom? Welke doelen zijn subdoelen, waarvoor het minder belangrijk is om deze te realiseren?

  • Indien mogelijk, dienen de doelstellingen gekwantificeerd te worden (SMART).

  • Om te zorgen voor voldoende draagvlak voor de beoogde doelen, is het noodzaak om voldoende belanghebbenden te betrekken. Hierbij kan het ook helpen om burgers te betrekken bij de totstandkoming van de doelstellingen, bijvoorbeeld door middel van een burgerpanel of het betrekken van belangengroepen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-02-formuleren-doelstelling/#risico","title":"Risico","text":"

Het algoritme dient niet het beoogde doel en onderliggend probleem. Zonder eenduidigheid over het doel is geen sturing op en verantwoording over het algoritme mogelijk. Er is dan een groter risico op fouten en/of verschillen in interpretatie.

Wanneer doelstellingen niet meetbaar zijn gemaakt, is het onmogelijk om achteraf te kwantificeren of de doelstellingen zijn behaald. Doelstellingen zijn in dat geval moeilijk bespreekbaar.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-02-formuleren-doelstelling/#bronnen","title":"Bronnen","text":"
  • Toetsingskader Algoritmes Algemene Rekenkamer, 1.01, 1.02
  • Impact Assessment Mensenrechten en Algoritmes, 1.2
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.3
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-02-formuleren-doelstelling/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-03-onderbouwen-gebruik-algoritme/","title":"Beschrijf waarom een algoritme het probleem moet oplossen","text":"

pba-03ProbleemanalyseProjectleiderGovernanceMenselijke controle

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-03-onderbouwen-gebruik-algoritme/#maatregel","title":"Maatregel","text":"

Bepaal en documenteer waarom het gewenst of nodig is om een algoritme in te zetten om het probleem te kunnen aanpakken.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-03-onderbouwen-gebruik-algoritme/#toelichting","title":"Toelichting","text":"
  • Bepaal waarom het gewenst of nodig is om een algoritme in te zetten, en of er ook alternatieven zijn om het probleem op te lossen. Documenteer de onderbouwing waarom een algoritme een betere oplossing zou bieden dan een niet-geautomatiseerd of niet-digitaal proces.

  • Maak een bewuste afweging of een algoritme het juiste middel is om het probleem op doelmatige en doeltreffende wijze op te lossen, en documenteer deze afweging.

  • Beoordeel of de gewenste oplossing is toegestaan op grond van de AI-Verordening.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-03-onderbouwen-gebruik-algoritme/#risico","title":"Risico","text":"

Het algoritme is niet het juiste middel om het probleem op te lossen. Het risico daarbij bestaat dat het probleem niet wordt opgelost.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-03-onderbouwen-gebruik-algoritme/#bronnen","title":"Bronnen","text":"
  • Impact Assessment Mensenrechten en Algoritmes, 1.01
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.2
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-03-onderbouwen-gebruik-algoritme/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-04-betrek-belanghebbenden/","title":"Overleg regelmatig met belanghebbenden","text":"

pba-04ProbleemanalyseOntwerpImplementatieProjectleiderGovernanceFundamentele rechten

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-04-betrek-belanghebbenden/#maatregel","title":"Maatregel","text":"

Breng in kaart welke belanghebbenden er zijn en betrek hen op verschillende momenten in de levenscyclus.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-04-betrek-belanghebbenden/#toelichting","title":"Toelichting","text":"

Het betrekken van belanghebbenden is van belang in bijna alle fasen van de levenscyclus. Belanghebbenden zijn onder meer eindgebruikers, mensen en rechtspersonen die door het algoritme geraakt kunnen worden en vertegenwoordigende organisaties.

In de fase van de probleemanalyse is het allereerst van belang in kaart te brengen welke stakeholders er zijn. Wie gaan bijvoorbeeld werken met het algoritme (eindgebruikers)? En welke demografie\u00ebn worden geraakt door een algoritme? Bij wie liggen de voordelen en bij wie liggen de nadelen? Ga in gesprek met deze belanghebbenden - al dan niet vertegenwoordigd door belangenorganisaties zoals burgerrechtenorganisaties - over het te ontwerpen algoritme en de context waarin het gebruikt wordt. Zij kunnen waardevolle inzichten en wensen delen, wat kan bijdragen aan een betere werking van het algoritme.

Enkele voorbeelden hierbij zijn: - Het betrekken van burgers bij het ontwerpen van een algoritme in de ontwerpfase. - Het bespreken welke definitie en metriek van fairness past bij de context met de proceseigenaar en een ethicus. - Het betrekken van domeinexperts in de fase van dataverkenning en datapreparatie, om zo in kaart te brengen wat de data features betekenen en waar zij vandaan komen. - Het betrekken van eindgebruikers bij het ontwikkelen en het implementeren van het algoritme. - Het betrekken van belanghebbenden bij het monitoren en evalueren van het algoritme.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-04-betrek-belanghebbenden/#bronnen","title":"Bronnen","text":"
  • Toetsingskader Algemene Rekenkamer 2.12
  • Ethics Guidelines for Trustworthy AI
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.10
  • Framework for Meaningful Engagement
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-04-betrek-belanghebbenden/#risico","title":"Risico","text":"

Het niet betrekken van belanghebbenden bij de ontwikkeling en het gebruik van algoritmes, kan ertoe leiden dat belangrijke inzichten of perspectieven niet worden verwerkt en het algoritme onjuist gaat functioneren.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-04-betrek-belanghebbenden/#voorbeeld","title":"Voorbeeld","text":"

Er zijn veel verschillende methoden om belanghebbenden te betrekken. Zo kan je bijvoorbeeld werken met persona\u2019s of \u2018empathy maps\u2019 maken. Ook kan je focusgroepen houden. Denk dan bijvoorbeeld aan een burgerpanel.

Andere methoden zijn: Methodologie van Waag, Civic AI lab, Stakeholder escalation ladder.

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-05-wettelijke-grondslag/","title":"Beschrijf de wettelijke grondslag voor de inzet van het algoritme","text":"

pba-05ProbleemanalyseJuristGovernanceTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-05-wettelijke-grondslag/#maatregel","title":"Maatregel","text":"

Beschrijf de wettelijke grondslag voor de inzet van het algoritme en de beoogde besluiten die genomen zullen worden op basis van het algoritme.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-05-wettelijke-grondslag/#toelichting","title":"Toelichting","text":"
  • Analyseer of er een concrete wettelijke grondslag is die de inzet van het algoritme mogelijk maakt en deze inzet voldoende voorzienbaar maakt.
  • Als de verwachting is dat een algoritme tot gevolg heeft dat wordt ingegrepen in het leven of de vrijheid van mensen, en zeker als de verwachting is dat er grondrechten worden geraakt, moet er een wettelijke grondslag bestaan voor de inzet van het algoritme.
  • Voor het verwerken van persoonsgegevens is een wettelijke grondslag noodzakelijk.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-05-wettelijke-grondslag/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Auditdienst Rijk, SV.7, PRI.6
  • Impact Assessment Mensenrechten en Algoritmes, 1.4
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-05-wettelijke-grondslag/#risico","title":"Risico","text":"

Het algoritme en beoogde besluiten voldoen niet aan wet- en regelgeving en intern beleid en kaders.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/1-pba-05-wettelijke-grondslag/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-01-rollen-en-verantwoordelijkheden/","title":"Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmes","text":"

owp-01OntwerpImplementatieMonitoring en beheerProjectleiderGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-01-rollen-en-verantwoordelijkheden/#maatregel","title":"Maatregel","text":"

Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmes. De rollen en verantwoordelijkheden worden vastgesteld door de verantwoordelijke(n).

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-01-rollen-en-verantwoordelijkheden/#toelichting","title":"Toelichting","text":"

Een re\u00ebel risico is dat bepaalde groepen en belanghebbenden over het hoofd worden gezien tijdens het ontwikkelproces van een algoritme. Daarom is het noodzakelijk om al vroeg in kaart te brengen welke groepen allemaal een mening over het beoogde algoritme kunnen hebben.

Duidelijkheid en borging van rollen en verantwoordelijkheden zorgen voor een effectief en verantwoord verloop van het proces rondom de ontwikkeling, inkoop en gebruik van een algoritme. Zeker wanneer ongewenste effecten optreden en maatregelen nodig zijn, is duidelijkheid over rollen, verantwoordelijkheden en bijbehorende besluitvormingsstructuren van belang.

Om deze reden kan het handig zijn om een matrix van belanghebbenden op te stellen. Deze matrix kan in verdere fases helpen wanneer belanghebbenden betrokken moeten worden. In deze matrix kunnen de volgende onderdelen staan:

  • Per belanghebbende een beschrijving van wie deze groep is
  • Mate van invloed van belanghebbende op het algoritme: wie, wanneer in de levenscyclus zorgt voor passende menselijke controle
  • Impact van algoritme op de belanghebbende
  • Risico\u2019s voor belanghebbende (wat zal de belanghebbende merken als het algoritme eventueel niet naar behoren functioneert).

Een RACI-matrix/VERI-matrix is een passend middel om de verantwoordelijkheden (Responsible/Verantwoordelijk, Accountable/Eindverantwoordelijk, Consulted/Geraadpleegd, Informed/Ge\u00efnfomeerd) te bepalen. Werk specifieke, gevoelige activiteiten nader uit te in concrete taken en verantwoordelijkheden, bijvoorbeeld welke stappen moeten worden gezet om data veilig te leveren ten behoeve van een onderzoek naar onbwuste vooringenomenheid.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-01-rollen-en-verantwoordelijkheden/#vaststellen-van-rollen-en-verantwoordelijkheden","title":"Vaststellen van rollen en verantwoordelijkheden","text":"
  • Laat de rollen en verantwoordelijkheden vaststellen door de verantwoordelijke(n). Het doel van vaststelling is dat de verantwoordelijke(n) de verantwoordelijkheid neemt en actief een keuze maakt om het algoritme te (laten) ontwikkelen of gebruiken op de beoogde wijze en met de bijbehorende verantwoordelijkheden. Met het vaststellen worden afspraken geformaliseerd.
  • Vaststelling van de verantwoordelijkheden kan plaatsvinden door beleidsdocumenten, werkinstructies, verwerkersovereenkomst of een PIA/DPIA, mits de verantwoordelijkheden voldoende duidelijk zijn beschreven.
  • Gedurende de levenscyclus kan het voorkomen dat rollen en verantwoordelijkheden opnieuw moet worden beschreven en vastgesteld.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-01-rollen-en-verantwoordelijkheden/#verwerking-van-persoonsgegevens","title":"Verwerking van persoonsgegevens","text":"
  • Bij het verwerken van persoonsgegevens moet worden vastgelegd wie de (gezamelijke) verwerkingsverantwoordelijken zijn en wie de verwerkers. Uit deze vaststelling van de rolverdeling volgen onder de AVG verschillende rechten en plichten.
  • Bij de ontwikkeling en gebruiken van algoritmes is het denkbaar dat de noodzaak voor het verwerken van persoonsgegevens wijzigt en dat meer of andere verwerkingen moeten plaatsvinden. Het is van belang dat wederom wordt beoordeeld wat dit betekent voor de bijbehorende verantwoordelijkheden. Als er sprake is van een wezenlijke wijziging ten opzichte van de al vastgestelde situatie, bijvoorbeeld doordat er meer persoonsgegevens worden verwerkt door een andere partij, dan zal de verwerkingsverantwoordelijke opnieuw tot vaststelling moeten overgaan om de afspraken te formaliseren.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-01-rollen-en-verantwoordelijkheden/#voorbeelden","title":"Voorbeelden","text":"
  • Rapport Kleur Bekennen, Algemene Rekenkamer, p. 114, figuur 5-4
  • De proceseigenaar wordt vaak verantwoordelijk gehouden voor eventuele gevolgen van het gebruik van het algoritme. Deze maatregel zorgt ervoor dat de proceseigenaar niet alle verantwoordelijkheid draagt, omdat dit vaak niet realistisch is. Met deze maatregel kunnen er heldere afspraken over de verschillende verantwoordlijkheden worden gemaakt. Hierdoor wordt het draagvlak groter, zonder ten koste te gaan van de duidelijkheid over rollen en verantwoordelijkheden.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-01-rollen-en-verantwoordelijkheden/#risico","title":"Risico","text":"

De sturing en verantwoording is ontoereikend of niet geborgd, waardoor er onvoldoende betrokkenheid of capaciteit is van verantwoordelijken. Ook kan er dan onvoldoende deskundigheid in de organisatie zijn, wat de kans vergroot op fouten en ongewenste effecten. Zonder het vaststellen van rollen en verantwoordelijkheden, kan er geen effectieve sturing plaatsvinden op partijen die betrokken zijn bij het ontwikkelen of gebruiken van algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-01-rollen-en-verantwoordelijkheden/#bronnen","title":"Bronnen","text":"
  • Toetsingskader Algoritmes Algemene Rekenkamer, 1.06, 3.02
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.9, SV.19, PRI.1
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-02-data-beschikbaarheid/","title":"Voer voorafgaand aan een project een data beschikbaarheid, kwaliteit- en toegankelijkheidsanalayse uit.","text":"

owp-11OntwerpProjectleiderBeleid en adviesPublieke inkoopData

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-02-data-beschikbaarheid/#maatregel","title":"Maatregel","text":"

Voer voorafgaand aan een project een data beschikbaarheids- en datakwaliteitsanalayse uit.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-02-data-beschikbaarheid/#toelichting","title":"Toelichting","text":"
  • Het is van belang om voorafgaand aan een project vast te stellen of de data die noodzakelijk is om een algoritme te ontwikkelen of te kunnen gebruiken beschikbaar is, gaat worden en of de data van voldoende kwaliteit is.
  • Er moet worden onderzocht of en hoe data vanuit de eigen organisatie, die van een eventuele externe aanbieder of elders beschikbaar kan worden gesteld, kan worden opgeslagen en of goedkeuring kan worden gegeven voor het verwerken van de data.
  • De infrastructuur van de eigen organisatie en/of die van een eventuele externe aanbieder moet van voldoende niveau zijn om de beoogde verwerkingen uit te kunnen voeren.
  • Een dergelijke analyse levert inzichten op welke problemen er eventueel op dit vlak kunnen ontstaan en geeft input voor de verdere ontwikkeling of (in geval van inkoop) de behoeftestelling.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-02-data-beschikbaarheid/#bronnen","title":"Bronnen","text":"

Towards a Systematic Understanding on the Challenges of Procuring Artificial Intelligence in the Public Sector

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-02-data-beschikbaarheid/#risico","title":"Risico","text":"

Het zou kunnen voorkomen dat de data niet beschikbaar is en ook niet gaat worden. Dit betekent dat een algoritme ook niet goed gemaakt of gebruikt kan worden. Ook is het belangrijk om te checken of de data beschikbaar blijft als dat nodig is voor het functioneren van het algoritme (bijv. voor het bijleren). Ook bestaat er een risico dat als de data van onvoldoende kwaliteit is, het algoritme niet goed gaat werken. Wanneer niet vooraf bepaald is of de data beschikbaar is en van voldoende kwaliteit kan het gebeuren dat er wel een algoritme gemaakt wordt door een derde partij, maar deze vervolgens niet gebruikt kan worden binnen de organisatie.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-03-doel-verwerken-persoonsgegevens/","title":"Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag","text":"

owp-03OntwerpDataverkenning en datapreparatieOntwikkelenVerificatie en validatieImplementatieProjectleiderJuristPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-03-doel-verwerken-persoonsgegevens/#maatregel","title":"Maatregel","text":"

Het doel voor het verwerken van persoonsgegevens met een algoritme is welbepaald en omschreven.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-03-doel-verwerken-persoonsgegevens/#toelichting","title":"Toelichting","text":"

Persoonsgegevens mogen alleen worden verwerkt voor een \u2018welbepaald, uitdrukkelijk omschreven en gerechtvaardigd\u2019 doel. De wettelijke grondslag voor de verwerking van de persoonsgegevens moet zijn beschreven.

De verwerking van persoonsgevens voor het ontwikkelen en gebruiken van een algoritme moet verenigbaar met het oorspronkelijke verwerkingsdoel (doelbinding). Eventuele verdere (subsidiaire) verwerkingen, zoals het verwerken van persoonsgegevens voor een onderzoek naar onbewuste vooringenomenheid, moeten uitdrukkelijk worden omschreven.

Stel een overzicht op waarin is beschreven welke persoonsgegevens mogen worden verwerkt. Bij de persoonsgegevens is aangegeven om wat voor categorie persoonsgegevens het gaat. Per kenmerk is toegelicht waarom deze noodzakelijk is om te verwerken voor het ontwikkelen en gebruiken van het algoritme. Het principe van dataminimalisatie is toegepast, wat betekent dat een keuze is gemaakt of een persoonsgegevens al dan niet strikt noodzakelijk is om het doel te bereiken of dat verwerking ervan achterwege kan blijven.

Voor het beschermen van deze persoonsgegevens wordt per kenmerk aangegeven op welke manier deze kan worden beschermd. Denk hierbij aan het anonimiseren, pseudonomiseren, aggregeren van de persoonsgegevens.

Gebruik een DPIA om bovenstaande zaken te beschrijven.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-03-doel-verwerken-persoonsgegevens/#risico","title":"Risico","text":"

Als het doel voor het verwerken van persoonsgegevens onvoldoende is omschreven en onderbouwd, ontstaat het risico dat onrechtmatig persoonsgegevens worden verwerken en een inbreuk wordt gemaakt op privacyrechten van betrokkenen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-03-doel-verwerken-persoonsgegevens/#bronnen","title":"Bronnen","text":"
  • Toetsingskader Algoritmes Algemene Rekenkamer, 3.01, 3.05
  • Onderzoekskader Algoritmes Auditdienst Rijk, PRI.4
  • Onderzoekskader Algoritmes Auditdienst Rijk, PRI.7
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-03-doel-verwerken-persoonsgegevens/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-04-gebruikte-techniek/","title":"Beschrijf welke techniek gebruikt wordt voor de beoogde toepassing","text":"

owp-04OntwerpOntwikkelaarTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-04-gebruikte-techniek/#maatregel","title":"Maatregel","text":"

Beschrijf welke techniek gebruikt wordt voor de beoogde toepassing.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-04-gebruikte-techniek/#toelichting","title":"Toelichting","text":"
  • Beschrijf wat voor soort algoritme er gebruikt gaat worden voor de beoogde toepassing.
  • Bepaal of je gebruik wilt maken van een:

    • zelflerend algoritme
    • niet-zelflerend algoritme zoals een algoritme gebaseerd op rekenregels
  • Beschrijf vervolgens ook:

    • waarom er voor dit type algoritme wordt gekozen
    • wat de alternatieven zijn en waarom die minder passend zijn?
    • waarom dit algoritme het meest geschikt is om het beoogde doel van het algoritme te bereiken.
  • De precieze details kunnen in dit stadium van de levenscyclus waarschijnlijk nog niet ingevuld worden. Maak een goede eerste inschatting van de gebruikte techniek. Eventueel kan je er ook voor kiezen om verschillende technieken verder te onderzoeken. Dat betekent dat er meerdere algoritmes ontwikkeld worden (op basis van verschillende technieken), en je later een definitieve keuze maakt.

  • Het is belangrijk om uiteindelijk een passend uitlegbaar algoritme te selecteren voor de context waarin het wordt toegepast. Daarin moet de afweging gemaakt worden of de technische uitlegbaarheid voldoende is in de context die de inzet van het algoritme vereist. Hierbij kan ook de conclusie worden getrokken dat een simpeler, inzichtelijker algoritme de voorkeur krijgt.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-04-gebruikte-techniek/#voorbeeld","title":"Voorbeeld","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-04-gebruikte-techniek/#risico","title":"Risico","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-04-gebruikte-techniek/#bronnen","title":"Bronnen","text":"

Impact Assessment Mensenrechten en Algoritmes, 2A.1, 2B.1

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-05-soort-algoritme/","title":"Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horen","text":"

owp-05OntwerpOntwikkelenProjectleiderBeleid en adviesPublieke inkoopGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-05-soort-algoritme/#maatregel","title":"Maatregel","text":"

Stel vast om wat voor type algoritme het gaat en wat de bijbehorende risicoclassificatie is om te bepalen welke vereisten hierop van toepassing zijn.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-05-soort-algoritme/#toelichting","title":"Toelichting","text":"

Het verschilt per type algoritme welke vereisten hierop van toepassing is en waar een aanbieder of gebruiksverantwoordelijke aan moet voldoen. Dit is mede afhankelijk van de bijbehorende risicoclassificatie. Hiervoor kan in de nabije toekomst de 'beslisboom' in het Algoritmekader voor worden gebruikt'. Deze stap is van groot belang, omdat dit ook bepalend is welke contractuele verplichtingen moeten worden gecre\u00eberd tussen opdrachtgever en opdrachtnemer/aanbieder.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-05-soort-algoritme/#bronnen","title":"Bronnen","text":"

Algoritmekader

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-05-soort-algoritme/#voorbeeld","title":"Voorbeeld","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-06-afwegen-grondrechten/","title":"Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging","text":"

owp-06ProbleemanalyseOntwerpVerificatie en validatieMonitoring en beheerProjectleiderBeleid en adviesFundamentele rechten

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-06-afwegen-grondrechten/#maatregel","title":"Maatregel","text":"

Identificeer welke grondrechten geraakt worden door het in te zetten algoritme en maak een afweging of dit aanvaardbaar is

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-06-afwegen-grondrechten/#toelichting","title":"Toelichting","text":"

Een algoritme kan invloed hebben op grondrechten. Op een aantal grondrechten kan een algoritme sneller invloed hebben, zoals recht op persoonsgegevensbescherming, recht op behoorlijk bestuur en recht op gelijke behandeling. Deze veelvoorkomende grondrechten krijgen op andere plekken in het Algoritmekader specifieke aandacht. Er zijn echter ook grondrechten die bij minder algoritmen relevant zijn, maar desalniettemin in die gevallen zeer invloedrijk kunnen zijn. Het is van belang uiteindelijk een totale afweging te maken van alle grondrechten die (mogelijk) geraakt worden ten opzichte van de voordelen van het in te zetten algoritme. Een voorbeeld van een grondrecht dat minder snel geraakt wordt is bijvoorbeeld een algoritme om hate speech te kunnen detecteren. Zo'n algoritme zal van invloed kunnen zijn op de vrijheid van meningsuiting en het recht op informatie.

Doorloop in lijn met Deel 4 van het Impact Assessment Mensenrechten en Algoritmes de volgende stappen:

  1. Breng in kaart welke grondrechten geraakt kunnen worden door de inzet van het algoritme. Hiervoor kan bijlage 1 uit het Impact Assessment Mensenrechten en Algoritmes gebruikt worden.
  2. Als dat het geval is, is het allereerst van belang om te controleren of hiervoor specifieke wetgeving is waar de inzet van het algoritme aan moet voldoen.
  3. Bepaal hoe zwaar de geindentificeerde grondrechten worden geraakt door het beoogde algoritme.
  4. Bepaal hoe doeltreffend/effectief het algoritme in de praktijk is.
  5. Bepaal of de inzet van het algoritme noodzakelijk is om het beoogde doel te bereiken. Zijn er alternatieven? Of zijn er mitigerende maatregelen die genomen kunnen worden waardoor grondrechten niet of minder worden geraakt en eventuele nadelige gevolgen verzacht kunnen worden?
  6. Gegeven alle voorgaande stappen, bepaal of de inzet van het algoritme en proportioneel is om het beoogde doel te bereiken. Wegen de voordelen op tegen de nadelen?

Het is van belang voldoende belanghebbenden te betrekken bij het doorlopen van deze stappen om te zorgen dat alle eventueel nadelige aspecten van het in te zetten algoritme worden meegenomen. Documenteer de doorlopen stappen en leg de keuzes en afwegingen goed vast.

Opmerking

Zoals vermeld in de vereiste voor beoordeling van gevolgen voor grondrechten uit de AI-verordening moeten sommige hoog-risico AI-systemen een beoordeling doen van de gevolgen voor grondrechten. Het is nog niet bekend welke vorm dit precies moet hebben.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-06-afwegen-grondrechten/#bronnen","title":"Bronnen","text":"
  • Impact Assessment Mensenrechten en Algoritmes, deel 4
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.4
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-06-afwegen-grondrechten/#risico","title":"Risico","text":"

Het risico is dat er grondrechten, anders dan die expliciet beschermd zijn in andere maatregelen en vereisten, aangetast worden.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-06-afwegen-grondrechten/#voorbeeld","title":"Voorbeeld","text":"

Hoofdstuk 4 van het Impact Assesment Mensenrechten en Algoritmen (IAMA) richt zich specifiek op de grondrechten. In bijlage 1 is tevens een overzicht te vinden van mogelijk relevante grondrechten.

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-07-kwetsbare-groepen/","title":"Maak een lijst van de meest kwetsbare groepen en bescherm hen extra","text":"

owp-07OntwerpBeleid en adviesFundamentele rechten

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-07-kwetsbare-groepen/#maatregel","title":"Maatregel","text":"

Bepaal wat de impact van het in te zetten algoritme is voor betrokkenen (personen of groepen). Bepaal vervolgens of er groepen zijn waarbij de impact van het algoritme dermate groot kan zijn, dat het wenselijk is om deze groepen extra bescherming te bieden.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-07-kwetsbare-groepen/#toelichting","title":"Toelichting","text":"
  • Verschillende groepen kunnen op een andere manier geraakt worden door het inzetten van een algoritme. Dit is afhankelijk van de context waarin het algoritme wordt ingezet, en dient daardoor bij iedere toepassing opnieuw bekeken te worden.
  • Bedenk wat er met de uitkomsten van het algoritme gedaan wordt, en wat de consequenties daarvan zijn voor burgers. Hierbij kan gedacht worden aan de volgende aspecten:
    • Worden bepaalde groepen sneller gemonitord?
    • Wat als het model het fout heeft?
    • Wordt het systeem gebruikt om informatie te verkrijgen, om besluiten voor te bereiden of om zelfstandige besluiten te nemen en welke gevolgen heeft dat voor de mate waarin het algoritme bepalend zal zijn in de praktijk?
    • Worden de gegevens veilig en vertrouwelijk behandeld; welke gevolgen zou een datalek hebben voor groepen of categorie\u00ebn personen?
    • Worden data gedeeld met andere partijen en wat is het gevaar dat die misbruik maken van de data met negatieve gevolgen voor groepen of categorie\u00ebn personen?
  • Houd hierbij ook rekening met de impact van het in te zetten algoritme op de samenleving (vanuit sociaal, democratisch en milieu/ecologisch perspectief).
  • Om de impact op groepen te bepalen, kan het handig zijn een mensenrechtentoets zoals het Impact Assessment Mensenrechten en Algoritmes toe te passen.
  • Bepaal of er maatregelen genomen kunnen worden om de ge\u00efdentificeerde groepen extra bescherming te bieden. Hierbij kan men denken aan de volgende aspecten: Kan de (extra) administratieve druk voor bepaalde groepen worden weggenomen? Worden resultaten van het algoritme naast de resultaten van een expert gelegd? Is het wenselijk om een proces in te richten waarbij zowel algoritme als een expert een uitkomst geven? Kunnen we de betreffende groep extra hulp aanbieden? Is het wenselijk bij negatieve uitkomsten een vier-ogen-principe toe te passen?
  • De impact van het algoritme op de groepen die ge\u00efdentificeerd worden in deze stap, kunnen mogelijk onderzocht worden in een biasanalyse. Daarbij kan geidentificeerd worden of bepaalde groepen oververtegenwoordigd of ondervertegenwoordigd zijn in selecties, of dat het algoritme andere of meer fouten maakt voor bepaalde groepen.
  • Merk op dat het onmogelijk is om de risico's voor alle specifieke groepen af te vangen. Hierbij kan het helpen om te focussen op de meest kwetsbare groepen.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-07-kwetsbare-groepen/#risico","title":"Risico","text":"

De impact van het algoritme op de besluitvorming en op personen, doelgroepen en/of de samenleving is niet inzichtelijk, waardoor onvoldoende maatregelen zijn getroffen om ongewenste effecten (zoals bias en discriminatie) te voorkomen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-07-kwetsbare-groepen/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.4, DM.16
  • Kamerstukken II 2023/24, 31066-1374
  • Impact Assessment Mensenrechten en Algoritmes, 4.1
  • Handreiking non-discriminatie by design, 1.7 en 1.8 en 1.15
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-07-kwetsbare-groepen/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-08-archiveren-documenten/","title":"Bepaal welke documenten voor hoe lang gearchiveerd moeten worden","text":"

owp-08OntwerpOntwikkelenOntwikkelaarProjectleiderJuristTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-08-archiveren-documenten/#maatregel","title":"Maatregel","text":"

Stel vast welke documenten, (samengesteld geheel van) data/informatie van/in het algoritme gelden als \"archiefbescheiden\" in de zin van artikel 1 c Archiefwet en documenteer daarvan een overzicht, bij voorkeur vastgesteld door een daartoe bevoegde. Bepaal de bijbehorende bewaartermijnen vast voor de archiefbescheiden.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-08-archiveren-documenten/#toelichting","title":"Toelichting","text":"
  • Bij archiefbescheiden kan worden gedacht aan de broncode, trainings- en testdata, (technische) documentatie en de output.
  • Deze archiefbescheiden moeten voor een bepaalde tijd worden bewaard (de bewaartermijn).
  • Overleg hierover met de verantwoordelijke binnen de organisatie voor het toepassen van de Archiefwet.
  • Het is mogelijk dat de selectielijsten nog niet duiden welke informatie of data, specifiek bij de toepassing van algoritmen, moet worden toegepast en hier dus ook nog geen termijnen bij zijn gekoppeld.
  • Stel vast of beperkingen aan openbaarheid van de archiefbescheiden moeten worden gesteld. Er zijn gevallen waarbij het openbaren van archiefbescheiden is uitgesloten. Stem in het begin van het proces (pro-actief) met de opdrachtgever af wat de wenselijkheid is t.a.v. transparantie/openheid (uitgangspunt zou 'open, tenzij' moeten zijn).
  • Stel vast hoe de archiefbescheiden op een duurzame wijze toegankelijk kunnen worden gemaakt. Het moet mogelijk zijn dat de archiefbescheiden daadwerkelijk overhandigd kunnen worden aan betrokken partijen. Denk hierbij aan burgers, onderneming, toezichthouder of rechters. Duurzaam betekent hier met behoud van functie en kwaliteit voor langere tijd. Onderzoek welke voorziening hiervoor beschikbaar is binnen de organisatie.

Tip

Formeer hierbij een multi-discipinaire groep (bestaande uit bijvoorbeeld een inkoper, ontwikkelaar, data scientist, proceseigenaar en archiefdeskundige) om deze maatregel toe te passen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-08-archiveren-documenten/#bronnen","title":"Bronnen","text":"
  • Rekenen en rekenschap. Essay over Algoritmes en de Archiefwet
  • Toetsingskader Algemene Rekenkamer 4.06
  • Onderzoekskader Auditdienst Rijk, DM.13
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-08-archiveren-documenten/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-model-verwerkersovereenkomst-onderdeel-aanbesteding/","title":"Een model-verwerkersovereenkomst is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt","text":"

owp-09OntwerpMonitoring en beheerProjectleiderBeleid en adviesPublieke inkoopPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-model-verwerkersovereenkomst-onderdeel-aanbesteding/#maatregel","title":"Maatregel","text":"

Inventariseer of er mogelijk sprake is van een algoritme dat een hoog risico kan inhouden voor de rechten en vrijheden van natuurlijke personen of impactvol kan zijn voor hen en maak in voorkomend geval in de model-verwerkersovereenkomst een uitdrukkelijke verwijzing naar een concreet DPIA-document (met datum/kenmerk) of (indien op dat moment nog in bezit of bekend bij de steller) een expliciet invulveld voor het duiden van de betreffende DPIA, zodat die wordt genoemd ter completeren van de verwerkersovereenkomst vooraf het overeenkomen/ondertekenen van die verwerkersovereenkomst.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-model-verwerkersovereenkomst-onderdeel-aanbesteding/#toelichting","title":"Toelichting","text":"

Een model-verwerkersoverenkomst is veelal een verplicht onderdeel bij het publiek inkopen van software waarbij persoonsgegevens worden verwerkt en bij de totstandkoming van de overeenkomst.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-model-verwerkersovereenkomst-onderdeel-aanbesteding/#bronnen","title":"Bronnen","text":"

Algoritmekader

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-model-verwerkersovereenkomst-onderdeel-aanbesteding/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-multidisciplinair-inkoopteam/","title":"Stel een multidisciplinair team samen bij het ontwikkelen of inkopen van algoritmes.","text":"

owp-09OntwerpProjectleiderBeleid en adviesPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-multidisciplinair-inkoopteam/#maatregel","title":"Maatregel","text":"

Stel een multidisciplinair team samen bij het ontwikkelen of inkopen van algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-multidisciplinair-inkoopteam/#toelichting","title":"Toelichting","text":"
  • Bij een project gericht op het ontwikkelen of inkopen van algoritmes is het belangrijk dat betrokkenen al in een vroeg stadium samenwerken. Dit betekent dat zowel een interne opdrachtgever als het ontwikkelingsteam of de afdeling inkoop tijdig worden aangehaakt om te zorgen voor een goed afgestemd proces.
  • Wanneer het gaat om het ontwikkelen of inkopen van algoritmes, is een multidisciplinair team wenselijk. Zo'n team brengt relevante kennis en ervaring samen om de behoeften en specificaties helder te krijgen. Afhankelijk van de aard en complexiteit van het algoritme kunnen de rollen binnen dit team vari\u00ebren.
  • Naast een interne opdrachtgever, materiedeskundige en gebruiker kun je voor het ontwikkelen van algoritmes denken aan een data-engineer, data scientist, IT-architect, ethicus, data- en privacy-officer. Bij een overheidsopdracht gericht op de inkoop van een algiritme, horen daar nog een (aanbestedings)jurist en inkoper bij. Afhankelijk van de complexiteit van de oplossing zijn meer of minder disciplines en dus te beleggen verantwoordelijkheden binnen het team wenselijk.
  • Een multidisciplinair team kan ondersteunen bij het formuleren van de probleemstelling of formuleren van de doelstellingen van een project, verkennen van de mogelijke oplossingsrichtingen en het vertalen van de gewenste oplossingsrichting naar de concrete behoefte.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-multidisciplinair-inkoopteam/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-multidisciplinair-inkoopteam/#risico","title":"Risico","text":"

Zonder een multidisciplinair team is het waarschijnlijk dat belangrijke aspecten voor een verantwoorde inzet van algoritmes niet worden geadresseerd en ongewenste algoritmes worden ontwikkeld of ingekocht.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-multidisciplinair-inkoopteam/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-10-projectstartarchitectuur/","title":"Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes","text":"

owp-10OntwerpOntwikkelenVerificatie en validatieImplementatieProjectleiderBeleid en adviesTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-10-projectstartarchitectuur/#maatregel","title":"Maatregel","text":"

Voer een Project Startarchitectuur (PSA) uit als algoritmes worden ontwikkeld of ingekocht.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-10-projectstartarchitectuur/#toelichting","title":"Toelichting","text":"
  • Een Project Startarchitectuur (PSA) is een hulpmiddel dat bij een project wordt ingezet om veranderingen van A naar Beter te faciliteren.
  • De PSA richt zich daarbij op de kaders die op een project van toepassing zijn en wat de oplossing bijdraagt aan het realiseren van de gewenste, toekomstige architectuur, wat de implicaties zullen zijn voor bestaande voorzieningen en waar het project zal afwijken van bestaande beelden.
  • Met de PSA wordt een concreet en doelgericht ICT-architectuurkader opgesteld, waarbinnen het project moet worden uitgevoerd.
  • De PSA maakt concreet wat architectuur voor een project betekent.
  • Door een PSA uit te voeren ontstaan inzichten hoe het betreffende algoritme zo optimaal mogelijk onderdeel kan worden gemaakt van het bestaande applicatielandschap, waarmee bijvoorbeeld kan worden voorkomen dat het algoritme of AI-systeem na verloop van tijd geen input meer kan ontvangen door onverwachte wijzigingen in systemen.
  • Onderwerpen als privacy, informatiebeheer en beheer worden hierin ook globaal meegenomen.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-10-projectstartarchitectuur/#risico","title":"Risico","text":"

Het algoritme kan niet of na verloop van tijd niet meer functioneren, doordat onverwachte of ongewenst wijzigingen in het applicatielandschap plaatsvinden.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-10-projectstartarchitectuur/#bronnen","title":"Bronnen","text":"
  • Project Startarchitectuur,NORA
  • PSA Format
  • PSA Handleiding
  • Algoritmekader
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-10-projectstartarchitectuur/#voorbeeld","title":"Voorbeeld","text":"
  • Gemeente Amsterdam - Onderzoekswaardigheid Algoritme \u2018Slimme check\u2019 (Een tool die de medewerkers helpt om te bepalen of een aanvraag levensonderhoud onderzoekswaardig is, niet meer in gebruik!): Start Architectuurnotitie van dit project
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/","title":"Koop duurzaam algoritmes in","text":"

owp-11OntwerpProjectleiderBeleid en adviesPublieke inkoopDuurzaamheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/#maatregel","title":"Maatregel","text":"

Kies softwareoplossingen van aanbieders die duurzaamheid bevorderen, en stel heldere eisen aan energieverbruik, hernieuwbare energiebronnen en transparantie over de milieuprestaties van software.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/#toelichting","title":"Toelichting","text":"

Door software duurzaam in te kopen, kun je als organisatie al vroeg in het ontwikkelproces bijdragen aan de verduurzaming van je algoritmes. Kies daarom softwareoplossingen van aanbieders die maatschappelijk verantwoord ondernemen (MVI) en energie-effici\u00ebntie vooropstellen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/#duurzaamheidscriteria-en-selectie-van-aanbieders","title":"Duurzaamheidscriteria en selectie van aanbieders","text":"

Om software duurzaam in te kopen, kun je aanbieders beoordelen op specifieke duurzaamheidscriteria. Enkele belangrijke criteria zijn:

  • het energieverbruik van de software
  • het gebruik van hernieuwbare energiebronnen in de benodigde datacenters
  • het beperken van CO\u2082-uitstoot tijdens de levenscyclus van de software

Vraag om inzicht in milieuprestaties en certificeringen, zoals ISO-14001, om de toewijding van aanbieders aan duurzaamheid te toetsen. De ISO-14001 is een internationaal geaccepteerde standaard met eisen voor een milieumanagementsysteem.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/#inkoopvoorwaarden-en-contractuele-eisen","title":"Inkoopvoorwaarden en contractuele eisen","text":"

Stel bij het inkopen duidelijke eisen aan duurzaamheidscriteria, zoals het gebruik van \"groene technologie\u00ebn\", het aanbieden van Software-as-a-Service (SaaS) en open standaarden. Zo maak je duurzame keuzes die bijdragen aan een langere levensduur en energie-effici\u00ebntie van je algoritmes. Door KPI\u2019s op te nemen voor energie-effici\u00ebntie en CO\u2082-reductiedoelen kun je de voortgang van deze doelen concreet monitoren. Je kunt deze voorwaarden opnemen als standaard inkoopvoorwaarden.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/#bonus-malusregeling-en-monitoring","title":"Bonus-malusregeling en monitoring","text":"

Om naleving van duurzame doelstellingen te stimuleren, kun je een bonus-malusregeling inzetten. Aanbieders ontvangen een bonus wanneer zij duurzame doelstellingen halen, en kunnen worden aangesproken als beloofde duurzaamheidsnormen niet worden behaald. Monitoring via jaarlijkse rapportages helpt om de voortgang van de duurzaamheidsdoelen te evalueren en, indien nodig, bij te sturen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/#extra-overwegingen","title":"Extra overwegingen","text":"

Extra overwegingen die je kunt maken bij het aankopen van algoritmes, zoals genoemd in de handreiking 'Hoe maak ik mijn inkoop van software duurzamer?' van PIANOo:

  • Ga na of je de software wel echt moet inkopen.
  • Probeer zoveel mogelijk uit te vragen in een SaaS-oplossing.
  • Vraag een oplossing in een Cloud-omgeving.
  • Ga na of \u2018serverless\u2019 ook een oplossing is.
  • Vraag om de broncode van de software.
  • Denk goed na over de technische levensduur van verschillende componenten.
  • Open standaarden zijn een vorm van duurzaamheid.
  • Pas containerisatie en virtualisatie toe.
  • Neem eisen op over opschalingsmogelijkheden.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/#risico","title":"Risico","text":"

Zonder duurzaamheidscriteria bij het inkopen van software loop je het risico op hogere energie- en kostenlasten, en beperk je de mogelijkheden om duurzaamheidsdoelstellingen te halen bij je algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/#bronnen","title":"Bronnen","text":"
  • Handreiking: Hoe maak ik mijn inkoop van software duurzamer? (PIANOo)
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/#voorbeeld","title":"Voorbeeld","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-gebruikte-data/","title":"Beschrijf welke data gebruikt wordt voor de beoogde toepassing","text":"

owp-02OntwerpDataverkenning en datapreparatieOntwikkelaarBeleid en adviesData

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-gebruikte-data/#maatregel","title":"Maatregel","text":"

Beschrijf welke data gebruikt wordt voor de beoogde toepassing.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-gebruikte-data/#toelichting","title":"Toelichting","text":"
  • Maak in een vroege fase van de ontwikkeling een inschatting van welke data er gebruikt gaat worden voor het algoritme.
  • Leg na het uitvoeren van een beschikbaarheids-, kwaliteit en toegankelijkheidsanalyse vast, welke data wordt verwerkt voor het ontwikkelen en gebruiken van het algoritme
  • Beschrijf daarbij om wat voor gegevens het gaat en uit welke bron deze komen.
  • Bepaal of het is toegestaan om deze data te verwerken.
  • Het is denkbaar dat het onderzoek van de kwaliteit van de data in een latere fase in de levenscyclus pas grondig kan worden uitgevoerd.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-gebruikte-data/#voorbeeld","title":"Voorbeeld","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-gebruikte-data/#risico","title":"Risico","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-gebruikte-data/#bronnen","title":"Bronnen","text":"
  • Impact Assessment Mensenrechten en Algoritmes, 2A.2.1
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-bespreek-vereisten-met-aanbieders/","title":"Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.","text":"

owp-12OntwerpOntwikkelenProjectleiderPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-bespreek-vereisten-met-aanbieders/#maatregel","title":"Maatregel","text":"

Bespreek de vereiste die gelden voor een verantwoorde inzet van algoritmes met een aanbieder.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-bespreek-vereisten-met-aanbieders/#toelichting","title":"Toelichting","text":"

Ga met een aanbieder in gesprek over in hoeverre zij invulling kunnen geven aan de vereisten die gelden voor een verantwoorde inzet van algoritmes. Dit kan worden gedaan bijvoorbeeld bij een informatiesessie met aanbieders voorafgaand aan een aanbesteding.

Op basis van nieuwe of gewijzigde wet- en regelgeving of de totstandkoming van nieuwe standaard, is het denkbaar dat aanbieders van algoritmes nog niet of niet meer voldoet aan deze vereisten. Het is van belang om deze inzichten bijvoorbeeld tijdens een aanbesteding worden verkregen. Indien van toepassing, laat de aanbieder inzichtelijk maken welke stappen deze gaat zetten om hieraan te gaan voldoen. Dit is ook relevant bij reeds afgesloten contracten.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-bespreek-vereisten-met-aanbieders/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-bespreek-vereisten-met-aanbieders/#risico","title":"Risico","text":"

Door de vereisten voor een verantwoorde inzet van algoritmes niet te bespreken met aanbieders, is het voor hen (deels) onduidelijk aan welke vereisten diens algoritmes moet voldoen om te kunnen contractueren met overheidsorganisaties.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-bespreek-vereisten-met-aanbieders/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/","title":"Ontwerp algoritmes zo eenvoudig mogelijk","text":"

owp-12OntwerpOntwikkelenOntwikkelaarDuurzaamheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/#maatregel","title":"Maatregel","text":"

Ontwerp algoritmes gericht op eenvoud en effici\u00ebntie, zodat het energieverbruik en de benodigde rekenkracht tijdens gebruik minimaal blijven.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/#toelichting","title":"Toelichting","text":"

Complexe algoritmes vereisen vaak aanzienlijke rekenkracht, wat energie-intensief kan zijn. Door algoritmes minder complex en rekenintensief te ontwerpen, verlaag je de benodigde middelen en energie bij het trainen en uiteindelijk toepassen van deze algoritmes. Een effici\u00ebnter ontwerp maakt de algoritmes energiezuiniger in de trainings- en gebruiksfase en draagt zo bij aan duurzaamheid in de gehele levenscyclus.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/#modellen-vereenvoudigen-en-focussen-op-kernfunctionaliteit","title":"Modellen vereenvoudigen en focussen op kernfunctionaliteit","text":"

Wanneer je een nieuw algoritme ontwikkelt, kun je de omvang en rekenbelasting beperken door alleen noodzakelijke functionaliteit op te nemen. Focus op de kernfunctionaliteit, zodat je gebruik maakt van een kleiner model dat beter te begrijpen en gemakkelijker te beheren is. Het vermijden van overbodige functionaliteiten maakt het algoritme minder zwaar en verlaagt de milieu-impact aanzienlijk.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/#minder-complexiteit-door-divide-and-conquer-en-dynamisch-programmeren","title":"Minder complexiteit door divide-and-conquer en dynamisch programmeren","text":"

Een populaire methode om complexiteit te verlagen is het divide-and-conquer principe, waarbij je een grote algoritmische berekening opsplitst in kleinere, overzichtelijke deelberekeningen en deze vervolgens oplost (je splitst hierbij het technische probleem in meerdere kleinere problemen). Dit vermindert de rekenlast aanzienlijk en verhoogt de effici\u00ebntie. Ook kun je met dynamisch programmeren optimalisaties toevoegen door eerder berekende resultaten op te slaan en te hergebruiken, wat herhaling van berekeningen voorkomt en de rekenkracht vermindert.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/#minder-complexiteit-door-modeloptimalisatie","title":"Minder complexiteit door modeloptimalisatie","text":"
  • Door gebruik te maken van pruning kunnen minder relevante verbindingen en nodes in een neuraal netwerk worden verwijderd, waardoor de rekenbelasting vermindert.
  • Quantization verlaagt de precisie van numerieke waarden in een model, wat opslag en rekenkracht verlaagt zonder de prestaties significant te be\u00efnvloeden.
  • Knowledge distillation kan verder helpen door de kennis van een groot model over te dragen naar een kleiner, minder complex model, dat vervolgens effici\u00ebnter werkt.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/#risico","title":"Risico","text":"

Ontwerpen zonder oog voor effici\u00ebntie kan leiden tot energie-intensieve algoritmes die hoge kosten en milieubelasting met zich meebrengen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/#-what-is-knowledge-distillation-ibm","title":"- What is knowledge distillation? (IBM)","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/#voorbeeld","title":"Voorbeeld","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-13-vereisten-onderdeel-algemene-inkoopvoorwaarden-en-contractovereenkomst/","title":"Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.","text":"

owp-13OntwerpProjectleiderBeleid en adviesPublieke inkoopTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-13-vereisten-onderdeel-algemene-inkoopvoorwaarden-en-contractovereenkomst/#maatregel","title":"Maatregel","text":"

Maak vereisten voor algoritmes onderdeel van contractvoorwaarden en de contractovereeenkomst.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-13-vereisten-onderdeel-algemene-inkoopvoorwaarden-en-contractovereenkomst/#toelichting","title":"Toelichting","text":"
  • Door vereisten die gelden voor algoritmes onderdeel te maken van contractvoorwaarden, is voor een aanbieder vooraf duidelijk aan welke voorwaarden zij moeten voldoen als zijn algoritmes willen aanbieden aan overheidsorganisaties.
  • Het is van belang om een afweging te maken welke vereisten voor algoritmes als 'algemene contractvoorwaarden' kunnen gelden en welke aanvullend in een contractovereenkomst moeten worden opgenomen.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-13-vereisten-onderdeel-algemene-inkoopvoorwaarden-en-contractovereenkomst/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.11
  • Specificeren algemene inkoopvoorwaarden
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-13-vereisten-onderdeel-algemene-inkoopvoorwaarden-en-contractovereenkomst/#risico","title":"Risico","text":"

Door de vereisten voor een verantwoorde inzet van algoritmes niet te communiceren met aanbieders, is het voor hen (deels) onduidelijk aan welke vereisten diens algoritmes moet voldoen om te kunnen contractueren met overheidsorganisaties.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-13-vereisten-onderdeel-algemene-inkoopvoorwaarden-en-contractovereenkomst/#voorbeeld","title":"Voorbeeld","text":"
  • Contractvoorwaarden gemeente Amsterdam
  • Europese Inkoopvoorwaarden Hoog Risico
  • Europese Inkoopvoorwaarden Laag Risico

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-14-verwerkersovereenkomst-onderdeel-aanbesteding/","title":"Maak het opstellen van een verwerkersovereenkomst onderdeel van de aanbesteding als persoonsgegevens worden verwerkt.","text":"

owp-14OntwerpMonitoring en beheerProjectleiderBeleid en adviesPublieke inkoopPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-14-verwerkersovereenkomst-onderdeel-aanbesteding/#maatregel","title":"Maatregel","text":"

Het opstellen van een verwerkersovereenkomst met aanbieder is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt of noodzakelijk zijn voor het trainen of genereren van output door algoritmes van aanbieder.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-14-verwerkersovereenkomst-onderdeel-aanbesteding/#toelichting","title":"Toelichting","text":"

Een verwerkersovereenkomst moet worden opgesteld als persoonsgegevens worden verwerkt voor het trainen of het genereren van output door algoritmes van aanbieder. Met een verwerkersovereenkomst worden een aantal afspraken schriftelijk vastgelegd het bij de verwerking van persoonsgegevens. Het gaat om de volgende zaken:

  • Algemene beschrijving. Een omschrijving van het onderwerp, de duur, de aard en het doel van de verwerking, het soort persoonsgegevens, de categorie\u00ebn van betrokkenen en uw rechten en verplichtingen als verwerkingsverantwoordelijke.

  • Instructies voor de verwerking. De verwerking vindt in principe uitsluitend plaats op basis van uw schriftelijke instructies. De verwerker mag de persoonsgegevens niet voor eigen doeleinden gebruiken. Geheimhoudingsplicht. Personen in dienst van of werkzaam voor de verwerker hebben een geheimhoudingsplicht. Beveiliging. De verwerker treft passende technische en organisatorische maatregelen om de verwerking te beveiligen. Bijvoorbeeld pseudonimisering en versleuteling van persoonsgegevens, permanente informatiebeveiliging, herstel van beschikbaarheid en toegang tot gegevens bij incidenten, regelmatige beveiligingstesten.

  • Subverwerkers. De verwerker schakelt geen subverwerker(s) in zonder uw voorafgaande schriftelijke toestemming. De verwerker legt aan een subverwerker in een subverwerkersovereenkomst dezelfde verplichtingen op als de verwerker richting u heeft. In de overeenkomst kunt u ook direct afspreken dat de verwerker subverwerkers mag inschakelen en onder welke voorwaarden. Komt de subverwerker de verplichtingen niet na? Dan blijft de verwerker volledig aansprakelijk richting u voor het nakomen van de verplichtingen van de subverwerker (artikel 28, vierde lid, van de AVG).

  • Privacyrechten. De verwerker helpt u om te voldoen aan uw plichten als betrokkenen hun privacyrechten uitoefenen (zoals het recht op inzage, correctie, verwijdering en dataportabiliteit).

  • Andere verplichtingen. De verwerker helpt u ook om andere verplichtingen na te komen. Zoals bij het melden van datalekken, het uitvoeren van een data protection impact assessment (DPIA) en bij een voorafgaande raadpleging.

  • Gegevens verwijderen. Na afloop van de verwerkingsdiensten verwijdert de verwerker de gegevens. Of bezorgt de verwerker de gegevens aan u terug, als u dat wilt. Ook verwijdert de verwerker kopie\u00ebn. Tenzij de verwerker wettelijk verplicht is de gegevens te bewaren.

  • Audits. De verwerker werkt mee aan uw audits of die van een derde partij. En stelt alle relevante informatie beschikbaar om te kunnen controleren of de verwerker zich houdt aan de hierboven genoemde verplichtingen (artikel 28 AVG).

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-14-verwerkersovereenkomst-onderdeel-aanbesteding/#bronnen","title":"Bronnen","text":"

Verwerkersovereenkomst

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-14-verwerkersovereenkomst-onderdeel-aanbesteding/#risico","title":"Risico","text":"

Er is sprake van een onrechtmatige verwerking van persoonsgegevens als geen verwerkersovereenkomst is opgesteld tussen de verwerker en de verwerkingsverantwoordelijke.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-14-verwerkersovereenkomst-onderdeel-aanbesteding/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-15-leveren-bewijs_voldoen-aan-vereisten-algoritme-aanbieder/","title":"Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving.","text":"

owp-15OntwerpProjectleiderBeleid en adviesPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-15-leveren-bewijs_voldoen-aan-vereisten-algoritme-aanbieder/#maatregel","title":"Maatregel","text":"

Maak het leveren van bewijs voor het voldoen aan de vereiste onderdeel van de beoordeling van een inschrijving

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-15-leveren-bewijs_voldoen-aan-vereisten-algoritme-aanbieder/#toelichting","title":"Toelichting","text":"

Het leveren van bewijs door aanbieder dat de ontwikkelde algoritmes voldoen aan de vereisten, draagt bij aan het kunnen beoordelen of een aanbieder geschikt is om mee te contracteren. Bij het leveren van bewijs kan worden gedacht aan het overhandigen van bijvoorbeeld een certificaat of een EU-conformiteitsverklaring voor hoog risico AI-systemen.

Daarbij is het relevant om te beoordelen in hoeverre er is voldaan aan geharmoniseerde standaarden. Deze standaarden zijn momenteel in ontwikkeling. In de (nabije) toekomst zal dit naar verwachting op een vergelijkbare manier kunnen worden benaderd als bij het moeten leveren van een NEN-ISO 27001 certificaat (voldoen aan informatiebeveiligingsvereisten) door een leverancier.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-15-leveren-bewijs_voldoen-aan-vereisten-algoritme-aanbieder/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-15-leveren-bewijs_voldoen-aan-vereisten-algoritme-aanbieder/#risico","title":"Risico","text":"

Er wordt gecontracteerd met een aanbieder die niet voldoet aan de vereisten voor een verantwoorde inzet van algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-15-leveren-bewijs_voldoen-aan-vereisten-algoritme-aanbieder/#voorbeeld","title":"Voorbeeld","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/","title":"Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output.","text":"

owp-16Dataverkenning en datapreparatieVerificatie en validatieProjectleiderBeleid en adviesPublieke inkoopData

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/#maatregel","title":"Maatregel","text":"

Maak het al dan niet kunnen leveren van bewijs door een aanbieder dat auteursrechten niet worden geschonden met de trainingsdata en output van diens algoritme van bijvoorbeeld een aanbesteding.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/#toelichting","title":"Toelichting","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/#trainingsdata","title":"Trainingsdata","text":"
  • Algoritmes worden veelal getraind aan de hand van een omvangrijke hoeveelheid data. Wanneer grote hoeveelheden data, bijvoorbeeld door deze te scrapen van internet, worden gebruikt is het zeer aannemelijk (of: nagenoeg zeker) dat zich onder de gescrapete inhoud (ook) veel auteursrechtelijk beschermde werken bevinden, zoals bijvoorbeeld e-books en afbeeldingen. De gebruikte auteursrechtelijke werken kunnen soms bijvoorbeeld uit illegale bron verkregen zijn, en ook los daarvan zijn rechthebbenden veelal niet op de hoogte van het feit dat hun auteursrechtelijke werken voor de ontwikkeling van een algoritme of AI gebruikt worden.

  • Onder auteursrechtjuristen wordt aangenomen dat het gebruik van auteursrechtelijk beschermde werken ter training van algoritmes (waarschijnlijk) als kopi\u00ebren geldt: een handeling die de rechthebbende kan verbieden. Dat betekent dat aanbieders van algoritmes het gebruik van auteursrechtelijk beschermd materiaal in de inputfase steeds moeten kunnen legitimeren op grond van (a) toestemming van de rechthebbende(n) of (b) een in de wet neergelegde exceptie op het auteursrechtelijke verveelvoudigingsrecht.

  • Laat de aanbieder(s) uitleggen en (aantoonbaar) onderbouwen op welke manier de trainingsdata is verkregen en of dit rechtmatig was. Laat de aanbieders(s) ook aantonen welke maatregelen er zijn getroffen om dit te voorkomen en ga hier eventueel over in gesprek. Maak een jurist onderdeel van de beoordeling hiervan. Overweeg om een bronvermelding te laten opnemen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/#output","title":"Output","text":"

Laat de aanbieder(s) uitleggen en (aantoonbaar) onderbouwen op welke manier de trainingsdata is verkregen en of dit rechtmatig was. Laat de aanbieders(s) ook aantonen welke maatregelen er zijn getroffen om dit te voorkomen. Maak een jurist onderdeel van de beoordeling hiervan. Overweeg om een bronvermelding te laten opnemen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/#risicomanagement","title":"Risicomanagement","text":"

Het is van belang dat de (rest)risico's inzichtelijk zijn gemaakt als er sprake is van een (potenti\u00eble) schending van auteursrechten. Laat een aanbieder deze risico's inzichtelijk maken, zodat aanbieder en gebruiksverantwoordelijke maatregelen kunnen treffen en handelen als dit nodig is. Beoordeel of deze rest(risico's) acceptabel zijn.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/#contractovereenkomst","title":"Contractovereenkomst","text":"

Neem in de conceptovereenkomst op dat de aanbieder garandeert dat auteursrechten niet worden geschonden met de trainingsdata of output van het algoritme en dat aanbieder dit gedurende de ontwikkeling en levensduur actief bewaakt.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/#bronnen","title":"Bronnen","text":"
  • Advies Landsadvocaat Pels Rijcken over het gebruik van generatieve AI-tools door medewerkers van de Staat
  • ARVODI (24.7) en ARBIT (art 8.5 & 8.6)
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/#risico","title":"Risico","text":"

Dat wordt gecontracteerd met een aanbieder waarbij niet kan worden uitgesloten dat auteursrechten worden geschonden.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-17-beoordeel-aansprakelijkheidsvoorwaarden-van-aanbieder/","title":"Aansprakelijkheidsvoorwaarden van een aanbieder worden beoordeeld in de aanbesteding","text":"

owp-17OntwerpImplementatieJuristBeleid en adviesPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-17-beoordeel-aansprakelijkheidsvoorwaarden-van-aanbieder/#maatregel","title":"Maatregel","text":"

Maak de aansprakelijkheidsvoorwaarden die een aanbieder stelt ten aanzien van auteursrechten een vast onderdeel om te beoordelen in de aanbesteding.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-17-beoordeel-aansprakelijkheidsvoorwaarden-van-aanbieder/#toelichting","title":"Toelichting","text":"
  • Eindgebruikers van algoritmes kunnen er niet altijd op vertrouwen, of (eenvoudig) nagaan, of datgene wat zij door middel van een algoritme laten genereren, inbreuk maakt op rechten van anderen. Het is onwenselijk dat een eindgebruiker aansprakelijk wordt gesteld voor het maken van een inbreuk op rechten van derden, als deze gebruik maakt van algoritmes die worden aangeboden door aanbieders. Organisatie moeten daarom afspraken hierover maken met aanbieders.

  • Hoe groot de kans is dat eindgebruikers vanwege het gebruik van algoritmes aansprakelijk worden gesteld, is nog onduidelijk. Er zijn wel voorbeelden waarbij eindgebruikers voor een eventuele inbreuk aansprakelijk kunnen worden gesteld.

  • Op dit moment zijn (nog) geen gevallen of rechtszaken bekend waarin eindgebruikers (of hun werkgevers) aansprakelijk zijn gesteld voor een inbreuk op het intellectuele-eigendomsrecht vanwege het gebruik van op basis van algoritme. Feit is echter wel dat een dergelijke aansprakelijkstelling in voorkomende gevallen dus mogelijk zullen zijn, te meer nu de aanbieders van algoritmes in hun algemene voorwaarden het risico voor aansprakelijkheid volledig of grotendeels uitsluiten, of zelfs verlangen dat gebruikers hen vrijwaren voor de gevolgen van eventuele aansprakelijkstellingen.

  • Het is daarom van belang om een beoordeling te maken in hoeverre de aansprakelijkheidsvoorwaarden van de aanbieder passend zijn. Maak een jurist onderdeel van de beoordeling.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-17-beoordeel-aansprakelijkheidsvoorwaarden-van-aanbieder/#bronnen","title":"Bronnen","text":"

Advies Landsadvocaat Pels Rijcken over het gebruik van generatieve AI-tools door medewerkers van de Staat

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-17-beoordeel-aansprakelijkheidsvoorwaarden-van-aanbieder/#risico","title":"Risico","text":"

Er wordt gecontracteerd met een aanbieder die ongewenste aansprakelijkheidsvoorwaarden hanteert.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-17-beoordeel-aansprakelijkheidsvoorwaarden-van-aanbieder/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-18-maak-vereisten-onderdeel-van-subgunningscriteria/","title":"Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.","text":"

owp-18OntwerpOntwikkelaarPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-18-maak-vereisten-onderdeel-van-subgunningscriteria/#maatregel","title":"Maatregel","text":"

Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-18-maak-vereisten-onderdeel-van-subgunningscriteria/#toelichting","title":"Toelichting","text":"
  • Door een vereiste onderdeel te maken van een (sub)gunningscriteria, ontstaat een mogelijkheid voor aanbieders om zich te onderscheiden van andere aanbieders.
  • Dit kan zorgen voor een extra stimulatie op kwaliteitsaspecten van algoritmes
  • In de context van algoritmes is dit in het bijzonder relevant, bijvoorbeeld in relatie tot vereisten als non-discriminatie, eerbiedigen fundamentele rechten of het verbod op schenden auteursrechten.
  • Door vereisten te vertalen naar een (sub)gunningscriteria, kan een inhoudelijke beoordeling worden gemaakt in hoeverre een aanbieder voldoet aan deze vereisten.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-18-maak-vereisten-onderdeel-van-subgunningscriteria/#bronnen","title":"Bronnen","text":"
  • Keuze gunningscriterium en opstellen (sub)gunningscriteria
  • Handreiking Beste prijs-kwaliteitsverhouding:de basis
  • Beste prijs-kwaliteitsverhouding
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-18-maak-vereisten-onderdeel-van-subgunningscriteria/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-19-ruimte-voor-samenwerking-met-aanbieder/","title":"Cre\u00eber ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren","text":"

owp-19OntwerpOntwikkelenProjectleiderPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-19-ruimte-voor-samenwerking-met-aanbieder/#maatregel","title":"Maatregel","text":"

Cre\u00eber ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te gaan realiseren.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-19-ruimte-voor-samenwerking-met-aanbieder/#toelichting","title":"Toelichting","text":"
  • Om op een betekenisvolle manier invulling te geven aan bepaalde vereisten, kan het noodzakelijk zijn dat opdrachtgever en aanbieder (innovatief) moeten gaan samenwerken. Op basis van nieuwe wet- en regelgeving (bv. AI-Verordening) of geharmoniseerde standaarden kunnen aanbieders mogelijk nog niet voldoen aan nieuwe vereisten. Het kan ook onduidelijk zijn hoe moet worden voldaan aan vereisten nu de technologie zich snel ontwikkelt of dat de specifieke omstandigheden van het beoogde gebruik vragen om een samenspel tussen opdrachtgever en aanbieder.

  • Bij een verantwoorde inzet van algoritmes kan het bij vereisten zoals non-discriminatie, transparantie, menselijke controle en grondrechten van belang zijn om samen te onderzoeken hoe hier invulling aan moet worden gegeven. Het is belangrijk om bij de behoeftestelling al te verkennen om welke onderwerpen dit mogelijk van toepassing is. Bij een marktverkenning of informatiesessie kan worden verkend hoe aanbieders ervoor staan. Op basis hiervan kan worden beoordeeld in hoeverre bijvoorbeeld in een aanbesteding contractuele ruimte moet worden gecre\u00eberd voor opdrachtgever en aanbieder om hieraan te werken.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-19-ruimte-voor-samenwerking-met-aanbieder/#bronnen","title":"Bronnen","text":"
  • Ruimte voor Innovatie in het contract
  • Aanbesteding Ethische Beeldinwinning en Objectherkenning Openbare Ruimte
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-19-ruimte-voor-samenwerking-met-aanbieder/#risico","title":"Risico","text":"

Door niet te kunnen samenwerken aan vereisten, kan de situatie ontstaan dat uiteindelijk niet op een betekenisvolle manier wordt voldaan aan deze vereisten voor een verantwoorde inzet van algoritmes. Gebrek aan samenwerking kan leiden tot onvermogen om de benodigde vereisten voldoende in de praktijk te garanderen. Ook is het belangrijk dat de verantwoordelijke goed genoeg begrijpt hoe het algoritme werkt en welke keuzes er gemaakt zijn tijdens het ontwerp, omdat alleen dan goed beoordeeld kan worden welke vereisten zijn voldaan en welke risico\u2019s nog niet of minder goed zijn afgedekt.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-19-ruimte-voor-samenwerking-met-aanbieder/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-20-vaststellen-aanleveren-informatie-technische-documentatie/","title":"Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke.","text":"

owp-20OntwerpProjectleiderBeleid en adviesOntwikkelaarPublieke inkoopTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-20-vaststellen-aanleveren-informatie-technische-documentatie/#maatregel","title":"Maatregel","text":"

Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke, zodat het alle relevante onderdelen van het algoritme zijn beschreven.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-20-vaststellen-aanleveren-informatie-technische-documentatie/#toelichting","title":"Toelichting","text":"
  • Het is van belang dat duidelijke afspraken worden gemaakt over het opstellen, aanvullen en actueel houden van technische documentatie van algorites. Bij het inkopen van algoritmes moet hier rekening mee worden gehouden. De aanbieder zal een belangrijk deel van de technische documentatie moeten aanleveren, maar bij gebruik door de gebruiksverantwoordelijken zal deze informatie moeten worden aangevuld.

  • Bespreek met het projectteam welke onderdelen van de technische documentatie, als genoemd in de Bijlage 4 AI-verordening, van het AI-systeem door welke partij (aanbieder of gebruiksverantwoordelijke) moeten worden ingevuld of aangevuld.

  • Hierbij is het van belang dat de documentatie aansluit bij de verschillende gebruikers van het systeem, waarbij rekening wordt gehouden met verschillende toepassingen of versies. Bespreek met het projectteam welke onderdelen van de technische documentatie voor AI-systemen, als genoemd in de Bijlage 4 AI-verordening, door welke partij (aanbieder of gebruiksverantwoordelijke) moeten worden ingevuld of aangevuld.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-20-vaststellen-aanleveren-informatie-technische-documentatie/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-20-vaststellen-aanleveren-informatie-technische-documentatie/#risico","title":"Risico","text":"

Door de technische documentatie niet volledig op te stellen, is niet geheel transparant hoe het algoritme functioneert en kan daar geen verantwoording voor worden afgelegd.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-20-vaststellen-aanleveren-informatie-technische-documentatie/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-21-uitvoeren-audit-voor-naleving-vereisten/","title":"Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst","text":"

owp-21OntwerpProjectleiderBeleid en adviesPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-21-uitvoeren-audit-voor-naleving-vereisten/#maatregel","title":"Maatregel","text":"

Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-21-uitvoeren-audit-voor-naleving-vereisten/#toelichting","title":"Toelichting","text":"

Het is van belang dat opdrachtgever mogelijkheden heeft om te controleren in hoeverre door aanbieder/opdrachtnemer wordt voldaan aan naleving van de contractvoorwaarden

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-21-uitvoeren-audit-voor-naleving-vereisten/#bronnen","title":"Bronnen","text":"
  • Contractvoorwaarden gemeente Amsterdam
  • Europese Inkoopvoorwaarden Hoog Risico
  • Europese Inkoopvoorwaarden Laag Risico
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-21-uitvoeren-audit-voor-naleving-vereisten/#risico","title":"Risico","text":"

Er kunnen geen controles of inspecties worden uitgevoerd om te beoordelen of de algoritmes van aanbieder nog voldoen aan de vereisten voor een verantwoorde inzet van algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-21-uitvoeren-audit-voor-naleving-vereisten/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-22-invloed-besluitvorming-algoritmes-aanbieders/","title":"Bepaal in een aanbesteding of algoritmes van een aanbieder bepalende invloed hebben in een besluit richting personen","text":"

owp-22OntwerpProjectleiderBeleid en adviesOntwikkelaarPublieke inkoopTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-22-invloed-besluitvorming-algoritmes-aanbieders/#maatregel","title":"Maatregel","text":"

Ga na of algoritmes van een aanbieder een bepalende invloed hebben in een besluit richting personen en laat de aanbieder onderbouwen in hoeverre dit wel of niet het geval is.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-22-invloed-besluitvorming-algoritmes-aanbieders/#toelichting","title":"Toelichting","text":"
  • Als overheidsorganisaties algoritmes willen gebruiken van aanbieders, dan zal bijvoorbeeld tijdens een aanbestedingsproces moeten worden beoordeeld in hoeverre deze algoritmes invloed hebben op besluitvormingprocessen van deze organisaties. Algoritmes kunnen namelijk gebruikers ondersteunen bij de totstandkoming van besluiten, maar ook de besluitvorming van gebruikers overnemen. De mate van menselijke tussenkomst speelt daarbij een belangrijk rol.

  • Een opdrachtgever moet zelf bepalen welke algoritmes, gezien de specifieke context, wenselijk en toegestaan zijn. Vervolgens moet worden beoordeeld of de algoritmes die worden aangeboden door aanbieder daarbij aansluiten.

  • Tijdens het aanbestedingsproces moeten daarom inzichten worden verkregen hoe de algoritmes van aanbieders functioneren om tot een beoordeling te kunnen komen. Laat de aanbieder dit toelichten.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-22-invloed-besluitvorming-algoritmes-aanbieders/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-22-invloed-besluitvorming-algoritmes-aanbieders/#risico","title":"Risico","text":"

Algoritmes van aanbieders nemen besluitvormende taken over, zonder dat daar zicht op is of dat dit is beoordeeld.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-22-invloed-besluitvorming-algoritmes-aanbieders/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-23-kennisoverdracht-en-ondersteuning-aanbieder/","title":"Laat de aanbieder aangeven welke mate van opleiding en ondersteuning bij de implementatie nodig is om de beoogde algoritmes verantwoord te gebruiken.","text":"

owp-23OntwerpProjectleiderBeleid en adviesOntwikkelaarPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-23-kennisoverdracht-en-ondersteuning-aanbieder/#maatregel","title":"Maatregel","text":"

Laat de aanbieder aangeven welke mate van kennisoverdracht (opleiding en training) en ondersteuning bij de organisatorische implementatie nodig is om de beoogde algoritmes verantwoord te kunnen gebruiken.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-23-kennisoverdracht-en-ondersteuning-aanbieder/#toelichting","title":"Toelichting","text":"

Beoordeel of de kennisoverdracht en ondersteuning van aanbieder voldoende is om voor een langere periode zelfstandig op een verantwoorde wijze gebruikt te kunnen maken van de algoritmes.

Laat de aanbieder aangeven op welk niveau de noodzakelijkerwijs te leveren trainingen passend is voor het beoogde gebruik, waarbij de opdrachtgever vooraf inzicht geeft in het bestaande niveau, zodat een aanbieder concreet kan zijn over eventuele verschillen tussen beiden.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-23-kennisoverdracht-en-ondersteuning-aanbieder/#risico","title":"Risico","text":"

Zonder kennisoverdracht aan de organisaties en gebruikers, ontstaat het risico's dat algoritmes onjuist worden toegepast of dat de output onjuist wordt ge\u00efnterpreteerd en zo fouten ontstaan bij het uitvoeren van overheidstaken.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-23-kennisoverdracht-en-ondersteuning-aanbieder/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-23-kennisoverdracht-en-ondersteuning-aanbieder/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-24-risico-analyse-informatiebeveiliging-leverancier/","title":"Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstraject","text":"

owp-24OntwerpProjectleiderBeleid en adviesTechnische robuustheid en veiligheidPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-24-risico-analyse-informatiebeveiliging-leverancier/#maatregel","title":"Maatregel","text":"

Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstraject

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-24-risico-analyse-informatiebeveiliging-leverancier/#toelichting","title":"Toelichting","text":"
  • Stel vast of een aanbieder voldoet aan de Baseline Informatiebeveiliging Overheid.
  • Bespreek de informatiebeveiligingseisen met aanbieder die verband houden met de beschikbaarheid, integriteit en vertrouwelijkheid van de informatie en de informatiesystemen.
  • Bepaal of er, gezien de restrisico's, aanvullende beveiligingsmaatregelen (door de aanbieder of opdrachtgever) moeten worden getroffen om deze te beschermen.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-24-risico-analyse-informatiebeveiliging-leverancier/#bronnen","title":"Bronnen","text":"
  • Baseline Informatiebeveiliging Overheid, BIO 15.1.1.1
  • Onderzoekskader Algoritmes Auditdienst Rijk, IB.29
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-24-risico-analyse-informatiebeveiliging-leverancier/#risico","title":"Risico","text":"

Er is onvoldoende zicht op risico's op het gebied van informatiebeveiliging als gebruikt wordt gemaakt van algoritmes van aanbieders.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-24-risico-analyse-informatiebeveiliging-leverancier/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-25-maak-vereisten-onderdeel-van-programma-van-eisen/","title":"Maak vereisten onderdeel van het programma van eisen bij een aanbesteding","text":"

owp-25OntwerpProjectleiderBeleid en adviesOntwikkelaarPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-25-maak-vereisten-onderdeel-van-programma-van-eisen/#maatregel","title":"Maatregel","text":"

Maak vereisten onderdeel van het programma van eisen bij een aanbesteding

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-25-maak-vereisten-onderdeel-van-programma-van-eisen/#toelichting","title":"Toelichting","text":"
  • Door vereisten onderdeel te maken van het programma van eisen bij een aanbesteding, is het voor aanbieders duidelijk aan welke specifieke eisen een oplossing moet voldoen.
  • Op basis hiervan kan een aanbieder een zo goed mogelijke aanbieding doen.
  • Afhankelijk van de behoeftestelling kan het relevant zijn om bepaalde vereisten te verfijnen in het Programma van Eisen en aan te geven wanneer hieraan voldaan is, bijvoorbeeld met betrekking tot het transparantievereiste. Bepaal met het inkoopteam bij welke vereisten dit noodzakelijk is.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-25-maak-vereisten-onderdeel-van-programma-van-eisen/#risico","title":"Risico","text":"

Er is niet gespecificeerd en daarmee achteraf niet afdwingbaar dat algoritmes aan bepaalde vereisten moeten voldoen die van de belangen voor de betreffende overheidsorganisatie.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-25-maak-vereisten-onderdeel-van-programma-van-eisen/#bronnen","title":"Bronnen","text":"

Hoe specificeer ik mijn vraag?

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-25-maak-vereisten-onderdeel-van-programma-van-eisen/#voorbeeld","title":"Voorbeeld","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-26-maak-vereisten-onderdeel-van-service-level-agreement/","title":"Maak vereisten voor algoritmes onderdeel van de Service Level Agreement","text":"

owp-26OntwerpProjectleiderBeleid en adviesOntwikkelaarPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-26-maak-vereisten-onderdeel-van-service-level-agreement/#maatregel","title":"Maatregel","text":"

Maak de vereiste onderdeel van Service Level Agreement

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-26-maak-vereisten-onderdeel-van-service-level-agreement/#toelichting","title":"Toelichting","text":"
  • Onderzoek met het inkoopteam het relevant is om vereiste voor een verantwoorde inzet van algoritmes onderdeel te maken van de Service Level Agreement.
  • Met een SLA kunnen specifieke afspraken worden gemaakt over de kwaliteit van de dienstverlening van aanbieder.
  • Hierbij kan worden gedacht aan onderwerpen als incidentmanagement, servicemanagement, verantwoordelijkheden matrix, hersteltijd, prestatiecriteria, reproduceerbaarheid, versiebeheer van de gebruikte algoritmes en informatiebeveiliging.
  • Laat de aanbieder aangeven welke vormen van onderhoud aan de betreffende algoritmes nodig zijn en de snelheid waarmee signalen vanuit gebruik, ongeacht de bron, kunnen worden verwerkt in het systeem en welke expertise hiervoor beschikbaar is.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-26-maak-vereisten-onderdeel-van-service-level-agreement/#risico","title":"Risico","text":"

Zonder concrete afspraken te maken in de SLA, ontstaat het risico dat aloritmes (tijdelijk) of te langdurig niet kunnen worden gebruikt, onjuist fuctioneren of dat er geen verantwoording over de output kan worden afgelegd.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-26-maak-vereisten-onderdeel-van-service-level-agreement/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.11
  • Toetsingskader Algoritmes Algemene Rekenkamer, 1.05
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-26-maak-vereisten-onderdeel-van-service-level-agreement/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-27-contractuele-afspraken-data-en-artefacten/","title":"Maak (contractuele) afspraken over data en artefacten met een aanbieder","text":"

owp-27OntwerpImplementatieJuristPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-27-contractuele-afspraken-data-en-artefacten/#maatregel","title":"Maatregel","text":"

Maak (contractuele) afspraken met de aanbieder wie eigenaar is van de data en artefacten die ontstaan bij het gebruik van algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-27-contractuele-afspraken-data-en-artefacten/#toelichting","title":"Toelichting","text":"

Hier kan worden gedacht aan (initi\u00eble) trainingsdatasets, outputdata (richting gebruikers) en nieuwe trainingsdata (vanuit gebruikers).

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-27-contractuele-afspraken-data-en-artefacten/#bronnen","title":"Bronnen","text":"Bron Algoritmekader"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-27-contractuele-afspraken-data-en-artefacten/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-28-pas-vastgestelde-beleidskaders-zijn-nageleefd/","title":"Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.","text":"

owp-28OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-28-pas-vastgestelde-beleidskaders-zijn-nageleefd/#maatregel","title":"Maatregel","text":"

Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-28-pas-vastgestelde-beleidskaders-zijn-nageleefd/#toelichting","title":"Toelichting","text":"
  • Interne vastgestelde beleidskaders moeten worden toegepast bij het ontwikkelen, inkopen of gebruiken van algoritmes.
  • Het is van belang dat tijdig, bijvoorbeeld in de probleemanalyse fase, inzichtelijk wordt gemaakt welke interne beleidskaders moeten worden toegepast.
  • Hierbij kan worden gedacht aan definities die moeten worden gehanteerd, het naleven van inkoopbeleid, strategisch beleid volgen met betrekking tot het mogen inzetten van algoritmes binnen de organisaties of het doorlopen van processen en protocollen die moeten worden toegepast.
  • Vraag de betrokken experts welke beleidskaders van toepassing zijn vanuit diens specifieke expertise.
  • Ten behoeve van controles en audits is het van belang dat aantoonbaar wordt gemaakt dat de vastgestelde beleidskaders zijn nageleefd.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-28-pas-vastgestelde-beleidskaders-zijn-nageleefd/#risico","title":"Risico","text":"

De in te zetten algoritmes voldoen niet aan vastgestelde beleidskaders.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-28-pas-vastgestelde-beleidskaders-zijn-nageleefd/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.8
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-28-pas-vastgestelde-beleidskaders-zijn-nageleefd/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-29-informeer_betrokkenen/","title":"Stel vast welke betrokkenen ge\u00efnformeerd moeten worden en welke informatie zij nodig hebben.","text":"

pba-04OntwerpOntwikkelenProjectleiderBeleid en adviesTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-29-informeer_betrokkenen/#maatregel","title":"Maatregel","text":"

Stel vast welke betrokkenen ge\u00efnformeerd moeten worden over de ontwikkeling en het gebruik van algoritmes en welke informatie zij hierover nodig hebben.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-29-informeer_betrokkenen/#toelichting","title":"Toelichting","text":"

Welke informatie over algoritmes relevant is, verschilt per partij. Het is van belang om deze partijen in beeld te brengen en vast te stellen welke informatie voor hen relevant is. Raadpleeg hierbij vastgestelde beleidskaders, waarin is beschreven welke informatie in welke gevallen moet worden gecommuniceerd.

Stel bijvoorbeeld de volgende vragen:

Vragen Acties die je kan ondernemen Wie heeft informatie nodig over het ontwikkelen en gebruiken van algoritmes? Stel vast welke betrokken(en) binnen of buiten de organisatie iets over het algoritme wil of zou moeten weten. Wat voor informatie voor algoritmes heeft deze betrokken partij nodig? Toets dit ook bij vastgesteld beleid. Ga na wat de doelgroep moet weten over de werking of inzet van het algoritme. Bepaal om welk technisch niveau dit gaat. Op wat voor manier informeer je de betrokken partij? Pas de juiste methodes toe om de doelgroep te informeren. Wanneer wordt deze informatie gebruikt? Ga na in welke fase van de levenscyclus de gewenste informatie over de werking of inzet van het algoritme wordt gebruikt. Hoe verschilt de informatiebehoefte in elke fase van de levenscyclus? Wie is er verantwoordelijk voor de informatieverstrekking? Bepaal wie er informatie over het algoritme moet ophalen, en wie er voor die informatie kan zorgen.

Maak bij het vaststellen van de informatiebehoefte onderscheid tussen transparantie, uitlegbaarheid en interpreteerbaarheid. Houd daarbij ook rekening met zaken die moeten worden gecommuniceerd. Denk hierbij aan het kunnen uitleggen hoe een automatisch genomen besluit tot stand is gekomen.

Stel een communicatieplan op over de ontwikkeling en gebruik van het algoritme. Bepaal vervolgens aan de hand van de levenscyclus wanneer, welke informatie wanneer beschikbaar moet worden gesteld. Stel vast wie verantwoordelijk is voor het opstellen of het leveren van een bijdrage aan deze informatie. In het communicatieplan kunnen verder zaken worden opgenomen als:

  • Het doel van het algoritme.
  • Mogelijkheden van het algoritme.
  • Beperkingen van het algoritme.
  • Context waarin het algoritme wordt toegepast.
  • Wie heeft informatie nodig?
  • Wat voor informatie heeft deze betrokken partij nodig?
  • Op wat voor manier informeer je de betrokken partij?
  • Wanneer wordt deze informatie gebruikt?
  • Wie is er verantwoordelijk voor de informatieverstrekking?
  • Hoe en naar wie communiceer je in het geval van een incident?
  • Wat is de planning voor de communicatieactiviteiten?

Overleg regelmatig met betrokkenen en belanghebbenden in hoeverre de informatieverstrekking aansluit bij de (nieuwe) behoeften.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-29-informeer_betrokkenen/#bronnen","title":"Bronnen","text":"

Algoritmekader

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-29-informeer_betrokkenen/#risico","title":"Risico","text":"

Het risico is dat partijen niet of onvolledig worden ge\u00efnformeerd over de ontwikkeling en gebruik van algoritmes, en hierdoor hun rechten niet kunnen effectueren of belangen kenbaar kunnen maken.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-29-informeer_betrokkenen/#voorbeeld","title":"Voorbeeld","text":"
  • Bouwstenen van een communicatieplan
  • WMO voorspelmodel
  • Handreiking WMO voorspelmodel
  • Maatwerkscan UWV
  • Slimme keuzehulp aangifte internetoplichting: Ik heb iets gekocht, maar niets ontvangen
  • Chatbot gemeente Hillegom

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/","title":"Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.","text":"

owp-07OntwerpProjectleiderBeleid en adviesOntwikkelaarTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/#maatregel","title":"Maatregel","text":"

Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/#toelichting","title":"Toelichting","text":"

Uitlegbaarheidstechnieken helpen om de werking van een algoritme transparant te maken. De keuze voor het type algoritme bepaalt hoe transparant je kunt zijn. Van rekenregels kun je namelijk precies uitleggen hoe deze tot een beslissing komen. Maar complexe AI-systemen kunnen een black box zijn. Het is dan onduidelijk hoe deze systemen beslissingen maken.

Afhankelijk van het type algoritme zijn er uitlegbaarheidstechnieken beschikbaar om de werking en keuzes van een algoritme bloot te leggen. Er moet eerst een keuze worden gemaakt welk type algoritme geschikt is gezien de informatiebehoefte. Het is belangrijk om samen met de betrokken partijen vast te leggen welke uitlegbaarheidstechnieken moeten worden toegepast. Bij bronnen kan informatie worden geraadpleegd die helpen bij het vinden van de juiste methodiek.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/#gebruik-uitlegbaarheid-bij-besluiten","title":"Gebruik uitlegbaarheid bij besluiten","text":"

Onderzoek hoe uitlegbaarheidstechnieken kunnen bijdragen aan het motiveren van besluiten. Dit kan bijvoorbeeld door:

- De output van het algoritme te koppelen aan het zaakdossier, met een toelichting op de interpretatie van die output.\n- De output of een samenvatting hiervan op te nemen in de beschikking.\n
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/#beperkingen-en-veiligheid","title":"Beperkingen en veiligheid","text":"

Vanuit veiligheidsoverwegingen kan bij specifieke algoritmes besloten worden om bepaalde informatie over de werking van een algoritme niet aan iedereen vrij te geven. Denk hierbij aan de beperkingen die de Wet Open Overheid oplegt. Houd ook rekening met mogelijke risico\u2019s op aanvallen die kunnen ontstaan door het gebruik van uitlegbaarheidstechnieken, zoals omschreven in: A Survey of Privacy-Preserving Model Explanations: Privacy Risks, Attacks, and Countermeasures.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/#evaluatie-en-validatie","title":"Evaluatie en validatie","text":"

Evalueer de uitlegbaarheid van het systeem op functionele, operationele, bruikbaarheids- en veiligheidsvereisten in samenwerking met betrokkenen zoals gebruikers. Valideer of de uitkomst van het algoritme begrijpelijk genoeg is voor gebruiker om hier op een verantwoorde wijze mee te werken.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/#risico","title":"Risico","text":"

Als er geen rekening wordt gehouden met de uitlegbaarheid van een algoritme binnen een bepaalde context, ontstaat het risico dat de output van het algoritme niet wordt begrepen of verkeerd wordt ge\u00efnterpreteerd, wat kan leiden tot onjuist gebruik.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/#bronnen","title":"Bronnen","text":"
  • Toolkit voor implementatie
  • An introduction to explainable AI with Shapley values
  • Paper over (de evaluatie van) toolkits
  • UXAI: Design Strategy
  • Overzicht (evaluatie van) metrieken XAI
  • Part 2: Explaining AI in practice | ICO
  • A Survey of Privacy-Preserving Model Explanations: Privacy Risks, Attacks, and Countermeasures
  • Towards Transparency by Design for Artificial Intelligence | Science and Engineering Ethics.
  • From Anecdotal Evidence to Quantitative Evaluation Methods: A Systematic Review on Evaluating Explainable AI
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/#voorbeeld","title":"Voorbeeld","text":"
  • Gemeente Amsterdam - Onderzoekswaardigheid Algoritme \u2018Slimme check\u2019. Een tool die de medewerkers helpt om te bepalen of een aanvraag levensonderhoud onderzoekswaardig is. (niet meer in gebruik!): Overzicht Verwerkte Data en Features
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-genereren-bronvermelding/","title":"Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.","text":"

imp-10OntwerpValidatie en verificatieProjectleiderBeleid en adviesTransparantiePublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-genereren-bronvermelding/#maatregel","title":"Maatregel","text":"

Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-genereren-bronvermelding/#toelichting","title":"Toelichting","text":"

Bij het gebruik van generatieve AI/LLM\u2019s is bronvermelding van belang. Hiermee kan tot op zekere hoogte een beoordeling worden gegeven in hoeverre bij het trainen van het AI-model rechtmatig gebruik is gemaakt van bronnen. Bronvermelding is daarnaast essentieel om de output van het AI-model inhoudelijk te kunnen controleren, wat ook informatie geeft in hoeverre het AI-model bijvoorbeeld al dan niet hallucineert of manipuleert.

Voor het ontwikkelen van een AI-model is bronvermelding noodzakelijk, omdat het voor ontwikkelaars de enige manier is om te kunnen controleren of het model goed werkt. Dit geldt ook voor ontwikkelaars die pre-trained modellen gebruiken.

Neem het kunnen generenen van een bronvermelding mee als een 'requirement' voor het te ontwikkelen AI-model in de ontwerpfase of maakt het onderdeel van de behoeftestelling en specificeer deze behoefte in het inkoopproces.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-genereren-bronvermelding/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-genereren-bronvermelding/#voorbeeld","title":"Voorbeeld","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-toepassen_vastgestelde-beleidskaders/","title":"Pas vastgestelde beleidskaders toe","text":"

org-02OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernanceTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-toepassen_vastgestelde-beleidskaders/#maatregel","title":"Maatregel","text":"

Pas vastgestelde beleidskaders toe.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-toepassen_vastgestelde-beleidskaders/#toelichting","title":"Toelichting","text":"
  • Vastgestelde (interne) beleidskaders moeten worden toegepast bij het ontwikkelen, inkopen of gebruiken van algoritmes. Denk aan specifiek beleid voor de inzet van algoritmes.
  • Het is van belang dat tijdig, bijvoorbeeld in de probleemanalyse fase, inzichtelijk wordt gemaakt welke interne beleidskaders moeten worden toegepast.
  • Hierbij kan worden gedacht aan definities die moet worden gehanteerd, het naleven van inkoopbeleid, strategisch beleid volgen met betrekking tot het mogen inzetten van algoritmes binnen de organisaties of het doorlopen van processen en protocollen die moeten worden toegepast.
  • Vraag de betrokken experts welke beleidskaders van toepassing zijn vanuit diens expertise.
  • Ten behoeve van controles en audits is het van belang dat aantoonbaar wordt gemaakt dat de vastgestelde beleidskaders zijn nageleefd.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-toepassen_vastgestelde-beleidskaders/#risico","title":"Risico","text":"

De in te zetten algoritmes voldoen niet aan vastgestelde beleidskaders.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-toepassen_vastgestelde-beleidskaders/#bronnen","title":"Bronnen","text":"

Onderzoekskader Algoritmes Auditdienst Rijk, SV.8

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-toepassen_vastgestelde-beleidskaders/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-01-datakwaliteit/","title":"Controleer de datakwaliteit","text":"

dat-01Dataverkenning en datapreparatieOntwikkelaarData

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-01-datakwaliteit/#maatregel","title":"Maatregel","text":"

Stel vast of de gebruikte data van voldoende kwaliteit is voor de beoogde toepassing.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-01-datakwaliteit/#toelichting","title":"Toelichting","text":"
  • Stel functionele eisen voor de datakwaliteit vast en analyseer structureel of er aan deze eisen wordt voldaan.

  • De kwaliteit van de data die als input voor het algoritme wordt gebruikt is bepalend voor de uitkomsten van het algoritme. Hier wordt soms ook naar gerefereerd als garbage in = garbage out.

  • Een vraag die gesteld dient te worden: beschrijft de data het fenomeen dat onderzocht dient te worden?
  • Het Raamwerk gegevenskwaliteit bevat een breed toepasbare set van kwaliteitsdimensies:

    • juistheid
    • compleetheid
    • validiteit
    • consistentie
    • actualiteit
    • precisie
    • plausibiliteit
    • traceerbaarheid
    • begrijpelijkheid

    Deze dimensies zijn aangevuld met kwaliteitsattributen welke gebruikt kunnen worden om de verschillende dimensies meetbaar te maken.

  • De vraag of de data kwaliteit voldoende is, hangt sterk samen met de vraag of er bias in de onderliggende data zit. Analyseer daarom ook welke bias en aannames er besloten zijn in de onderliggende data. Denk hierbij onder andere aan de volgende vormen van bias:

    • historische bias
    • meetbias
    • representatie bias
  • Zorg dat je data vindbaar, toegankelijk, interoperabel en herbruikbaar (FAIR) is.

Let op!

Wanneer je een algoritme inkoopt en de ontwikkeling van het algoritme uitbesteedt aan een derde partij, houdt er dan dan rekening mee dat data traceerbaar en reproduceerbaar moet zijn. Maak hier heldere afspraken over met de aanbieder.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-01-datakwaliteit/#risico","title":"Risico","text":"
  • Door onjuiste beslissingen van gegevens kunnen verkeerde beslissingen genomen worden.
  • Het model cre\u00ebert onwenselijke systematische afwijking voor specifieke personen, groepen of andere eenheden. Dit kan leiden tot ongelijke behandeling en discriminerende effecten met eventuele schade voor betrokkenen.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-01-datakwaliteit/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, DM.9, DM.19
  • Toetsingskader Algoritmes, Algemene Rekenkamder, 2.18
  • NORA, Raamwerk gegevenskwaliteit
  • Impact Assessment Mensenrechten en Algoritmes, 2A.2.2
  • Handreiking non-discriminatie by design
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-01-datakwaliteit/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/","title":"Maak waardevolle data vindbaar, toegankelijk, interoperabel en herbruikbaar (FAIR) binnen en buiten de eigen organisatie.","text":"

dat-02Dataverkenning en datapreparatieOntwikkelaarData

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/#maatregel","title":"Maatregel","text":"

Maak waardevolle data vindbaar, toegankelijk, interoperabel en herbruikbaar (FAIR) binnen en buiten de eigen organisatie.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/#toelichting","title":"Toelichting","text":"

De internationale FAIR-principes zijn richtlijnen voor de manier van beschrijven, opslag en publicatie van data.

  • Findable (vindbaar): Metadata moet gemakkelijk te vinden zijn voor zowel mensen als computers.
  • Accessible (toegankelijk): Gebruikers moeten weten hoe toegang tot de data verkregen kan worden (autorisatie en authenticatie)
  • Interoperable (uitwisselbaar): Data moet meestal ge\u00efntegreerd worden met andere data en bijbehorden applicaties, opslag en processen.
  • Reusable (herbruikbaar): Het uiteindelijke doel van FAIR is om hergebruik van data te optimaliseren.

Wanneer je voldoet aan de 15 principes is je data 'machine actionable'. Dit maakt het mogelijk dat de data effectief gebruikt kan worden voor verschillende algoritmes.

FAIR data betekent niet per definitie dat data open data is. Juist ook voor (privacy) gevoelige data (gesloten data) kan het heel zinvol zijn om te voldoen aan de principes voor FAIR data, om juist daarmee specifieke geautoriseerde toegang tot gevoelige data mogelijk te kunnen maken.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/#15-principes-voor-fair-data","title":"15 principes voor FAIR data","text":"

Er zijn 15 principes voor FAIR data geformuleerd:

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/#findable-vindbaar","title":"Findable (vindbaar)","text":"
  • F1: Aan (meta)data wordt een wereldwijd unieke en permanente identifier toegevoegd

    Voorbeeld

    Met behulp van Persistent Identifiers (PID) zorg je ervoor dat jouw data (bijvoorbeeld onderzoeksdata) altijd vindbaar blijft. PID's kun je vergelijken met het ISBN-nummer bij boeken. Het idee is dat ook als de locatie of de onderliggende infrastructuur verandert, de verwijzing intact blijft.

  • F2: Data wordt beschreven met rijke metadata

    Voorbeeld

    Het team van data.overheid.nl heeft de metadata standaard DCAT-AP-DONL ontwikkeld die speciaal voor de uitwisseling van dataset informatie voor de Nederlandse situatie is ingericht. Dit is gebaseerd op de Data Catalog Vocabulary (DCAT) versie die de Europese Unie heeft opgesteld. Je kan hierover meer lezen op de site van data.overheid.nl.

  • F3: Metadata bevat duidelijk en expliciet de identificatie van de data die ze beschrijven

  • F4: (Meta)data worden geregistreerd of ge\u00efndexeerd in een doorzoekbare bron
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/#accessible-toegankelijk","title":"Accessible (toegankelijk)","text":"
  • A1: (Meta)data zijn opvraagbaar op basis van hun identificatiecode met behulp van een gestandaardiseerd communicatieprotocol
  • A1.1: Het protocol is open, vrij en universeel implementeerbaar
  • A1.2: Het protocol maakt waar nodig een authenticatie- en autorisatieprocedure mogelijk
  • A2: Metadata zijn toegankelijk, ook als de data niet meer beschikbaar zijn
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/#interoperable-uitwisselbaar","title":"Interoperable (uitwisselbaar)","text":"
  • I1: (Meta)data gebruikt een formele, toegankelijke, gedeelde en breed toepasbare taal voor kennisrepresentatie
  • I2: (Meta)data gebruikt gegevenswoordenboeken of vocabulaires die FAIR-principes volgen

    Voorbeeld woordenboek

    In het woordenboek Hitte staan ongeveer 230 definities van termen rond het thema hitte die gebruikt worden in het klimaatadaptatieveld. Dit woordenboek is ontwikkeld in opdracht van het ministerie van Infrastructuur en Waterstaat door overheidsstichting Geonovum.

  • I3: (Meta)data bevat gekwalificeerde verwijzingen naar andere (meta)data

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/#reusable-herbruikbaar","title":"Reusable (herbruikbaar)","text":"
  • R1: (Meta)data wordt rijkelijk beschreven met een veelheid aan nauwkeurige en relevante attributen
  • R1.1: (Meta)data wordt vrijgegeven met een duidelijke en toegankelijke licentie voor datagebruik
  • R1.2: (Meta)data wordt geassocieerd met gedetailleerde herkomst

    Voorbeeld

    PROV-DM is een conceptueel datamodel dat gebruikt kan worden voor de herkomstinformatie (provenance) van data.

  • R1.3: (Meta)data voldoet aan domein-relevante normen

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/#bronnen","title":"Bronnen","text":"
  • GO FAIR Foundation
  • 3-point FAIRification framework 3PFF
  • Toolbox verantwoord datagebruik, 2b
  • NORA online
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-04-bewaartermijnen-persoonsgegevens/","title":"Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure","text":"

dat-04OntwikkelenMonitoring en beheerJuristProjectleiderTechnische robuustheid en veiligheidPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-04-bewaartermijnen-persoonsgegevens/#maatregel","title":"Maatregel","text":"

Bepaal de bewaartermijnen en richt een vernietigingsprocesdure in voor de verwerkte (persoons)gegevens.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-04-bewaartermijnen-persoonsgegevens/#toelichting","title":"Toelichting","text":"
  • (Persoons)gegevens die het algoritme verwerkt worden niet langer bewaard dan voor de verwezenlijking van de verwerkingsdoeleinden noodzakelijk is.
  • Beschrijf de bewaartermijnen voor de gegevens, bijvoorbeeld in een DPIA.
  • Beschrijf hoe de (persoons)gegeven moeten worden vernietigd.
  • Zorg ervoor dat de vereisten met betrekking tot bewaartermijnen correct zijn of worden vertaald naar het algoritme en de onderliggende (zaak)systemen.
  • Controleer of deze maatregelen voor de bewaartermijnen en vernietiging van de (persoons)gegevens (in de onderliggende systemen) zijn getroffen en zorg dat dit aantoonbaar is, bijvoorbeeld met logbestanden.
  • Maak aantoonbaar dat persoonsgegevens zijn vernietigd, bijvoorbeeld met logbestanden.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-04-bewaartermijnen-persoonsgegevens/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, PRI.11
  • Toetsingskader Algoritmes Algemene Rekenkamer, 3.17
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-04-bewaartermijnen-persoonsgegevens/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-05-pseudonimiseren-anonimiseren/","title":"Bescherm persoonsgegevens door data te anonimiseren, pseudonimiseren of te aggregeren","text":"

dat-05Dataverkenning en datapreparatieOntwikkelenOntwikkelaarJuristPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-05-pseudonimiseren-anonimiseren/#maatregel","title":"Maatregel","text":"

Pas maatregelen toe als pseudonimiseren, anonimisering of aggregeren van persoonsgegevens toe bij het verwerken van de data.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-05-pseudonimiseren-anonimiseren/#toelichting","title":"Toelichting","text":"
  • Als is vastgesteld welke persoonsgegevens mogen worden verwerkt voor het ontwikkelen en gebruiken van algoritmes, moet worden nagegaan of er maatregelen kunnen worden getroffen om deze te beschermen.
  • Het algoritme verwerkt niet meer persoonsgegevens dan noodzakelijk; de verwerkte gegevens zijn proportioneel en substantieel.
  • Hierbij kan worden gedacht aan het pseudonomiseren, anonimiseren of aggregeren van persoonsgegevens.
  • Het bepalen of persoonsgegevens mogen worden verwerkt voor algoritmes moet worden bekeken in samenhang met maatregelen die kunnen worden getroffen om deze gegevens te beschermen.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-05-pseudonimiseren-anonimiseren/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Auditdienst Rijk, PRI.5
  • Toetsingskader Algoritmes Algemene Rekenkamer, 2.20
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-05-pseudonimiseren-anonimiseren/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-06-schending-auteursrechten/","title":"Controleer de auteursrechten van eigen data","text":"

dat-06OntwerpDataverkenning en datapreparatieJuristData

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-06-schending-auteursrechten/#maatregel","title":"Maatregel","text":"

Controleer of eventueel door de eigen organisatie verstrekte data binnen of buiten auteursrechten vallen. Bij voorkeur blijven de data eigendom van de (verstrekkende) overheidsorganisatie.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-06-schending-auteursrechten/#toelichting","title":"Toelichting","text":"

Het is van belang om te controleren of de te verwerken data waar overheidsorganisaties zelf over beschikken rechtmatig zijn verkregen en geen inbreuken maken op auteursrechten. Hier kan worden gedacht aan data die is gescraped van het internet en zou kunnen worden gebruikt voor de ontwikkeling van een algoritme.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-06-schending-auteursrechten/#bronnen","title":"Bronnen","text":"

Algoritmekader

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-06-schending-auteursrechten/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-duurzame-datacenters/","title":"Gebruik duurzame datacenters","text":"

dat-07OntwerpDataverkenning en datapreparatieOntwikkelenImplementatieMonitoring en beheerOntwikkelaarProjectleiderBeleid en adviesDuurzaamheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-duurzame-datacenters/#maatregel","title":"Maatregel","text":"

Maak gebruik van datacenters die gebruikmaken van duurzame energiebronnen en energie-effici\u00ebnte technologie\u00ebn voor de opslag en verwerking van data.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-duurzame-datacenters/#toelichting","title":"Toelichting","text":"

Door data op te slaan en algoritmes te laten draaien in datacenters die hernieuwbare energiebronnen inzetten en bijvoorbeeld de ontstane restwarmte recyclen, kun je de ecologische voetafdruk van de algoritmes aanzienlijk verkleinen. Datacenters die zich op duurzaamheid richten, verlagen de CO\u2082-uitstoot van hun infrastructuur en bieden mogelijk duurzaamheidsrapportages. Let bij het kiezen van een aanbieder op mogelijke greenwashing; dit gebeurt wanneer bedrijven beweren groen te zijn zonder dit met concrete maatregelen te onderbouwen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-duurzame-datacenters/#technologieen-voor-energie-efficiente-datacenters","title":"Technologie\u00ebn voor energie-effici\u00ebnte datacenters","text":"

Om datacenters energie-effici\u00ebnt te maken, zijn er verschillende benaderingen:

  • Gebruik van groene energiebronnen: Kies voor datacenters/aanbieders die hernieuwbare energie gebruiken. Maak bijvoorbeeld afspraken over een doel, zoals een DCie-score van minimaal 50%, gewogen over een heel jaar. De DCie score van elk Overheids Datacenter (ODC) kun je hier bekijken. Je kunt ook kijken of naast duurzame stroom ook restwarmte van servers wordt benut om bijvoorbeeld nabijgelegen gebouwen te verwarmen.
  • Koeling en energiebeheer optimaliseren: Adiabatische koeling, waarbij water en lucht worden gebruikt in plaats van elektriciteit, verlaagt het energieverbruik. Effici\u00ebnte stroomverdeling en warmteterugwinning dragen verder bij aan een lagere ecologische voetafdruk.
  • Monitoren: Blijf controleren op duurzame prestaties door te letten op certificeringen, zoals ISO 14001, ISO 50001 en BREEAM, en vraag naar energierapportages en details over het energieverbruik en de herkomst van stroom. Dit helpt om claims van duurzaamheid te toetsen en te voorkomen dat je in greenwashing trapt.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-duurzame-datacenters/#risico","title":"Risico","text":"

Door geen gebruik te maken van duurzame datacenters, loop je het risico op een hogere CO\u2082-uitstoot, en wordt daardoor niet aangesloten bij Rijksbreed beleid. Ook loop je risico op hogere energiekosten.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-duurzame-datacenters/#bronnen","title":"Bronnen","text":"
  • Rijks ICT Dashboard - Duurzaamheid
  • Denk Doe Duurzaam - Doelen voor ICT
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-training-validatie-en-testdata/","title":"Gebruik bij machine learning technieken gescheiden train-, test- en validatiedata en houdt rekening met underfitting en overfitting.","text":"

dat-07Dataverkenning en datapreparatieOntwikkelenOntwikkelaarDataTechnische robuustheid en veiligheidBias en non discriminatie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-training-validatie-en-testdata/#maatregel","title":"Maatregel","text":"

Indien je gebruik maakt van machine learning technieken, maak een passende keuze voor gescheiden train-, test- en validatiedata en houd hierbij rekening met underfitting en overfitting.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-training-validatie-en-testdata/#toelichting","title":"Toelichting","text":"

Verdeel je dataset in drie delen:

  1. de trainingsset

    Deze dataset wordt gebruikt om het model te trainen. Uit deze dataset worden de onderliggende patronen of relaties geleerd die later gebruikt kunnen worden om voorspellingen mee te doen.

    De kwaliteit van deze dataset moet goed zijn en zo representatief mogelijk voor de doelpopulatie. Eventuele bias of vooroordelen in deze dataset kan door het trainen in het model sluipen.

Let bij het samenstellen van de traningsset op dat de data waarop het model gebaseerd is, niet beschikbaar zijn voordat de uitkomsten zijn geobserveerd. Met andere woorden, zorg ervoor de de voorspellingen geen onderdeel kunnen zijn van de inputvariabelen.

  1. de validatieset

    De validatieset fungeert als een onafhankelijke, onbevooroordeelde dataset voor het vergelijken van de prestaties van verschillende algoritmes die zijn getraind op onze trainingsset.

    Verschillende modellen kunnen getraind worden op de trainingsdataset. Zo kan je bijvoorbeeld vari\u00ebren in de (hyper)parameters of de inputvariabelen. Dit leidt tot verschillende varianten van het model. Om de prestaties van de verschillende modellen te vergelijken, moeten we een nieuwe dataset gebruiken: de validatieset. Zou je hiervoor de trainingsdataset gebruiken, kan dat leiden tot overfitting, wanneer het model dan te specifiek afgestemd is op 1 dataset. Het model kan dan niet voldoende generaliseren voor nieuwe situaties.

  2. de testset

    Nadat er met behulp van de validatieset een keuze is gemaakt voor een passend model en bijbehorende (hyper)parameters, moet je het model nog testen op nieuwe data. Dit geeft een beeld van de werkelijke prestaties van het model in nieuwe omstandigheden.

    Let op dat je pas naar deze resultaten kijkt als laatste stap. Inzichten uit deze testdataset mogen niet worden meegenomen in de ontwikkeling, omdat dit kan leiden tot overfitting. Het model zal dan in productie mogelijk minder goed presteren.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-training-validatie-en-testdata/#grootte-van-de-drie-datasets","title":"Grootte van de drie datasets","text":"

Er is geen optimale verdeling van de drie datsets. Veelvoorkomende verhoudingen om je data in te splitten zijn:

  • 80% trainingsset, 10% validatieset, 10% testset
  • 70% trainingsset, 15% validatieset, 15% testset
  • 60% trainingsset, 20% validatieset, 20% testset

Afhankelijk van de hoeveelheid beschikbare data en de context maak je hierin een keuze. Houdt hierbij rekening met:

  • Hoe minder trainingdata, hoe groter de variantie van het model tijdens het trainen. De patronen en relaties die ontdekt zijn, bevatten dan een grotere onzekerheid.
  • Hoe minder validatie- en testdata je gebruikt, hoe grote de variantie en de onzekerheid in de verwachte prestaties van het algoritme.
  • Hoe complexer het model, en hoe meer (hyper)parameters er zijn om te optimaliserne, hoe groter de validatieset moet zijn om het model met optimale presetaties te vinden. Wanneer er weinig hyperparameters zijn, is een relatief kleine validatieset vaak voldoende.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-training-validatie-en-testdata/#k-fold-cross-validation","title":"k-fold cross validation","text":"

Naast dat je de datasets willekeurig kan verdelen in drie delen (aselect), kan je ook meer geavanceerde technieken gebruiken. Een robuuste en veelgebruikte techniek is k-fold cross validation, waarbij het model k keer wordt getraind op verschillende delen van de data.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-training-validatie-en-testdata/#risico","title":"Risico","text":"

Door onjuiste training van het model presteert het model in de praktijk minder goed dan bij de tests. Als trainings-, validatie- en testdata door elkaar lopen (\"data leakage\"), kan dit leiden tot overfitting, waardoor het model beter lijkt te presteren dan in werkelijkheid het geval is.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-training-validatie-en-testdata/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Auditdienst Rijk, DM.5, DM.6
  • Toetsingskader Algoritmes Algemene Rekenkamer, 2.15, 2.21
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-training-validatie-en-testdata/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-08-eigenaarschap-data/","title":"Zorg dat je controle of eigenaarschap hebt over de data","text":"

dat-08Dataverkenning en datapreparatieProjectleiderDataPublieke inkoop

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-08-eigenaarschap-data/#maatregel","title":"Maatregel","text":"

De organisatie heeft volledige controle of eigenaarschap over de data. Wanneer dit niet mogelijk is, zijn afspraken gemaakt om de functionele eisen te waarborgen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-08-eigenaarschap-data/#toelichting","title":"Toelichting","text":"

Wanneer een algoritme ontwikkeld of ingekocht wordt, is het belangrijk om toegang tot de gebruikte data goed te regelen. Maak bijvoorbeeld afspraken over wie ervoor zorgt dat de data:

  • op een centrale plek beschikbaar wordt gesteld
  • van voldoende kwaliteit is
  • goed beveiligd is

Wanneer een algoritme wordt ontwikkeld door een derde partij en dus niet wordt beheerd door de eigen organisatie, maak je duidelijke afspraken over eigenaarschap van de data. Dat geldt zowel voor de inputdata als de outputdata. Zorg dat de inputdata tot je beschikking blijft, zodat resultaten altijd reproduceerbaar zijn.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-08-eigenaarschap-data/#risico","title":"Risico","text":"

De organisatie is afhankelijk voor de data of het model afhankelijk van derden en kan daardoor reproduceerbaarheid en prestatie niet garanderen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-08-eigenaarschap-data/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Auditdienst Rijk, DM.23
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-08-eigenaarschap-data/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-09-dataminimalisatie/","title":"Beperk de omvang van datasets voor energie-effici\u00ebntie","text":"

dat-09Dataverkenning en datapreparatieOntwikkelenOntwikkelaarProjectleiderDataDuurzaamheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-09-dataminimalisatie/#maatregel","title":"Maatregel","text":"

Houd datasets beperkt tot het noodzakelijke en voldoende specifiek om onnodige energieconsumptie te voorkomen tijdens de verwerking en opslag van data voor algoritmes. We noemen dit ook wel dataminimalisatie.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-09-dataminimalisatie/#toelichting","title":"Toelichting","text":"

Hoe meer je bewaart, hoe meer ruimte dat kost om op te slaan. Bovendien verbruikt elk apparaat dat nodig is om data op te slaan stroom. Dat heeft grote invloed op de CO\u2082-uitstoot van een datacentrum. Grote datasets brengen daarom hoge energie- en opslagkosten met zich mee. Door de dataset bewust te beperken tot relevante gegevens, kun je ook de energie-effici\u00ebntie van algoritmes aanzienlijk verbeteren. Vooral bij de ontwikkeling van AI-systemen kan het verminderen van data bijdragen aan lagere energiebehoeften en CO\u2082-uitstoot.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-09-dataminimalisatie/#technieken-voor-dataminimalisatie","title":"Technieken voor dataminimalisatie","text":"
  • Slimme selectie van trainingsdata: Gebruik methoden die irrelevante data uit de dataset filteren, zoals dataselectie-algoritmes en sampling-technieken. Door te focussen op relevante data, beperk je de omvang zonder de prestaties van het model te be\u00efnvloeden.
  • Verwijderen van redundante en dubbele data: Deduplicatie van data minimaliseert onnodige verwerkingskracht. Door alleen unieke en relevante gegevens op te slaan, wordt de opslagbehoefte verder beperkt.
  • Opschonen en archiveren van verouderde data: Regelmatige archivering of verwijdering van verouderde data in je dataset zorgt voor een verminderde voetafdruk en verhoogt ook de effici\u00ebntie.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-09-dataminimalisatie/#risico","title":"Risico","text":"

Zonder dataminimalisatie loopt je organisatie het risico op onnodig hoge energie- en opslagkosten, en een grotere ecologische impact.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/3-dat-09-dataminimalisatie/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Auditdienst Rijk, PRI.5
  • Rijks ICT-dashboard
  • Sustainable artificial intelligence \u2013 TU Delft
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-01-security-by-design/","title":"Ontwerp en ontwikkel het algoritme volgens de principes van \u2018security by design\u2019","text":"

owk-01OntwikkelenProjectleiderOntwikkelaarTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-01-security-by-design/#maatregel","title":"Maatregel","text":"

Hanteer principes van \u2018security by design\u2019 (informatiebeveiligingsmaatregelen) als uitgangspunten bij de ontwikkeling van het algoritme. Stel vast welke principes horen bij security by design en welke relevant zijn voor het ontwerp of de ontwikkeling van het algoritme. Mogelijke documenten waarin deze principes kunnen worden opgenomen, zijn het security beleid, of ontwikkelbeleid. Bij het bepalen en vaststellen van de juiste principes kunnen interviews met de ontwikkelaar en software-architecten helpen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-01-security-by-design/#toelichting","title":"Toelichting","text":"

Security by design is gehanteerd en terug te zien als uitgangspunt. (BIO 14.2.1.1)

Security by design benadrukt het belang van het in een vroeg stadium integreren van securitymaatregelen. Op die manier kan worden voldaan aan regelgeving, maar wordt de weerbaarheid tegen bijvoorbeeld cyberaanvallen verhoogd. In een vroeg stadium nadenken over security betekent dat vroeg al de benodigde expertise wordt betrokken, zoals een security-officer.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-01-security-by-design/#risico","title":"Risico","text":"

Wanneer tijdens het ontwerp en de inrichting van het algoritmisch systeem niet voldoende rekening wordt gehouden met vastgestelde security-by-design principes kan dit leiden tot een onvoldoende veilige (software-)omgeving. Dit kan tot gevolg hebben: oneigenlijke toegang, wijzigingen of vernietigingen van het algoritme, de data of uitkomsten van het algoritme.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-01-security-by-design/#bronnen","title":"Bronnen","text":"
  • Baseline Informatiebeveiliging Overheid, (BIO 14.2.1.1)
  • Onderzoekskader Algoritmes Auditdienst Rijk, IB.28
  • Toetsingskader Algoritmes Algemene Rekenkamer, 4.09
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-01-security-by-design/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-02-stopzetten-gebruik/","title":"Maak een noodplan voor het stoppen van het algoritme","text":"

owk-02OntwikkelenImplementatieProjectleiderOntwikkelaarGovernanceMenselijke controle

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-02-stopzetten-gebruik/#maatregel","title":"Maatregel","text":"

Tref (technische) maatregelen waarmee het gebruik van het algoritme kan worden stopgezet.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-02-stopzetten-gebruik/#toelichting","title":"Toelichting","text":"
  • Er moet in een proces zijn beschreven wanneer en hoe het gebruik van algoritmes moet worden stopgezet.
  • Het is van belang dat bij het ontwerp van algoritmes er rekening wordt gehouden met dat het werkproces ook zonder het algoritme kan worden uitgevoerd.
  • In het geval van risicoselectie kan er bijvoorbeeld worden teruggevallen op het enkel uitvoeren van een aselecte steekproef als selectieinstrument.
  • Als blijkt dat het algoritme ongewenst functioneert, dan moeten (technische) maatregelen zijn getroffen waarmee het gebruik daadwerkelijk kan worden stopgezet. Denk hierbij aan een stopknop en werkinstructies hoe het gebruik kan worden be\u00ebindigd.
  • Maak aantoonbaar dat deze maatregelen zijn getroffen.
  • De proceseigenaar of een menselijk toezichthouder moet in staat zijn om het algoritme op elk moment te kunnen be\u00ebindigen.
  • Het stopzetten van het gebruik van een algoritme mag niet tot gevolg hebben dat betrokkenen niet meer kunnen achterhalen hoe besluiten tot stand zijn gekomen of dat gevolgen niet meer kunnen worden gecorrigeerd als dat noodzakelijk is.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-02-stopzetten-gebruik/#risico","title":"Risico","text":"

Betrokkenen of belanghebbenden kunnen nadelige gevolgen ondervinden van een algoritme dat onjuist functioneert en niet tijdig kan worden stopgezet.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-02-stopzetten-gebruik/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.18, SV.17
  • Toetsingskader Algoritmes Algemene Rekenkamer, 1.03
  • Impact Assessment Mensenrechten en Algoritmes, 1.5
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-02-stopzetten-gebruik/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-03-privacyrisico/","title":"Analyseer de privacy-risico\u2019s en neem maatregelen om deze risico\u2019s laag te houden","text":"

owk-03OntwerpOntwikkelenMonitoring en beheerProjectleiderJuristPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-03-privacyrisico/#maatregel","title":"Maatregel","text":"

Uitvoeren risicoanalyse en formuleren mitigerende maatregelen voor privacyrisico.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-03-privacyrisico/#toelichting","title":"Toelichting","text":"
  • Verifieer of een DPIA is uitgevoerd over het werkproces dat wordt of zal worden ondersteund met een algoritme. Zo nee, voer een risico analyse (DPIA) uit om de risico's voor de rechten en vrijheden van betrokkenen met de inzet van algoritmes in beeld te brengen.
  • Organisatorische en technische maatregelen moeten worden getroffen om persoonsgegevens bij de ontwikkeling en het gebruik van het algoritme te beschermen.
  • Beleg de mitigerende maatregelen bij betrokken actoren. Denk bijvoorbeeld aan het toekennen van de maatregelen als anonimiseren en pseudonimiseren van persoonsgegevens aan een data engineer, voordat deze kunnen worden gebruikt ten behoeve van het ontwikkelen of controleren van het algoritme.
  • Bepaal welke maatregelen moeten zijn gerealiseerd voordat mag worden gestart met de verwerking van de persoonsgegevens en welke moeten worden gemonitord.
  • Monitor de voortgang op het realiseren van de maatregelen en zorg voor bewijsstuken als deze zijn gerealiseerd. Deze bewijsstukken kunnen onderdeel worden van een audit.
  • Als er een noodzaak is om na verloop van tijd meer persoonsgegevens te verwerken of om andere verwerkingen uit te voeren, zal opnieuw een beoordeling moeten plaatsvinden of er privacyrisico's ontstaan en hoe deze kunnen worden gemitigeerd. Gedurende de levenscyclus van het algoritme moet aandacht blijven voor het uitvoeren van de risicoanalyse voor privacyrisico's.
  • Bij hoge risico's voor het verwerken van persoonsgegevens is een voorafgaande raadpleging bij de Autoriteit Persoonsgegevens onder artikel 36 AVG verplicht. Bepaal of raadpleging noodzakelijk is.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-03-privacyrisico/#risico","title":"Risico","text":"

Privacyrisico's met de inzet van algoritmes worden niet gemitigeerd, waardoor privacyrechten van betrokkenen worden geschonden.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-03-privacyrisico/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, PRI.2, PRI.3
  • Toetsingskader Algoritmes Algemene Rekenkamer, 3.03
  • Besluit inzake lijst van verwerkingen van persoonsgegevens waarvoor een gegevensbeschermingseffectbeoordeling (DPIA) verplicht is, Autoriteit Persoonsgegevens
  • Model DPIA Rijksdienst
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-03-privacyrisico/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-04-logging/","title":"Maak logbestanden waarin staat wie wanneer toegang had tot de data en de code","text":"

owk-04OntwikkelenMonitoring en beheerOntwikkelaarTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-04-logging/#maatregel","title":"Maatregel","text":"

Zorg ervoor dat logbestanden worden gecre\u00eberd waarin informatie wordt geregistreerd over gebruikersactiviteiten, uitzonderingen en informatiebeveiligingsgebeurtenissen. Door goede logging is te achterhalen wanneer en door wie er toegang is geweest tot code en data (audit trail). Er kan loginformatie gegenereerd, bewaard, toegankelijk gemaakt en gemonitord worden. Logbestanden bevatten vaak gebeurtenissen die gebruikersactiviteiten, uitzonderingen en informatiebeveiligingsgebeurtenissen registreren. Bedenk wat deze informatie betekent in de context van de werking van het algoritme.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-04-logging/#toelichting","title":"Toelichting","text":"
  • Met logbestanden is te achterhalen wanneer en door wie er (ongewenste) aanpassingen zijn gedaan (audit trail).
  • Loginformatie moet worden gegenereerd, bewaard, gemonitord en toegankelijk worden gemaakt.
  • Logbestanden bevatten vaak gebeurtenissen die gebruikersactiviteiten, uitzonderingen en informatiebeveiligingsgebeurtenissen registreren.
  • Bedenk wat deze informatie betekent in de context van de werking van het algoritme. loginformatie gegenereerd, bewaard, toegankelijk gemaakt en gemonitord worden. Logbestanden bevatten vaak gebeurtenissen die gebruikersactiviteiten, uitzonderingen en informatiebeveiligingsgebeurtenissen registreren.
  • Stel vast welke informatie bij het ontwikkelen en gebruiken van algoritmes relevant is om te loggen.
  • Log behalve het aanpassen van gegevens ook het uitlezen van gegevens waar dat relevant is. Bijvoorbeeld als persoonsgegevens worden opgevraagd.
  • Logs dienen periodiek (of doorlopend) gecontroleerd to worden op relevante incidenten. Dat betekent dat wat er gelogd wordt geschikt moet zijn om relevante beveiligingsincidenten op te merken.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-04-logging/#risico","title":"Risico","text":"

Wanneer loginformatie ontbreekt, is niet te achterhalen wanneer er (eventueel ongewenste) aanpassingen zijn gedaan (audit trail) op (de code van) het algoritme, of door wie.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-04-logging/#bronnen","title":"Bronnen","text":"
  • Baseline Informatiebeveiliging Overheid, BIO 12.3.1.1, 12.3.1.4, 12.3.1.5, 12.4.1.1, 12.4.2.2
  • Onderzoekskader Algoritmes Auditdienst Rijk, IB.27
  • Toetsingskader Algoritmes Algemene Rekenkamer, 4.06
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-04-logging/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-05-energiezuinige-programmeermethoden/","title":"Kies energiezuinige programmeermethoden","text":"

owk-05OntwikkelenOntwikkelaarDuurzaamheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-05-energiezuinige-programmeermethoden/#maatregel","title":"Maatregel","text":"

Gebruik energie-effici\u00ebnte programmeertechnieken en methoden die de benodigde rekenkracht minimaliseren.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-05-energiezuinige-programmeermethoden/#toelichting","title":"Toelichting","text":"

Energiezuinig programmeren maakt het mogelijk om de voetafdruk van algoritmes te verkleinen door minder energie en middelen te verbruiken. Door specifieke technieken toe te passen, zoals optimalisatie van processen en effici\u00ebnte geheugenbeheerstrategie\u00ebn, kun je als ontwikkelaar bijdragen aan het verduurzamen van algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-05-energiezuinige-programmeermethoden/#technieken-voor-energiezuinige-softwareontwikkeling","title":"Technieken voor energiezuinige softwareontwikkeling","text":"
  1. Lean coding en minimalisatie van code bloat Lean coding richt zich op het gebruik van alleen de benodigde code zonder overbodige complexiteit of libraries, wat resulteert in lagere energieconsumptie. Door \u201ccode bloat\u201d te vermijden, zorg je ervoor dat het algoritme minder verwerkingskracht en geheugen verbruikt.

  2. Gebruik van energiezuinige programmeertalen en frameworks Programmeren in talen zoals Rust, Go en Elixir draagt bij aan energie-effici\u00ebntie doordat deze ontworpen zijn voor lage resource-omvang en hoge effici\u00ebntie. Ook frameworks die lichtgewicht en modulair zijn, ondersteunen energiezuinige processen.

  3. Parallel processing en multi-core optimalisaties Door parallelle verwerking en multi-core optimalisaties toe te passen, wordt rekenwerk verdeeld over meerdere cores. Dit reduceert de totale verwerkingstijd, bespaart energie en verhoogt de prestaties van je code op het vlak van duurzaamheid.

  4. Microservices en modulaire architecturen Een modulaire architectuur, zoals microservices, zorgt ervoor dat je onderdelen van de applicatie alleen activeert wanneer dat nodig is. Dit voorkomt onnodige belasting en beperkt energieverbruik behoorlijk.

  5. Geoptimaliseerd geheugenbeheer Door effici\u00ebnt geheugenbeheer, zoals caching en lazy loading, voorkom je onnodige data-opslag en bewerkingen. Dit verlaagt de energievraag en verbetert de snelheid van het algoritme aanzienlijk.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-05-energiezuinige-programmeermethoden/#risico","title":"Risico","text":"

Zonder energie-effici\u00ebnte methoden kan het algoritme onnodig veel energie verbruiken, wat leidt tot hogere operationele kosten en een grotere milieu-impact.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-05-energiezuinige-programmeermethoden/#bronnen","title":"Bronnen","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-05-energiezuinige-programmeermethoden/#voorbeeld","title":"Voorbeeld","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-06-optimaliseer-AI-training/","title":"Optimaliseer AI-trainingsprocessen voor energie-effici\u00ebntie","text":"

owk-06OntwikkelenOntwikkelaarDuurzaamheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-06-optimaliseer-AI-training/#maatregel","title":"Maatregel","text":"

Streef naar energiezuinige methoden voor AI-training, zoals het beperken van trainingscycli en het gebruik van energie-effici\u00ebnte hardware.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-06-optimaliseer-AI-training/#toelichting","title":"Toelichting","text":"

Het trainen van AI, vooral generatieve AI-modellen, vergt aanzienlijke energie en heeft daardoor een grote ecologische voetafdruk. Een enkele trainingsronde kan al een enorme hoeveelheid CO\u2082 uitstoten. Door enkele concrete methoden toe te passen, kun je deze impact beperken.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-06-optimaliseer-AI-training/#energie-optimalisatie-door-hardwarekeuze-en-serverbeheer","title":"Energie-optimalisatie door hardwarekeuze en serverbeheer","text":"
  • Gebruik energie-effici\u00ebnte hardware zoals specifiek afgestemde GPU's, die geschikt zijn voor de trainingsbehoeften van het model. Door bijvoorbeeld te kiezen voor GPU\u2019s die optimaal bij je model passen in plaats van de krachtigste beschikbare hardware, kan het energieverbruik drastisch worden verminderd. Houd hiermee rekening in je keuze voor een trainingsomgeving.
  • Verder kan servergebruik geoptimaliseerd worden door onnodige trainingsomgevingen tijdig te stoppen of voor andere trainingsomgevingen of testomgevingen te kiezen. Ook kun je servers dynamisch schalen met tools zoals Kubernetes of autoscaling technologie.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-06-optimaliseer-AI-training/#slimme-data-en-trainingsoptimalisatie","title":"Slimme data- en trainingsoptimalisatie","text":"

Niet alle beschikbare data dragen bij aan de modelprestaties. Door een dataselectiestrategie toe te passen, gebruik je enkel relevante datasets (dataminimalisatie), wat zorgt voor minder intensieve rekenbelasting tijdens het trainingsproces. Daarnaast kan slimme caching helpen om repetitieve data-opvragingen te beperken, wat bijdraagt aan een lagere energievraag. Bovendien kun je hertrainingscycli van AI beperken door enkel updates te doen wanneer nieuwe data dit echt vereist. Dit voorkomt overbodige trainingscycli en bespaart energie.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-06-optimaliseer-AI-training/#risico","title":"Risico","text":"

Zonder energie-effici\u00ebnte methoden kan AI-training leiden tot hoge operationele kosten en een aanzienlijke ecologische impact, met name door overmatig gebruik van rekenkracht en energie-intensieve hardware.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-06-optimaliseer-AI-training/#bronnen","title":"Bronnen","text":"
  • How to Make Generative AI Greener - Harvard Business Review
  • GreenOps: 4 Tips om AI-training duurzamer te maken - AG Connect
  • Duurzame kunstmatige intelligentie - TU Delft
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/4-owk-06-optimaliseer-AI-training/#voorbeeld","title":"Voorbeeld","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-01-functioneren-in-lijn-met-doeleinden/","title":"Controleer regelmatig of het algoritme werkt zoals het bedoeld is","text":"

ver-01OntwikkelenVerificatie en validatieMonitoring en beheerProjectleiderOntwikkelaarTechnische robuustheid en veiligheidBias en non discriminatie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-01-functioneren-in-lijn-met-doeleinden/#maatregel","title":"Maatregel","text":"

Stel vast dat het algoritme voortdurend functioneert in lijn met de vastgestelde doelstelling.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-01-functioneren-in-lijn-met-doeleinden/#toelichting","title":"Toelichting","text":"
  • Vertaal de vastgestelde doelstelling naar functionele eisen voor het algoritme. Werk het vastgestelde doel uit in een beschrijving in logische taal/pseudo code of documentatie die handvatten biedt aan de ontwikkelaar.
  • Monitor de mate waarin aan deze eisen wordt voldaan door het algoritme.
  • Bepaal en leg vast hoe eventuele parameters, business rules en indicatoren bepaald worden. Zorg dat dit breed wordt afgestemd in de organisatie (ontwikkelteam, opdrachtgevers en beheer).
  • Houd hier rekening met eventuele (statistische) bias: meten we daadwerkelijk wat we denken te meten?
  • Wanneer het algoritme meerdere doelen dient, is het belangrijk ook te evalueren op meerdere functionele eisen.
  • Wanneer er sprake is van een (handmatige) behandeling, bepaal dan wanneer deze behandeling als 'succesvol' gezien kan worden.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-01-functioneren-in-lijn-met-doeleinden/#risico","title":"Risico","text":"

Het algoritme functioneert niet in lijn met geformuleerde doelstellingen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-01-functioneren-in-lijn-met-doeleinden/#bronnen","title":"Bronnen","text":"
  • Toetsingskader Algoritmes Algemene Rekenkamer, 2.01, 2.07
  • Impact Assessment Mensenrechten en Algoritmes, 1
  • Onderzoekskader Algoritmes Auditdienst Rijk, DM.1, DM.4
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-01-functioneren-in-lijn-met-doeleinden/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/","title":"Toets het algoritme op bias","text":"

ver-01OntwerpVerificatie en validatieMonitoring en beheerProjectleiderBeleid en adviesOntwikkelaarJuristBias en non discriminatie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/#maatregel","title":"Maatregel","text":"

Analyseer of het gebruik van het algoritme of het proces daaromheen leidt tot onwenselijke of onrechtmatige verschillen in de behandeling van individuen en/of groepen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/#toelichting","title":"Toelichting","text":"

Het uitvoeren van een analyse over onwenselijke of onrechtmatige verschillen bestaat grofweg uit 3 stappen:

  • Stap 1: Analyseer of er sprake is van bias: systematisch verschil in behandeling van bepaalde objecten, mensen of groepen in vergelijking met anderen.
  • Stap 2: Voer een rechtvaardigingstoets uit om te bepalen of het geconstateerde verschil uit stap 1 te rechtvaardigen is.
  • Stap 3: Voer een ethische wenselijkheidstoets uit om te bepalen of het geconstateerde verschil uit stap 1 ethisch wenselijk is.

Voor alle stappen geldt dat het belangrijk is om de gemaakte keuzes en afwegingen zorgvuldig te onderbouwen en te documenteren. De 3 stappen worden hieronder verder toegelicht.

Opmerking

Deze maatregel is in ieder geval van toepassing op natuurlijke personen. Voor andere rechtspersonen zoals bedrijven kan dit ook van toepassing zijn. Denk bijvoorbeeld aan een gelijke behandeling tussen eenmanszaken en grotere bedrijven.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/#stap-1-analyseer-of-er-sprake-is-van-bias","title":"Stap 1: Analyseer of er sprake is van bias","text":"

In deze stap is het doel om te bepalen in welke mate er sprake is van een systematisch verschil in behandeling van bepaalde objecten, mensen of groepen in vergelijking met anderen. Dit verschil kan zowel op een directe als een indirecte manier ontstaan.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/#toetsen-op-direct-onderscheid","title":"Toetsen op direct onderscheid","text":"

Toetsen op direct onderscheid is in vergelijking tot toetsen op indirect onderscheid relatief eenvoudig.

Bepaal of de inputvariabelen die gebruikt worden leiden tot een direct onderscheid op basis van godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, nationaliteit, hetero- of homoseksuele gerichtheid1 of burgelijke staat.

Het is niet mogelijk om een uitputtend overzicht te geven van alle selectiecriteria die mogelijk tot direct onderscheid op grond van ras of nationaliteit kunnen leiden. Wel zijn in de jurisprudentie verschillende voorbeelden en aanknopingspunten te vinden. Zo staat vast dat selectie op basis van fysieke etnische kenmerken, zoals huidskleur, direct onderscheid op grond van ras oplevert2. Een ander voorbeeld is dat onderscheid op grond van een niet-westers klinkende naam direct onderscheid op grond van afkomst (en dus ras) oplevert3.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/#toetsen-op-indirect-onderscheid","title":"Toetsen op indirect onderscheid","text":"

Ook selectiecriteria die op het eerste gezicht geen enkele link lijken te hebben met een discriminatiegrond kunnen leiden tot indirect onderscheid op grond van een discriminatiegrond. Enkele voorbeelden van zulke 'ogenschijnlijk neutrale' selectiecriteria die verband hebben met ras of nationaliteit zijn: postcode, hoogte van het inkomen, kenteken, familielid in het buitenland, laaggeletterdheid. Indirect onderscheid is in vergelijking met direct onderscheid lastiger op te signaleren en te voorkomen. Daarom is het belangrijk jouw algoritmische toepassing regelmatig te analyseren op eventueel indirect onderscheid. Het toetsen op indirect onderscheid bestaat uit 5 stappen:

  1. Bepaal wat de kwetsbare groepen zijn. Eventueel kan dit aangevuld worden op basis van de discriminatiegronden uit non-discriminatie wetgeving. Of andere groepen waarvoor verschillen in behandeling ethisch onwenselijk zijn.

  2. Bepaal wat \"verschillen in behandeling\" betekent in de context van het algoritme. In deze stap is het belangrijk om voorafgaand aan de daadwerkelijke analyse met een brede groep stakeholders te bepalen wat 'eerlijk' en 'rechtvaardig' wordt bevonden in de context van het betreffende algoritme. Er zijn veel verschillende manieren waarop je kan kijken naar onderscheid bij het gebruik van algoritmes. Voorbeelden van manieren waarop je naar onderscheid kan kijken zijn:

    • Onderscheid op basis van gelijke uitkomsten (representatie). De belangrijkste vraag die hier mee beantwoord wordt is: hebben personen uit verschillende groepen gelijke kans om geselecteerd te worden door het algoritme? Of is er sprake van een over- of ondervertegenwoording van bepaalde groepen in de selectie ten opzichte van de betreffende populatie?
    • Onderscheid op basis van gelijke prestaties (fouten). De belangrijkste vraag die hier mee beantwoord wordt is: presteert het algoritme gelijk voor personen uit verschillende groepen? Met andere woorden: maakt het algoritme vaker fouten bij bepaalde groepen? Dat kan er eventueel toe leiden dat bepaalde groepen vaker onterecht wel of niet geselecteerd worden door het algoritme.

    Om te toetsen of er sprake is van onderscheid op basis van gelijke prestaties, is het noodzakelijk om de prestaties van het algoritme goed te analyseren. In het geval van classificatie is het daarvoor nodig om een zogeheten confusion matrix op te stellen. Een confusion matrix is een tabel waarin de voorspellingen van het algoritme worden vergeleken met de werkelijke waarden (de ground truth).

    De verschillende maten/metrieken waarop gekeken kan worden naar onderscheid, worden in de (wetenschappelijke) literatuur ook wel fairness metrieken genoemd. Veel van deze metrieken kunnen op basis van de confusion matrix berekend worden. Een hulpmiddel om de meest passende metrieken te kiezen in jouw situatie is de Fairness tree.

    Door te denken vanuit verschillende perspectieven, zullen er in de praktijk meerdere metrieken van belang zijn. Het kan echter voorkomen dat deze metrieken elkaar tegenspreken. Maak een duidelijke prioritering van de verschillende metrieken om afwegingen te maken tussen de verschillende opvattingen van eerlijkheid.

  3. Verzamel de benodigde data die nodig is om bovenstaande groepen te bepalen. Bepaal welke data benodigd is om te analyseren of er verschillen zijn tussen bepaalde groepen. In veel gevallen zal data benodigd zijn die demografische en beschermde kenmerken van groepen omschrijft. Het verzamelen en verwerken van deze data kan in strijd zijn met privacy vereisten uit bijvoorbeeld de Algemene Verordening Gegevensbescherming. Het is daarom van belang om duidelijk afwegingen te maken tussen privacy en het analyseren van bias die rekening houdt met de juridische en ethische vereisten.

    Uitzondering voor hoog risico AI-systemen

    De AI-verordening biedt een uitzondering voor het verwerken van bijzondere categorie\u00ebn persoonsgegevens voor het monitoren, opsporen en corrigeren van bias bij AI-systemen met een hoog risico. Zie artikel 10.5, AI-verordening.

    Om de data op een veilige en rechtmatige manier te gebruiken voor een biasanalyse dient de data van voldoende kwaliteit te zijn. Denk hier goed na of de data eventuele bias bevat die kan duiden op een bepaalde vooringenomenheid in de biasanalyse zelf (historische bias of representatie bias). De data dient bijvoorbeeld voldoende actueel en volledig te zijn.

    Voor sommige groepen zal het onmogelijk zijn om te beschikken over data van voldoende kwaliteit om zorgvuldig te toetsen op bias. De laaggeletterdheid van burgers of personen is bijvoorbeeld lastig meetbaar en in veel gevallen niet beschikbaar. Bepaal in zo'n situatie of er andere mogelijkheden zijn deze groepen te helpen, of dat er andere mogelijkheden zijn om eventuele ongelijke behandeling bij deze groepen te constateren. Bijvoorbeeld door hierop te monitoren in de klacht- en bezwarenprocedure.

  4. Bereken de verschillen in behandeling en/of uitkomsten van het algoritme. Er zijn verschillende open source softwarepakketten die je hierbij kunnen ondersteunen, zoals fairlearn, Aequitas, fairml, fairness of AI Fairness 360.

  5. Probeer te verklaren hoe het geconstateerde onderscheid is ontstaan. Als er in de vorige stap een significant onderscheid is geconstateerd, is het belangrijk om na te gaan hoe dit onderscheid is ontstaan. Dit kan bijvoorbeeld ontstaan door:

    • een vorm van bias in de onderliggende inputdata. Je kan hierbij denken aan:
      • historische bias: in hoeverre beschrijft de data de huidige situatie?
      • representatie bias: is de data waarop getraind wordt representatief voor de bijbehorende populatie? Zijn trends uit de gebruikte data generaliseerbaar naar de totale populatie?
      • meetbias: beschrijven de inputvariabelen wel wat ze moeten beschrijven? In hoeverre zijn dit benaderingen waarbij eventuele factoren worden weggelaten?
    • een vorm van bias in het proces na afloop van het algoritme
      • is er sprake van automatiseringsbias of bevestigingsbias in de (handmatige) beoordeling?

Wanneer duidelijker is hoe de geconstateerde bias is ontstaan, is het goed om te verkennen of er mogelijkheden zijn om dit (in de toekomst) te voorkomen.

Het is belangrijk hier een brede groep aan belanghebbenden bij te betrekken. De oorzaken van bias komen uit de 'echte wereld', waarbij patronen in datasets historische, demografische en sociale verschillen weerspiegielen. Het verklaren en voorkomen van bias vraagt daarmee niet alleen om technische oplossingen, maar het is belangrijk de hele socio-technische omgeving waarin het algoritme wordt ingezet mee te nemen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/#stap-2-voer-een-rechtvaardigingstoets-uit","title":"Stap 2: Voer een rechtvaardigingstoets uit","text":"

Wanneer er in Stap 1 is geconstateerd dat er sprake is van een onderscheid, dient de volgende vraag beantwoord te worden:

Valt dit onderscheid te rechtvaardigen?

Een geconstateerd systematisch onderscheid is niet altijd fout en is niet altijd verboden, maar het vraagt wel altijd om aandacht en zorgvuldigheid. Het geconstateerde onderscheid kan in bepaalde situaties en onder bepaalde strikte voorwaarden gerechtvaardigd zijn:

  • Voor direct onderscheid kan er bijvoorbeeld sprake zijn van een wettelijke uitzondering die het gemaakte onderscheid toelaat.
  • Voor indirect onderscheid geldt dat behalve een wettelijke uitzondering er ook een objectieve rechtvaardiging kan bestaan, waarmee het geconstateerde onderscheid in bepaalde gevallen toelaatbaar kan zijn.

Twee subvragen die hierbij beantwoord moeten worden zijn:

  • streeft het in te zetten algoritme een legitiem doel na?
  • bestaat er een redelijke relatie van evenredigheid tussen het gebruikte algoritme en de nagestreefde doelstelling?

Wanneer er geen rechtvaardiging is voor het gemaakte onderscheid, spreken we van een verboden direct of indirect onderscheid, ofwel discriminatie. Het algoritme mag in dat geval niet gebruikt worden.

Voor meer toelichting over het uitvoeren van een rechtvaardigingstoets, verwijzen we naar het rapport Discriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader van het College voor de Rechten van de Mens.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/#stap-3-voer-een-ethische-wenselijkheidstoets-uit","title":"Stap 3: Voer een ethische wenselijkheidstoets uit","text":"

Bepaal of het geconstateerde onderscheid uit Stap 1 ethisch wenselijk is. Dit hangt samen met de algemene wenselijkheid van de inzet van het algoritme.

In sommige gevallen kan het zo zijn dat ondanks dat er een objectieve rechtvaardiging bestaat voor het gemaakte onderscheid, dit vanuit ethisch perspectief toch onwenselijk is. Bepaal met een grote groep belanghebbenden wat eventuele (nadelige) effecten van het gemaakte onderscheid kunnen zijn, of jullie dit eerlijk vinden en of er eventuele alternatieven zijn.

Opmerking

De bepaling over wat eerlijk is en wat ethisch wenselijk is kan in sommige gevallen ook politiek bevonden worden. Houd hier rekening met de politiek-bestuurlijke verantwoordelijkheden en zorg indien nodig dat de politiek-bestuurlijke verantwoordelijkhden duidelijk zijn.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/#risico","title":"Risico","text":"

Wanneer er geen zorgvuldige analyse naar (onwenselijke) bias is uitgevoerd, bestaat het risico dat het gebruik van het algoritme discriminerende effecten met zich meebrengt. Dit kan leiden tot een ongelijke behandeling van burgers met eventuele schade voor betrokkenen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/#bronnen","title":"Bronnen","text":"
  • Toetsingskader Algoritmes Algemene Rekenkamer, 2.19, 3.08
  • Onderzoekskader Algoritmes Auditdienst Rijk, DM.16, DM.17, DM.18, DM.20, DM.21, DM.22
  • Discriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader, College voor de Rechten van de Mens
  • Handreiking non-discriminatie by design
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/#voorbeelden","title":"Voorbeelden","text":"
  • Addendum Vooringenomenheid voorkomen, Algorithm Audit met bijbehorende data en broncode op Github
  • Onderzoek misbruik uitwonendenbeurs, PricewaterhouseCoopers
  • Pilot Slimme Check, Gemeente Amsterdam
  • Bias toetsing 'Kort Verblijf Visa' aanvragen, Rijks ICT Gilde
  • Report on Algorithmic bias assesment, SigmaRed
  1. Er is een wetsvoorstel om de term 'hetero- of homoseksuele gerichtheid' in de Algmemene wet gelijke behandeling (Awgb) te wijzigingen in 'seksuele gerichtheid'. Met deze wijziging sluit de Awgb aan bij een eerdere wijziging van artikel 1 van de Grondwet.\u00a0\u21a9

  2. Zie Discriminatie door risicoprofielen, een mensenrechtelijk toetsingskader, College voor de Rechten van de Mens \u21a9

  3. Zie Discriminatie door risicoprofielen, een mensenrechtelijk toetsingskader, College voor de Rechten van de Mens, College voor de Rechten van de Mens 7 juni 2021, oordeel 2021-70; College voor de Rechten van de Mens 23 april 2015, oordeel 2015-44; College voor de Rechten van de Mens 23 april 2015, oordeel 2014-0426.\u00a0\u21a9

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-03-vertaling-wetgeving-naar-systeem/","title":"Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleid","text":"

ver-03Verificatie en validatieJuristGovernanceTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-03-vertaling-wetgeving-naar-systeem/#maatregel","title":"Maatregel","text":"

Stel regelmatig vast dat wetgeving en (lokaal) beleid correct is vertaald naar de uitvoering van het te ondersteunen werkproces en de onderliggende systemen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-03-vertaling-wetgeving-naar-systeem/#toelichting","title":"Toelichting","text":"
  • Systemen die overheidsorganisaties inzetten voor bijvoorbeeld het verlenen van subsidies, vergunningen of bijstandsuitkeringen moeten de regels en processtappen volgen die in wetgeving zijn voorgeschreven.
  • Er is een vertaling nodig van deze regels en processtappen naar de uitvoering van het werkproces, het datagebruik en onderliggende systemen.
  • Algoritmes moeten ook voldoen aan deze regels en processtappen.
  • Als algoritmes worden ontwikkeld, moet worden onderzocht wat deze regels zijn en hoe deze moeten worden toegepast bij het ontwikkelen van algoritmes.
  • Het moeten voldoen aan wetgeving en beleid kan dus in zekere zin 'begrenzend' werken op wat mag worden gedaan met algoritmes. Dit is mede afhankelijk van de risico classificatie van de specifieke toepassing.
  • Voor algoritmes, bijvoorbeeld regelgebaseerde rekenregels, moet bijvoorbeeld nauwkeurig worden geprogrammeerd in welke gevallen welke bedragen moeten worden uitgekeerd voor een bijstandsuitkering.
  • Voor machine learning algoritmes moet bijvoorbeeld worden vastgesteld of de trainingsdata wel tot stand is gekomen in lijn met wetgeving en vastgesteld beleid (datakwaliteit) en welke verbanden en patronen (inputvariabelen) al dan niet passend zijn bij het ondersteunen van wettelijke taken.

  • Er is een multidisciplinaire samenwerking nodig tussen de proceseigenaar, gebruikers, juristen, informatieanalisten en ontwikkelaar om deze vertaling zorgvuldig en doorlopend te maken.

  • Voorafgaand aan het (laten) ontwikkelen van een algoritme moet dit zijn uitgevoerd.
  • De toegepaste 'business rules' en de verwerkte data voor de uitvoering van het te ondersteunen werkproces met algoritmes moeten worden onderzocht en beoordeeld.
  • Diepgaande procesanalyses (Bv. BPMN niveau Analytisch) en procesbeschrijvingen kunnen hierbij ondersteunen.
  • Als blijkt dat een werkproces niet (meer) conform (gewijzigde) wetgeving of beleid wordt uitgevoerd, dan moet worden beoordeeld of de verworven data of welke deel van de data geschikt is voor het ontwikkelen een algoritme.
  • Het is dan raadzaam om de uitvoering van het betreffende werkproces en de werking van onderliggende systemen eerst te 'herstellen' en om hiermee een nieuw datafundament te cre\u00eberen (eerst een groot aantal zaken behandelen) die later als trainingsdata kan worden gebruikt.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-03-vertaling-wetgeving-naar-systeem/#risico","title":"Risico","text":"

Een beslissing of besluit wordt niet conform wetgeving genomen en is daarmee onrechtmatig, als geen goede vertaling wordt gemaakt van wetgeving naar het algoritme.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-03-vertaling-wetgeving-naar-systeem/#bron","title":"Bron","text":"
  • Wetsanalyse
  • Onderzoekskader Auditdienst Rijk, DM.15
  • Toetsingskader Algoritmes Algemene Rekenkamer, 2.05
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/5-ver-03-vertaling-wetgeving-naar-systeem/#voorbeeld","title":"Voorbeeld","text":"

Handleiding Wetanalyse

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-01-werkinstructies-gebruikers/","title":"Stel een werkinstructie op voor gebruikers.","text":"

imp-01ImplementatieProjectleiderOntwikkelaarMenselijke controleTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-01-werkinstructies-gebruikers/#maatregel","title":"Maatregel","text":"

Stel een werkinstructie op voor gebruikers.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-01-werkinstructies-gebruikers/#toelichting","title":"Toelichting","text":"

Het is belangrijk dat gebruikers een werkinstructie ontvangen met informatie over hoe zij met het algoritme kunnen en moeten werken. Hierin worden zaken beschreven als:

  • Op wat voor manier het algoritme ondersteunt bij het uitvoeren van (wettelijke) taken.
  • Wat de mogelijkheden en beperkingen zijn bij het gebruik van het algoritme.
  • Wat de impact is van het gebruik van het algoritme op de samenleving en individuen (denk aan energieverbruik of dat een besluit met rechtsgevolgen wordt genomen).
  • Wat de risico's zijn die aan het gebruik verbonden zijn (bijv. (automation) bias, false positives/negatives).
  • Welke maatregelen zijn getroffen om deze risico's te beperken (bijv. bias analyse, 'stopknop' ingebouwd, transparantie over de output).
  • Hoe de output van het algoritme moet worden ge\u00efnterpreteerd.
  • Hoe het werkproces kan worden uitgevoerd, zonder ondersteuning van het algoritme.
  • Welke protocollen er zijn als incidenten zich voordoen.

Denk hierbij na over het eventueel bijscholen van medewerkers als het kennisniveau nog onvoldoende is om de werkinstructies goed te begrijpen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-01-werkinstructies-gebruikers/#bronnen","title":"Bronnen","text":"
  • Toetsingskader Algoritmes Algemene Rekenkamer, 3.07
  • Ethics Guidelines of Trustworthy AI
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-01-werkinstructies-gebruikers/#risico","title":"Risico","text":"

Het algoritme wordt onjuist gebruikt of verkeerd ge\u00efnterpreteerd door gebruikers, waardoor onjuiste belissingen of besluiten worden genomen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-01-werkinstructies-gebruikers/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-02-aselecte-steekproeven/","title":"Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie\u2019 te controleren","text":"

imp-02Dataverkenning en datapreparatieImplementatieMonitoring en beheerOntwikkelaarBias en non discriminatieTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-02-aselecte-steekproeven/#maatregel","title":"Maatregel","text":"

Uitvoeren van aselecte steekproeven als aanvulling wanneer gebruik gemaakt wordt van risicogestuurde selectie.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-02-aselecte-steekproeven/#toelichting","title":"Toelichting","text":"

Aselecte steekproeven kunnen een waardevolle toevoeging zijn bij risicogestuurde selectie.

Het toevoegen van aselecte steekproeven maakt het mogelijk om over tijd te beoordelen of het algoritme nog voldoende effectief is. Populaties veranderen immers over tijd. Een selectie die het meest effectief was bij ingebruikname, kan over tijd dat niet meer zijn. Door alleen risicogestuurd te selecteren, wordt dit niet inzichtelijk, omdat bepaalde groepen zelden tot nooit gecontroleerd worden. Door de aanvullende mogelijkheid van monitoring, kan over tijd beoordeeld worden of er nog steeds sprake is van de meest proportionele vorm. Als dat niet zo is, kan bijvoorbeeld gekozen worden voor aanpassing van de risicogestuurde selectie of overgaan op volledig aselect.

De maatregel gaat daarmee niet direct discriminatie tegen, omdat er sprake kan zijn van discriminatie ongeacht de effectiviteit van de risicogestuurde selectie. Een lagere effectiviteit maakt het echter lastiger het gemaakte onderscheid te rechtvaardigen.

Het gebruik van een aselecte steekproef is in veel gevallen essentieel om het systeem te kunnen toetsen op vooringenomenheid. Een aselecte steekproef geeft ook inzicht in heel deel van de populatie dat doorgaans niet geselecteerd en behandeld wordt door het betreffende risicogestuurde algoritme. Dit maakt het mogelijk om te toetsen of er sprake is van een over- of ondervertegenwoordiging van bepaalde groepen, of om te bepalen of bepaalde typen fouten vaker gemaakt worden in bepaalde groepen.

Bij AI-systemen die verder leren op basis van verkregen data kan daarnaast sprake zijn van een reinforcing feedbackloop, omdat zij geen representatieve data krijgen. Het toevoegen van aselecte steekproeven kan deze feedbackloop doorbreken.

Het is aan te bevelen om, waar mogelijk, behandelaars niet in te lichten of een casus toegewezen is op basis van een risicogestuurd of aselecte selectie. Daardoor wordt beperkt dat een behandelaar met tunnelvisie een zaak bekijkt. De behandelaar weet immers dat er tussen de selecties zaken zitten waar niet sprake is van verhoogd risico. Op die manier kan automation bias beperkt te worden. Niet in alle gevallen zal dit mogelijk zijn, omdat de behandelaar ook uit andere aangeleverde gegevens kan halen op basis waarvan een casus geselecteerd is. Het is dan belang om op andere wijze de tunnelvisie tegen te gaan.

De precieze inzet van aselecte steekproeven zal afhangen van de context. Zo verschilt het per context hoeveel zaken aselect geselecteerd moeten worden. Bepaal welke groepen er precies vergeleken dienen te worden en bepaal aan de hand daarvan een passende steekproefgrootte zodanig dat er gesproken kan worden over statistische significantie.

In sommige gevallen zal de impact van een selectie ook dusdanig zijn, dat het zich niet leent voor aselecte steekproef. Zo kan een aselecte steekproef wel de basis zijn voor bureauonderzoek, maar mogelijk niet als enige basis voor een huisbezoek. Deze belangenenafweging moet per context gemaakt worden.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-02-aselecte-steekproeven/#bronnen","title":"Bronnen","text":"

Rapportage Algoritmerisico's Nederland voorjaar 2024 (pp. 36-41)

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-02-aselecte-steekproeven/#risico","title":"Risico","text":"
  • Historical bias
  • Representation bias
  • Automation bias en Reinforcing Feedback Loop
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-02-aselecte-steekproeven/#voorbeeld","title":"Voorbeeld","text":"

In het onderzoek van zowel Algorithm Audit als PricewaterhouseCoopers naar de Controle Uitwonendenbeurs is het belang van de aselecte steekproef duidelijk geworden.

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/","title":"Richt de juiste menselijke controle in van het algoritme","text":"

imp-03OntwerpImplementatieMonitoring en beheerProjectleiderBeleid en adviesMenselijke controleGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/#maatregel","title":"Maatregel","text":"

Richt (technische) controlemechanismen in voor menselijke tussenkomst (of: menselijke controle) waarmee de output van een algoritme kan worden gecontroleerd.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/#toelichting","title":"Toelichting","text":"

Algoritmes ondersteunen vaak beslissingen en besluitvorming van overheidsorganisaties. Deze beslissingen of besluiten kunnen betrokkenen in aanmerkelijke mate raken of zelfs rechtsgevolgen hebben. Omdat algoritmes niet foutloos zijn, is het belangrijk dat een mens controleert wat een algoritme doet en, waar nodig, corrigeert. Dit proces heet 'menselijke tussenkomst' en moet betekenisvol zijn, niet slechts symbolisch.

Het inrichten, monitoren en evalueren van menselijke controle is cruciaal om te voorkomen dat algoritmes negatieve effecten veroorzaken of de menselijke autonomie ondermijnen.

Betekenisvolle menselijke controle houdt in dat:

  • Het toezicht wordt uitgevoerd door iemand die bevoegd en bekwaam is om een beslissing of besluit te wijzigen.
  • Automatische aanbevelingen niet klakkeloos worden overgenomen. Bijvoorbeeld: een systeem dat standaard een suggestie accepteert door een enkele klik voldoet hier niet aan.
  • De vormen van menselijke tussenkomst al in een vroeg stadium, bijvoorbeeld in de ontwerpfase, worden vastgesteld op basis van risicoanalyses.
  • Gebruikers voldoende kennis, tijd en verantwoordelijkheid hebben om weloverwogen beslissingen te nemen over het functioneren van algoritmes. Dit betekent ook dat externe factoren, zoals tijdsdruk of onvoldoende informatie, de beoordeling van de output niet mogen be\u00efnvloeden. (zie ook het onderzoekskader van de ADR, SV.6)

Soms is menselijke tussenkomst minder relevant, zoals bij \u2018gebonden bevoegdheden\u2019. Hierbij is weinig tot geen ruimte om een beslissing of besluit aan te passen. Voorbeelden zijn:

  • Het opleggen van verkeersboetes onder de Wet administratiefrechtelijke handhaving verkeersvoorschriften (Wahv).
  • Het automatisch aanpassen van studiefinanciering op basis van inkomenswijzigingen.

Om menselijke tussenkomst goed te organiseren, zijn technische en organisatorische maatregelen nodig. Dit geldt ook wanneer een externe aanbieder de algoritmes levert. In dat geval moet de verantwoordelijke organisatie (gebruiksverantwoordelijke) samen met de aanbieder bepalen hoe menselijke tussenkomst zinvol kan worden ingericht.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/#inrichten-van-menselijke-controle","title":"Inrichten van menselijke controle","text":"

Er zijn verschillende manieren om menselijke tussenkomst in te richten, afhankelijk van de specifieke toepassing van een algoritme. Hieronder worden vier mogelijkheden beschreven die kunnen worden ingezet, los of in combinatie:

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/#1-human-in-the-loop","title":"1. Human in the loop","text":"

Bij dit model speelt de mens een actieve rol in elke fase van het algoritme. Deze variant geeft de meeste controle en invloed, maar kan leiden tot vertraagde of minder effici\u00ebnte besluitvorming, vooral bij real-time of zeer complexe taken waarbij snelheid cruciaal is. Een voorbeeld van toepassen van Human-in-the-loop is het nakijken en beoordelen van de output van een algoritme door een mens, telkens voordat een beslissing wordt genomen. Het verwerken van data gebeurt alleen in opdracht van de mens en verder neemt het algoritme of AI model geen autonome beslissingen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/#2-human-on-the-loop","title":"2. Human on the loop","text":"

Hier behoudt de mens toezicht en kan ingrijpen wanneer dat nodig is, om te garanderen dat een model veilig en ethisch opereert. Dit model biedt daardoor een balans tussen autonome besluitvorming en menselijke controle. Het is vooral nuttig in situaties waarin afwijkende keuzes of acties van het algoritme grote gevolgen kunnen hebben. De menselijke operator houdt de werking van het algoritme in de gaten en staat klaar om in te grijpen of beslissingen terug te draaien wanneer nodig.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/#3-human-above-the-loop","title":"3. Human above the loop","text":"

In dit model houdt de mens toezicht op een hoger niveau, met een focus op strategische en ethische keuzes, in plaats van dat de menselijke operator zich bezighoudt met directe operationele beslissingen. Dit stelt de mens in staat in te grijpen wanneer kritieke morele, juridische of sociale zorgen ontstaan om het model op de langere termijn bij te sturen. De menselijke tussenkomst is gericht op het bepalen van beleid en de richtlijnen voor algoritmes. Het gaat daarbij niet alleen over het defini\u00ebren van operationele procedures maar ook het maken van bepaalde ethische overwegingen, het zorgen voor naleving van regelgeving en het overwegen van de implicaties van de inzet van algoritmes op de lange termijn.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/#4-human-before-the-loop","title":"4. Human before the loop","text":"

Hier maakt de mens vooraf ethische en morele afwegingen die in het algoritme zelf worden ingebouwd. Hoewel het model in productie autonoom opereert, zal de menselijke input gedurende de ontwikkeling ervoor zorgen dat het model ook in complexe situaties volgens de juiste (ethische) afwegingen keuzes en acties onderneemt.

Dit model is essentieel in situaties waar menselijk ingrijpen tijdens de uitvoering niet mogelijk is (wanneer er bijvoorbeeld weinig of helemaal geen tijd is om als mens te interveni\u00ebren), maar waar ethische keuzes cruciaal blijven. Denk aan bestrijding van zeemijnen of situaties met zelfrijdende auto\u2019s in onvoorspelbare verkeerssituaties (bron: TNO visiestuk 2022). Deze variant kan ook worden ingezet voor situaties waarin wel nog menselijk ingrijpen mogelijk is.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/#risico","title":"Risico","text":"

Het niet inrichten van passende menselijke controle leidt tot onverantwoorde inzet van algoritmen en het niet voldoen aan wettelijke vereisten.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/#bronnen","title":"Bronnen","text":"
  • Toetsingskader Algoritmes Algemene Rekenkamer, 2.01
    • Menselijke tussenkomst | Algoritmes | Algemene Rekenkamer
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.5, SV.6
  • Advies over geautomatiseerde selectietechniek Pels Rijcken, p.9
  • Recht op een menselijke blik bij besluiten | Autoriteit Persoonsgegevens
  • Kamerstukken IT 2017-2018, 34 851, nr. (MvT UAVG), p. 120-121
  • Ethics guidelines for trustworthy AI | Shaping Europe\u2019s digital future, deel (64)
  • \"Towards Digital Life: Een toekomstvisie op AI anno 2032\" - TNO, 2022
  • Algoritmes afwegen | Rathenau Instituut
  • Managing supplier delivery reliability risk under limited information: Foundations for a human-in-the-loop DSS - ScienceDirect
  • Human control of AI systems: from supervision to teaming | AI and Ethics (springer.com)
  • Zijn er beperkingen op het gebruik van geautomatiseerde besluitvorming? - Europese Commissie
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/#voorbeeld","title":"Voorbeeld","text":"

HvJEU december 2023, ECLI:EU:C:2023:957 (SCHUFA Scoring)

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-04-publiceren-algoritmeregister/","title":"Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister","text":"

imp-04ImplementatieMonitoring en beheerProjectleiderBeleid en adviesTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-04-publiceren-algoritmeregister/#maatregel","title":"Maatregel","text":"

Publiceer het algoritme in het Nederlandse Algoritmeregister.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-04-publiceren-algoritmeregister/#toelichting","title":"Toelichting","text":"
  • De regering wil dat de overheid algoritmes verantwoord gebruikt. Mensen moeten erop kunnen vertrouwen dat algoritmes voldoen aan de waarden en normen van de samenleving.
  • Wanneer de overheid open is over algoritmes en hun toepassing, kunnen burgers, organisaties en media haar kritisch volgen.
  • Impactvolle algoritmes en hoog risico AI-systemen moeten daarom worden gepubliceerd in het Algoritmeregister.
  • In het Algoritmeregister moet uitleg zijn over hoe algoritmes, of het proces wat hiermee wordt ondersteund werkt.
  • Er is een Handreiking Algoritmeregister opgesteld met informatie over het publiceren van algoritmes in het Algoritmeregister.
  • De Algoritmeregister Publicatiestandaard kan overheidsorganisaties ondersteunen bij het helpen invullen van het Algoritmeregister.
  • Sommige overheidsorganisaties publiceren hun algoritmes ook in een eigen Algoritmeregister, zodat burgers dit makkelijker kunnen vinden. Bijvoorbeeld het Algoritmeregister van de Gemeente Rotterdam, het Algoritmeregister van de Gemeente Amsterdam of het Algoritmeregister van het UWV.
  • Zorg na publicatie dat de informatie in het Algoritmeregister up-to-date blijft en indien nodig regelmatig wordt aangepast.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-04-publiceren-algoritmeregister/#risico","title":"Risico","text":"

Betrokkenen zijn niet op de hoogte dat hun persoonsgegevens worden verwerkt met een algoritme, waardoor zij hier geen controle over hebben.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-04-publiceren-algoritmeregister/#bronnen","title":"Bronnen","text":"
  • Handreiking Algoritmeregister
  • Algoritmeregister Publicatiestandaard
  • Toetsingskader Algoritmes Algemene Rekenkamer, 3.12, 3.14, 3.16
  • Onderzoekskader Algoritmes Auditdienst Rijk, SV.14, PRI.8
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-04-publiceren-algoritmeregister/#voorbeeld","title":"Voorbeeld","text":"
  • Gemeente Groningen, Algoritmeregister: Eerste Hulp bij Geldzaken
  • Gemeente Amsterdam, Algoritemregister: Blurring as a Service
  • Juryrapport Best Beschreven Algoritme
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-proces-privacyrechten/","title":"Spreek af hoe de organisatie omgaat met privacy-verzoeken","text":"

imp-06OrganisatieverantwoordelijkhedenOntwikkelenProjectleiderBeleid en adviesJuristPrivacy en gegevensbeschermingGovernanceData

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-proces-privacyrechten/#maatregel","title":"Maatregel","text":"

Richt een proces in waarmee betrokkenen hun privacyrechten kunnen inroepen als algoritmes worden ontwikkeld of gebruikt.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-proces-privacyrechten/#toelichting","title":"Toelichting","text":"
  • Betrokkenen moeten hun persoonsgegevens kunnen inzien, rectificeren, laten verwijderen of het gebruik ervan beperken bij het toepassen van algorimtes.
  • Betrokkenen moeten hun verzoek kunnen indienen bij de betreffende organisatie. Denk hierbij aan het inrichten van een privacyloket.
  • Er zullen afspraken moeten worden gemaakt door servicemanagement in te richten hoe deze verzoeken effectief kunnen worden behandeld door bijvoorbeeld door het ontwikkel- of beheerteam (aanbieder).
  • Bij het inrichten van servicemanagement moet zijn nagedacht over hoe een verzoek tot het inzien, rectificeren, verwijderen of beperken van de verwerking van persoonsgegevens op een betekenisvolle manier kan of moet worden behandeld.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-proces-privacyrechten/#risico","title":"Risico","text":"

Betrokkenen hebben geen controle over hun persoonsgegevens doordat ze geen beroep kunnen doen op hun privacyrechten.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-proces-privacyrechten/#bronnen","title":"Bronnen","text":"

Onderzoekskader Algoritmes Auditdienst Rijk, PRI.9

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-proces-privacyrechten/#voorbeeld","title":"Voorbeeld","text":"

Privacyverzoek Gemeente Amsterdam

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-werkinstructies-medewerkers/","title":"Spreek af hoe medewerkers omgaan met het algoritme.","text":"

imp-05ImplementatieProjectleiderBeleid en adviesGovernanceMenselijke controle

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-werkinstructies-medewerkers/#maatregel","title":"Maatregel","text":"

Stel duidelijke werkinstructies op voor de medewerkers die het algoritme gaan gebruiken.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-werkinstructies-medewerkers/#toelichting","title":"Toelichting","text":"
  • Maak keuzes rondom de rol van het systeem in de werkwijze van medewerkers.
  • Gebruik duidelijke werkinstructies en protocollen om te voorkomen dat beslissingen, gebaseerd op de output van het systeem, door (automation) bias worden be\u00efnvloed.
  • Stel een structuur op voor het melden van mogelijke problemen die medewerkers ervaren met het systeem.
  • Opleiding van medewerkers over:

    • Algoritmes, waaronder AI;
    • het systeem waarmee ze gaan werken;
    • de rol van het systeem in hun werkwijze;
    • de risico's die aan het gebruik van een systeem verbonden zijn (bijv. (automation) bias, false positives/negatives);
    • de maatregelen die genomen zijn om deze risico\u2019s te beperken (bijv. willekeurige of fictieve casussen, transparantie over de output).
  • Bespreek regelmatig de uitdagingen die medewerkers ondervinden bij het werken met het systeem (bijv. tijdsdruk).

  • Documenteer alle keuzes en de onderliggende redenen/afwegingen rondom menselijke tussenkomst en overzicht. Evalueer en pas gemaakte keuzes waar nodig aan.

  • Goede samenwerking tussen medewerkers en systemen helpt bij het voorkomen van (automation) bias en discriminatie, het signaleren van algoritmische problemen, en het vermijden van de facto automatische besluitvorming.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-werkinstructies-medewerkers/#bronnen","title":"Bronnen","text":"
  • Toetsingskader Algoritmes Algemene Rekenkamer, 3.07
  • Handreiking non-discriminatie by design
  • Impact Assessment Mensenrechten en Algoritmes
  • Ethics Guidelines of Trustworthy AI
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-werkinstructies-medewerkers/#risico","title":"Risico","text":"

Bias, discriminatie, de facto automatische besluitvorming.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-werkinstructies-medewerkers/#voorbeeld","title":"Voorbeeld","text":"

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-06-vermelding-in-privacyverklaring/","title":"Vermeld het gebruik van persoonsgegevens in een privacyverklaring","text":"

imp-07ImplementatieProjectleiderJuristPrivacy en gegevensbeschermingTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-06-vermelding-in-privacyverklaring/#maatregel","title":"Maatregel","text":"

Neem het gebruik van een algoritme op in de privacyverklaring als hierbij persoonsgegevens worden verwerkt.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-06-vermelding-in-privacyverklaring/#toelichting","title":"Toelichting","text":"
  • Door in een privacyverklaring te vermelden welke persoonsgegevens worden verwerkt voor het gebruik van een algoritme, wordt een betrokkene ge\u00efnformeerd over de verwerking van diens persoonsgegevens.
  • Een privacyverklaring kan op organistieniveau worden opgesteld en ook voor specifieke verwerkingen.
  • In een privacyverklaring wordt in ieder geval het volgende opgenomen:

  • de identiteit en contactgegevens van uw organisatie. En ook die van vertegenwoordiger in de Europese Unie (EU), als deze er zijn.

  • de contactgegevens van de functionaris gegevensbescherming (FG), als een organistie deze heeft.
  • de doeleinden van de verwerking en de AVG-grondslag.
  • de (categorie\u00ebn van) ontvangers van de persoonsgegevens.
  • of de persoonsgegevens door worden geven buiten de EER of aan een internationale organisatie. En zo ja, op welke juridische grond.
  • de bewaartermijn van de gegevens.
  • de privacyrechten van de betrokkenen, zoals het recht op inzage, rectificatie en gegevens verwijderen.
  • het recht van de betrokkenen om de toestemming die zij voor een bepaalde verwerking hebben gegeven, altijd weer te mogen intrekken.
  • dat de betrokkenen een klacht kunnen indienen bij de privacytoezichthouder. In Nederland is dat de Autoriteit Persoonsgegevens (AP).
  • of de betrokkenen verplicht zijn de persoonsgegevens te verstrekken. En zo ja, waarom. Vermeld dan ook wat de gevolgen zijn als zij de gegevens niet verstrekken.
  • of er sprake is van geautomatiseerde besluitvorming, inclusief profilering. En zo ja, hoe deze beslissing wordt genomen.
  • als persoonsgegevens van een andere organisatie zijn ontvangen: de bron waar de persoonsgegevens vandaan komen. En of de gegevens afkomstig zijn van openbare bronnen.

  • Het is denkbaar dat in een specifieke privacyverklaring informatie over onderliggende logica van het algoritme, alsmede het belang en de verwachte gevolgen van die verwerking voor de betrokkene. Het is ook denkbaar dat deze informatie in het algoritmeregister wordt opgenomen.

  • Als ervoor wordt gekozen om het algoritme uit te faseren, dan moet informatie in het algoriteregister hierop worden aangepast.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-06-vermelding-in-privacyverklaring/#risico","title":"Risico","text":"

Betrokkenen zijn niet op de hoogte dat hun persoonsgegevens worden verwerkt met een algoritme, waardoor zij hier geen controle over hebben en zich niet kunnen beroepen op hun privacyrechten.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-06-vermelding-in-privacyverklaring/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, PRI.8
  • Autoriteit Persoonsgegevens Algoritmekader
  • Toetsingskader Algoritmes Algemene Rekenkamer, 3.12
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-06-vermelding-in-privacyverklaring/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-07-klacht-bezwaar-beroep/","title":"Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme en monitor dit proces.","text":"

imp-09ImplementatieMonitoring en beheerProjectleiderOntwikkelaarGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-07-klacht-bezwaar-beroep/#maatregel","title":"Maatregel","text":"

Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme. Zorg voor goede monitoring van dit proces zodat het projectteam op de hoogte is van klachten, bezwaren en beroepen over het systeem.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-07-klacht-bezwaar-beroep/#toelichting","title":"Toelichting","text":"
  • Een goede datahuishouding van de binnengekomen bezwaren, klachten en beroepen is essentieel om de informatie rondom de klachten, bezwaren en beroepen vanuit datagedreven perspectief te kunnen monitoren.
  • Goede monitoring kan ervoor zorgen dat eventuele patronen in bezwaar, klacht en beroep snel gesignaleerd worden. Eventuele patronen in klacht, bezwaar en beroep kunnen duiden op problemen in het functioneren van het algoritme. Dit kan bijvoorbeeld duiden op discriminerende effecten van het algoritme, waardoor nader onderzoek wenselijk is.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-07-klacht-bezwaar-beroep/#risico","title":"Risico","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-07-klacht-bezwaar-beroep/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Auditdienst Rijk, SV.17, PRI.9
  • Toetsingskader Algoritmes Algemene Rekenkamer, 1.08
  • Onderzoek misbruik uitwonendenbeurs, PricewaterhouseCoopers
  • Intern onderzoek controle uitwonendenbeurs, DUO
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-07-klacht-bezwaar-beroep/#voorbeeld","title":"Voorbeeld","text":""},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-08-vermelding-in-verwerkingsregister/","title":"Vermeld het gebruik van persoonsgegevens in het verwerkingsregister","text":"

imp-08ImplementatieProjectleiderJuristTransparantiePrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-08-vermelding-in-verwerkingsregister/#maatregel","title":"Maatregel","text":"

Neem de ontwikkeling en gebruik van een algoritme op in het verwerkingsregister als persoonsgegevens worden verwerkt.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-08-vermelding-in-verwerkingsregister/#toelichting","title":"Toelichting","text":"
  • Door in het verwerkingsregister te vermelden welke persoonsgegevens worden verwerkt voor het gebruik van een algoritme, wordt een betrokkene ge\u00efnformeerd over de verwerking van diens persoonsgegevens
  • Hiermee is ook voor de organisatie intern inzichtelijk welke persoonsgegevens voor welke toepassingen worden verwerkt;
  • Het is van belang dat vanaf het moment dat persoonsgegevens worden verwerkt, meteen een vermelding hiervan wordt gemaakt in het verwerkingsregister;
  • Dat betekent dat als persoonsgegevens worden verwerkt bij het ontwikkelen en trainen van het algoritme, en deze nog niet in gebruik zijn genomen, al een vermelding moet worden gedaan in het verwerkingsregister;
  • Bij be\u00ebindiging van het gebruik van het algoritme, moet het verwerkingsregister worden aangepast.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-08-vermelding-in-verwerkingsregister/#risico","title":"Risico","text":"

Betrokkenen en de interne organisatie zijn niet op de hoogte welke persoonsgegevens worden verwerkt met een algoritme, waardoor zij hier geen controle over hebben.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-08-vermelding-in-verwerkingsregister/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Algoritmes Auditdienst Rijk, PRI.8
  • Autoriteit Persoonsgegevens
  • Toetsingskader Algoritmes Algemene Rekenkamer, 3.04
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-08-vermelding-in-verwerkingsregister/#voorbeeld","title":"Voorbeeld","text":"
  • Blurring as a Service, Verwerkingsregister gemeente Amsterdam
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-09-politiek-bestuurlijk-besluit/","title":"Maak een openbaar besluit over de inzet van het algoritme","text":"

imp-01OrganisatieverantwoordelijkhedenImplementatieProjectleiderGovernanceTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-09-politiek-bestuurlijk-besluit/#maatregel","title":"Maatregel","text":"

Een politieke-bestuurlijk besluit wordt genomen over de inzet van een impactvol algoritme.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-09-politiek-bestuurlijk-besluit/#toelichting","title":"Toelichting","text":"
  • Door een politiek-bestuurlijk besluit te nemen over de inzet of be\u00ebindiging van een impactvol algoritme, wordt een afweging en keuze gemaakt over de wenselijkheid, haalbaarheid, transparantie, invulling van menselijke controle en eventueel de mate van onbewuste vooringenomenheid van het betreffende algoritme.
  • Impactvolle algoritmes bevatten aspecten die vragen om politieke afwegingen, en niet enkel door de ambtelijke organistie mogen worden beoordeeld.
  • Een voorbeeld van een politiek afweging is wanneer er wel of geen sprake is van een gerechtvaardigd onderscheid wat wordt gemaakt door een algoritme.
  • Het is van belang dat overheidsorganisaties een politiek-bestuurlijk kader opstellen waarin wordt beschreven hoe wordt omgegaan met dergelijke gevallen.
  • Een openbaar besluit draagt bij aan de legitimiteit van de inzet van het algoritme en de controleerbaarheid van de overheidsorganisatie.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-09-politiek-bestuurlijk-besluit/#risico","title":"Risico","text":"

De ambtelijke organisatie maakt politieke-bestuurlijke afwegingen en beslissingen bij de inzet of be\u00ebindiging van het gebruik van impactvolle algoritmes, terwijl deze daar niet toe bevoegd is.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-09-politiek-bestuurlijk-besluit/#bronnen","title":"Bronnen","text":"

Algemene Rekenkamer

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/6-imp-09-politiek-bestuurlijk-besluit/#voorbeeld","title":"Voorbeeld","text":"

Besluit College van Burgemeester en Wethouders Gemeente Amsterdam

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-01-backups-maken/","title":"Maak back-ups van algoritmes","text":"

mon-01OntwikkelenMonitoring en beheerOntwikkelaarBeleid en adviesTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-01-backups-maken/#maatregel","title":"Maatregel","text":"

Back-up kopie\u00ebn van informatie, software en systeemafbeeldingen dienen regelmatig te worden gemaakt en getest. Idealiter gebeurt dit in overeenstemming met een afgesproken back-up beleid. Maak back-ups van de omgeving van het algoritme en zorg ervoor dat het algoritme en de data hersteld kunnen worden.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-01-backups-maken/#toelichting","title":"Toelichting","text":"

Er is een back-up beleid waarin de eisen voor het bewaren en beschermen zijn gedefinieerd en vastgesteld. Dit beleid moet vervolgens worden vertaald naar (technische) maatregelen om het kunnen maken van back-ups te realiseren.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-01-backups-maken/#risico","title":"Risico","text":"

Als er geen regelmatige back-ups worden gemaakt en de restore-procedure niet regelmatig wordt getest, bestaat het risico dat er geen hersteloptie is en mogelijkheid van gegevensverlies.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-01-backups-maken/#bronnen","title":"Bronnen","text":"
  • Baseline Informatiebeveiliging Overheid, 12.3.1.1, 12.3.1.4, 12.3.1.5.
  • Onderzoekskader Algoritmes Auditdienst Rijk, IB.26
  • Toetsingskader Algoritmes Algemene Rekenkamer, 4.08
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-01-backups-maken/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-02-beveiliging-algoritme/","title":"Beveilig de software","text":"

mon-02Dataverkenning en datapreparatieOntwikkelenMonitoring en beheerProjectleiderBeleid en adviesOntwikkelaarTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-02-beveiliging-algoritme/#maatregel","title":"Maatregel","text":"

Zorg voor een goede beveiliging van de verschillende softwarecomponenten van een algoritme. Bepaal of de data voldoende is beveiligd en maak hierin onderscheid tussen de inputdata en de outputdata.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-02-beveiliging-algoritme/#toelichting","title":"Toelichting","text":"

Er zijn beheersmaatregelen die kunnen helpen bij het zorgen voor een goede beveiliging van verschillende (software-)componenten van een algoritme. Hierbij kan worden gedacht aan: Het toepassen van wachtwoordbeheer. Baseline Informatiebeveiliging Overheid, de NCSC Handreiking voor implementatie van detectieoplossingen en het Impact Assessment Mensenrechten en Algoritmes.

  • Inzicht cre\u00ebren in de beoogde opzet van de IT-infrastructuur (de architectuur) en de werkelijk geconfigureerde hard- en software. (CIS Control 1, BIO 8.1.1).
  • Inrichten van een formeel proces voor het beheer van technische kwetsbaarheden. Dit omvat minimaal periodieke (geautomatiseerde) controle op de aanwezigheid van kwetsbaarheden in de te toetsen systemen, een risicoafweging en navolgbare afwerking daarvan of risicoacceptatie (BIO 12.6).
  • Beoordelen, patchen en updaten van kwetsbaarheden in IT-systemen als deze bekend zijn. (BIO 12.6.1)
  • Verwijderen of deactiveren van softwarecomponenten en services die niet noodzakelijk zijn voor het functioneren van het algoritme om beveiligingsrisico\u2019s te beperken. (BIO 12.6.1)
  • Er vindt zonering plaats binnen de technische infrastructuur conform de uitgangspunten die zijn vastgelegd in een operationeel beleidsdocument, waarbij minimaal sprake is van scheiding tussen vertrouwde en onvertrouwde netwerken (BIO 9.4.2). Denk ook aan het scheiden in netwerken (BIO 13.1.3).
  • Actieve monitoring van de algoritme data vindt plaats zodat beveiligingsincidenten en -gebeurtenissen in een vroeg stadium worden gedetecteerd. (BIO 12.4.1, NCSC Handreiking voor implementatie van detectieoplossingen).
  • Netwerkverkeer en componenten worden actief gemonitord. (BIO 12.4.1).
  • Beoordeel of de data ten behoeve van het ontwikkelen en gebruiken van het algoritme voldoende is beveiligd. Maak hierin onderscheid tussen de trainingsdata, inputdata en de outputdata.
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-02-beveiliging-algoritme/#risico","title":"Risico","text":"

Oneigenlijke toegang van buitenaf kan plaatsvinden via zwakheden in het systeem.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-02-beveiliging-algoritme/#bronnen","title":"Bronnen","text":"
  • Baseline Informatiebeveiliging Overheid
  • Onderzoekskader Algoritmes Auditdienst Rijk, IB.18 t/m IB.25
  • NCSC Handreiking voor implementatie van detectieoplossingen
  • Handleiding Quickscan Information Security
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-02-beveiliging-algoritme/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-03-informatiebeveiligingsincidenten/","title":"Maak een noodplan voor beveiligingsincidenten","text":"

mon-03OrganisatieverantwoordelijkhedenMonitoring en beheerProjectleiderBeleid en adviesJuristTechnische robuustheid en veiligheidGovernance

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-03-informatiebeveiligingsincidenten/#maatregel","title":"Maatregel","text":"

Richt een proces in waarmee beveiligingsincidenten m.b.t. algoritmes en data zo spoedig mogelijk worden opgelost.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-03-informatiebeveiligingsincidenten/#toelichting","title":"Toelichting","text":"

Er zijn procedures aanwezig die borgen dat beveiligingsincidenten m.b.t. algoritmes en data zo spoedig mogelijk, afhankelijk van de kwalificatie van het incident, worden opgepakt.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-03-informatiebeveiligingsincidenten/#risico","title":"Risico","text":"

Te late reactie op incidenten kan ervoor zorgen dat de BIV (beschikbaarheid, integriteit en vertrouwelijkheid) van het algoritme of data kan worden aangetast.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-03-informatiebeveiligingsincidenten/#bronnen","title":"Bronnen","text":"
  • Baseline Informatiebeveiliging Overheid, BIO 12.3.1.1, 12.3.1.4, 12.3.1.5
  • Onderzoekskader Algoritmes Auditdienst Rijk, IB.30
  • Toetsingskader Algoritmes Algemene Rekenkamer, 4.06
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-03-informatiebeveiligingsincidenten/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-04-evalueer-bij-veranderingen-in-data/","title":"Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme.","text":"

mon-04Monitoring en beheerOntwikkelaarDataTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-04-evalueer-bij-veranderingen-in-data/#maatregel","title":"Maatregel","text":"

Monitor regelmatig op veranderingen in de inputdata. Bij geconstateerde veranderingen evalueer je de prestaties en de output van het algoritme.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-04-evalueer-bij-veranderingen-in-data/#toelichting","title":"Toelichting","text":"

De inputdata kan voortdurend veranderen. Dat kan komen doordat de context waarin het algoritme wordt gebruikt verandert, of door een technische fout wanneer de data bijvoorbeeld niet goed is ingelezen of aangeleverd. Het te laat opmerken van zo'n verandering kan grote gevolgen hebben. Daarom is het belangrijk om regelmatig te controleren en evalueren of:

  • de data van voldoende kwaliteit is voor de beoogde toepassing
  • of het algoritme nog presteert in lijn met de vastgestelde doelen
  • de gegevens op de juiste en volledige manier worden verwerkt.

Zeker wanneer er gebruikt wordt gemaakt van informatie van derden, is het belangrijk om regelmatig te controleren of er veranderingen in de data zijn. Goede monitoring op datakwaliteit zorgt ervoor dat je voldoende controle hebt over de kwaliteit van de data, zelfs als je hiervoor afhankelijk bent van andere partijen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-04-evalueer-bij-veranderingen-in-data/#risico","title":"Risico","text":"

Door veranderingen in de data presteert het model niet meer zoals verwacht.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-04-evalueer-bij-veranderingen-in-data/#bronnen","title":"Bronnen","text":"
  • Onderzoekskader Auditdienst Rijk, DM.8
  • Toetsingskader Algoritmes Algemene Rekenkamer, 1.02, 1.08, 2.06, 2.08, 2.13
"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-04-evalueer-bij-veranderingen-in-data/#voorbeeld","title":"Voorbeeld","text":"

Heb jij een goed voorbeeld? Laat het ons weten!

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-05-meten-milieu-impact/","title":"Meten, monitoren en rapporteren van milieu-impact van algoritmes","text":"

mon-05OntwerpMonitoring en beheerOntwikkelaarBeleid en adviesProjectleiderDuurzaamheid

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-05-meten-milieu-impact/#maatregel","title":"Maatregel","text":"

Inventariseer en monitor de milieu-impact van algoritmes (bijvoorbeeld door het doen van een impact-assessment), zowel tijdens ontwerp als bij het gebruik, en rapporteer deze om duurzame keuzes mogelijk te maken.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-05-meten-milieu-impact/#toelichting","title":"Toelichting","text":"

Tref bijvoorbeeld de volgende maatregelen, wanneer je de milieu-impact van algoritmes gaat inventariseren of monitoren:

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-05-meten-milieu-impact/#digital-product-passports","title":"Digital Product Passports","text":"

De milieu-impact van algoritmes kan worden gemeten en geoptimaliseerd door een Digital Product Passport (DPP) te overwegen. DPP's bieden een platform voor duurzame rapportage door middel van real-time informatie over onder andere CO\u2082-uitstoot, herkomst en energiegebruik, wat kan helpen om de ecologische voetafdruk van een algoritme transparant te maken. Door deze gegevens structureel te verzamelen en te delen, kunnen gebruikers en bedrijven inzicht krijgen in de duurzaamheidsprestaties. De milieu-impact van verschillende algoritmes/modellen kan een rol spelen bij het kiezen van een model in de ontwerpfase. Ook kan het ervoor zorgen dat je later kiest om een ander model te gebruiken, of het gebruik van een model of systeem zelfs te be\u00ebindigen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-05-meten-milieu-impact/#milieu-impact-assessments","title":"Milieu-impact assessments","text":"

Wanneer de milieu-impact (in bepaalde mate) inzichtelijk is, kan er een milieu-impact assessment worden gedaan. Ga na of je organisatie die een heeft of overweeg deze te ontwikkelen.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-05-meten-milieu-impact/#periodieke-monitoring","title":"Periodieke monitoring","text":"

Probeer ook periodieke monitoringsrapporten op te stellen waarin de milieu-impact van algoritmes wordt bijgehouden. Hiermee vergroot je de duurzaamheid door tijdig verbeteringen te signaleren en door te voeren. Hierbij kan ook een onderscheid worden gemaakt in de impact tijdens de trainingsfase van het algoritme en de gebruiksfase.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-05-meten-milieu-impact/#risico","title":"Risico","text":"

Wanneer in de ontwerpfase niet wordt nagedacht over milieu-impact kan onbewust voor een algoritme of model worden gekozen dat meer energie verbruikt (en wellicht hogere kosten met zich mee brengt) dan een model dat misschien even goed presteert voor het gekozen doel. Zonder structurele monitoring van de milieu-impact kan de organisatie onbewust bijdragen aan een hoge CO\u2082-uitstoot en hoge energieverbruikskosten.

"},{"location":"voldoen-aan-wetten-en-regels/maatregelen/7-mon-05-meten-milieu-impact/#bronnen","title":"Bronnen","text":"
  • Coalitie Duurzame Digitalisering - Digital Product Passport
  • Onderzoekskader Algoritmes Auditdienst Rijk - DM.24
  • Ethische richtsnoeren voor betrouwbare KI, Hoofdstuk II 1.6: Maatschappelijk en milieuwelzijn
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/","title":"Vereisten","text":"

Overzicht van de belangrijkste vereisten voor overheden die algoritmes of AI-systemen ontwikkelen of gebruiken.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/#wetten-en-regels","title":"Wetten en regels","text":"

De vereisten zijn gebaseerd op de wetten en regels voor het uitvoeren van wettelijke taken, zoals de:

  • AI-verordening
  • Algemene verordening gegevensbescherming (AVG)
  • Algemene wet bestuursrecht (Awb)
  • Algemene wet gelijke behandeling (Awgb)
  • Auteurswet
  • Baseline Informatiebeveiliging Overheid (BIO)
  • Grondwet

Bij elke vereiste staat de bron er duidelijk bij.

Let op!

Het Algoritmekader biedt een overzicht van de belangrijkste vereisten. Dit is niet volledig. Sectorspecifieke wetgeving is bijvoorbeeld niet meegenomen. Hierdoor kan het zijn dat er meer regelgeving van geldt voor jouw toepassing.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/#aantal-vereisten-verschilt-per-situatie","title":"Aantal vereisten verschilt per situatie","text":"

Welke vereisten gelden voor jouw organisatie, hangt af van:

  • de technologie die je gebruikt: rekenregels, machinelearning of generatieve AI
  • de risicoclassificatie van het algoritme dat je gebruikt
  • je rol: ben je ontwikkelaar of alleen gebruiker van het algoritme?
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/#voorbeeld","title":"Voorbeeld","text":"

Impactvolle algoritmes en AI-systemen worden gepubliceerd in het Nederlandse algoritmeregister.

Deze vereiste geldt alleen voor impactvolle algoritmes en hoog-risico-AI-systemen. Een niet-impactvolle rekenregel hoef je niet te registreren.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/#help-ons-deze-pagina-te-verbeteren","title":"Help ons deze pagina te verbeteren","text":"

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-01-ai-geletterdheid/","title":"Personeel en gebruikers zijn voldoende AI-geletterd","text":"

aia-01OrganisatieverantwoordelijkhedenProjectleiderMenselijke controleGovernance

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-01-ai-geletterdheid/#vereiste","title":"Vereiste","text":"

Aanbieders en gebruiksverantwoordelijken van AI-systemen nemen maatregelen om, zoveel als mogelijk, te zorgen voor een toereikend niveau van AI-geletterdheid bij hun personeel en andere personen die namens hen AI-systemen exploiteren en gebruiken, en houden daarbij rekening met hun technische kennis, ervaring, onderwijs en opleiding en de context waarin de AI-systemen zullen worden gebruikt, evenals met de personen of groepen personen ten aanzien van wie de AI-systemen zullen worden gebruikt.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-01-ai-geletterdheid/#toelichting","title":"Toelichting","text":"

Aanbieders en gebruiksverantwoordelijken van AI-systemen nemen maatregelen om ervoor te zorgen dat hun personeel en andere betrokkenen voldoende kennis hebben van AI. Dit omvat het bevorderen van kennis over de techniek, evenals kennis over de context waarin de AI-systemen worden gebruikt en de gebruikers van deze systemen. Daarnaast moet er worden ingezet op het delen van ervaringen, passend onderwijs en opleiding van inidividuen. Het doel is om een adequaat niveau van begrip en vaardigheden te waarborgen, wat bijdraagt aan een verantwoord gebruik van AI en het minimaliseren van risico's.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-01-ai-geletterdheid/#bronnen","title":"Bronnen","text":"

Artikel 4 Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-01-ai-geletterdheid/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAI-model voor algemene doeleindenhoog risico AI-systeemverboden AIgeen hoog risico AI-systeemAanbiederGebruiksverantwoordelijke

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-01-ai-geletterdheid/#risico","title":"Risico","text":"

Onvoldoende AI-geletterdheid kan leiden tot misbruik of onjuist gebruik van AI-systemen en tot situaties waarin AI-systemen verkeerd worden ingezet, onbedoeld gebruikt worden voor taken waar ze niet geschikt voor zijn, of dat de veiligheid en effectiviteit van de systemen in het gedrang komt. Dit kan leiden tot ineffici\u00ebntie, fouten, en mogelijk schade aan organisaties, gebruikers of betrokkenen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-01-verboden-AI-praktijken/","title":"Verboden AI-systemen mogen niet worden gebruikt.","text":"

aia-01OrganisatieverantwoordelijkhedenProbleemanalyseProjectleiderGovernance

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-01-verboden-AI-praktijken/#vereiste","title":"Vereiste","text":"

Verboden AI-systemen mogen niet worden gebruikt.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-01-verboden-AI-praktijken/#toelichting","title":"Toelichting","text":"

Afgezien van de vele nuttige toepassingen van AI kan zij ook worden misbruikt en nieuwe en krachtige instrumenten voor manipulatie, uitbuiting en sociale controle opleveren. Dergelijke praktijken zijn bijzonder schadelijk en abusief en moeten worden verboden omdat zij in strijd zijn met de waarden van de Unie, namelijk eerbied voor de menselijke waardigheid, vrijheid, gelijkheid, democratie en de rechtsstaat, en met de grondrechten van de Unie die zijn vastgelegd in het Handvest, waaronder het recht op non-discriminatie, gegevensbescherming en privacy, en de rechten van het kind.

In de volgende gevallen gaat het om een verboden toepassing op grond van de AI-Verordening: - gebruik kan gaan maken van subliminale technieken om mensen onbewust of bewust kunnen manipuleren, waardoor ze beslissingen nemen die ze anders niet zouden hebben genomen? - gebruik kan gaan maken van kwetsbaarheden van individuen of specifieke groepen, zoals leeftijd, handicaps of sociale/economische omstandigheden, om het gedrag van die personen aanzienlijk te verstoren, wat kan leiden tot aanzienlijke schade bij henzelf of anderen? - gebruikt kan worden om natuurlijke personen of groepen gedurende een periode te evalueren of te classificeren op basis van hun sociale gedrag of afgeleide persoonlijke kenmerken? - gebruikt kan worden voor risicobeoordelingen van natuurlijke personen om het risico op crimineel gedrag te voorspellen, gebaseerd op profilering of persoonlijkheidskenmerken? (Dit geldt niet voor AI-systemen die worden gebruikt om menselijke beoordelingen te ondersteunen, gebaseerd op objectieve en verifieerbare feiten die rechtstreeks verband houden met criminele activiteiten) - gebruikt kan worden om databanken voor gezichtsherkenning aan te leggen of aan te vullen door willekeurige gezichtsafbeeldingen van internet of CCTV-beelden te scrapen? - gebruikt kan worden om emoties van een persoon op de werkplek of in het onderwijs af te leiden? (Dit is niet van toepassing als het gebruik van het AI-systeem is bedoeld voor medische- of veiligheidsdoeleinden) - gebruikt kan worden om natuurlijke personen individueel in categorie\u00ebn in te delen op basis van biometrische gegevens om ras, politieke opvattingen, lidmaatschap van een vakbond, religieuze of levensbeschouwelijke overtuigingen, seksleven of seksuele geaardheid af te leiden? (Dit verbod geldt niet voor het labelen of filteren van rechtmatig verkregen biometrische datasets, zoals afbeeldingen, op basis van biometrische gegevens, of voor categorisering van biometrische gegevens op het gebied van rechtshandhaving) - gebruikt kan worden als een biometrisch systeem in de publieke ruimte voor identificatie op afstand in real-time, met het oog op de rechtshandhaving?

Er zijn een tweetal uitzonderingen voor het inzetten van verbonden AI-systemen. Deze zijn: - Er is sprake van een rechtshandhavingsactiviteit i.v.m. een specifiek misdrijf (terrorisme, mensenhandel, seksuele uitbuiting van kinderen en materiaal over seksueel misbruik van kinderen, illegale handel in verdovende middelen en psychotrope stoffen, illegale handel in wapens, munitie en explosieven, moord, zware mishandeling, illegale handel in menselijke organen en weefsels, illegale handel in nucleaire en radioactieve stoffen, ontvoering, wederrechtelijke vrijheidsberoving en gijzeling, misdrijven die onder de rechtsmacht van het Internationaal Strafhof vallen, kaping van vliegtuigen/schepen, verkrachting, milieucriminaliteit, georganiseerde of gewapende diefstal, sabotage, deelneming aan een criminele organisatie die betrokken is bij een of meer van de bovengenoemde misdrijven). - Er is sprake van gerichte opsporing van specifieke slachtoffers, ontvoering, mensenhandel en seksuele uitbuiting van mensen, vermiste personen; of het voorkomen van bedreigingen voor het leven of de fysieke veiligheid van personen of het reageren op de huidige of voorzienbare dreiging van een terreuraanslag.

Bepaal in een vroege fase en bij het onderbouwen van het gebruik van een AI-systeem of de beoogde toepassing is toegestaan.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-01-verboden-AI-praktijken/#bronnen","title":"Bronnen","text":"

Artikel 5 Verordening Artifici\u00eble Intelligentie.

Overweging 29 - 44 AI-Verordening.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-01-verboden-AI-praktijken/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemverboden AIAanbiederGebruiksverantwoordelijke

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-01-verboden-AI-praktijken/#risico","title":"Risico","text":"

Er ontstaat een onrechtmatige situatie voor een organisatie als deze AI inzet, die verboden is.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-02-documentatie-beoordeling-niet-hoog-risico-ai/","title":"Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd","text":"

aia-02OntwerpProjectleiderGovernanceTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-02-documentatie-beoordeling-niet-hoog-risico-ai/#vereiste","title":"Vereiste","text":"

Een aanbieder die van mening is dat een in bijlage III bedoeld AI-systeem geen hoog risico inhoudt, documenteert zijn beoordeling voordat dat systeem in de handel wordt gebracht of in gebruik wordt gesteld. Die aanbieder is onderworpen aan de registratieverplichting van artikel 49, lid 2 AI-verordening. Op verzoek van de nationale bevoegde autoriteiten verstrekt de aanbieder de documentatie van de beoordeling.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-02-documentatie-beoordeling-niet-hoog-risico-ai/#toelichting","title":"Toelichting","text":"

Een aanbieder die oordeelt dat een AI-systeem niet valt onder hoog-risico zoals gefedinieerd in bijlage III van de AI-verordening, documenteert deze beoordeling voorafgaand aan het in de handel brengen of in gebruik nemen van het systeem. Op verzoek van de nationale autoriteiten verstrekt de aanbieder de documentatie van de beoordeling. De aanbieder of in voorkomend geval de gemachtigd registreert zichzelf en het betreffende AI-systeem in de EU-databank (artikel 71 AI-verordening). AI-systemen met een hoog risico als bedoeld in punt 2 van bijlage III (kritieke infrastructuur) worden op nationaal niveau geregistreerd.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-02-documentatie-beoordeling-niet-hoog-risico-ai/#bronnen","title":"Bronnen","text":"
  • Artikel 6(4) Verordening Artifici\u00eble Intelligentie
  • Artikel 49(2) Verordening Artifici\u00eble Intelligentie
  • Artikel 71 Verordening Artifici\u00eble Intelligentie
  • Bijlage III Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-02-documentatie-beoordeling-niet-hoog-risico-ai/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-02-documentatie-beoordeling-niet-hoog-risico-ai/#risico","title":"Risico","text":"

Gebrek aan transparantie en verantwoording bij risicobeoordeling kan leiden tot onrechtmatig in de markt brengen en onrechtmatig gebruik van risicovolle AI-systemen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-03-risicobeheersysteem/","title":"Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem","text":"

aia-03OrganisatieverantwoordelijkhedenProjectleiderGovernance

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-03-risicobeheersysteem/#vereiste","title":"Vereiste","text":"

Voor AI-systemen met een hoog risico wordt een systeem voor risicobeheer vastgesteld, uitgevoerd, gedocumenteerd en in stand gehouden.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-03-risicobeheersysteem/#toelichting","title":"Toelichting","text":"

Het systeem voor risicobeheer moet bestaan uit een tijdens de gehele levensduur van een AI-systeem met een hoog risico doorlopend en gepland iteratief proces. Dit proces moet gericht zijn op het vaststellen en beperken van de relevante risico\u2019s van AI-systemen voor de gezondheid, veiligheid en grondrechten. Het systeem voor risicobeheer moet periodiek worden ge\u00ebvalueerd en geactualiseerd om de blijvende doeltreffendheid ervan te waarborgen, alsook de motivering en de documentatie van eventuele significante besluiten en maatregelen die op grond van de AI-verordening zijn genomen.

Dit proces moet ervoor zorgen dat de aanbieder de risico\u2019s of negatieve effecten vaststelt en risicobeperkende maatregelen uitvoert voor de bekende en de redelijkerwijs te voorziene risico\u2019s van AI-systemen voor de gezondheid, veiligheid en grondrechten. Hierin moeten ook maatregelen zitten voor redelijkerwijs te voorzien misbruik, met inbegrip van de mogelijke risico\u2019s die voortvloeien uit de wisselwerking tussen het AI-systeem en de omgeving waarin het werkt. Het systeem voor risicobeheer moet de passendste risicobeheersmaatregelen vaststellen. Bij het vaststellen van de passendste risicobeheersmaatregelen moet de aanbieder de gemaakte keuzes documenteren en toelichten en, in voorkomend geval, deskundigen en externe belanghebbenden betrekken. Bij het vaststellen van het redelijkerwijs te voorzien misbruik van AI-systemen met een hoog risico moet de aanbieder aandacht hebben voor het gebruik van AI-systemen waarvan, hoewel zij niet rechtstreeks onder het beoogde doel vallen en niet in de gebruiksinstructies worden vermeld, mag worden verwacht dat zij kunnen voortvloeien uit gemakkelijk voorspelbaar menselijk gedrag.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-03-risicobeheersysteem/#bronnen","title":"Bronnen","text":"

Artikel 9(1) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-03-risicobeheersysteem/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-03-risicobeheersysteem/#risico","title":"Risico","text":"

Het ontbreken van risicobeheer kan leiden tot schade aan gebruikers of derden en wettelijke aansprakelijkheid voor de aanbieder.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-04-risicobeoordeling-voor-jongeren-en-kwetsbaren/","title":"Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen","text":"

aia-04OntwerpMonitoring en beheerProjectleiderBeleid en adviesFundamentele rechtenBias en non discriminatie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-04-risicobeoordeling-voor-jongeren-en-kwetsbaren/#vereiste","title":"Vereiste","text":"

Bij het doorlopen, periodieke systematische toetsing en actualisatie van het risicosysteem nemen aanbieders in overweging of het beoogde doel van het AI-systeem negatieve effecten zal hebben op personen jonger dan 18 jaar of andere kwetsbare groepen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-04-risicobeoordeling-voor-jongeren-en-kwetsbaren/#toelichting","title":"Toelichting","text":"

Bij de uitvoering van het in de leden 1 tot en met 7 van art. 9 AI-Verordening bedoelde systeem voor risicobeheer houden aanbieders rekening met de vraag of het beoogde doel van het AI-systeem met een hoog risico waarschijnlijk negatieve gevolgen zal hebben voor personen jonger dan 18 jaar en, in voorkomend geval, voor andere groepen kwetsbare personen. Er moet een grondige risicoanalyse plaatsvinden en worden vertaald naar mitigerende maatregelen om het risico te elimineren of te mitigeren.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-04-risicobeoordeling-voor-jongeren-en-kwetsbaren/#bronnen","title":"Bronnen","text":"

Artikel 9(9) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-04-risicobeoordeling-voor-jongeren-en-kwetsbaren/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-04-risicobeoordeling-voor-jongeren-en-kwetsbaren/#risico","title":"Risico","text":"

Niet adequaat adresseren van risico's voor jongeren en kwetsbare groepen kan leiden tot ernstige ethische en maatschappelijke schade.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-05-data-kwaliteitscriteria/","title":"Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria","text":"

aia-05Dataverkenning en datapreparatieVerificatie en validatieProjectleiderOntwikkelaarData

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-05-data-kwaliteitscriteria/#vereiste","title":"Vereiste","text":"

AI-systemen met een hoog risico die technieken gebruiken die het trainen van AI-modellen met data omvatten, worden ontwikkeld op basis van datasets voor training, validatie en tests die voldoen aan de kwaliteitscriteria telkens wanneer dergelijke datasets worden gebruikt.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-05-data-kwaliteitscriteria/#toelichting","title":"Toelichting","text":"

AI-systemen met een hoog risico die data gebruiken voor het trainen van AI-modellen, moeten gebaseerd zijn op datasets die voldoen aan specifieke kwaliteitscriteria. Deze criteria zorgen ervoor dat de data geschikt zijn voor training, validatie en tests, wat de betrouwbaarheid en nauwkeurigheid van het AI-systeem waarborgt.

Deze vereiste houdt in dat de gebruikte datasets onder meer moeten voldoen aan:

  • datasets voor training, validatie en tests worden onderworpen aan praktijken op het gebied van databeheer die stroken met het beoogde doel van het AI-systeem met een hoog risico. Dit heeft in het bijzonder betrekking op relevante ontwerpkeuzes, processen voor dataverzameling, verwerkingsactiviteiten voor datavoorbereiding, het opstellen van aannames met name betrekking tot de informatie die de data moeten meten en vertegenwoordigen, beschikbaarheid, kwantiteit en geschiktheid van de datasets en een beoordeling op mogelijke vooringenomenheid en passende maatregelen om deze vooringenomenheid op te sporen, te voorkomen en te beperken.
  • datasets voor training, validatie en tests zijn relevant, voldoende representatief en zoveel mogelijk foutenvrij en volledig met het oog op het beoogde doel.
  • Er wordt rekening gehouden met de eigenschappen of elementen die specifiek zijn voor een bepaalde geografische, contextuele, functionele of gedragsomgeving waarin het AI-systeem wordt gebruikt.
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-05-data-kwaliteitscriteria/#bronnen","title":"Bronnen","text":"

Artikel 10(1) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-05-data-kwaliteitscriteria/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-05-data-kwaliteitscriteria/#risico","title":"Risico","text":"

Gebruik van laagkwalitatieve of bevooroordeelde datasets kan leiden tot onbetrouwbare en oneerlijke AI-besluitvorming. Onvoldoende kwaliteitsborging van testdata kan leiden tot vertekende resultaten en gebrekkige prestaties van het AI-systeem bij gebruik in de praktijk.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-06-technische-documentatie/","title":"Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie","text":"

aia-06Dataverkenning en datapreparatieOntwikkelenVerificatie en validatieProjectleiderOntwikkelaarTransparantieTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-06-technische-documentatie/#vereiste","title":"Vereiste","text":"

De technische documentatie van een AI-systeem met een hoog risico wordt opgesteld voordat dit systeem in de handel wordt gebracht of in gebruik wordt gesteld, en wordt geactualiseerd. De technische documentatie wordt op zodanige wijze opgesteld dat wordt aangetoond dat het AI-systeem met een hoog risico in overeenstemming is met de eisen van Afdeling 2 van de AI-verordening en dat nationale bevoegde autoriteiten en aangemelde instanties over de noodzakelijke, op heldere en begrijpelijke wijze gestelde informatie beschikken om de overeenstemming van het AI-systeem met deze voorschriften te kunnen beoordelen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-06-technische-documentatie/#toelichting","title":"Toelichting","text":"

De technische documentatie van een AI-systeem met een hoog risico wordt voorafgaand aan het in de handel brengen of in gebruik nemen opgesteld en regelmatig bijgewerkt. Deze documentatie moet duidelijk aantonen dat het systeem voldoet aan de vereisten van de verordening, zodat nationale autoriteiten en aangemelde instanties de naleving kunnen beoordelen.

De documentatie bevat ten minste de elementen zoals uiteengezet in bijlage IV:

  1. Een algemene beschrijving van het AI-syseem.
  2. Een gedetailleerde beschrijving van de elementen van het AI-systeem en het proces voor de ontwikkeling ervan.
  3. Gedetailleerde informatie over de monitoring, werking en controle van het AI-systeem.
  4. Een beschrijving van de geschiktheid van de prestatiestatistieken.
  5. Een gedetailleerde beschrijving van het systeem voor risicobeheer overeenkomstig artikel 9 van de AI verordening.
  6. Een beschrijving van de wijzigingen die tijdens de levensduur worden aangebracht.
  7. Een lijst van normen die worden toegepast.
  8. Een exemplaar van de EU-conformiteitsverklaring.
  9. Een gedetailleerde beschrijving voor evaluatie van prestaties nadat het systeem in handel is gebracht, in overeenstemming met artikel 72 van de AI-verordening.

De documentatie kan opgevraagd worden door een bevoegde autoriteit met een met redenen omkleed verzoek, zoals toegelicht in artikel 21 van de AI-verordening.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-06-technische-documentatie/#bronnen","title":"Bronnen","text":"
  • Artikel 11 Verordening Artifici\u00eble Intelligentie
  • Bijlage IV Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-06-technische-documentatie/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-06-technische-documentatie/#risico","title":"Risico","text":"

Het ontbreken van de benodigde informatie over de algoritmische toepassing of AI-systeem kan ertoe leiden dat de technische functionering onduidelijk is. Dat kan tot problemen leiden bij de verantwoording, controle en het beheer. Onvolledige of ontoereikende technische documentatie kan leiden tot onduidelijkheid over de conformiteit van het AI-systeem met de regelgeving, wat de veiligheid en naleving in gevaar kan brengen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-06-technische-documentatie/#voorbeeld","title":"Voorbeeld","text":"
  • Gemeente Amsterdam - Onderzoekswaardigheid Algoritme \u2018Slimme check\u2019. (Een tool die de medewerkers helpt om te bepalen of een aanvraag levensonderhoud onderzoekswaardig is, niet meer in gebruik!): Technische documentatie.
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-07-automatische-logregistratie/","title":"Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens","text":"

aia-07OntwikkelenMonitoring en beheerOntwikkelaarProjectleiderTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-07-automatische-logregistratie/#vereiste","title":"Vereiste","text":"

Algoritmes en AI-systemen zijn dusdanig technisch vormgegeven dat gebeurtenissen gedurende hun levenscyclus automatisch worden geregistreerd (\u201clogs\u201d).

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-07-automatische-logregistratie/#toelichting","title":"Toelichting","text":"

AI-systemen met een hoog risico zijn ontworpen met functionaliteiten die gebeurtenissen gedurende hun levenscyclus automatisch registreren. Dit wordt vaak aangeduid als \"logs\". Deze logs bieden een traceerbaarheidsmechanisme waarmee gebruiksverantwoordelijken en autoriteiten incidenten en fouten kunnen analyseren, naleving kunnen controleren en mogelijke risico's kunnen identificeren en aanpakken. Het doel van deze registratie is om de transparantie en verantwoordingsplicht van AI-systemen te vergroten, waardoor het beheer van risico's en incidenten verbetert.

Voor AI-systemen met een hoog-risico voorziet de loggingcapaciteit ten minste in:

  1. de registratie van de duur van elk gebruik van het systeem;
  2. de referentiedatabank aan de hand waarvan de inputdata zijn gecontroleerd door het systeem;
  3. de inputdata ten aanzien waarvan de zoekopdracht een match heeft opgeleverd;
  4. de identificatie van natuurlijke personen die betrokken zijn bij de verificatie van de resultaten. Specifiek voor gebruiksverantwoordelijken

Voor AI-systemen die door bestuursorganen worden gebruikt of AI-systmen die persoonsgegevens verwerken leveren de BIO en AVG vergelijkbare verplichingen op die ook van toepassing zijn op AI-systmen die niet gezien worden als een AI-systeem met hoog risico. Daarbij komen nog verplichtingen om de logs doorlopend of periodiek te monitoren op incidenten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-07-automatische-logregistratie/#bronnen","title":"Bronnen","text":"
  • Artikel 12 Verordening Artifici\u00eble Intelligentie
  • Artikel 26.6 Verordening Artifici\u00eble Intelligentie, zie ook deze vereiste over logging door gebruiksverantwoordelijke.
  • Hoofdstuk 12.4 Baseline Informatiebeveiliging Overheid
  • Artikel 5 en 32 Algemene Verordening Gegevensbescherming
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-07-automatische-logregistratie/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenhoog risico AI-systeemAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-07-automatische-logregistratie/#risico","title":"Risico","text":"

Ontbreken van automatische logregistratie kan leiden tot een gebrek aan transparantie en traceerbaarheid van het AI-systeem, wat het vermogen om verantwoordelijkheid te nemen en eventuele problemen aan te pakken belemmert en betrokkenen wiens persoonsgegevens worden verwerkt of geraakt worden door beslissingen van het AI-systeem in hun rechten kunnen worden beperkt.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-08-transparantie-aan-gebruiksverantwoordelijken/","title":"Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen","text":"

aia-08OntwerpOntwikkelenMonitoring en beheerProjectleiderOntwikkelaarBeleid en adviesTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-08-transparantie-aan-gebruiksverantwoordelijken/#vereiste","title":"Vereiste","text":"

AI-systemen met een hoog risico worden op zodanige wijze ontworpen en ontwikkeld dat de werking ervan voldoende transparant is om gebruiksverantwoordelijken in staat te stellen de output van een systeem te interpreteren en op passende wijze te gebruiken. Een passende soort en mate van transparantie wordt gewaarborgd met het oog op de naleving van de relevante verplichtingen van de aanbieder en de gebruiksverantwoordelijke zoals uiteengezet in afdeling 3 van Artikel 13 van de AI verordening.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-08-transparantie-aan-gebruiksverantwoordelijken/#toelichting","title":"Toelichting","text":"

AI-systemen met een hoog risico worden ontworpen en ontwikkeld met een hoge mate van transparantie, zodat gebruikers de output van het systeem kunnen begrijpen en correct kunnen gebruiken. Dit zorgt ervoor dat de aanbieders en gebruikers kunnen voldoen aan de verplichtingen zoals uiteengezet in de relevante regelgeving, waardoor de betrouwbaarheid en verantwoordelijkheid van het gebruik van deze systemen worden verzekerd. In artikel 13 lid 3 is een overzicht gegeven van de informatie die gebruikersinstructies tenminste moeten bevatten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-08-transparantie-aan-gebruiksverantwoordelijken/#bronnen","title":"Bronnen","text":"

Artikel 13(1) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-08-transparantie-aan-gebruiksverantwoordelijken/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-08-transparantie-aan-gebruiksverantwoordelijken/#risico","title":"Risico","text":"

Onvoldoende transparantie kan leiden tot een gebrek aan begrip over hoe het AI-systeem functioneert, wat de effectiviteit van de inzet ervan kan belemmeren en de naleving van wettelijke verplichtingen in gevaar kan brengen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-09-menselijk-toezicht/","title":"Hoog-risico-AI-systemen staan onder menselijk toezicht","text":"

aia-09OntwerpOntwikkelenMonitoring en beheerProjectleiderMenselijke controle

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-09-menselijk-toezicht/#vereiste","title":"Vereiste","text":"

AI-systemen met een hoog risico worden zodanig ontworpen en ontwikkeld, met inbegrip van passende mens-machine-interface-hulpmiddelen, dat hierop tijdens de periode dat zij worden gebruikt, op doeltreffende wijze toezicht kan worden uitgeoefend door natuurlijke personen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-09-menselijk-toezicht/#toelichting","title":"Toelichting","text":"

Het menselijk toezicht is gericht op het voorkomen of beperken van de risico\u2019s voor de gezondheid, veiligheid of grondrechten die zich kunnen voordoen wanneer een AI-systeem met een hoog risico wordt gebruikt in overeenstemming met het beoogde doel ervan of in een situatie van redelijkerwijs te voorzien misbruik, met name wanneer dergelijke risico\u2019s blijven bestaan ondanks de toepassing van andere eisen van deze afdeling.

De toezichtmaatregelen staan in verhouding met de risico's, de mate van autonomie en de gebruikscontext van het AI-systeem met een hoog risico. Hierbij kan het gaan om:

  1. door de aanbieder bepaalde maatregelen die waar technisch haalbaar in het AI-systeem met een hoog risico worden ingebouwd voordat dit systeem in de handel wordt gebracht of in gebruik wordt gesteld;
  2. door de aanbieder bepaalde maatregelen voordat het AI-systeem met een hoog risico in de handel wordt gebracht of in gebruik wordt gesteld en die passend zijn om door de gebruiksverantwoordelijke te worden uitgevoerd.

De natuurlijke personen die verantwoordelijk zijn voor het menselijk toezicht, moeten in staat worden gesteld om waar passend en in verhouding tot de omstandigheden het volgende te kunnen doen:

  1. Goed kunnen begrijpen van de relevante capaciteiten en beperkingen van het AI-systeem met een hoog risico. Met het oog op het opsporen en aanpakken van onregelmatigheden, storingen en onverwachte prestaties moet de werking van het AI-systeem goed kunnen worden begrepen;
  2. Bewust blijven van de mogelijke neiging om automatisch of te veel te vertrouwen op de output van een AI-systeem met hoog risico (automation bias). Dit geldt in het bijzonder voor het gebruik van een hoog risico AI-systeem dat wordt gebruikt om informatie of aanbevelingen te versterkken voor beslisisngen die door natuurlijke personen moeten worden genomen;
  3. De output juist kunnen interpreteren, bijvoorbeeld met behulp van de juiste hulpmiddelen en methoden voor interpretatie;
  4. In alle specifieke situaties kunnen besluiten om het hoog risico AI-systeem niet te gebruiken of de output op een andere wijze te negeren, door een andere beslissing te vervangen of terug te draaien;
  5. ingrijpen in de werking van het hoog risico AI-systeem of het systeem onderbreken door middel van een stopknop of een vergelijkbare procedure waarmee het systeem op een veilige wijze kan worden stopgezet.

In het geval van een hoog risico systeem als bedoeld in bijlage III, punt 1, a (systemen voor biometrische identificatie op afstand) geldt het vereiste dat twee natuurlijke personen met de nodige bekwaamheid, opleiding en bevoegdheid apart de indentificatie van het systeem verifici\u00ebren en bevestigen, tenzij het wordt gebruikt voor rechtshandhaving, migratie, grenstoezicht of asiel, in gevallen waarin het Unierecht of het nationale recht de toepassing van dit vereiste onevenredig acht.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-09-menselijk-toezicht/#bronnen","title":"Bronnen","text":"

Artikel 14 verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-09-menselijk-toezicht/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-09-menselijk-toezicht/#risico","title":"Risico","text":"

Ontbreken van betekenisvol menselijk toezicht kan leiden tot gebrek aan controle en begrip over het functioneren van het AI-systeem, wat kan resulteren in ongewenste of onvoorspelbare uitkomsten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-10-nauwkeurigheid-robuustheid-cyberbeveiliging/","title":"Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig","text":"

aia-10OntwerpOntwikkelenVerificatie en validatieMonitoring en beheerProjectleiderBeleid en adviesOntwikkelaarTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-10-nauwkeurigheid-robuustheid-cyberbeveiliging/#vereiste","title":"Vereiste","text":"

AI-systemen met een hoog risico worden op zodanige wijze ontworpen en ontwikkeld dat deze een passend niveau van nauwkeurigheid, robuustheid en cyberbeveiliging bieden, alsook consistente prestaties gedurende de levensduur met betrekking tot deze aspecten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-10-nauwkeurigheid-robuustheid-cyberbeveiliging/#toelichting","title":"Toelichting","text":"

AI-systemen met een hoog risico worden zorgvuldig ontworpen en ontwikkeld om een hoog niveau van nauwkeurigheid, robuustheid en cyberbeveiliging te bieden. Dit garandeert consistente prestaties gedurende hun levensduur en minimaliseert risico's met betrekking tot deze aspecten, waardoor de betrouwbaarheid en veiligheid van het systeem worden gewaarborgd.

Technische robuustheid is een essenti\u00eble eis voor AI-systemen met een hoog risico. Deze systemen moeten bestand zijn tegen schadelijk of anderszins ongewenst gedrag dat kan voortvloeien uit de beperkingen binnen de systemen of de omgeving waarin de systemen opereren (bijvoorbeeld fouten, onregelmatigheden, onverwachte situaties). Daarom moeten technische en organisatorische maatregelen worden getroffen om de robuustheid van AI-systemen met een hoog risico te waarborgen. Een technische oplossing kan bijvoorbeeld bestaan uit mechanismen die het systeem in staat stellen zijn werking veilig te onderbreken (storingsbeveiligingsplannen) wanneer zich bepaalde anomalie\u00ebn voordoen of wanneer de werking buiten bepaalde vooraf bepaalde grenzen plaatsvindt.

Cyberbeveiliging is cruciaal om te waarborgen dat AI-systemen bestand zijn tegen pogingen van kwaadwillige derden die gebruikmaken van de kwetsbaarheden van het systeem om het gebruik, het gedrag of de prestaties ervan te wijzigen of de veiligheidskenmerken ervan in gevaar te brengen. Bij cyberaanvallen tegen AI-systemen kunnen AI-specifieke activa worden gebruikt, zoals trainingsdatasets (bv. datavervuiling) of getrainde modellen (bv. vijandige aanvallen of membership inference), of kwetsbaarheden in de digitale activa van het AI-systeem of de onderliggende ICT-infrastructuur worden benut. Om te zorgen voor een niveau van cyberbeveiliging dat aansluit op de risico\u2019s, moeten aanbieders van AI-systemen met een hoog risico passende maatregelen zoals veiligheidscontroles nemen, waarbij ook rekening wordt gehouden met de onderliggende ICT infrastructuur.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-10-nauwkeurigheid-robuustheid-cyberbeveiliging/#bronnen","title":"Bronnen","text":"

Artikel 15 Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-10-nauwkeurigheid-robuustheid-cyberbeveiliging/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-10-nauwkeurigheid-robuustheid-cyberbeveiliging/#risico","title":"Risico","text":"

Gebrek aan nauwkeurigheid, robuustheid of cyberbeveiliging kan leiden tot onbetrouwbare prestaties, kwetsbaarheid voor storingen en blootstelling aan beveiligingsrisico's, wat de effectiviteit en veiligheid van het AI-systeem in gevaar kan brengen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-11-systeem-voor-kwaliteitsbeheer/","title":"Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem","text":"

aia-11OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-11-systeem-voor-kwaliteitsbeheer/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-systemen met een hoog risico voorzien in een systeem voor kwaliteitsbeheer dat de naleving van deze verordening waarborgt. Dit systeem wordt op systematische en ordelijke wijze gedocumenteerd in de vorm van schriftelijke beleidslijnen, procedures en instructies en omvat ten minste de aspecten vermeld in artikel 17 AI-verordening.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-11-systeem-voor-kwaliteitsbeheer/#toelichting","title":"Toelichting","text":"

Aanbieders van AI-systemen met een hoog risico moeten een kwaliteitsbeheersysteem implementeren om te garanderen dat ze voldoen aan de AI-verordening. Dit systeem omvat gedocumenteerde beleidslijnen, procedures en instructies, en behandelt beknopt de volgende aspecten:

  1. een strategie voor de naleving van de regelgeving, inclusief de naleving van de conformiteitsbeoordelingsprocedures en de procedures voor het beheer van de wijzigingen van het AI-systeem met een hoog risico;
  2. technieken, procedures en systematische maatregelen die moeten worden toegepast voor het ontwerp, de controle van het ontwerp en de verificatie van het ontwerp van het AI-systeem met een hoog risico;
  3. technieken, procedures en systematische maatregelen die moeten worden toegepast voor de ontwikkeling, de kwaliteitscontrole en de kwaliteitsborging van het AI-systeem met een hoog risico;
  4. procedures voor het inspecteren, testen en valideren die v\u00f3\u00f3r, tijdens en na de ontwikkeling van het AI-systeem met een hoog risico moeten worden uitgevoerd en de regelmaat waarmee zij moeten worden uitgevoerd;
  5. technische specificaties, met inbegrip van normen, die moeten worden toegepast en, wanneer de relevante geharmoniseerde normen niet volledig worden toegepast of geen betrekking hebben op alle relevante eisen van afdeling 2, de middelen die worden gebruikt om ervoor te zorgen dat het AI-systeem met een hoog risico in overeenstemming is met deze eisen;
  6. systemen en procedures voor databeheer, met inbegrip van dataverwerving, - verzameling, -analyse, -labeling, -opslag, -zuivering, -aggregatie en -behoud en datamining en eventuele andere operaties met betrekking tot de data die worden uitgevoerd voorafgaand aan en met het oog op het in de handel brengen of in gebruik stellen van AI-systemen met een hoog risico;
  7. het systeem voor risicobeheer zoals bedoeld in artikel 9 van de AI-verordening;
  8. het opzetten, toepassen en onderhouden van een systeem voor monitoring na het in de handel brengen, overeenkomstig artikel 72 AI-verordening;
  9. procedures in verband met het melden van een ernstig incident in overeenstemming met artikel 73 van de AI-verordening;
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-11-systeem-voor-kwaliteitsbeheer/#bronnen","title":"Bronnen","text":"
  • Artikel 17 Verordening Artifici\u00eble Intelligentie
  • Artikel 16(c) Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-11-systeem-voor-kwaliteitsbeheer/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-11-systeem-voor-kwaliteitsbeheer/#risico","title":"Risico","text":"

Zonder toepassing van een kwaliteitsbeheersysteem kunnen risico's ontstaan voor de veiligheid, betrouwbaarheid en naleving van het AI-systeem en conformiteit met wet- en regelgeving.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-12-bewaartermijn-voor-documentatie/","title":"Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder","text":"

aia-12OntwerpMonitoring en beheerUitfaserenProjectleiderTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-12-bewaartermijn-voor-documentatie/#vereiste","title":"Vereiste","text":"

De aanbieder houdt gedurende een periode van tien jaar nadat het AI-systeem met een hoog risico in de handel is gebracht of in gebruik is gesteld de volgende elementen ter beschikking van de nationale bevoegde autoriteiten:

  1. de technische documentatie als bedoeld in artikel 11 van de AI-verordening;
  2. de documentatie betreffende het in artikel 17 bedoelde systeem voor kwaliteitsbeheer;
  3. in voorkomend geval de documentatie betreffende de door aangemelde instanties goedgekeurde wijzigingen;
  4. in voorkomend geval de besluiten en andere documenten die door de aangemelde instanties zijn afgegeven;
  5. de EU-conformiteitsverklaring als bedoeld in artikel 47.
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-12-bewaartermijn-voor-documentatie/#toelichting","title":"Toelichting","text":"

De aanbieder moet gedurende tien jaar na het op de markt brengen of in gebruik nemen van het AI-systeem met een hoog risico de vereiste documentatie beschikbaar houden voor de nationale autoriteiten. Dit houdt in dat technische documentatie, documentatie over het kwaliteitsbeheersysteem, eventuele documentatie over besluiten en goedgekeurde wijzigingen door aangemelde instanties en de EU-conformiteitsverklaring beschikbaar moet zijn. Dit waarborgt dat de autoriteiten toegang hebben tot relevante informatie voor controle en naleving van de voorschriften gedurende deze periode.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-12-bewaartermijn-voor-documentatie/#bronnen","title":"Bronnen","text":"
  • Artikel 18(1) Verordening Artifici\u00eble Intelligentie
  • Artikel 16(d) Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-12-bewaartermijn-voor-documentatie/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-12-bewaartermijn-voor-documentatie/#risico","title":"Risico","text":"

Niet voldoen aan de bewaartermijn kan leiden tot juridische consequenties en kan het vermogen van de autoriteiten om toezicht te houden op de naleving van de regelgeving belemmeren.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-13-bewaartermijn-voor-gegenereerde-logs/","title":"Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder","text":"

aia-13OntwerpMonitoring en beheerUitfaserenProjectleiderTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-13-bewaartermijn-voor-gegenereerde-logs/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-systemen met een hoog risico bewaren de in artikel 12, lid 1, bedoelde logs die automatisch worden gegenereerd door hun AI-systemen met een hoog risico voor zover dergelijke logs onder hun controle vallen. Onverminderd het toepasselijke Unie- of nationale recht worden deze logs bewaard gedurende een periode, die passend is voor het beoogde doel van het AI-systeem met een hoog risico, van ten minste zes maanden, tenzij anders is bepaald in het Unie- of nationaal recht, met name de Uniewetgeving inzake de bescherming van persoonsgegevens.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-13-bewaartermijn-voor-gegenereerde-logs/#toelichting","title":"Toelichting","text":"

Aanbieders van AI-systemen met een hoog risico moeten de automatisch gegenereerde logs bewaren volgens de voorschriften van artikel 12, lid 1, zolang deze logs onder hun controle vallen. Deze logs moeten ten minste zes maanden worden bewaard, tenzij anders bepaald door Unie- of nationale wetgeving met betrekking tot gegevensbescherming, om te voldoen aan de relevante voorschriften en verantwoordingsplicht.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-13-bewaartermijn-voor-gegenereerde-logs/#bronnen","title":"Bronnen","text":"
  • Artikel 19(1) Verordening Artifici\u00eble Intelligentie
  • Artikel 16(e) Verordening Artifici\u00eble Intelligentie
  • Artikel 12(1) Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-13-bewaartermijn-voor-gegenereerde-logs/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-13-bewaartermijn-voor-gegenereerde-logs/#risico","title":"Risico","text":"

Het niet of onvoldoende bewaren van logs kan het vermogen belemmeren om incidenten te analyseren, naleving te controleren en verantwoordelijkheid vast te stellen bij mogelijke problemen met het AI-systeem.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-14-conformiteitsbeoordeling/","title":"Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure","text":"

aia-14Verificatie en validatieImplementatieJuristProjectleiderGovernance

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-14-conformiteitsbeoordeling/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-systemen met een hoog risico zorgen ervoor dat voor het AI-systeem met een hoog risico een conformiteitsbeoordelingsprocedure wordt uitgevoerd voordat dit systeem in de handel wordt gebracht of in gebruik wordt gesteld

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-14-conformiteitsbeoordeling/#toelichting","title":"Toelichting","text":"

Conformiteitsbeoordelingen dragen bij aan het kunnen vertrouwen op de kwaliteit van producten en diensten. Aanbieders van AI-systemen met een hoog risico moeten ervoor zorgen dat de conformiteitsbeoordelingsprocedure wordt uitgevoerd v\u00f3\u00f3rdat het systeem op de markt wordt gebracht of in gebruik wordt genomen. Hiervoor moet worden beoordeeld of het ontwikkelde hoog risico AI-systeem voldoet aan de vereisten die gelden voor deze systemen. Denk hierbij aan de vereisten van risicobeheer, technische documentatie, data en datagovernance en transparantie en informatieverstrekking aan gebruiksverantwoordelijken (Afdeling 2, AI-Verordening).

Een conformiteitbeoordeling kan worden uitgevoerd door middel van - een interne controle (als bedoeld in bijlage VI van de AI-verordening) - of met betrokkenheid van een aangemelde instantie voor de beoordeling van het systeem voor kwaliteitsbeheer en de technische documentatie (als bedoeld in bijlage VII van de AI-verordening). Een conformiteitsbeoordeling door een aangemelde instatie wordt ookwel een conformiteitsbeoordeling door een derden genoemd.

Als overheidsorganisaties hoog risico AI-systemen gebruiken van aanbieders of deze zelf ontwikkelen, zullen deze systemen veelal de conformiteitsbeoordeling middels een interne controle moeten doorlopen (bijlage VI). Let op! In het geval dat een hoog risico AI-systeem door een rechtshandhavingsinstantie, immigratie- of asielautoriteit wordt ingezet, dan zal de markttoezichtautoriteit als aangemelde instantie optreden die de conformiteitsbeoordeling zal uitvoeren.

AI-systemen met een hoog risico die al aan een conformiteitsbeoordelingsprocedure zijn onderworpen, ondergaan een nieuwe conformiteitsbeoordelingsprocedure telkens wanneer zij substantieel zijn gewijzigd, ongeacht of het gewijzigde systeem bedoeld is om verder te worden gedistribueerd of door de huidige gebruiksverantwoordelijke gebruikt blijft worden.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-14-conformiteitsbeoordeling/#bronnen","title":"Bronnen","text":"
  • Artikel 16(f) Verordening Artifici\u00eble Intelligentie
  • Artikel 43 Verordening Artifici\u00eble Intelligentie
  • Artikel 76 Verordening Artifici\u00eble Intelligentie
  • Bijlage VI Verordening Artifici\u00eble Intelligentie
  • Bijlage VII Verordening Artifici\u00eble Intelligentie
  • Hoe werkt het allemaal in de praktijk voor aanbieders van AI-systemen met een hoog risico
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-14-conformiteitsbeoordeling/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-14-conformiteitsbeoordeling/#risico","title":"Risico","text":"

Niet naleven van deze verplichtingen kan leiden tot juridische en operationele problemen, en kan de veiligheid en betrouwbaarheid van het AI-systeem in gevaar brengen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-15-eu-conformiteitsverklaring/","title":"Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring","text":"

aia-15Verificatie en validatieImplementatieJuristProjectleiderGovernance

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-15-eu-conformiteitsverklaring/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-systemen met een hoog risico stellen een EU-conformiteitsverklaring op.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-15-eu-conformiteitsverklaring/#toelichting","title":"Toelichting","text":"

Een EU-conformiteitsverklaring is een verplicht document dat een fabrikant of gemachtigde vertegenwoordiger moet ondertekenen, waarmee wordt verklaard dat het product aan de EU-eisen voldoet. De aanbieder stelt voor elk AI-systeem met een hoog risico een schriftelijke machineleesbare, fysieke of elektronisch ondertekende EU-conformiteitsverklaring op en houdt deze verklaring tot tien jaar na het in de handel brengen of het in gebruik stellen van het AI-systeem met een hoog risico ter beschikking van de nationale bevoegde autoriteiten. De conformiteitsverklaring bevat de informatie zoals genoemd in bijlage V AI-verordening. Voorbeelden hiervan zijn de naam en type van het AI-systeem, naam en adres van de aanbieder, dat de EU-conformiteitsverklaring wordt versterkt onder verantwoordelijkheid van de aanbieder en de vermelding van eventuele toegepaste relevante geharmoniseerde normen of van andere gemeenschappelijke specificaties waarop de conformiteitsverklaring betrekking heeft.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-15-eu-conformiteitsverklaring/#bronnen","title":"Bronnen","text":"
  • Artikel 16(g) Verordening Artifici\u00eble Intelligentie
  • Artikel 47(1) Verordening Artifici\u00eble Intelligentie
  • Bijlage V Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-15-eu-conformiteitsverklaring/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-15-eu-conformiteitsverklaring/#risico","title":"Risico","text":"

Niet naleven van deze verplichtingen kan leiden tot juridische en operationele problemen, en kan de veiligheid en betrouwbaarheid van het AI-systeem in gevaar brengen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-16-ce-markering/","title":"Hoog-risico-AI-systemen zijn voorzien van een CE-markering","text":"

aia-16ImplementatieProjectleiderTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-16-ce-markering/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-systemen met een hoog risico moeten een CE-markering toevoegen aan het AI-systeem met een hoog risico of, wanneer dit niet mogelijk is, op de verpakking of in de bij het product gevoegde documentatie, om aan te geven dat aan de AI-verordening is voldaan.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-16-ce-markering/#toelichting","title":"Toelichting","text":"

Op AI-systemen met een hoog risico moet de CE-markering worden aangebracht om aan te geven dat zij in overeenstemming zijn met de AI-verordening, zodat het vrije verkeer ervan op de interne markt mogelijk is. Op AI-systemen met een hoog risico die in een product zijn ge\u00efntegreerd moet een fysieke CE-markering worden aangebracht, die kan worden aangevuld met een digitale CE-markering. Voor AI-systemen met een hoog risico die alleen digitaal worden verstrekt, moet een digitale CE-markering worden gebruikt. De lidstaten mogen het in de handel brengen en het in gebruik stellen van AI-systemen met een hoog risico die aan de in de AI-verordening vastgelegde eisen voldoen en waarop de CE-markering is aangebracht, niet op ongerechtvaardigde wijze belemmeren.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-16-ce-markering/#bronnen","title":"Bronnen","text":"
  • Artikel 16(h) Verordening Artifici\u00eble Intelligentie
  • Artikel 48 Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-16-ce-markering/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-16-ce-markering/#risico","title":"Risico","text":"

Niet naleven van deze verplichtingen kan leiden tot juridische en operationele problemen, en kan de veiligheid en betrouwbaarheid van het AI-systeem in gevaar brengen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-17-registratieverplichtingen/","title":"Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank","text":"

aia-17ImplementatieProjectleiderGovernanceTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-17-registratieverplichtingen/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-systemen met een hoog risico leven de registratieverplichtingen als bedoeld in artikel 49 na, wat betekent dat voor het in de handel brengen of in bedrijf te stellen van het hoog risico AI-systeem, de aanbieder of in voorkomende gevallen de gemachtigde het systeem registreert in de EU-databank.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-17-registratieverplichtingen/#toelichting","title":"Toelichting","text":"

V\u00f3\u00f3r de distributie of inbedrijfstelling van een AI-systeem met een hoog risico van bijlage III, met uitzondering van specifieke gevallen zoals beschreven in punt 2 van bijlage III, is het vereist dat de aanbieder of gemachtigde zichzelf en het systeem registreert in de EU-databank zoals genoemd in art. 71 AI-verordening.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-17-registratieverplichtingen/#bronnen","title":"Bronnen","text":"
  • Artikel 16(i) Verordening Artifici\u00eble Intelligentie
  • Artikel 49(1) Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-17-registratieverplichtingen/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-17-registratieverplichtingen/#risico","title":"Risico","text":"

Niet naleven van deze verplichtingen kan leiden tot juridische en operationele problemen, en kan de veiligheid en betrouwbaarheid van het AI-systeem in gevaar brengen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-18-corrigerende-maatregelen-voor-non-conforme-ai/","title":"Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in","text":"

aia-18OrganisatieverantwoordelijkhedenMonitoring en beheerProjectleiderMenselijke controleTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-18-corrigerende-maatregelen-voor-non-conforme-ai/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-systemen met een hoog risico die van mening zijn of redenen hebben om aan te nemen dat een door hen in de handel gebracht of in gebruik gesteld AI systeem met een hoog risico niet in overeenstemming is met de AI-verordening, nemen onmiddellijk de nodige corrigerende maatregelen om dat systeem naargelang het geval in overeenstemming te brengen, uit de handel te nemen, te deactiveren of terug te roepen. Zij stellen de distributeurs van het betrokken AI-systeem met een hoog risico en, indien van toepassing, de gebruiksverantwoordelijken, de gemachtigden en importeurs dienovereenkomstig in kennis.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-18-corrigerende-maatregelen-voor-non-conforme-ai/#toelichting","title":"Toelichting","text":"

Aanbieders van AI-systemen met een hoog risico die constateren dat hun systeem niet aan de verordening voldoet, moeten onmiddellijk corrigerende acties ondernemen, zoals het terugroepen of uit de handel nemen van het systeem. Ze moeten ook alle relevante partijen, zoals distributeurs, gebruiksverantwoordelijken en importeurs, op de hoogte stellen van deze maatregelen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-18-corrigerende-maatregelen-voor-non-conforme-ai/#bronnen","title":"Bronnen","text":"
  • Artikel 20 Verordening Artifici\u00eble Intelligentie
  • Artikel 16(j) Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-18-corrigerende-maatregelen-voor-non-conforme-ai/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-18-corrigerende-maatregelen-voor-non-conforme-ai/#risico","title":"Risico","text":"

Niet reageren op non-conformiteit kan leiden tot risico's voor gebruikers en derden. Het kan leiden tot juridische procedures en reputatieschade voor organisaties.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-19-toegankelijkheidseisen/","title":"Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen","text":"

aia-19OntwerpProjectleiderOntwikkelaarMenselijke controleTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-19-toegankelijkheidseisen/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-systemen met een hoog risico zorgen ervoor dat het AI-systeem met een hoog risico voldoet aan de toegankelijkheidseisen overeenkomstig de Richtlijnen (EU) 2016/2102 en (EU) 2019/882

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-19-toegankelijkheidseisen/#toelichting","title":"Toelichting","text":"

Aanbieders van AI-systemen met een hoog risico moeten ervoor zorgen dat hun systeem toegankelijk is volgens de EU-richtlijnen 2016/2102 en 2019/882. In het kader van Richtlijn 2016/2102 moet onder toegankelijkheid worden verstaan het geheel van principes en technieken die in acht moeten worden genomen bij het ontwerpen, bouwen, beheren en bijwerken van websites en mobiele applicaties om hen voor gebruikers toegankelijker te maken, met name voor personen met een beperking. Bijlage 1 bevat de toegankelijkheidsvoorschriften voor producten en diensten die moeten worden toegepast op hoog-risico-AI-systemen.

Richtlijn 2019/882 strekt ertoe een bijdrage te leveren tot het goed functioneren van de interne markt middels onderlinge aanpassing van de wettelijke en bestuursrechtelijke bepalingen van de lidstaten inzake de toegankelijkheidsvoorschriften voor bepaalde producten en diensten, in het bijzonder door het wegwerken en voorkomen van belemmeringen voor het vrije verkeer van onder deze richtlijn vallende producten en diensten ten gevolge van uiteenlopende toegankelijkheidsvoorschriften in de lidstaten

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-19-toegankelijkheidseisen/#bronnen","title":"Bronnen","text":"
  • Artikel 16(l) Verordening Artifici\u00eble Intelligentie
  • EU-richtlijn 2016/2102
  • EU-richtlijn 2019/882
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-19-toegankelijkheidseisen/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-19-toegankelijkheidseisen/#risico","title":"Risico","text":"

Niet naleven van deze verplichtingen kan leiden tot juridische en operationele problemen, en kan de veiligheid en betrouwbaarheid van het AI-systeem in gevaar brengen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-20-gebruiksverantwoordelijken-maatregelen/","title":"Hoog-risico-AI-systemen worden gebruikt volgens de gebruiksaanwijzing","text":"

aia-20OrganisatieverantwoordelijkhedenImplementatieProjectleiderOntwikkelaarGovernance

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-20-gebruiksverantwoordelijken-maatregelen/#vereiste","title":"Vereiste","text":"

Gebruiksverantwoordelijken van AI-systemen met een hoog risico nemen passende technische en organisatorische maatregelen om te waarborgen dat zij dergelijke systemen gebruiken in overeenstemming met de gebruiksaanwijzingen die bij de systemen zijn gevoegd, in overeenstemming met de leden 3 en 6 van artikel 26 van de AI-verordening.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-20-gebruiksverantwoordelijken-maatregelen/#toelichting","title":"Toelichting","text":"

Gebruiksverantwoordelijken van AI-systemen met een hoog risico moeten geschikte maatregelen nemen om ervoor te zorgen dat zij deze systemen gebruiken volgens de bijgevoegde instructies. De gebruiksverantwoordelijke zorgt ervoor dat de inputdata relevant en voldoende representatief zijn voor het beoogde doel van het AI-systeem met een hoog risico, voor zover hij daar controle over heeft.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-20-gebruiksverantwoordelijken-maatregelen/#bronnen","title":"Bronnen","text":"

Artikel 26(1) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-20-gebruiksverantwoordelijken-maatregelen/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-20-gebruiksverantwoordelijken-maatregelen/#risico","title":"Risico","text":"

Het niet naleven van deze maatregelen kan leiden tot onjuist gebruik van de AI-systemen, wat de effectiviteit en veiligheid ervan kan verminderen, en kan resulteren in risico's voor gebruikers en derden.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-21-gebruiksverantwoordelijken-menselijk-toezicht/","title":"Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkheden","text":"

aia-21OrganisatieverantwoordelijkhedenProjectleiderGovernanceMenselijke controle

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-21-gebruiksverantwoordelijken-menselijk-toezicht/#vereiste","title":"Vereiste","text":"

Gebruiksverantwoordelijken dragen het menselijk toezicht over een hoog risico AI-systeem op aan natuurlijke personen die over de nodige bekwaamheid, opleiding en autoriteit beschikken en de nodige ondersteuning krijgen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-21-gebruiksverantwoordelijken-menselijk-toezicht/#toelichting","title":"Toelichting","text":"

Het is van belang dat natuurlijke personen die het menselijk toezicht moeten uitvoeren over het AI-systeem met een hoog risico, daarvoor over de nodige bekwaamheid, opleiding en autoriteit beschikt. Daarbij kan het van belang zijn dat deze natuurlijke personen ondersteuning krijgen bij het uitvoeren van deze taak.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-21-gebruiksverantwoordelijken-menselijk-toezicht/#bronnen","title":"Bronnen","text":"
  • Artikel 26(2) Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-21-gebruiksverantwoordelijken-menselijk-toezicht/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-21-gebruiksverantwoordelijken-menselijk-toezicht/#risico","title":"Risico","text":"

Als de natuurlijke toezichthouder geen effectief toezicht kan houden op het hoog risico AI-systeem, kunnen ongewenste, negatieve effecten onstaan voor betrokkenen en de organisatie.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-22-gebruiksverantwoordelijken-monitoren-werking/","title":"De werking van hoog-risico-AI-systemen wordt gemonitord","text":"

aia-22Monitoring en beheerProjectleiderMenselijke controle

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-22-gebruiksverantwoordelijken-monitoren-werking/#vereiste","title":"Vereiste","text":"

Gebruiksverantwoordelijken monitoren de werking van het AI-systeem met een hoog risico op basis van de gebruiksaanwijzingen en stellen in voorkomend geval de aanbieders in kennis overeenkomstig artikel 72 AI Verordening

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-22-gebruiksverantwoordelijken-monitoren-werking/#toelichting","title":"Toelichting","text":"

Gebruiksverantwoordelijken moeten de werking van hoog risico AI-systemen monitoren. Dit is van belang om passende maatregelen te kunnen treffen als het systeem onbedoeld anders gaat functioneren.

Wanneer gebruiksverantwoordelijken redenen hebben om aan te nemen dat het gebruik overeenkomstig de gebruiksaanwijzingen ertoe kan leiden dat dat AI-systeem een risico vormt in de zin van artikel 79, lid 1, stellen zij de aanbieder of distributeur en de betreffende markttoezichtautoriteit hiervan zonder onnodige vertraging in kennis en onderbreken zij het gebruik van dat systeem. Wanneer gebruiksverantwoordelijke een ernstig incident vaststellen, stellen zij ook onmiddellijk eerst de aanbieder hiervan in kennis, en vervolgens de importeur of distributeur en de betreffende markttoezichtautoriteiten van dat incident. Wanneer de gebruiksverantwoordelijke de aanbieder niet kan bereiken, is artikel 73 mutatis mutandis van toepassing. Deze verplichting geldt niet voor gevoelige operationele gegevens van gebruiksverantwoordelijke van AI-systemen die de hoedanigheid van rechtshandhavingsinstanties hebben.

Voor gebruiksverantwoordelijke die in de hoedanigheid van financi\u00eble instellingen onderworpen zijn aan eisen met betrekking tot hun interne governance, regelingen of processen uit hoofde van het Unierecht inzake financi\u00eble diensten, wordt de monitoringsverplichting overeenkomstig de eerste alinea geacht te zijn vervuld door te voldoen aan de regels inzake interne governance, regelingen of processen en -mechanismen uit hoofde van het desbetreffende recht inzake financi\u00eble diensten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-22-gebruiksverantwoordelijken-monitoren-werking/#bronnen","title":"Bronnen","text":"

Artikel 26(5) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-22-gebruiksverantwoordelijken-monitoren-werking/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-22-gebruiksverantwoordelijken-monitoren-werking/#risico","title":"Risico","text":"

Zonder monitoring door gebruiksverantwoordelijken en (waar nodig) het informeren van aanbieder, distributeur of markttoezichtautoriteit, kan de foutieve werking van een hoog risico AI-systeem niet worden gesignaleerd en hersteld.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-23-gebruiksverantwoordelijken-bewaren-logs/","title":"Logs voor hoog-risico-AI-systemen worden bewaard door de gebruiksverantwoordelijke","text":"

aia-23OntwikkelenMonitoring en beheerProjectleiderTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-23-gebruiksverantwoordelijken-bewaren-logs/#vereiste","title":"Vereiste","text":"

Gebruiksverantwoordelijken van AI-systemen met een hoog risico bewaren de logs die automatisch worden gegenereerd door dat AI-systeem met een hoog risico voor zover dergelijke logs onder hun controle vallen gedurende een periode die passend is voor het beoogde doel van het AI-systeem met een hoog risico, of ten minste zes maanden, tenzij anders is bepaald in het toepasselijke Unie- of nationaal recht, meer in het bijzonder het Unierecht over de bescherming van persoonsgegevens

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-23-gebruiksverantwoordelijken-bewaren-logs/#toelichting","title":"Toelichting","text":"

Anders dan in artikel 16(e) AI-verordening, waar een vergelijkbare vereiste geldt voor aanbieders, gaat het hier om een vereiste specifiek voor de gebruiksverantwoordelijken. Het is van belang dat de gebruiksverantwoordelijken een zelfstandige beoordeling maakt wat moet worden gelogd en voor welke periode gezien de doelstelling van de inzet van het AI-systeem. Daarbij is het van belang om te beoordelen in hoeverre een gebruiksverantwoordelijke hier 'controle' over heeft. De gebruiksverantwoordelijke zal, al dan niet samen met de aanbieder, (technische) maatregelen moeten treffen om dit te realiseren.

Gebruiksverantwoordelijken die in de hoedanigheid van financi\u00eble instellingen onderworpen zijn aan eisen met betrekking tot hun interne governance, regelingen of processen uit hoofde van het Unierecht inzake financi\u00eble diensten bewaren de logs als onderdeel van de documentatie die bewaard wordt krachtens het desbetreffende Unierecht inzake financi\u00eble diensten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-23-gebruiksverantwoordelijken-bewaren-logs/#bronnen","title":"Bronnen","text":"

Artikel 26(6) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-23-gebruiksverantwoordelijken-bewaren-logs/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-23-gebruiksverantwoordelijken-bewaren-logs/#risico","title":"Risico","text":"

Het niet of onvoldoende bewaren van logs kan het vermogen belemmeren om incidenten te analyseren, naleving te controleren en verantwoordelijkheid vast te stellen bij mogelijke problemen met het AI-systeem.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-24-informeren-werknemers/","title":"Werknemers weten dat hun organisatie een hoog-risico AI-systeem gebruikt","text":"

aia-24ImplementatieProjectleiderTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-24-informeren-werknemers/#vereiste","title":"Vereiste","text":"

Voordat een AI-systeem met een hoog risico op de werkplek in gebruik wordt gesteld of wordt gebruikt, delen gebruiksverantwoordelijken die werkgever zijn werknemersvertegenwoordigers en de betrokken werknemers mee dat zij zullen worden onderworpen aan het gebruik van het AI-systeem met een hoog risico. Deze informatie wordt, indien van toepassing, verstrekt in overeenstemming met de in het Unie- en nationaal recht vastgelegde regels en procedures en de praktijk inzake informatie van werknemers en hun vertegenwoordigers.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-24-informeren-werknemers/#toelichting","title":"Toelichting","text":"

Dit vereiste benadrukt het belang van het informeren van werknemersvertegenwoordigers en betrokken werknemers over de inzet van een hoog risico AI-systeem op de werkplaats. Dit dient voorafgaand aan de inzet van het systeem plaats te vinden. De gebruiksverantwoordelijke als werknemer dient hier zorg voor te dragen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-24-informeren-werknemers/#bronnen","title":"Bronnen","text":"

Artikel 26(7) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-24-informeren-werknemers/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-24-informeren-werknemers/#risico","title":"Risico","text":"

Als werknemersvertegenwoordigers en werknemers niet worden ge\u00efnformeerd over de inzet van een hoog risico AI-systeem, kunnen zij zich niet weren tegen mogelijk ongewenste en negatieve effecten van de inzet van het hoog risico AI-systeem.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-25-gebruiksverantwoordelijken-registratieverplichtingen/","title":"Gebruiksverantwoordelijken controleren de registratie van het hoog-risico AI-systeem in de EU-databank","text":"

aia-25OrganisatieverantwoordelijkhedenImplementatieMonitoring en beheerProjectleiderTransparantieGovernance

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-25-gebruiksverantwoordelijken-registratieverplichtingen/#vereiste","title":"Vereiste","text":"

Gebruiksverantwoordelijken van AI-systemen met een hoog risico die de hoedanigheid van overheidsinstanties of instellingen, organen of instanties van de Unie hebben, leven de in artikel 49 bedoelde registratieverplichtingen na. Wanneer deze gebruiksverantwoordelijke vaststellen dat het AI-systeem met een hoog risico dat zij voornemens zijn te gebruiken niet in de in artikel 71 bedoelde EU-databank is geregistreerd, gebruiken zij dat systeem niet en stellen zij de aanbieder of de distributeur daarvan in kennis.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-25-gebruiksverantwoordelijken-registratieverplichtingen/#toelichting","title":"Toelichting","text":"

Het is van belang dat gebruiksverantwoordelijken nagaan of het betreffende hoog risico AI-systeem door aanbieder is geregistreerd in de EU-databank (zoals omschreven in artikel 71 AI-verordening). Voordat het betreffende AI-systeem (bijlage III vermeld AI-systeem met een hoog risico) in gebruik te stellen of te gebruiken (met uitzondering van de in punt 2 van bijlage III vermelde AI-systemen met een hoog risico) registreren gebruiksverantwoordelijken die overheidsinstanties, instellingen, organen of instanties van de Unie, of personen die namens hen optreden, zichzelf en selecteren zij het systeem en registreren zij het gebruik ervan in de in artikel 71 bedoelde EU-databank.

Heeft de aanbieder het betreffende hoog risico AI-systeem niet geregistreerd in de EU-Databank, dan mag het hoog risico AI-systeem niet worden gebruikt. De aanbieder of distributeur wordt door de gebruiksverantwoordelijke ge\u00efnformeerd dat het systeem niet is geregistreerd in de EU-databank.

AI-systemen met een hoog risico als bedoeld in punt 2 van bijlage III (kritieke infrastructuur) worden op nationaal niveau geregistreerd.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-25-gebruiksverantwoordelijken-registratieverplichtingen/#bronnen","title":"Bronnen","text":"
  • Artikel 26(8) Verordening Artifici\u00eble Intelligentie
  • Artikel 49 (3) Verordening Artifici\u00eble Intelligentie
  • Artikel 71 Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-25-gebruiksverantwoordelijken-registratieverplichtingen/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-25-gebruiksverantwoordelijken-registratieverplichtingen/#risico","title":"Risico","text":"

Zonder registratie van het hoog risico AI-systeem en het registreren welke organisaties of personen hier gebruik van maken, is het negatieve negatieve van het mogelijk onjuist of ongewenst functioneren van het AI-systeem niet te overzien en onduidelijk welke betrokken dit raakt.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-26-recht-op-uitleg-ai-besluiten/","title":"Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluiten","text":"

aia-28OrganisatieverantwoordelijkhedenOntwerpMonitoring en beheerProjectleiderGovernanceFundamentele rechtenTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-26-recht-op-uitleg-ai-besluiten/#vereiste","title":"Vereiste","text":"

Elke getroffen persoon op wie een besluit van toepassing is dat door de gebruiksverantwoordelijke wordt genomen op basis van de output van een in bijlage III vermeld AI-systeem met een hoog risico, met uitzondering van systemen die in punt 2 van die bijlage zijn vermeld, en dat rechtsgevolgen heeft voor die persoon, of op deze op vergelijkbare wijze aanzienlijke invloed heeft die hij of zij als nadelige gevolgen voor zijn of haar gezondheid, veiligheid of grondrechten beschouwt, heeft het recht om van de gebruiksverantwoordelijke duidelijke, inhoudelijke toelichting te verkrijgen bij de rol van het AI-systeem in de besluitvormingsprocedure en de voornaamste elementen van het genomen besluit.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-26-recht-op-uitleg-ai-besluiten/#toelichting","title":"Toelichting","text":"

Getroffen personen moeten het recht hebben om uitleg te krijgen indien het besluit van een gebruiksverantwoordelijke voornamelijk is gebaseerd op de output van bepaalde AI-systemen met een hoog risico die binnen het toepassingsgebied van de AI-verordening vallen en indien dat besluit rechtsgevolgen of gelijkaardige aanzienlijke gevolgen heeft voor de gezondheid, veiligheid of grondrechten van die personen. Die uitleg moet duidelijk en zinvol zijn en moet de grondslag zijn waarop de getroffen personen zich kunnen baseren om hun rechten uit te oefenen. Het recht om uitleg te krijgen mag niet van toepassing zijn op het gebruik van AI-systemen waarvoor uitzonderingen of beperkingen voortvloeien uit het Unierecht of het nationale recht en moet alleen van toepassing zijn voor zover het Unierecht niet reeds in dit recht voorziet. Dit vereiste geldt bijvoorbeeld niet als het gaat om AI-systemen die bedoeld zijn om te worden gebruikt als veiligheidscomponent bij het beheer of de exploitatie van kritieke digitale infrastructuur, wegverkeer of bij de levering van water, gas, verwerking en electriciteit (punt 2 bij Bijlage III van AI-verordening).

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-26-recht-op-uitleg-ai-besluiten/#bronnen","title":"Bronnen","text":"
  • Artikel 86(1) Verordening Artifici\u00eble Intelligentie
  • Artikel 26(11) Verordening Artifici\u00eble Intelligentie
  • Bijlage III Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-26-recht-op-uitleg-ai-besluiten/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-26-recht-op-uitleg-ai-besluiten/#risico","title":"Risico","text":"

Als gebruiksverantwoordelijke geen duidelijke, inhoudelijke toelichting geeft over de rol van het AI-systeem in de besluitvormingsprocedure en de voornaamste elementen bij het genomen besluit, is het voor getroffen personen niet mogelijk zich te verdedigen tegen de rechtsgevolgen die hieruit voortkomen of de nadelige gevolgen voor gezondheid, veiligheid of diens grondrechten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-27-beoordelen-gevolgen-grondrechten/","title":"Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten","text":"

aia-29OntwerpVerificatie en validatieProjectleiderBeleid en adviesFundamentele rechten

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-27-beoordelen-gevolgen-grondrechten/#vereiste","title":"Vereiste","text":"

Voordat een AI-systeem met een hoog risico als bedoeld in artikel 6, lid 2 AI-verordening, in gebruik wordt genomen, met uitzondering van AI-systemen met een hoog risico die bedoeld zijn om te worden gebruikt op het in punt 2 van bijlage III vermelde gebied, voeren operatoren die publiekrechtelijke instellingen zijn of particuliere entiteiten zijn die openbare diensten verlenen, en operatoren van AI-systemen met een hoog risico als bedoeld in bijlage III, punt 5, onder b) en c), een beoordeling uit van de gevolgen voor de grondrechten die het gebruik van een dergelijk systeem kan opleveren.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-27-beoordelen-gevolgen-grondrechten/#toelichting","title":"Toelichting","text":"

Voordat een AI-systeem met een hoog risico in gebruik wordt genomen, moeten publieke instellingen of particuliere entiteiten die openbare diensten leveren, en operators van bepaalde AI-systemen, een beoordeling uitvoeren van de impact op de grondrechten die het gebruik ervan kan hebben. Deze evaluatie is bedoeld om potenti\u00eble risico's te identificeren die kunnen voortvloeien uit het gebruik van dergelijke systemen en om passende maatregelen te nemen om deze risico's te beheersen. Het doel is om de bescherming van grondrechten te waarborgen bij het gebruik van AI-systemen met een hoog risico, met name in sectoren waar deze systemen cruciale diensten leveren aan het publiek.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-27-beoordelen-gevolgen-grondrechten/#bronnen","title":"Bronnen","text":"
  • Artikel 27(1) Verordening Artifici\u00eble Intelligentie
  • Artikel 6.2 Verordening Artifici\u00eble Intelligentie
  • Bijlage III.2 en III.5 Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-27-beoordelen-gevolgen-grondrechten/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-27-beoordelen-gevolgen-grondrechten/#risico","title":"Risico","text":"

Het niet uitvoeren van deze beoordeling kan leiden tot schendingen van de grondrechten, juridische complicaties en verlies van vertrouwen van het publiek in het gebruik van AI-systemen door overheids- en openbare dienstverlenende entiteiten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-27-beoordelen-gevolgen-grondrechten/#hulpmiddelen","title":"Hulpmiddelen","text":"HulpmiddelenImpact Assessment Mensenrechten en Algoritmes"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-28-transparantieverplichtingen/","title":"AI-systemen worden zo ontworpen en gebruikt, dat mensen begrijpen wanneer zij met een AI-systeem communiceren en welke content gemaakt is door een AI-systeem","text":"

aia-28OntwikkelenImplementatieProjectleiderOntwikkelaarTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-28-transparantieverplichtingen/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-systemen zorgen dat AI-sytemen zodanig worden ontworpen en ontwikkeld dat de betrokken natuurlijke personen worden ge\u00efnformeerd dat zij interacteren met een AI-systeem. Gebruiksverantwoordelijken moeten betrokkenen informeren over de werking van het systeem en in het geval van een AI-systeem dat content gegenereert duidelijk kenbaar maken dat de content kunstmatig is gegenereerd of gemanipuleerd.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-28-transparantieverplichtingen/#toelichting","title":"Toelichting","text":"

Dit geldt voor AI-systemen die:

  • gebruikt worden voor directe interactie met natuurlijke personen (zoals chatbots).
  • synthetische afbeeldingen, audio, video of tekst genereert en/of manipuleert (bijvoorbeeld deepfake).
  • doen aan emotieherkenning of biometrische categorisatie.
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-28-transparantieverplichtingen/#bronnen","title":"Bronnen","text":"
  • Artikel 50 Verordening Artifici\u00eble Intelligentie
  • Overweging 132 Verordening Artifici\u00eble Intelligentie
  • Overweging 134 Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-28-transparantieverplichtingen/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenhoog risico AI-systeemgeen hoog risico AI-systeemAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-28-transparantieverplichtingen/#risico","title":"Risico","text":"

Bepaalde AI-systemen die bedoeld zijn om met natuurlijke personen te interageren of om content te genereren, kunnen specifieke risico\u2019s op imitatie of misleiding met zich meebrengen, ongeacht of zij als systeem met een hoog risico gelden.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-29-ai-modellen-algemene-doeleinden/","title":"AI-modellen voor algemene doeleinden zijn voorzien van voldoende technische documentatie en informatie","text":"

aia-29OntwerpOntwikkelenMonitoring en beheerProjectleiderTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-29-ai-modellen-algemene-doeleinden/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-modellen voor algemene doeleinden moeten (technische) informatie en documentatie opstellen, up-to-date houden en beschikbaar stellen voor aanbieders van AI-systemen die het AI-model voor algemene doeleinden in hun AI-systemen willen integreren.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-29-ai-modellen-algemene-doeleinden/#toelichting","title":"Toelichting","text":"

Aanbieders van AI-modellen voor algemene doeleinden hebben een bijzondere rol en verantwoordelijkheid. Zij leveren modellen die de basis kunnen vormen voor weer andere systemen en algoritmen, die vaak weer door andere partijen worden aangeboden dan de ontwikkelaar van het algemene systeem. Dit vraagt om een goed inzicht in de modellen en hun capaciteiten, zowel qua integratie van de modellen in producten als qua naleving van verplichtingen.

Er zijn daarom evenredige transparantiemaatregelen nodig, zoals het opstellen en bijwerken van documentatie en verstrekken van informatie over het AI-model voor algemeen gebruik door de aanbieders van systemen die de algemene modellen gebruiken in hun product. De aanbieder van het AI-model voor algemene doeleinden dient technische documentatie op te stellen en bij te werken om deze op verzoek te kunnen overleggen aan het AI-bureau en de nationale bevoegde autoriteiten. De minimaal in de documentatie op te nemen elementen moeten worden vastgelegd volgens bijlage XII van de AI-Verordening. Hierbij is het ook van belang dat de aanbieder van AI-modellen voor algemene doelstelling beleid opstellen voor naleving van auteursrechten en naburige rechten (artikel 4, lid 3 Richtlijn (EU) 2019/790).

In art. 53 lid 2 wordt een uitzondering gemaakt op deze vereisten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-29-ai-modellen-algemene-doeleinden/#bronnen","title":"Bronnen","text":"

Artikel 53 Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-29-ai-modellen-algemene-doeleinden/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-model voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-29-ai-modellen-algemene-doeleinden/#risico","title":"Risico","text":"

Het niet voldoen aan deze verplichtingen kan leiden tot juridische en ethische complicaties, inclusief schendingen van auteursrechten en gebrek aan transparantie in het gebruik van AI-modellen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-30-ai-modellen-algemene-doeleinden-systeemrisico/","title":"Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico treffen extra maatregelen","text":"

aia-30OntwikkelenVerificatie en validatieMonitoring en beheerProjectleiderOntwikkelaarTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-30-ai-modellen-algemene-doeleinden-systeemrisico/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico moeten modelevaluatie uitvoeren overeenkomstig gestandaardiseerde protocollen en instrumenten die de stand van de techniek weerspiegelen, met inbegrip van het uitvoeren en documenteren van tests gericht op het ontdekken van kwetsbaarheden van het model om systeemrisico\u2019s in kaart te brengen en te beperken.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-30-ai-modellen-algemene-doeleinden-systeemrisico/#toelichting","title":"Toelichting","text":"

De aanbieders van AI-modellen voor algemene doeleinden die systeemrisico\u2019s inhouden, moeten, naast de verplichtingen voor aanbieders van AI-modellen voor algemene doeleinden, onderworpen worden aan verplichtingen die gericht zijn op het identificeren en beperken van die risico\u2019s en op waarborging van een passend niveau van cyberbeveiliging, ongeacht of het model een op zichzelf staand model is of ingebed in een AI-systeem of in een product. Aanbieders van AI-modellen voor algemene doeleinden met een potentieel systeemrisico moeten modelevaluaties uitvoeren. Dit omvat het testen en documenteren van het model volgens de stand van de techniek, met specifieke aandacht voor het identificeren en beperken van kwetsbaarheden. Deze maatregelen zijn bedoeld om systematische risico's te adresseren en te verminderen. Deze vereiste is een aanvulling op de genoemde verplichtingen in artikel 53 van de AI-verordening.

Systeemrisico betekent: een risico dat specifiek is voor de capaciteiten met een grote impact van AI-modellen voor algemene doeleienden, die aanzienlijke gevolgen hebben voor de markt van de Uniek vanwege hun bereik, of vanwege feitelijke of redelijkerwijs te voorziene negatieve gevolgen voor de gezondheid, de veiligheid, de openbare veiligheid, de grondrechten of de samenleving als geheel, en dat op grote schaal in de hele waardeketen kan worden verspreid.

Systeemrisico\u2019s nemen logischerwijs toe naargelang de capaciteiten en het bereik van een model groter zijn, kunnen zich voordoen gedurende de gehele levenscyclus van het model en worden be\u00efnvloed door elementen als misbruik van het model, de betrouwbaarheid, billijkheid, beveiliging en mate van autonomie ervan. Ook worden ze be\u00efnvloed door de toegang van het model tot instrumenten, nieuwe of gecombineerde modaliteiten, introductie- en distributiestrategie\u00ebn, en door het potentieel om waarborgen te omzeilen en andere factoren.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-30-ai-modellen-algemene-doeleinden-systeemrisico/#bronnen","title":"Bronnen","text":"
  • Artikel 55 Verordening Artifici\u00eble Intelligentie
  • [Overweging 110 Verordening Artifici\u00eble Intelligentie]
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-30-ai-modellen-algemene-doeleinden-systeemrisico/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-model voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-30-ai-modellen-algemene-doeleinden-systeemrisico/#risico","title":"Risico","text":"

Niet voldoen aan deze verplichtingen kan leiden tot negatieve gevolgen voor de gezondheid, veiligheid, de openbare veiligheid, de grondrechten of de samenleving als geheel.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-31-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten/","title":"Als AI-modellen voor algemene doeleinden met systeemrisico\u2019s ernstige incidenten veroorzaken, wordt dit gedocumenteerd en gerapporteerd","text":"

aia-31Monitoring en beheerProjectleiderGovernanceTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-31-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico moeten relevante informatie over ernstige incidenten en mogelijke corrigerende maatregelen bijhouden, documenteren en onverwijld rapporteren aan het AI bureau en, in voorkomend geval, aan de nationale bevoegde autoriteiten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-31-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten/#toelichting","title":"Toelichting","text":"

Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico moeten ernstige incidenten documenteren en rapporteren. Deze informatie moet onmiddellijk worden gemeld aan het AI-bureau en eventueel aan nationale autoriteiten. Dit proces is cruciaal voor het waarborgen van de veiligheid en het nemen van passende corrigerende maatregelen. Dit vereiste is een aanvulling op de in artikel 53 AI-verordening genoemde verplichtingen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-31-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten/#bronnen","title":"Bronnen","text":"

Artikel 55(1c) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-31-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-model voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-31-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten/#risico","title":"Risico","text":"

Niet voldoen aan deze verplichtingen kan leiden tot risico's op veiligheidsincidenten, datalekken en schade aan de betrokken partijen en het publiek.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-32-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging/","title":"AI-modellen voor algemene doeleinden met systeemrisico\u2019s zijn voldoende beveiligd tegen cyberaanvallen","text":"

aia-32OntwikkelenMonitoring en beheerOntwikkelaarGovernanceTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-32-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging/#vereiste","title":"Vereiste","text":"

Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico zorgen voor een passend niveau van cyberbeveiligingsbescherming voor het AI-model voor algemene doeleinden met een systeemrisico en de fysieke infrastructuur van het model.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-32-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging/#toelichting","title":"Toelichting","text":"

Aanbieders van AI-modellen met systeemrisico moeten zorgen voor passende cyberbeveiligingsmaatregelen. Dit omvat het beschermen van zowel het AI-model als de fysieke infrastructuur tegen potenti\u00eble cyberdreigingen. Het doel is om de integriteit en veiligheid van het model en de infrastructuur te waarborgen. Dit vereiste is een aanvulling op de in artikel 53 AI-verordening genoemde verplichtingen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-32-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging/#bronnen","title":"Bronnen","text":"

Artikel 55(1d) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-32-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-model voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-32-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging/#risico","title":"Risico","text":"

Niet voldoen aan deze verplichtingen kan leiden tot risico's op veiligheidsincidenten, datalekken en schade aan de betrokken partijen en het publiek.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-33-verwerking-in-testomgeving/","title":"AI-testomgevingen die persoonsgegevens verwerken, voldoen aan strenge voorwaarden","text":"

aia-33OrganisatieverantwoordelijkhedenOntwikkelenDataverkenning en datapreparatieJuristOntwikkelaarProjectleiderPrivacy en gegevensbeschermingData

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-33-verwerking-in-testomgeving/#vereiste","title":"Vereiste","text":"

Rechtmatig voor andere doeleinden verzamelde persoonsgegevens mogen uitsluitend in de AI-testomgeving voor regelgeving worden verwerkt ten behoeve van het ontwikkelen, trainen en testen van bepaalde AI-systemen en indien aan alle voorwaarden van art. 57 is voldaan.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-33-verwerking-in-testomgeving/#toelichting","title":"Toelichting","text":"

De verwerking van persoonsgegevens voor AI-testdoeleinden is mogelijk maar het moet voldoen aan strikte voorwaarden die zijn opgenomen in artikel 57 AI-Verordening. Hierbij kan worden gedacht aan voorwaarden als het beschermen van persoonsgevens met passende technische en organisatorische maatregelen, persoonsgegevens die in de testomgeving worden aangemaakt mogen niet buiten de testomgeving worden gedeeld en logbestanden worden bijgehouden voor de duur van de deelname aan de testomgeving. Voor toepassingen voor het verder verwerken van gegevens kan worden gedacht aan het ontwikkelen van een AI-systeem zodat een overheidsinstantie of een andere natuurlijke of rechtspersoon een aanzienlijk openbaar belang kan waarborgen, bijvoorbeeld op het gebied van kwaliteit van milieu, duurzaamheid, openbare veiligheid en gezondheid.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-33-verwerking-in-testomgeving/#bronnen","title":"Bronnen","text":"
  • Artikel 57 Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-33-verwerking-in-testomgeving/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-model voor algemene doeleindenAI-systeemAI-systeem voor algemene doeleindenAanbiederGebruiksverantwoordelijke

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-33-verwerking-in-testomgeving/#risico","title":"Risico","text":"

Verdere verwerking van persoonsgegevens buiten een AI-testomgeving vergroot de kans op bijvoorbeeld het lekken van de persoonsgegevens, wat kan leiden tot een inbreuk op de privacyrechten van betrokken.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-34-monitoring-na-het-in-de-handel-brengen/","title":"Hoog-risico-AI-systemen zijn voorzien van een monitoringsysteem","text":"

aia-34Monitoring en beheerProjectleiderTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-34-monitoring-na-het-in-de-handel-brengen/#vereiste","title":"Vereiste","text":"

Aanbieders moeten een systeem voor monitoring na het in de handel brengen vaststellen en documenteren op een manier die evenredig is aan de aard van de AI-technologie\u00ebn en de risico\u2019s van het AI-systeem met een hoog risico.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-34-monitoring-na-het-in-de-handel-brengen/#toelichting","title":"Toelichting","text":"

Aanbieders moeten een monitoringssysteem opzetten voor het monitoren na het in de handel brengen. Dit systeem moet documenteren op een wijze die passend is bij de aard van de AI-technologie\u00ebn en de risico's van het betreffende AI-systeem met een hoog risico. Dit monitoringssysteem moet proportioneel zijn aan de complexiteit en potenti\u00eble impact van het AI-systeem.

Het systeem voor monitoring na het in de handel brengen verzamelt, documenteert en analyseert actief en systematisch relevante data die door gebruiksverantwoordelijken kunnen zijn verstrekt of via andere bronnen kunnen zijn verzameld, over de prestaties van AI-systemen met een hoog risico gedurende hun hele levensduur. Dit stelt de aanbieder in staat na te gaan of AI-systemen blijvend voldoen aan de in hoofdstuk III, afdeling 2, van de AI-verordening vermelde voorschriften. In voorkomend geval omvat de monitoring na het in de handel brengen een analyse van de interactie met andere AI-systemen. Deze verplichting geldt niet voor gevoelige operationele gegevens van gebruiksverantwoordelijken die rechtshandhavingsinstanties zijn.

Het systeem voor monitoring na het in de handel brengen is gebaseerd op een plan voor monitoring na het in de handel brengen. Het plan voor monitoring na het in de handel brengen maakt deel uit van de in bijlage IV bedoelde technische documentatie.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-34-monitoring-na-het-in-de-handel-brengen/#bronnen","title":"Bronnen","text":"

Artikel 72(1) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-34-monitoring-na-het-in-de-handel-brengen/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-34-monitoring-na-het-in-de-handel-brengen/#risico","title":"Risico","text":"

Zonder monitoringssysteem voor na het in handel brengen is er een risico dat verminderde pestaties van een AI-systeem met hoog risico ongedeteceerd blijven. Een aanbieder kan niet nagaan of een AI-systeem blijvend voldoet aan voorschriften.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-35-melding-ernstige-incidenten/","title":"Ernstige incidenten door hoog-risico-AI-systemen worden gemeld aan de toezichthouder","text":"

aia-35OrganisatieverantwoordelijkhedenMonitoring en beheerProjectleiderGovernance

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-35-melding-ernstige-incidenten/#vereiste","title":"Vereiste","text":"

Aanbieders van in de Europese Unie in de handel gebrachte AI-systemen met een hoog risico melden ernstige incidenten bij de markttoezichtautoriteiten van de lidstaten waarin dat incident heeft plaatsgevonden.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-35-melding-ernstige-incidenten/#toelichting","title":"Toelichting","text":"

Aanbieders van AI-systemen met een hoog risico die binnen de EU worden verhandeld, moeten ernstige incidenten melden bij de markttoezichtautoriteiten van de lidstaten waar het incident heeft plaatsgevonden. Een 'ernstig incident' wordt in artikel 3 van de AI-verordening gedefinieerd als: een incident of gebrekkig functioneren van een AI-systeem dat direct of indirect leidt tot:

  1. het overlijden van een persoon of ernstige schade voor de gezondheid van een persoon;
  2. een ernstige en onomkeerbare verstoring van het beheer of de exploitatie van kritieke infrastructuur;
  3. een schending van de uit het recht van de Unie voortvloeiende verplichtingen ter bescherming van de grondrechten;
  4. ernstige schade aan eigendommen of het milieu.

Dit meldingsproces is bedoeld om snel en adequaat te reageren op ernstige incidenten die zich voordoen bij het gebruik van deze AI-systemen, en om passende maatregelen te nemen ter bescherming van de consumenten en het publiek. Het doel is om de veiligheid en betrouwbaarheid van AI-systemen te waarborgen en mogelijke risico's voor gebruikers te minimaliseren.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-35-melding-ernstige-incidenten/#bronnen","title":"Bronnen","text":"

Artikel 73(1) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-35-melding-ernstige-incidenten/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAanbieder

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-35-melding-ernstige-incidenten/#risico","title":"Risico","text":"

Het niet melden van ernstige incidenten kan leiden tot vertraagde reactie op potenti\u00eble gevaren voor gebruikers en kan het vertrouwen in AI-systemen ondermijnen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-36-melding-inbreuk-op-ai-verordening/","title":"Klokkenluiders kunnen veilig melden dat een organisatie zich niet houdt aan de AI-verordening","text":"

aia-36OrganisatieverantwoordelijkhedenMonitoring en beheerProjectleiderGovernanceMenselijke controle

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-36-melding-inbreuk-op-ai-verordening/#vereiste","title":"Vereiste","text":"

Inbreuken op de AI verordening moeten gemeld kunnen worden en melders moeten dit op een veilige en vertrouwelijke manier kunnen doen, zoals beschreven in Richtlijn (EU) 2019/1937.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-36-melding-inbreuk-op-ai-verordening/#toelichting","title":"Toelichting","text":"

Personen die optreden als klokkenluiders bij inbreuken op de AI-verordening, moeten worden beschermd uit hoofde van het Unierecht. Richtlijn (EU) 2019/1937 (https://eur-lex.europa.eu/legal-content/NL/LSU/?uri=CELEX:32019L1937) van het Europees Parlement en de Raad moet daarom van toepassing zijn. De richtlijn biedt een kader voor het veilig en vertrouwelijk melden van schendingen van de verordening, terwijl het de melders (\"klokkenluiders\") beschermt tegen represailles of vervolging. Deze richtlijn bevordert transparantie en verantwoording binnen organisaties en draagt bij aan een cultuur van naleving en integriteit.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-36-melding-inbreuk-op-ai-verordening/#bronnen","title":"Bronnen","text":"

Artikel 87 Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-36-melding-inbreuk-op-ai-verordening/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":"

AI-systeemAI-systeem voor algemene doeleindenAI-model voor algemene doeleindenAanbiederGebruiksverantwoordelijke

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-36-melding-inbreuk-op-ai-verordening/#risico","title":"Risico","text":"

Gebrek aan een veilige omgeving kan ertoe leiden dat klokkenluiders geen melding maken van inbreuk op de AI-verordening. Dit schaadt het rapportagesysteem en heeft negatief effect op het maatschappelijk welzijn.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-37-recht-klacht-indienen-bij-ai-bureau/","title":"Klachtrecht aanbieders verder in AI-waardeketen","text":"

aia-37OrganisatieverantwoordelijkhedenProjectleiderFundamentele rechten

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-37-recht-klacht-indienen-bij-ai-bureau/#vereiste","title":"Vereiste","text":"

Aanbieders verder in de AI-waardeketen hebben het recht een klacht in te dienen wegens inbreuk op de AI verordening bij het AI-bureau.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-37-recht-klacht-indienen-bij-ai-bureau/#toelichting","title":"Toelichting","text":"

Aanbieders verder in de AI-waardeketen hebben het recht om een klacht in te dienen bij het AI-bureau in het geval van een inbreuk op de AI-verordening. Dit biedt hen een mechanisme om actie te ondernemen bij schendingen van de regels met betrekking tot AI-modellen voor algemene doeleinden die zij ge\u00efntrigeerd hebben in AI-systemen. Het AI-bureau kan dan passende maatregelen nemen om de naleving van de verordening te handhaven en eventuele geschillen tussen aanbieders op te lossen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-37-recht-klacht-indienen-bij-ai-bureau/#bronnen","title":"Bronnen","text":"

Artikel 89(2) Verordening Artifici\u00eble Intelligentie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-37-recht-klacht-indienen-bij-ai-bureau/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/aia-37-recht-klacht-indienen-bij-ai-bureau/#risico","title":"Risico","text":"

Gebrek aan klachtrecht verhindert het AI-bureau om tijdig en zorgvuldig te kunnen ingrijpen bij overtreding van de AI-verordening.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/arc-01-archiefwet/","title":"Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet","text":"

arc-01UitfaserenMonitoring en beheerOntwikkelenProjectleiderOntwikkelaarTransparantieData

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/arc-01-archiefwet/#vereiste","title":"Vereiste","text":"

Overheidsorganen zijn verplicht de onder hen berustende archiefbescheiden in goede, geordende en toegankelijke staat te brengen en te bewaren, alsmede zorg te dragen voor de vernietiging van de daarvoor in aanmerking komende archiefbescheiden.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/arc-01-archiefwet/#toelichting","title":"Toelichting","text":"

Volgens de Archiefwet moeten overheden informatie bewaren. Op basis van deze informatie moet gereconstrueerd kunnen worden hoe besluiten, ook in de context van algoritmes, tot stand zijn gekomen. Informatie over en van algoritmes moet daarom op basis van de selectielijst bewaard en vernietigd worden.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/arc-01-archiefwet/#bronnen","title":"Bronnen","text":"
  • Artikel 3 Archiefwet 1995
  • Artikel 15 lid 2 Archiefwet 1995
  • Archiefbesluit 1995
  • Archiefregeling
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/arc-01-archiefwet/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/arc-01-archiefwet/#risico","title":"Risico","text":"

Zonder goede toepassing van de Archiefwet is het voor betrokkene(n) of derden niet mogelijk om achteraf te reconstrueren en te controleren hoe besluiten, waar algoritmes aan hebben bijgedragen, tot stand zijn gekomen. Het nalaten om archiefbescheiden na verloop van tijd te verwijderen brengt risico's met zich mee op het gebied van privacy en informatiebeveiliging.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aut-01-auteursrechten/","title":"Auteursrechten zijn beschermd","text":"

aut-01Dataverkenning en datapreparatieOntwerpJuristDataGovernance

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aut-01-auteursrechten/#vereiste","title":"Vereiste","text":"

Auteursrechten mogen niet geschonden worden bij het ontwikkelen en gebruiken van algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aut-01-auteursrechten/#toelichting","title":"Toelichting","text":"

Bepaalde type algoritmes worden ontwikkeld op basis van grote hoeveelheden data. Deze data wordt gebruikt voor het trainen en testen van algoritmes. Het gebruiken van deze data mag geen inbreuk maken op auteursrechten van diegene die deze rechten heeft. Ook de gegenereerde output van algoritmes mag geen inbreuk maken op deze rechten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aut-01-auteursrechten/#bronnen","title":"Bronnen","text":"
  • Artikel 1 Auteurswet
  • Artikel 4-9 Auteurswet
  • Artikel 10 Auteurswet
  • Artikel 13 Auteurswet
  • Artikel 15n jo. 15o Auteurswet
  • Artikel 3 en 4 van de DSM-richtlijn (EU 2019/790)
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/aut-01-auteursrechten/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/aut-01-auteursrechten/#risico","title":"Risico","text":"

Het niet voldoen aan het auteursrecht kan leiden tot onrechtmatig gebruik van auteursrechtelijk beschermde inhoud, wat kan resulteren in mogelijke juridische geschillen, boetes en schadevergoedingen voor inbreuk op het auteursrecht. Bovendien kan het niet naleven van het auteursrecht het vertrouwen van gebruikers en belanghebbenden ondermijnen, wat kan leiden tot reputatieschade en gebrek aan vertrouwen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-01-persoonsgegevens-worden-rechtmatig-verwerkt/","title":"Persoonsgegevens worden op een rechtmatige manier verwerkt","text":"

avg-01ProbleemanalyseOntwerpDataverkenning en datapreparatieProjectleiderJuristPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-01-persoonsgegevens-worden-rechtmatig-verwerkt/#vereiste","title":"Vereiste","text":"

De verwerking van persoonsgegevens moet rechtmatig plaatsvinden.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-01-persoonsgegevens-worden-rechtmatig-verwerkt/#toelichting","title":"Toelichting","text":"

De verwerking van persoonsgegevens moet rechtmatig plaatsvinden, wat betekent dat de verwerking gebaseerd moet zijn op \u00e9\u00e9n van de wettelijke grondslagen die zijn geformuleerd in artikel 6 Algemene Verordening Gegevensbescherming. Persoonsgegevens mogen alleen worden verzameld voor specifieke, duidelijk omschreven en gerechtvaardigde doeleinden. Het is niet toegestaan om deze gegevens verder te verwerken op een manier die niet verenigbaar is met deze oorspronkelijke doeleinden.

Bij het verwerken van persoonsgegevens ten behoeve van de ontwikkeling en gebruik van algoritmes moet worden onderzocht of dit kan worden gebaseerd op \u00e9\u00e9n van de verwerkingsgrondslagen. Het is van belang dat wordt uitgewerkt welke persoonsgegevens waarvoor worden verwerkt en op basis van welke grondslag. Hierbij kan worden gedacht aan persoonsgegevens ten behoeve van trainingsdata, voor het genereren van output of, indien (juridisch) mogelijk, voor het uitvoeren van een onderzoek naar onbewuste vooringenomenheid.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-01-persoonsgegevens-worden-rechtmatig-verwerkt/#bronnen","title":"Bronnen","text":"
  • Artikel 5 lid 1 onder a en b Algemene Verordening Gegevensbescherming
  • Artikel 6 lid 1 onder b Algemene Verordening Gegevensbescherming
  • Artikel 6 Algemene Verordening Gegevensbescherming
  • Overweging 39 en 45 Algemene Verordening Gegevensbescherming
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-01-persoonsgegevens-worden-rechtmatig-verwerkt/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-01-persoonsgegevens-worden-rechtmatig-verwerkt/#risico","title":"Risico","text":"

Het risico wanneer persoonsgegevens niet op een rechtmatige manier worden verwerkt (verzamelen van gegevens valt hier ook onder), is dat er niet aan de AVG wordt voldaan. Er worden dan onrechtmatig persoonsgegevens verwerkt, waarmee privacy van personen in het geding komt. Ook kan het leiden tot hoge boetes voor organisaties, en kan een datalek plaatsvinden.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-02-beperkte-bewaartermijn-van-persoonsgegevens/","title":"Persoonsgegevens worden zo kort mogelijk bewaard","text":"

avg-02OntwerpDataverkenning en datapreparatieOntwikkelenUitfaserenOntwikkelaarBeleid en adviesPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-02-beperkte-bewaartermijn-van-persoonsgegevens/#vereiste","title":"Vereiste","text":"

Persoonsgegevens moeten worden bewaard in een vorm die het mogelijk maakt om de betrokkenen niet langer te identificeren dan nodig is voor de realisering van de doeleinden waarvoor de persoonsgegevens initieel worden verwerkt.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-02-beperkte-bewaartermijn-van-persoonsgegevens/#toelichting","title":"Toelichting","text":"

Persoonsgegevens dienen toereikend en ter zake dienend te zijn en beperkt te blijven tot wat noodzakelijk is voor de doeleinden waarvoor zij worden verwerkt. Dit vereist dat ervoor wordt gezorgd dat de opslagperiode van de persoonsgegevens tot een strikt minimum wordt beperkt. Het beginsel van opslagbeperking betekent dat persoonsgegevens moeten worden bewaard in een vorm die het mogelijk maakt om de betrokkenen niet langer te identificeren dan voor de realisering van de doeleinden waarvoor de persoonsgegevens worden verwerkt.

In de context van algoritmes is het belangrijk dat, wanneer persoonsgegevens worden verwerkt, er onderzocht wordt op welke manieren identificatie van betrokkenen tegen kan worden gegaan. Hierbij kan worden gedacht aan maatregelen als pseudonomisering en anonimisering.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-02-beperkte-bewaartermijn-van-persoonsgegevens/#bronnen","title":"Bronnen","text":"

Artikel 5 lid 1 onder de AVG

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-02-beperkte-bewaartermijn-van-persoonsgegevens/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-02-beperkte-bewaartermijn-van-persoonsgegevens/#risico","title":"Risico","text":"

Het onnodig lang bewaren van persoonsgegevens levert een onrechtmatige situatie op. De privacyrechten van betrokken worden hierdoor aangetast. Er ontstaan aanvullende risico's bij bijvoorbeeld een datalek.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-03-minimale-verwerking-van-persoonsgegevens/","title":"Persoonsgegevens worden zo min mogelijk verwerkt","text":"

avg-03OntwerpDataverkenning en datapreparatieOntwikkelenJuristOntwikkelaarPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-03-minimale-verwerking-van-persoonsgegevens/#vereiste","title":"Vereiste","text":"

De verwerking van persoonsgegevens moet minimaal worden gehouden, dat wil zeggen dat die verwerking toereikend moet zijn, ter zake dienend en beperkt tot wat noodzakelijk is voor de doeleinden waarvoor zij worden verwerkt.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-03-minimale-verwerking-van-persoonsgegevens/#toelichting","title":"Toelichting","text":"

Het is van belang dat \u00e9nkel persoonsgegevens worden verwerkt die noodzakelijk zijn gezien de doeleinden van die vewerking. Er moet een beoordeling worden gemaakt welke persoonsgegevens dit wel en eventueel niet zijn. Voor het ontwikkelen en gebruiken van algoritmes is het van belang om te beoordelen welke persoonsgegevens noodzakelijk zijn om het beoogde doel te bereiken. Afhankelijk van de toepassing vraagt dit om een intensieve toets. Er moet voor worden gezorgd dat persoonsgegevens die niet als noodzakelijk worden beschouwd, buiten de verwerking blijven.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-03-minimale-verwerking-van-persoonsgegevens/#bronnen","title":"Bronnen","text":"

Artikel 5 lid 1 onder c Algemene Verordening Gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-03-minimale-verwerking-van-persoonsgegevens/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-03-minimale-verwerking-van-persoonsgegevens/#risico","title":"Risico","text":"

Het onnodig verwerken van persoonsgegevens kan een inbreuk maken op rechten van betrokkenen, en zou kunnen leiden tot een datalek.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-04-proportionaliteit-en-subsidiariteit/","title":"Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair","text":"

avg-04OntwerpDataverkenning en datapreparatieJuristOntwikkelaarFundamentele rechtenPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-04-proportionaliteit-en-subsidiariteit/#vereiste","title":"Vereiste","text":"

Gegevensverwerking moet in verhouding staan tot het beoogde doel en persoonsgegevens mogen alleen verwerkt worden als er geen minder ingrijpende manier is om het doel te bereiken. Voor zover het gaat om de verwerking van persoonsgegevens moet dit vereiste aantoonbaar zijn.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-04-proportionaliteit-en-subsidiariteit/#toelichting","title":"Toelichting","text":"

Proportionaliteit vereist dat de impact van gegevensverwerking op de persoonlijke levenssfeer voor de toepassing van een algoritme en voor het genereren van de benodigde output in balans is met het beoogde doel. Subsidiariteit vereist dat persoonsgegevens alleen moeten worden verwerkt als dit de minst inbreukmakende manier is om het doel te bereiken. Deze principes waarborgen dat de privacy van individuen wordt gerespecteerd en dat gegevensverwerking niet verder gaat dan noodzakelijk is voor legitieme doeleinden. Het is van belang om deze principes te hanteren om te bepalen of en in welke vorm een algoritmes moet worden toegepast en om tot een passende mate van gegevensverwerking te komen om het doel te bereiken.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-04-proportionaliteit-en-subsidiariteit/#bronnen","title":"Bronnen","text":"
  • Artikel 5(1)(c) Algemene Verordening Gegevensbescherming
  • Overweging 170 Algemene Verordening Gegevensbescherming
  • Artikel 5(4) Verdrag betreffende de Europese Unie, Maastricht, 07-02-1992 |
  • Artikel 52 Handvest van de Grondrechten van de Europese Unie
  • Protocol betreffende de toepassing van de beginselen van subsidiariteit en evenredigheid Verdrag betreffende de Europese Unie, Maastricht, 07-02-1992
  • Artikel 1.10, 1.13 en 1.16 Aanbestedingswet 2012
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-04-proportionaliteit-en-subsidiariteit/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-04-proportionaliteit-en-subsidiariteit/#risico","title":"Risico","text":"

Zonder toetsing aan het proportinaliteits- en subsidiariteitsbeginsel ontstaat het risico dat er een onnodig zware en daardoor onrechtmatige inbreuk wordt gemaakt op de privacyrechten van betrokkenen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-05-juistheid-en-actualiteit-van-persoonsgegevens/","title":"Persoonsgegevens zijn juist en actueel","text":"

avg-05Dataverkenning en datapreparatieOntwikkelaarProjectleiderPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-05-juistheid-en-actualiteit-van-persoonsgegevens/#vereiste","title":"Vereiste","text":"

De te verwerken persoonsgegevens zijn juist, nauwkeurig en worden zo nodig geactualiseerd of gewist.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-05-juistheid-en-actualiteit-van-persoonsgegevens/#toelichting","title":"Toelichting","text":"

De te verwerken persoonsgegevens moeten nauwkeurig, juist en zo nodig actueel zijn. Dit betekent dat alle maatregelen moeten worden genomen om ervoor te zorgen dat onjuiste persoonsgegevens worden gerectificeerd of gewist. Dat kan betekenen dat persoonsgegevens moeten worden geactualiseerd of verbeterd. In de context van algoritmes is het van belang dat ook daar wordt onderzocht welke maatregelen nodig zijn om die juistheid toe te passen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-05-juistheid-en-actualiteit-van-persoonsgegevens/#bronnen","title":"Bronnen","text":"

Artikel 5 lid 1 sub d Algemene Verordening Gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-05-juistheid-en-actualiteit-van-persoonsgegevens/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-05-juistheid-en-actualiteit-van-persoonsgegevens/#risico","title":"Risico","text":"

Als er geen rekening wordt gehouden met de juistheid, nauwkeurigheid en volledigheid van persoonsgegevens, kunnen kwaliteit en integriteit van data niet voldoende worden gewaarborgd.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-06-verantwoordingsplicht-rechtmatigheid/","title":"Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken","text":"

avg-06OntwerpDataverkenning en datapreparatieJuristGovernancePrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-06-verantwoordingsplicht-rechtmatigheid/#vereiste","title":"Vereiste","text":"

De verantwoordelijken moeten bij de verwerking van persoonsgegevens door algoritmes kunnen aantonen dat de verwerkingen rechtmatig plaatsvinden. Dit betekent concreet dat de volgende punten aangetoond kunnen worden:

  • Rechtmatigheid, behoorlijkheid en transparantie
  • Doelbinding
  • Minimale gegevensverwerking
  • Juistheid
  • Opslagbeperking
  • Integriteit en vertrouwelijkheid

Een aandachtpunt daarbij is dat de rechtmatigheid van de verwerking ten opzichte van andere gerelateerde wetgeving zoals de AI Act en de Algemene wet gelijke behandeling ook moeten kunnen worden aangetoond voor zover de rechtmatigheid van de verwerking onder de AVG daarvan afhankelijk is.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-06-verantwoordingsplicht-rechtmatigheid/#toelichting","title":"Toelichting","text":"

Bij het verwerken van persoonsgegevens voor algoritmes moeten de verantwoordelijkheden duidelijk beschreven en toegewezen zijn. De verwerkingsverantwoordelijke is degene die ervoor zorgt dat deze verantwoordelijkheden worden nageleefd en kan dit aantonen, wat bekend staat als de verantwoordingsplicht. Deze maatregelen zijn essentieel om de naleving van regelgeving met betrekking tot gegevensbescherming te waarborgen en het vertrouwen van gebruikers in de verwerking van hun gegevens te vergroten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-06-verantwoordingsplicht-rechtmatigheid/#bronnen","title":"Bronnen","text":"
  • Artikel 5 lid 2 Algemene Verordening Gegevensbescherming
  • Artikel 24 Algemene Verordening Gegevensbescherming
  • Artikel 26 Algemene Verordening Gegevensbescherming
  • Artikel 27 Algemene Verordening Gegevensbescherming
  • Artikel 29 Algemene Verordening Gegevensbescherming
  • Verantwoordingsplicht
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-06-verantwoordingsplicht-rechtmatigheid/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-06-verantwoordingsplicht-rechtmatigheid/#risico","title":"Risico","text":"

Het niet naleven van deze norm moet worden gekwalificeerd als een onrechtmatigheid, niet als een risico voor de rechten en vrijheden van betrokkenen onder de AVG. Maar het niet voldoen aan artikel 5 betekent in de praktijk vaak wel dat er onvoldoende zicht is op risico's voor de rechten en vrijheden van betrokkenen of dat er te grote risico's worden genomen. Deze gevolgen zijn echter indirect een gevolg van het niet naleven van artikel 5 AVG. Het moeten voldoen aan het aantoonbaarheidsvereiste kan wel risico's hebben voor de organisatie die een algortime inzet. Enkele risico's zijn:

  • Aantoonbaarheidsvereisten vragen in de praktijk veel documentatie. Deze documentatie kan via de Woo opgevraagd worden. Het ontbreken van documentatie kan door externen vaak relatief makkelijk in verband worden gebracht met een overtreding van deze vereisten.
  • Algoritmes die van nature slecht inzichtelijk en uitlegbaar zijn (zoals deep-learning) hebben een zeer hoge drempel om aan deze vereiste te voldoen. Aantonen van rechtmatigheid is voor een belangrijk deel afhankelijk van inzicht in de werking van het algoritme. De inzet van een algortime kan dus mogelijk tegengehouden worden door deze vereisten.
  • Bij leveranciers die niet of gedeeltelijke transparant zijn over hun product of dienstverlening ontstaat een vergelijkbaar risico. Waar de Woo uitzonderingen heeft voor bedrijfsgeheimen heeft de AVG daar maar beperkte ruimte voor. Het is dus mogelijk dat leveranciers terughoudend zullen zijn met het delen van informatie die onder de AVG ook aan betrokkenen gecommuniceerd moeten worden.
  • Samenwerkingsverbanden en externe leveranciers kunnen niet als argumenten worden gebruikt om de aantoonbaarheidsvereisten op af te schuiven. Onafhankelijk van de onderlinge afspraken daarover hebben alle verwerkingsverantwoordelijken de verplichting om aan deze vereisten te kunnen voldoen.
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-07-transparantie-bij-verwerken-persoonsgegevens/","title":"Organisaties zijn transparant over het verwerken van persoonsgegevens","text":"

avg-07ImplementatieMonitoring en beheerOntwikkelaarProjectleiderPrivacy en gegevensbeschermingTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-07-transparantie-bij-verwerken-persoonsgegevens/#vereiste","title":"Vereiste","text":"

De verwerking van persoonsgegevens moet transparant zijn.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-07-transparantie-bij-verwerken-persoonsgegevens/#toelichting","title":"Toelichting","text":"

Een betrokkene moet op de hoogte worden gesteld van het feit dat er verwerking plaatsvindt van diens persoonsgegevens en van de doeleinden daarvan (zoals ook is verwoord in het beginsel van transparante verwerking, artikel 5 AVG). Hierbij moeten de specifieke omstandigheden en de context waarin de persoonsgegevens worden verwerkt, worden meegenomen. In artikel 13 en 14 AVG wordt toegelicht welke informatie in welke gevallen moet worden verstrekt door de verwerkersverantwoordelijke. Als persoonsgegevens worden verwerkt ten behoeve van het ontwikkelen of gebruiken van algoritmes, zal deze informatie moeten worden verstrekt.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-07-transparantie-bij-verwerken-persoonsgegevens/#bronnen","title":"Bronnen","text":"
  • Artikel 5 lid 1 Algemene Verordening Gegevensbescherming
  • Artikel 12 Algemene Verordening Gegevensbescherming
  • Artikel 13 Algemene Verordening Gegevensbescherming
  • Artikel 14 Algemene Verordening Gegevensbescherming
  • Overweging 58 Algemene Verordening Gegevensbescherming
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-07-transparantie-bij-verwerken-persoonsgegevens/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-07-transparantie-bij-verwerken-persoonsgegevens/#risico","title":"Risico","text":"

Rechten van betrokken worden geschonden als er geen sprake is van transparantie over de verwerkingen van de persoonsgegevens.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-08-wettelijke-verwerking-van-gevoelige-gegevens/","title":"Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt","text":"

avg-08OntwerpDataverkenning en datapreparatieProjectleiderJuristBeleid en adviesPrivacy en gegevensbeschermingBias en non discriminatie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-08-wettelijke-verwerking-van-gevoelige-gegevens/#vereiste","title":"Vereiste","text":"

Bijzondere categorie\u00ebn van persoonsgegevens mogen alleen worden verwerkt op basis van een wettelijke uitzondering.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-08-wettelijke-verwerking-van-gevoelige-gegevens/#toelichting","title":"Toelichting","text":"

Persoonsgegevens die door hun aard bijzonder gevoelig zijn wat betreft de grondrechten en fundamentele vrijheden, verdienen specifieke bescherming. Dit komt doordat de context van de verwerking ervan significante risico's kan meebrengen voor de grondrechten en de fundamentele vrijheden. Denk hierbij aan persoonsgegevens als ras, ethnische afkomst, politieke opvattingen of religieuze of levenschouwelijke overtuigingen.

Bijzondere categorie\u00ebn persoonsgegevens mogen alleen worden verwerkt als er hier een wettelijke uitzondering voor is (artikel 9 AVG en artikel 30 UAVG). Deze vereiste is ook van toepassing bij het ontwikkelen en gebruiken van algoritmes en stelt daarmee beperkingen aan het mogen verwerken van deze categorie\u00ebn persoonsgegevens, bv. ten behoeve van trainingsdata of het genereren van de beoogde output.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-08-wettelijke-verwerking-van-gevoelige-gegevens/#bronnen","title":"Bronnen","text":"
  • Artikel 9 AVG
  • Overweging 51 - 54 AVG
  • Artikel 22 - 30 UAVG
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-08-wettelijke-verwerking-van-gevoelige-gegevens/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-08-wettelijke-verwerking-van-gevoelige-gegevens/#risico","title":"Risico","text":"

Het (onrechtmatige) verwerken van bijzondere categorie\u00ebn persoonsgegevens brengt risico's met zich mee op het gebied van respecteren van de persoonlijke levenssfeer en discriminatie.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-09-inroepen-privacyrecht-bij-verwerking-persoonsgegevens/","title":"Betrokkenen kunnen een beroep doen op hun privacyrechten","text":"

avg-09OrganisatieverantwoordelijkhedenOntwikkelenOntwikkelaarPrivacy en gegevensbeschermingData

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-09-inroepen-privacyrecht-bij-verwerking-persoonsgegevens/#vereiste","title":"Vereiste","text":"

Betrokkenen kunnen een beroep doen op hun privacyrechten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-09-inroepen-privacyrecht-bij-verwerking-persoonsgegevens/#toelichting","title":"Toelichting","text":"

Mensen hebben het recht om hun privacyrechten uit te oefenen door een beroep te doen op verschillende wettelijke bepalingen, zoals het recht op inzage, correctie, verwijdering en bezwaar tegen de verwerking van hun persoonsgegevens. Dit betekent dat individuen controle hebben over hoe hun gegevens worden gebruikt en kunnen verzoeken om toegang te krijgen tot hun gegevens of om wijzigingen aan te brengen indien nodig.

Het kunnen uitoefenen van privacyrechten is essentieel voor het beschermen van de privacy van individuen, het waarborgen van transparantie en controle uitvoeren over persoonsgegevens. Als persoonsgegevens worden verwerkt voor het ontwikkelen en gebruiken van algoritmes, is het van belang dat maatregelen worden getroffen om deze rechten te eerbiedigen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-09-inroepen-privacyrecht-bij-verwerking-persoonsgegevens/#bronnen","title":"Bronnen","text":"

Artikel 15 - 21 Algemene Verordening Gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-09-inroepen-privacyrecht-bij-verwerking-persoonsgegevens/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-09-inroepen-privacyrecht-bij-verwerking-persoonsgegevens/#risico","title":"Risico","text":"

Betrokkenen hebben geen controle over hun persoonsgegevens wanneer ze geen beroep kunnen doen op hun privacyrechten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/","title":"Besluiten die levens kunnen be\u00efnvloeden, zijn niet volledig geautomatiseerd","text":"

avg-10OntwerpImplementatieProjectleiderBeleid en adviesPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/#vereiste","title":"Vereiste","text":"

Betrokkenen hebben het recht om niet onderworpen te worden aan een enkel op geautomatiseerde verwerking, waaronder proflering, gebaseerd besluit, wanneer dit rechtsgevolgen heeft voor hen of het hen anderszins in aanzienlijke mate treft. Dit verbod geldt niet indien de geautomatiseerde individuele besluitvorming, anders dan op basis van profilering, noodzakelijk is om te voldoen aan een wettelijke verplichting die op de verwerkingsverantwoordelijke rust of noodzakelijk is voor de vervulling van een taak van algemeen belang.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/#toelichting","title":"Toelichting","text":"

Overheidsorganisaties zijn vaak belast met de uitvoering van wettelijke taken waarbij zij 'besluiten' moeten nemen, bijvoorbeeld als een burger vraagt om een uitkering, toeslag of een subsidie. Hiervoor moeten gegevens worden verwerkt om te kunnen bepalen of een burger hier ook recht op heeft. Om deze gegevens snel en accuraat te verwerken, zetten overheidsorganisaties vaak algoritmes in. Deze gegevens worden dan vaak 'geautomatiseerd' door deze algoritmes verwerkt, zonder dat een ambtenaar dit werk controleert. Soms wordt het proces voor het nemen van een besluit volledig geautomatiseerd ingericht. Denk hierbij aan het opleggen van een boete voor een snelheidsovertreding. Hierdoor kan in korte tijd en op een effici\u00ebnte wijze, een grote hoeveelheid besluiten worden genomen.

Het geautomatiseerd verwerken van gegevens voor de totstandkoming van een besluit brengt risico's met zich mee. Zeker als hierbij persoonsgegevens van individuen worden verwerkt en er sprake is van profilering. Hierdoor ontstaat bijvoorbeeld het risico op discriminatie. Daarom is in art. 22 AVG het recht voor betrokkenen gecre\u00eberd om niet te worden onderworpen aan een uitsluitend op geautomatiseerde verwerking, waaronder profilering, gebaseerd besluit.

Dit verbod geldt voor besluiten die 'rechtsgevolgen' hebben voor een betrokkene, bijvoorbeeld een burger die een boete ontvangt voor de snelheidsovertreding, of hem anderzijds in aanmerkelijke mate treft. Het besluit mag in die gevallen niet geautomatiseerd worden genomen. Een individu moet namelijk kunnen rekenen op voldoende 'menselijke tussenkomst' bij de beoordeling van belangrijke beslissingen die deze persoon treffen.

Bij het geautomatiseerd uitvoeren van processen dient altijd te worden voldaan aan de voorwaarden uit wetgeving, waaronder in het bijzonder de Algemene Verordening Gegevensbescherming (AVG) en de Algemene wet bestuursrecht(Awb). Bestuursorganen dienen dan ook te handelen conform de algemene beginselen van behoorlijk bestuur. Dit samenstel van regels moet de rechten van betrokkenen borgen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/#algemene-eisen-aan-geautomatiseerde-besluitvorming-door-overheden","title":"Algemene eisen aan geautomatiseerde besluitvorming door overheden","text":"

De Nederlandse wetgever heeft in artikel 40 lid 1 UAVG gebruik gemaakt van de mogelijkheid een uitzondering te maken op het verbod van art. 22 lid 1 AVG. In Nederland is geautomatiseerde besluitvorming toegestaan, als het gaat om besluitvorming waarbij menselijke tussenkomst geen toegevoegde waarde heeft. Dit is het geval als er sprake is van een gebonden karakter waarbij weinig of geen beoordelingsruimte is waarin tot een andere conclusie kan worden gekomen. Hierbij kan worden gedacht aan het toekennen van kinderbijslag of de hoogte van het recht op studiefinanciering. Deze uitzondering geldt niet voor 'profilering', tenzij er specifieke (sectorale) wetgeving het verbod opheft.

Om deze uitzondering toe te kunnen passen, moet er op grond van artikel 22 AVG een 'passende maatregel' in de vorm van wetgeving zijn die personen voldoende bescherming biedt. In Nederland moet de Algemene wet bestuursrecht deze bescherming aan burgers bieden als bestuursorganen besluiten nemen. De Awb bevat vereisten en algemene beginselen waaraan besluitvorming moet voldoen.

Bij het toepassen van geautomatiseerde besluitvorming, moet aan de hand van een DPIA wordt vastgesteld of er bij toepassing van de Awb daadwerkelijk voldoende bescherming wordt geboden. Een verwerkersverantwoordelijke zal dus, naast het toepassen van vereisten uit de AVG en specifieke (sectorale) wetgeving, beginselen uit de Awb moeten vertalen naar concrete maatregelen om geautomatiseerde besluitvorming op een rechtmatige wijze toe te passen. Hierbij kan worden gedacht aan het toepassen van motiveringsbeginsel of het zorgvuldigheidsbeginsel.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/#begrippen","title":"Begrippen","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/#profilering","title":"Profilering","text":"

Profilering is bijzonder gevoelig. Bij profilering gaat het om elke vorm van een geautomatiseerde verwerking van persoonsgegevens, waarbij aan de hand van persoonsgegevens bepaalde persoonlijke aspecten van een natuurlijke persoon worden ge\u00ebvalueerd. Daarbij gaat het voornamelijk om het analyseren of verspellen van zaken als beroepsprestaties, economische situatie, gezondheid, persoonlijke voorkeuren, interesses, betrouwbaarheid, gedrag, locatie of een verplaatsingen.

Volgens deze definitie gaat het om een verwerking door een computersysteem waarbij het systeem algemene aanname(s) toegepast in een concreet geval. Dit doet het door een individu, met gebruikmaking van diens persoonsgegevens, in te delen in een categorie(profiel). Een dergelijk categorie(profiel) wordt vaak in verband gebracht met bepaalde risico's, bijvoorbeeld het risico op het misbruiken van bepaalde publieke voorzieningen. De gevoeligheid is dat nog niet is vastgesteld dat, in dit voorbeeld, de betreffende natuurlijke persoon ook daadwerkelijk misbruik heeft gemaakt van bepaalde voorzieningen. Als daar wel automatisch gevolgen aan worden verbonden, ontstaat het risico op een onrechtmatige behandeling van een natuurlijk persoon.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/#besluit","title":"Besluit","text":"

In deze context moet het begrip 'besluit' worden gehanteerd zoals dit is bedoeld in artikel 22 AVG. Het begrip 'besluit' krijgt in de AVG een ruimere betekenis dan het geval is in artikel 1:3 Algemene wet bestuursrecht (Awb). In de Algemene wet bestuursrecht moet er sprake zijn van een 'rechtsgevolg', maar onder het besluitbegrip van de AVG kunnen ook situaties vallen waarin een individu \u2018slechts\u2019 feitelijke gevolgen ervaart als een besluit wordt genomen. Daarmee biedt de AVG dus bescherming voor meerdere situaties.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/#rechtsgevolgen","title":"Rechtsgevolgen","text":"

Het begrip 'rechtsgevolg' duidt op wijziging in de rechtspositie van betrokkene. Het betekent, juridisch uitgedrukt, een verandering in het geheel van de rechten, aanspraken, bevoegdheden en verplichtingen van \u00e9\u00e9n of meer natuurlijke personen of rechtspersonen. In deze context wijzigt de rechtspositie van een individu door een keuze van het systeem, bijvoorbeeld doordat deze een boete ontvangt. Rechtsgevolgen kwalificeren altijd als relevant.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/#aanmerkelijke-mate-treffen","title":"Aanmerkelijke mate treffen","text":"

De Europese wetgever heeft weinig richting gegeven aan hoe dit begrip moet worden ge\u00efnterpreteerd. Er zijn wel aanknopingspunten om te duiden wanneer hier sprake van is. De EDPB spreekt van ernstige, aanzienlijke effecten, groot of belangrijk genoeg zijn om aandacht te verdienen. Dat is in ieder geval zo als het besluit het potentieel heeft om de omstandigheden, het gedrag of de keuze van de betrokken personen in aanmerkelijke mate te treffen; een langdurig of blijvend effect op de betrokkene te hebben; of in het uiterste geval, tot uitsluiting of discriminatie te leiden. Dit vraagt per geval om een analyse welke 'keuzes' van het systeem welke gevolgen hebben voor een individu en of die gevolgen rechtsgevolgen zijn of alleen een feitelijk gevolg. Zie voor een nadere toelichting hiervoor het advies van de Autoriteit Persoonsgegevens inzake geautomatiseerde selectietechnieken.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/#toepassing","title":"Toepassing","text":"

Volledig geautomatiseerde vaststelling van een publiekrechtelijk besluit zoals een aanslag, een boete of een vergunning heeft rechtsgevolgen. Een beslissing dat een bepaalde aanvraag in aanmerking komt voor handmatige controle heeft op zichzelf geen rechtsgevolg - de rechtspositie van de betrokkene wijzigt (nog) niet. Wel moet beoordeeld worden of de betrokkene door dat besluit anderszins (dus feitelijk) in aanmerkelijke mate wordt getroffen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/#bronnen","title":"Bronnen","text":"
  • Artikel 22 Algemene Verordening Gegevensbescherming
  • Artikel 40 Uitvoeringswet AVG
  • Artikel 1:3 Algemene wet bestuursrecht
  • Advies landsadvocaat over geautomatiseerde selectietechnieken
  • Advies artikel 22 AVG en geautomatiseerde selectie-instrumenten
  • [Kamerbrief met kabinetsreactie AP-advies over geautomatiseerde selectie-instrumenten](Kamerbrief met kabinetsreactie AP-advies over geautomatiseerde selectie-instrumenten0
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/#risico","title":"Risico","text":"

Bij geautomatiseerde besluitvorming kan het risico ontstaan dat kenmerken van een bepaalde groep ten onrechte worden tegengeworpen aan een individu die deze kenmerken niet hoeft te bezitten.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-11-privacy-bij-ontwerp-bij-verwerking-van-persoonsgegevens/","title":"Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen","text":"

avg-11OntwerpDataverkenning en datapreparatieBeleid en adviesProjectleiderJuristOntwikkelaarPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-11-privacy-bij-ontwerp-bij-verwerking-van-persoonsgegevens/#vereiste","title":"Vereiste","text":"

Privacy en gegevensbescherming door goed ontwerp en door standaardinstellingen

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-11-privacy-bij-ontwerp-bij-verwerking-van-persoonsgegevens/#toelichting","title":"Toelichting","text":"

Gegevensbescherming door ontwerp en standaardinstellingen houdt in dat privacy- en gegevensbescherming vanaf het begin worden ge\u00efntegreerd in de ontwikkeling van systemen en processen (ook wel privacy-by-design genoemd). Door al bij het ontwerp rekening te houden met privacyaspecten en door standaardinstellingen die privacy bevorderen, wordt de bescherming van persoonsgegevens versterkt. Hierbij kan worden gedacht een het pseudonimiseren van persoonsgegevens of dataminimalisatie.

Deze aanpak zorgt ervoor dat privacy-overwegingen een integraal onderdeel zijn van alle aspecten van gegevensverwerking en draagt bij aan het vertrouwen van individuen in de veilige omgang met hun gegevens. Dit is eveneens van toepassing als persoonsgegevens worden verwerkt bij het ontwikkelen en gebruiken van algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-11-privacy-bij-ontwerp-bij-verwerking-van-persoonsgegevens/#bronnen","title":"Bronnen","text":"
  • Artikel 25 Algemene Verordening Gegevensbescherming
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-11-privacy-bij-ontwerp-bij-verwerking-van-persoonsgegevens/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-11-privacy-bij-ontwerp-bij-verwerking-van-persoonsgegevens/#risico","title":"Risico","text":"

Door privacy en gegevensbescherming door ontwerp en standaardinstellingen niet toe te passen, kan een inbreuk op rechten van betrokkenen ontstaan.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-12-beveiliging-van-verwerking/","title":"Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen","text":"

avg-12OrganisatieverantwoordelijkhedenJuristOntwikkelaarPrivacy en gegevensbeschermingTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-12-beveiliging-van-verwerking/#vereiste","title":"Vereiste","text":"

Rekening houdend met de stand van de techniek, de uitvoeringskosten, alsook met de aard, de omvang, de context en de verwerkingsdoeleinden en de qua waarschijnlijkheid en ernst uiteenlopende risico's voor de rechten en vrijheden van personen, treffen de verwerkingsverantwoordelijke en de verwerker passende technische en organisatorische maatregelen om een op het risico afgestemd beveiligingsniveau te waarborgen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-12-beveiliging-van-verwerking/#toelichting","title":"Toelichting","text":"

Voor de ontwikkeling en gebruik van algoritmes is data nodig. Deze data kan persoonsgegevens bevatten die moeten worden beschermd. De organisatie zal technische en organisatorische maatregelen moeten treffen om de data en het algoritme voldoende te beschermen. Hierbij kan worden gedacht aan dataminimalisatie, het pseudonimiseren of aggregeren van persoonsgegevens. Per toepassing moet worden onderzocht welke maatregelen hiervoor geschikt zijn.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-12-beveiliging-van-verwerking/#bronnen","title":"Bronnen","text":"

Artikel 32 Algemene Verordening Gegevensbescherming|

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-12-beveiliging-van-verwerking/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-12-beveiliging-van-verwerking/#risico","title":"Risico","text":"

Er kunnen risico's ontstaan zoals potenti\u00eble cyberaanvallen en datalekken. Dit kan leiden bijvoorbeeld tot verlies of diefstal van gevoelige gegevens, verstoring van organisatieprocessen,ongeautoriseerde toegang, vernietiging en onrechtmatige verwerking.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-13-dpia-verplicht/","title":"Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen","text":"

avg-13OntwerpDataverkenning en datapreparatieVerificatie en validatieJuristProjectleiderPrivacy en gegevensbescherming

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-13-dpia-verplicht/#vereiste","title":"Vereiste","text":"

Een gegevensbeschermingseffectbeoordeling (DPIA) is verplicht, indien een verwerking van persoonsgegevens waarschijnlijk een hoog risico inhoudt voor de rechten en vrijheden van natuurlijke personen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-13-dpia-verplicht/#toelichting","title":"Toelichting","text":"

Een Gegevensbeschermingseffectbeoordeling (GEB) of Data Protection Impact Assessment (DPIA) is verplicht wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen. Deze beoordeling identificeert en beperkt potenti\u00eble risico's en zorgt ervoor dat passende maatregelen worden genomen om de privacy van individuen te beschermen. Deze verplichting draagt bij aan een zorgvuldige en verantwoorde omgang met persoonsgegevens in algoritmes, waardoor de privacy van individuen wordt gewaarborgd.

Let op: de DPIA verplichting is niet gebaseerd op de hoog-risico criteria uit de AI-act. Volgens Besluit lijst verwerkingen persoonsgegevens waarvoor een gegevensbeschermingseffectbeoordeling (DPIA) verplicht is, Autoriteit Persoonsgegevens moet voor het uitvoeren van een DPIA in ieder geval uitgegaan worden van een hoog risico als er sprake is van \u00e9\u00e9n van de volgende voorwaarden:

  1. Evaluatie of scoretoekenning
  2. Geautomatiseerde besluitvorming met rechtsgevolg of vergelijkbaar wezenlijk gevolg
  3. Stelselmatige monitoring
  4. Gevoelige gegevens of gegevens van zeer persoonlijke aard
  5. Op grote schaal verwerkte gegevens
  6. Matching of samenvoeging van datasets
  7. Gegevens met betrekking tot kwetsbare betrokkenen
  8. Innovatief gebruik of innovatieve toepassing van nieuwe technologische of organisatorische oplossingen
  9. de situatie waarin als gevolg van de verwerking zelf \"betrokkenen [...] een recht niet kunnen uitoefenen of geen beroep kunnen doen op een dienst of een overeenkomst\";

Het is mogelijk dat algoritmes die niet aan \u00e9\u00e9n of meer van deze eigenschappen voldoen toch voor een potentieel hoog risico zorgen.

Gebruiksverantwoordelijken van AI-systemen met een hoog risico gebruiken die informatie op grond van artikel 13 AI Verordening om hun verplichting na te komen om een gegevensbeschermingseffectbeoordeling uit te voeren.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-13-dpia-verplicht/#bronnen","title":"Bronnen","text":"
  • Artikel 35 Algemene Verordening Gegevensbescherming
  • Artikel 26(9) Verordening Artifici\u00eble Intelligentie
  • Besluit lijst verwerkingen persoonsgegevens waarvoor een gegevensbeschermingseffectbeoordeling (DPIA) verplicht is, Autoriteit Persoonsgegevens
  • Data protection impact assessment (DPIA) Autoriteit Persoonsgegevens
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-13-dpia-verplicht/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-13-dpia-verplicht/#risico","title":"Risico","text":"

Het niet evalueren van de impact van het verwerking van persoonsgegevens in algoritmes kan resulteren in het niet onderkennen van de bijbehorende risico's en het niet op tijd te mitigieren van deze risico's. Dit kan leiden tot potenti\u00eble schendingen van de rechten en vrijheden van betrokkenen en een onrechtmatige verwerking.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/avg-13-dpia-verplicht/#hulpmiddelen","title":"Hulpmiddelen","text":"HulpmiddelenData Protection Impact AssessmentToetsingskader Algoritmes Algemene Rekenkamer"},{"location":"voldoen-aan-wetten-en-regels/vereisten/awb-01-zorgvuldigheidsbeginsel/","title":"Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.","text":"

awb-01OntwerpOntwikkelenVerificatie en validatieProjectleiderBeleid en adviesFundamentele rechten

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/awb-01-zorgvuldigheidsbeginsel/#vereiste","title":"Vereiste","text":"

Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/awb-01-zorgvuldigheidsbeginsel/#toelichting","title":"Toelichting","text":"

Het zorgvuldigheidsvereiste eist dat een besluit met de nodige zorgvuldigheid wordt voorbereid en juist wordt genomen. Dit vraagt onder meer om een zorgvuldig onderzoek naar informatie, feiten, een zorgvuldige beslissingsprocedure en een deugdelijke besluitvorming.

Dit betekent dat bij de ontwikkeling en gebruik van algoritmes informatie moet worden vastgelegd over het algoritme. Hierbij kan worden gedacht aan: - Dat het doel en eventuele subdoelen van het algoritme of AI-systeem helder zijn gedefinieerd, ook in relatie tot het maatschappelijke resultaat (outcome). - Een bewuste afweging afmaken en vaststellen of het algoritme het juiste middel is om het probleem op doelmatige en doeltreffende wijze op te lossen. - Dat de werking van het algoritme is onderzocht en is vastgesteld dat dit passend is om te gebruiken in een besluitvormingsproces.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/awb-01-zorgvuldigheidsbeginsel/#bronnen","title":"Bronnen","text":"
  • Afdeling 3.2 Algemene wet bestuursrecht
  • Afdeling 3.4 Algemene wet bestuursrecht
  • Advies artikel 22 AVG en geautomatiseerde selectie-instrumenten
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/awb-01-zorgvuldigheidsbeginsel/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/awb-01-zorgvuldigheidsbeginsel/#risico","title":"Risico","text":"

De werking van het algoritmes sluit niet of onvoldoende aan bij de juridische en ethische grenzen van de te ondersteunen wettelijke taak. Hierdoor kunnen ongewenste gevolgen ontstaan zoals een onjuist of onzorgvuldig genomen besluit.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/awb-02-motiveringsbeginsel/","title":"Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit","text":"

awb-02OntwerpImplementatieMonitoring en beheerProjectleiderOntwikkelaarTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/awb-02-motiveringsbeginsel/#vereiste","title":"Vereiste","text":"

Een besluit berust op een deugdelijke en kenbare motivering.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/awb-02-motiveringsbeginsel/#toelichting","title":"Toelichting","text":"

De Awb eist dat een besluit een deugdelijke en kenbare motivering heeft. Dit geldt ook als algoritmes worden ingezet. Een betrokkene moet in staat zijn om te controleren of de overheid een besluit correct heeft genomen. Het motiveringsbeginsel draagt bij aan doelen als verantwoording kunnen afleggen en het bieden van rechtsbescherming. Het kan in samenhang worden gezien met transparantieverplichtingen die voortkomen uit de AVG.

Het is van belang dat inzichtelijk wordt gemaakt in het besluit welke gegevens zijn verwerkt en welke 'aannames' een algoritme bevat. Dit speelt in het bijzonder als gebruik wordt gemaakt van geautomatiseerde besluitvormingsprocessen. Hierbij kan worden gedacht aan:

  • Dat een besluit tot stand is gekomen met behulp van een algoritme.

  • Van welke feiten het bestuursorgaan is uitgegaan.

  • Welke gegevens zijn verwerkt.

  • Welke relevante belangen tegen elkaar zijn afgewogen en hoe die afweging is verlopen.

  • Welke regels zijn gebruikt.

  • Wat de hierachter is (kenbaarheid).

  • Welke analytische technieken zijn gebruikt.

  • Waarom deze regels en logica relevant zijn (uitleg)?

  • Op welke wijze de regels en logica tot stand zijn gekomen en hoe deze regels worden gevalideerd.

Een besluit moet informatie hierover bevatten om als om als voldoende draagkrachtig gemotiveerd te gelden. Het motiveringsbeginsel op grond van de Awb is beperkt tot besluiten in de zin van de Awb.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/awb-02-motiveringsbeginsel/#bronnen","title":"Bronnen","text":"
  • Artikel 3:46 en 3:47 Awb
  • Jurisprudentie over AERIUS (ABRvS 18 juli 2018, ECLI:NL:RVS:2018:2454), Hof van Justitie C-274/18
  • Advies artikel 22 AVG en geautomatiseerde selectie-instrumenten
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/awb-02-motiveringsbeginsel/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/awb-02-motiveringsbeginsel/#risico","title":"Risico","text":"

Het is onduidelijk op wat voor manier het algoritmes heeft bijgedragen aan de totstandkoming van een besluit.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/bio-01-beveiliging-informatie-en-informatiesystemen/","title":"Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen","text":"

bio-01OrganisatieverantwoordelijkhedenBeleid en adviesOntwikkelaarTechnische robuustheid en veiligheid

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/bio-01-beveiliging-informatie-en-informatiesystemen/#vereiste","title":"Vereiste","text":"

Informatie en informatiesystemen moeten op de juiste manier worden beveiligd.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/bio-01-beveiliging-informatie-en-informatiesystemen/#toelichting","title":"Toelichting","text":"

Informatiebeveiliging is het proces van vaststellen van de vereiste beveiliging van informatiesystemen in termen van vertrouwelijkheid, beschikbaarheid en integriteit alsmede het treffen, onderhouden en controleren van een samenhangend pakket van bijbehorende maatregelen. In Nederland is besloten dat overheidsinstellingen de Baseline Informatiebeveiliging Overheid (BIO) dienen toe te passen over hun informatie en informatiesystemen. De BIO beoogt de beveiliging van informatie(systemen) bij alle bestuurslagen en bestuursorganen van de overheid te bevorderen, zodat alle onderdelen erop kunnen vertrouwen dat onderling uitgewisselde gegevens, in lijn met wet- en regelgeving, passend beveiligd zijn.

Algoritmes en hun output kunnen onderdeel worden van de informatie en informatiesystemen waar de BIO op van toepassing is. Het is van belang om algoritmische toepassingen en AI-systemen op de juiste manier te beveiligen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/bio-01-beveiliging-informatie-en-informatiesystemen/#bronnen","title":"Bronnen","text":"
  • Baseline Informatiebeveiliging Overheid
  • Besluit voorschrift informatiebeveiliging rijksdienst 2007
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/bio-01-beveiliging-informatie-en-informatiesystemen/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/bio-01-beveiliging-informatie-en-informatiesystemen/#risico","title":"Risico","text":"

Er kunnen risico's ontstaan zoals ongeautoriseerde toegang, vernietiging, verlies, wijziging of niet-toegestane verwerking van gegevens als de informatie en informatiesystemen onvoldoende zijn beveiligd.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/bzk-01-algoritmeregister/","title":"Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister","text":"

bzk-01ImplementatieMonitoring en beheerProjectleiderTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/bzk-01-algoritmeregister/#vereiste","title":"Vereiste","text":"

Bestuursorganen publiceren algoritmes met impact en hoog-risico-AI-systemen in het Nederlandse Algoritmeregister.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/bzk-01-algoritmeregister/#toelichting","title":"Toelichting","text":"

Het publiceren van algoritmes draagt bij aan transparantie voor belanghebbenden en derden over welke algoritmes worden gebruikt door de overheid. Het is vastgesteld beleid dat overheidsinstellingen, tenzij er uitsluitingsgronden zijn, de door hen gebruikte impactvolle algoritmes en hoogrisico AI-systemen publiceren in het algoritmeregister. Er wordt gewerkt aan wetgeving om het bij wet verplicht te stellen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/bzk-01-algoritmeregister/#bronnen-bestaand-beleid","title":"Bronnen (bestaand beleid)","text":"
  • Handreiking Algoritmeregister
  • Geactualiseerde Werkagenda Waardengedreven Digitaliseren 2024
  • Kamerbrieven
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/bzk-01-algoritmeregister/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/bzk-01-algoritmeregister/#risico","title":"Risico","text":"

Door het niet publiceren van impactvolle algoritmes of hoog risico AI -systemen in het Algoritmeregister, is het voor betrokkenen of belanghebbenden minder goed mogelijk om de overheid kritisch te volgen, te bevragen en te controleren op de inzet van deze technologie\u00ebn die hen kunnen raken. Bij het onjuist of onvolledig publiceren in het Algortimeregister ontstaat er een risico dat betrokkenen en belanghebbenden onjuiste inschattingen maken over het gebruik van het algoritmes en daardoor in hun rechten worden beperkt.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/bzk-01-algoritmeregister/#hulpmiddelen","title":"hulpmiddelen","text":"HulpmiddelenAlgoritmeregister"},{"location":"voldoen-aan-wetten-en-regels/vereisten/dat-01-databankenwet/","title":"Databanken worden alleen gebruikt met toestemming van de databank-producent","text":"

dat-01Dataverkenning en datapreparatieJuristData

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/dat-01-databankenwet/#vereiste","title":"Vereiste","text":"

Het is verboden om zonder goedkeuring van de producent een databank op te vragen en/of te hergebruiken.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/dat-01-databankenwet/#toelichting","title":"Toelichting","text":"

De Databankrichtlijn en Databankenwet beschermt de producten/fabrikanten van databanken tegen onrechtmatige toe-eigening van een databank. Degene die een substanti\u00eble financi\u00eble en professionele investering heeft verricht om de inhoud van de databank te verkijgen en te verzamelen, krijgt een verbodsrecht en kan zo anderen verbieden de databank te gebruiken. Bij verkrijgen gaat het om \"het verzamelen van de werken, gegevens of andere zelfstandige elementen die tezamen de inhoud van de databank vormen\". Dit recht bestaat naast het recht op bescherming van de originele keuze of rangschikking van de inhoud van databanken (auteurswet).

Voor het ontwikkelen van algoritme is data nodig. De data die hiervoor wordt gebruikt mag niet ongeoorloofd zijn verkregen uit een databank.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/dat-01-databankenwet/#bronnen","title":"Bronnen","text":"
  • Artikel 1 en 2 Databankenwet
  • Artikel 5a en 5b Databankenwet
  • Artikel 7 Databankrichtlijn
  • Overwegingen 39 - 41 Databankrichtlijn
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/dat-01-databankenwet/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/dat-01-databankenwet/#risico","title":"Risico","text":"

Als een ontwikkelaar onbevoegd gebruik heeft gemaakt van data uit een databank bij de ontwikkeling van algoritmes, wordt het databankenrecht geschonden van de eigenaar. De eigenaar van de databank kan bijvoorbeeld ontrekking van de data uit het handelsverkeer, vernietiging en onbruikbaarmaking eisen, wat vergaande gevolgen kan hebben voor het gebruik kunnen maken van de algoritmische toepassing of AI-systeem.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-01-fundamentele-rechten/","title":"Algoritmes schenden geen grondrechten of mensenrechten","text":"

grw-01ProbleemanalyseOntwerpVerificatie en validatieMonitoring en beheerProjectleiderJuristFundamentele rechten

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-01-fundamentele-rechten/#vereiste","title":"Vereiste","text":"

Fundamentele vrijheden, mensenrechten en grondrechten worden beschermd bij de inzet van algoritmes.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-01-fundamentele-rechten/#toelichting","title":"Toelichting","text":"

Mensenrechten gelden voor alle mensen op de wereld. De mensenrechten in Nederland zijn beschermd door nationale wetten en internationale verdragen. In Nederland staan veel mensenrechten in hoofdstuk 1 van de Grondwet. Deze rechten heten ook wel \u2019grondrechten\u2019. Een bekend voorbeeld is artikel 1 van de Grondwet. Om mensenrechten te beschermen zijn ze op Europees en internationaal niveau in verschillende verklaringen en verdragen vastgelegd.

Mensenrechten kunnen soms onder druk komen te staan. De inzet van algoritmes kan bijvoorbeeld een bedreiging vormen voor de privacy van burgers, voor het recht op gelijke behandeling en voor het recht op behoorlijk bestuur. Het is daarom belangrijk om tijdig te onderzoeken of er sprake is of kan zijn van een eventuele inbreuk op fundamentele rechten en vrijheden van burgers. Het is van belang dat maatregelen worden getroffen om een eventuele inbreuk te voorkomen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-01-fundamentele-rechten/#bronnen","title":"Bronnen","text":"
  • Grondwet
  • Europees Verdragvoor de Rechten van de Mens (EVRM)
  • Handvest van de grondrechten van de Europese Unie
  • Universele Verklaring van de Rechten van de Mens (UVRM)
  • Internationaal Statuut van de Rechten van de Mens
  • Internationale Verdrag inzake burgerrechten en politieke rechten (IVBPR)
  • Internationale Verdrag inzake economische, sociale en culturele rechten (IVESCR)
  • Internationaal Verdrag inzake de uitbanning van alle vormen van rassendiscriminatie (CERD)
  • Internationaal Verdrag voor de rechten van het kind (CRC)
  • Internationaal Verdrag voor de Rechten van Mensen met een Handicap (VN-verdrag Handicap)
  • Artikel 27 Verordening Artifici\u00eble Intelligentie
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-01-fundamentele-rechten/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-01-fundamentele-rechten/#risico","title":"Risico","text":"

Grondrechten kunnen worden geraakt door de inzet van algoritmes met eventuele schadelijke gevolgen voor betrokkenen.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-01-fundamentele-rechten/#hulpmiddelen","title":"hulpmiddelen","text":"HulpmiddelenImpact Assessment Mensenrechten en AlgoritmesThe Fairness HandbookHandreiking non-discriminatie by designDiscriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader"},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-02-non-discriminatie/","title":"Algoritmes discrimineren niet","text":"

grw-02Dataverkenning en datapreparatieVerificatie en validatieMonitoring en beheerProjectleiderBias en non discriminatie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-02-non-discriminatie/#vereiste","title":"Vereiste","text":"

Allen die zich in Nederland bevinden, worden in gelijke gevallen gelijk behandeld. Directe en indirecte discriminatie wegens godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, handicap, seksuele gerichtheid of op welke grond dan ook, is niet toegestaan.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-02-non-discriminatie/#toelichting","title":"Toelichting","text":"

Overheidsinstanties moeten zich bij het uitvoeren van hun taken onthouden van discriminatie, ook wanneer er gebruik wordt gemaakt van algoritmes. Wanneer er algoritmes worden gebruikt om selecties te maken van burgers, dienen we te streven naar een gelijke behandeling van personen of groepen ten opzichte van andere personen in een vergelijkbare situatie. Hierbij is het belangrijk te beseffen dat discriminatie ook op indirecte wijze kan ontstaan. Hiervan is sprake wanneer een ogenschijnlijk neutrale bepaling, maatstaf of handelwijze personen met een beschermd persoonskenmerk in vergelijking met andere personen in het bijzonder benadeelt, tenzij hiervoor een objectieve rechtvaardiging bestaat.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-02-non-discriminatie/#bronnen","title":"Bronnen","text":"
  • Artikel 1 Grondwet
  • Artikel 14 Verdrag tot bescherming van de rechten van de mens en de fundamentele vrijheden, Rome, 04-11-1950
  • Artikel 21 Handvest van de Grondrechten van de Europese Unie
  • Artikel 1 Algemene wet gelijke behandeling
  • Artikel 1 Protocol nr. 12 bij het Verdrag tot bescherming van de rechten van de mens en de fundamentele vrijheden, Rome, 04-11-2000
  • Artikel 9 Algemene Verordening Gegevensbescherming
  • Artikel 2:4 Algemene wet bestuursrecht
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-02-non-discriminatie/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/grw-02-non-discriminatie/#risico","title":"Risico","text":"

Het risico bestaat dat het model onwenselijke systematische afwijkingen cre\u00ebert voor specifieke personen, groepen of andere eenheden, wat kan duiden op directe of indirecte discriminerende effecten van het algoritme.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/woo-01-recht-op-toegang-tot-publieke-informatie/","title":"Iedereen kan openbare informatie over algoritmes vinden of aanvragen","text":"

woo-01OrganisatieverantwoordelijkhedenJuristProjectleiderTransparantie

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/woo-01-recht-op-toegang-tot-publieke-informatie/#vereiste","title":"Vereiste","text":"

Een bestuursorgaan draagt er zorg voor dat de documenten die het ontvangt, vervaardigt of anderszins onder zich heeft, zich in goede, geordende en toegankelijke staat bevinden. Een bestuursorgaan draagt er zoveel mogelijk zorg voor dat de informatie die het overeenkomstig deze wet verstrekt, actueel, nauwkeurig en vergelijkbaar is.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/woo-01-recht-op-toegang-tot-publieke-informatie/#toelichting","title":"Toelichting","text":"

Bij het ontwikkelen en gebruiken van algoritmes kunnen documenten en publieke informatie ontstaan die (op verzoek) in aanmerking komen voor openbaarmaking. Het kunnen openbaren van publieke informatie is in het belang van een democratische rechtstaat. De Wet open overheid gaat uit van een recht op openbaarheid van publieke informatie. Iedereenkan een verzoek tot openbaarmaking van publieke informatie doen bij een bestuursorgaan zonder daarbij een belang te stellen (artikel 4.1 Woo). De aan een verzoeker verstrekte informatie wordt openbaar voor iedereen. De Woo is niet van toepassing op informatie die al openbaar is (uitspraken van de Afdeling bestuursrechtspraak van de Raad van State van 1 december 2010 (ECLI:NL:RVS:2010:BNS6990) en 20 oktober 2010 (ECLI:NL:RVS:2010:BO1165)). Er kunnen uitsluitingsgronden bestaan voor het openbaarmaken van documenten (artikel 5.1 Woo).

In de context van het ontwikkelen en gebruiken van algoritmes is het van belang dat tijdig wordt vastgesteld welke documenten in aanmerking komen voor openbaarmaking. Dit moet worden bekeken in het licht van wat 'actief' moet worden geopenbaard, dus proactief vanuit overheidsinstanties zelf, of wat op 'verzoek' van iemand moet worden geopenbaard.

"},{"location":"voldoen-aan-wetten-en-regels/vereisten/woo-01-recht-op-toegang-tot-publieke-informatie/#bronnen","title":"Bronnen","text":"
  • Artikel 1.1 Wet open overheid
  • Artikel 2.5 Wet open overheid
  • Artikel 4.1 Wet open overheid
  • Artikel 5 Wet open overheid
"},{"location":"voldoen-aan-wetten-en-regels/vereisten/woo-01-recht-op-toegang-tot-publieke-informatie/#wanneer-van-toepassing","title":"Wanneer van toepassing?","text":""},{"location":"voldoen-aan-wetten-en-regels/vereisten/woo-01-recht-op-toegang-tot-publieke-informatie/#risico","title":"Risico","text":"

Zonder het openbaren van overheidsinformatie kan de overheid niet effectief worden gecontroleerd bij het uitvoeren van wettelijke taken.

"}]} \ No newline at end of file diff --git a/pr-preview/pr-478/sitemap.xml b/pr-preview/pr-478/sitemap.xml new file mode 100644 index 0000000000..897da5b90d --- /dev/null +++ b/pr-preview/pr-478/sitemap.xml @@ -0,0 +1,807 @@ + + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/version/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/levenscyclus/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/levenscyclus/dataverkenning-en-datapreparatie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/levenscyclus/implementatie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/levenscyclus/monitoring-en-beheer/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/levenscyclus/ontwerp/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/levenscyclus/ontwikkelen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/levenscyclus/organisatieverantwoordelijkheden/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/levenscyclus/probleemanalyse/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/levenscyclus/uitfaseren/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/levenscyclus/verificatie-en-validatie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/onderwerpen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/onderwerpen/bias-en-non-discriminatie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/onderwerpen/data/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/onderwerpen/duurzaamheid/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/onderwerpen/fundamentele-rechten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/onderwerpen/governance/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/onderwerpen/menselijke-controle/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/onderwerpen/privacy-en-gegevensbescherming/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/onderwerpen/publieke-inkoop/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/onderwerpen/technische-robuustheid-en-veiligheid/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/onderwerpen/transparantie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/overhetalgoritmekader/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/overhetalgoritmekader/CONTRIBUTING/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/overhetalgoritmekader/definities/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/overhetalgoritmekader/over-het-algoritmekader/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/overhetalgoritmekader/soorten-algoritmes/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/rollen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/rollen/beleid-en-advies/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/rollen/jurist/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/rollen/ontwikkelaar/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/rollen/projectleider/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/ai-verordening/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/ALTAI/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/BIO/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/DEDA/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/DPIA/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/IAMA/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/algoritmeregister/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/fairness-handbook/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/framework-meaningful-engagement/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/mensenrechtelijktoetsingskader/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/onderzoekskader-adr/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/toetsingskader-algemene-rekenkamer/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-01-benodigde-expertise-en-capaciteit/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-02-beleid_opstellen_inzet_algoritmes/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-03-toepassen_risicobeheer/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-04-politiek-bestuurlijke-verantwoordelijkheid/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-05-bestaande-governance/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-07-intern-toezicht/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-08-beslismoment-levenscyclus/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-09-governance-per-risicocategorie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-10-inrichten-taken-en-verantwoordelijkheden-algoritmegovernance/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-11-gebruikersbeheer/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-12-periodieke-evaluatie-kwaliteit/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-13-wachtwoordbeheer/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-14-wijzigingenproces/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-01-formuleren-probleemdefinitie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-02-formuleren-doelstelling/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-03-onderbouwen-gebruik-algoritme/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-04-betrek-belanghebbenden/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-05-wettelijke-grondslag/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-01-rollen-en-verantwoordelijkheden/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-02-data-beschikbaarheid/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-03-doel-verwerken-persoonsgegevens/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-04-gebruikte-techniek/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-05-soort-algoritme/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-06-afwegen-grondrechten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-07-kwetsbare-groepen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-08-archiveren-documenten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-model-verwerkersovereenkomst-onderdeel-aanbesteding/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-multidisciplinair-inkoopteam/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-10-projectstartarchitectuur/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-gebruikte-data/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-bespreek-vereisten-met-aanbieders/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-13-vereisten-onderdeel-algemene-inkoopvoorwaarden-en-contractovereenkomst/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-14-verwerkersovereenkomst-onderdeel-aanbesteding/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-15-leveren-bewijs_voldoen-aan-vereisten-algoritme-aanbieder/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-17-beoordeel-aansprakelijkheidsvoorwaarden-van-aanbieder/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-18-maak-vereisten-onderdeel-van-subgunningscriteria/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-19-ruimte-voor-samenwerking-met-aanbieder/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-20-vaststellen-aanleveren-informatie-technische-documentatie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-21-uitvoeren-audit-voor-naleving-vereisten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-22-invloed-besluitvorming-algoritmes-aanbieders/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-23-kennisoverdracht-en-ondersteuning-aanbieder/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-24-risico-analyse-informatiebeveiliging-leverancier/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-25-maak-vereisten-onderdeel-van-programma-van-eisen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-26-maak-vereisten-onderdeel-van-service-level-agreement/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-27-contractuele-afspraken-data-en-artefacten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-28-pas-vastgestelde-beleidskaders-zijn-nageleefd/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-29-informeer_betrokkenen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-genereren-bronvermelding/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-toepassen_vastgestelde-beleidskaders/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-01-datakwaliteit/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-04-bewaartermijnen-persoonsgegevens/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-05-pseudonimiseren-anonimiseren/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-06-schending-auteursrechten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-duurzame-datacenters/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-training-validatie-en-testdata/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-08-eigenaarschap-data/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-09-dataminimalisatie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-01-security-by-design/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-02-stopzetten-gebruik/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-03-privacyrisico/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-04-logging/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-05-energiezuinige-programmeermethoden/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-06-optimaliseer-AI-training/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/5-ver-01-functioneren-in-lijn-met-doeleinden/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/5-ver-03-vertaling-wetgeving-naar-systeem/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-01-werkinstructies-gebruikers/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-02-aselecte-steekproeven/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-04-publiceren-algoritmeregister/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-proces-privacyrechten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-werkinstructies-medewerkers/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-06-vermelding-in-privacyverklaring/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-07-klacht-bezwaar-beroep/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-08-vermelding-in-verwerkingsregister/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-09-politiek-bestuurlijk-besluit/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-01-backups-maken/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-02-beveiliging-algoritme/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-03-informatiebeveiligingsincidenten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-04-evalueer-bij-veranderingen-in-data/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-05-meten-milieu-impact/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-01-ai-geletterdheid/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-01-verboden-AI-praktijken/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-02-documentatie-beoordeling-niet-hoog-risico-ai/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-03-risicobeheersysteem/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-04-risicobeoordeling-voor-jongeren-en-kwetsbaren/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-05-data-kwaliteitscriteria/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-06-technische-documentatie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-07-automatische-logregistratie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-08-transparantie-aan-gebruiksverantwoordelijken/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-09-menselijk-toezicht/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-10-nauwkeurigheid-robuustheid-cyberbeveiliging/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-11-systeem-voor-kwaliteitsbeheer/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-12-bewaartermijn-voor-documentatie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-13-bewaartermijn-voor-gegenereerde-logs/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-14-conformiteitsbeoordeling/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-15-eu-conformiteitsverklaring/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-16-ce-markering/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-17-registratieverplichtingen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-18-corrigerende-maatregelen-voor-non-conforme-ai/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-19-toegankelijkheidseisen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-20-gebruiksverantwoordelijken-maatregelen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-21-gebruiksverantwoordelijken-menselijk-toezicht/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-22-gebruiksverantwoordelijken-monitoren-werking/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-23-gebruiksverantwoordelijken-bewaren-logs/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-24-informeren-werknemers/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-25-gebruiksverantwoordelijken-registratieverplichtingen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-26-recht-op-uitleg-ai-besluiten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-27-beoordelen-gevolgen-grondrechten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-28-transparantieverplichtingen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-29-ai-modellen-algemene-doeleinden/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-30-ai-modellen-algemene-doeleinden-systeemrisico/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-31-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-32-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-33-verwerking-in-testomgeving/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-34-monitoring-na-het-in-de-handel-brengen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-35-melding-ernstige-incidenten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-36-melding-inbreuk-op-ai-verordening/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-37-recht-klacht-indienen-bij-ai-bureau/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/arc-01-archiefwet/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aut-01-auteursrechten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-01-persoonsgegevens-worden-rechtmatig-verwerkt/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-02-beperkte-bewaartermijn-van-persoonsgegevens/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-03-minimale-verwerking-van-persoonsgegevens/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-04-proportionaliteit-en-subsidiariteit/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-05-juistheid-en-actualiteit-van-persoonsgegevens/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-06-verantwoordingsplicht-rechtmatigheid/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-07-transparantie-bij-verwerken-persoonsgegevens/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-08-wettelijke-verwerking-van-gevoelige-gegevens/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-09-inroepen-privacyrecht-bij-verwerking-persoonsgegevens/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-11-privacy-bij-ontwerp-bij-verwerking-van-persoonsgegevens/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-12-beveiliging-van-verwerking/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-13-dpia-verplicht/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/awb-01-zorgvuldigheidsbeginsel/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/awb-02-motiveringsbeginsel/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/bio-01-beveiliging-informatie-en-informatiesystemen/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/bzk-01-algoritmeregister/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/dat-01-databankenwet/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/grw-01-fundamentele-rechten/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/grw-02-non-discriminatie/ + 2024-12-16 + + + https://minbzk.github.io/Algoritmekader/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/woo-01-recht-op-toegang-tot-publieke-informatie/ + 2024-12-16 + + \ No newline at end of file diff --git a/pr-preview/pr-478/sitemap.xml.gz b/pr-preview/pr-478/sitemap.xml.gz new file mode 100644 index 0000000000..18e7e5cd5f Binary files /dev/null and b/pr-preview/pr-478/sitemap.xml.gz differ diff --git a/pr-preview/pr-478/stylesheets/extra.css b/pr-preview/pr-478/stylesheets/extra.css new file mode 100644 index 0000000000..1205aeeac7 --- /dev/null +++ b/pr-preview/pr-478/stylesheets/extra.css @@ -0,0 +1,646 @@ +body{ + font-family: "ROsanswebtextregular" !important; + src: url("fonts/ROsanswebtextregular.woff") format('truetype'); +} + +@font-face { + font-family: "ROsanswebtextregular"; + src: url("fonts/ROsanswebtextregular.woff") format('truetype'); +} + +.mdx-badge { + font-size: .85em; + display: inline-block; + margin: .2rem .3rem; +} + +.mdx-badge__icon { + border-top-left-radius: .1rem; + border-bottom-left-radius: .1rem; + background: var(--md-accent-fg-color--transparent); + padding: .2rem; + color: var(--md-accent-fg-color); +} + +.mdx-badge__text { + border-bottom-right-radius: .1rem; + border-top-right-radius: .1rem; + background: var(--md-accent-fg-color--transparent); + padding: .2rem .3rem; + color: var(--md-accent-fg-color); + font-weight: 500; +} + +.mdx-badge a { + color: var(--md-accent-fg-color); + text-decoration: none; +} + +.md-typeset .grid { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); +} + +p, h1, h2, h3, h4, h5, h6 { + color: #154273; +} + +h1 { + color: #154273; +} + +/* Stijlen voor de tabel */ +table { + width: 100%; + border-collapse: collapse; + +} + +.md-typeset table{ + border: none !important; + box-shadow:none; +} + +th { + background-color: #F1F5F9; /* Achtergrondkleur van de tabelkop */ + color: #475569; /* Kleur van de tabelkoptekst */ + border: none; /* Geen randen */ + padding: 12px; + text-align: left; + font-size: 16px; + font-family: "ROsanswebtextregular", sans-serif; /* Custom font */ + font-weight: 400; +} + +td { + padding: 12px; + text-align: left; + border: none; /* Geen randen */ + font-family: "ROsanswebtextregular", sans-serif; /* Custom font */ + min-width: 150px; +} + +tr { + border-bottom: 1px solid #B9C7D5; /* Ondergrens van de rijen */ + font-size: 16px; +} + +tbody tr td a { + color: #154273; + text-decoration: underline; +} + +tbody tr td a:hover { + text-decoration: underline; +} + +.float-container a { + color: #154273; + text-align: left; + text-decoration: underline; +} + +/* Grid Styling */ +.md-typeset .grid { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); +} + +/* Admonition Styling */ +:root { + --md-admonition-icon--simple: url('data:image/svg+xml;charset=utf-8,'); + --md-accent-fg-color: #316fb3!important; +} + +.md-typeset .admonition.simple, +.md-typeset details.simple { + border-color: rgb(5, 80, 141); + text-align: left; +} + +.md-typeset .simple > .admonition-title, +.md-typeset .simple > summary { + background-color: rgba(185, 185, 185, 0.1); + text-align: left; +} + +.md-typeset .simple > .admonition-title::before, +.md-typeset .simple > summary::before { + background-color: rgb(5, 80, 141); + -webkit-mask-image: var(--md-admonition-icon--simple); + mask-image: var(--md-admonition-icon--simple); +} + +/* Info Section */ +.info-section { + margin-bottom: 30px; + text-align: left; /* Ensure left alignment */ +} + +.info-section h2 { + font-size: 1.5em; + color: #154273; + margin: 0 0 10px; + text-align: left; /* Ensure left alignment */ +} + +.subheader a { + color: #154273; + text-decoration: underline; + text-align: left; +} + +.subheader a:hover { + text-decoration: none; + text-align: left; +} + +.float-container { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); /* Responsive columns */ + gap: 16px; /* Space between the boxes */ + padding-bottom: 32px; +} + +.float-container h2 { +width: 100%; +border-bottom: solid 3px #154271; +padding-bottom: 8px; +} + +.float-child { + background-color: #e5f1f9; + border-radius: 5px; + display: flex; + flex-direction: column; + justify-content: flex-start; /* Push the content and the "Bekijk alle" link to the bottom */ + min-height: 300px; /* Set a minimum height for uniform containers */ +} + +.float-child-white { + background-color: #ffffff; + border-radius: 5px; + display: flex; + flex-direction: column; + justify-content: flex-start; /* Push the content and the "Bekijk alle" link to the bottom */ + min-height: 300px; /* Set a minimum height for uniform containers */ + max-width: 500px; +} + +.float-box{ + margin: -12px 24px 24px 24px; +} + +.styled-list ul { + list-style-type: none; + padding-left: 0; + margin-bottom: 20px; +} + +.styled-list ul li { + margin-bottom: 10px; + display: flex; + align-items: flex-start; +} + +.float-child-title{ + width: 100%; + border-bottom: solid 2px #154273; +} + +.styled-list ul li::before { + content: '\203A'; /* Unicode arrow symbol */ + margin-right: 8px; + color: #154273; + font-weight: bold; +} + +/* Styling for the "Bekijk alle" links */ +.show-more { + margin-top: auto; /* Push the "Bekijk alle" link to the bottom */ + text-decoration: underline; + color: #154273; + font-weight: bold; +} + +/* Footer Sectie */ +.footer-section { + margin-top: 30px; + padding-top: 10px; + border-top: 1px solid #ddd; + text-align: left; +} + +.footer-section h2 { + font-size: 1.5em; + color: #154273; + text-align: left; +} + +.footer-section a { + color: #154273; + font-weight: bold; + text-align: left; + +} + +.footer-section a:hover { + text-decoration: underline; + text-align: left; +} + +/* Full Width Outline Block */ +.full-width-outline-block { + width: 100%; + border: 1px solid #154273; /* Kleur van de outline */ + border-radius: 5px; + padding: 20px; + box-sizing: border-box; + margin-bottom: 20px; + text-align: left; +} + +.full-width-header { + font-size: 1.5em; + color: #154273; + margin: 0 0 10px; + text-align: left; +} + +.full-width-item { + margin: 10px 0; + text-align: left; +} + +.item-description { + font-size: 1em; + color: #666; + margin: 0 0 10px; + text-align: left; +} + +.show-more-link { + font-weight: bold; + color: #154273; + text-decoration: none; + text-align: left; +} + +.show-more-link:hover { + text-decoration: underline; + text-align: left; +} + +[dir=ltr] .md-typeset .float-container ol li, [dir=ltr] .md-typeset .float-container ul li { + margin-left: 0; + text-align: left; +} + +[dir=ltr] .md-typeset .float-container ol, [dir=ltr] .md-typeset .float-container ul { + margin-left: 0; +} + +#algoritmekader { + margin-bottom: 0.2rem; +} + +/* Badge Styling */ +.mdx-badge { + font-size: 0.85em; + display: inline-block; + margin: 0.2rem 0.3rem; + text-align: left; +} + +.mdx-badge__icon { + border-radius: 0.1rem 0 0 0.1rem; + background: var(--md-accent-fg-color--transparent); + text-align: left; +} + +.mdx-badge__text { + border-radius: 0 0.1rem 0.1rem 0; + padding: 0.2rem 0.3rem; + text-align: left; + text-decoration: none; +} + +.mdx-badge a { + color: var(--md-accent-fg-color); + text-align: left; + text-decoration: none; +} + +/* Grid Styling */ +.md-typeset .grid { + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + text-align: left; +} + +/* Admonition Styling */ +:root { + --md-admonition-icon--simple: url('data:image/svg+xml;charset=utf-8,'); +} + +.md-typeset .admonition.simple, +.md-typeset details.simple { + border-color: rgb(5, 80, 141); + text-align: left; +} + +.md-typeset .simple > .admonition-title, +.md-typeset .simple > summary { + background-color: rgba(185, 185, 185, 0.1); + text-align: left; +} + +.md-typeset .simple > .admonition-title::before, +.md-typeset .simple > summary::before { + background-color: rgb(5, 80, 141); + -webkit-mask-image: var(--md-admonition-icon--simple); + mask-image: var(--md-admonition-icon--simple); + text-align: left; +} + +/* Algemene layout van de header */ +.header-container { + display: flex; + flex-direction: row; + align-items: center; + margin-bottom: 24px; + text-align: left; +} + +.version-container { + display: inline-flex; + align-items: center; + margin-right: 10px; + margin-top: -50px; + position: relative; /* Voeg dit toe om de hover-info correct te positioneren */ +} + +.version-label { + font-size: 0.85em; + background-color: #B1D5EC; + color: #154273; + padding: 4px; + border-radius: 3px; + font-weight: 500; + text-transform: capitalize; + cursor: pointer; + text-align: left; +} + +.hover-info { + font-size: 0.85em; + display: none; + position: absolute; + top: 100%; + left: 0; + background-color: #fff; + color: #333; + border: 1px solid #ddd; + border-radius: 5px; + padding: 5px 10px; + white-space: normal; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + z-index: 1000; + width: auto; + min-width: 300px; + max-width: 400px; +} + +.version-container:hover .hover-info, +.hover-info:hover { + display: block; +} + +.subheader { + font-size: 1.2em; + color: #154273; + margin-left: 0; + text-align: left; +} + +.md-container li{ + color: #154273; +} + +.md-source-file{ + display: none; +} + +.md-typeset, td { + line-height: 1.3; + font-size: .7rem; +} + +.md-typeset ol li, .md-typeset ul li { + margin-bottom: .3em; +} + +.md-typeset h1{ + margin: 1em 0 .4em 0; + font-size: 2.8em; + font-weight: 600; + line-height: 1em; +} + +.md-typeset h2{ + margin: 1em 0 .5em 0; +} + +.block-image { + width: 100%; /* Zorgt ervoor dat de afbeelding over de breedte van het blok gaat */ + height: 120px; /* Stel een vaste hoogte in voor consistente weergave */ + object-fit: cover; /* Snijdt de afbeelding bij om het blok volledig te vullen */ +} + +.md-icon svg{ + color: #154273; +} + +.subheader{ + font-size: 1.5em; +} + +.grid a{ + text-decoration: underline; + font-weight: 600; +} + +.md-typeset a:hover{ + color: #316fb3; +} + +a{ + text-decoration: underline; +} + +.md-sidebar__scrollwrap{ + scrollbar-color:#316fb3; +} + +[data-md-color-accent=indigo]{ + --md-accent-fg-color:#B2D7EE; +} + +.button-primary { + background-color: #154273; + color: #fff; + border: 1px solid transparent; + /* Ensure it doesn't go full width */ + display: inline-block; +} + +.button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0.5em; + border: 1px solid #ccc; + display: inline-block; /* Avoid full width */ + width: fit-content; + font-family: inherit; + font-weight: 700; + line-height: 1; + margin: 0 0.5em 0.5em 0; + -webkit-transition: color 150ms ease-in-out; + transition: color 150ms ease-in-out; + padding: 1em 1.2em 1em 1.2em; + position: relative; + text-align: center; + text-shadow: none; + user-select: none; + vertical-align: middle; + word-break: break-word; + font-size: 0.7rem; + cursor: pointer; +} + +.float-child-content{ +padding:.3em 0 .2em 0; +width: 85%; +color: #154273; +} + +[data-md-color-accent=indigo]{ + --md-accent-fg-color:154271 !important; + --md-accent-fg-color--transparent:#B2D7EE; +} + +[data-md-color-accent=teal]{ + --md-accent-fg-color:#154271 !important; + --md-accent-fg-color--transparent:#E2EDDB; +} + +[data-md-color-accent=deep-orange]{ + --md-accent-fg-color:154271 !important; + --md-accent-fg-color--transparent:#FBEAD9; +} + +[data-md-color-accent=blue]{ + --md-accent-fg-color:154271 !important; + --md-accent-fg-color--transparent:#DCE3EA; +} + +.mdx-badge { + text-decoration: none; /* Optional: remove underline */ + transition: background-color 0.3s, color 0.3s; /* Smooth transition */ +} + +.mdx-badge:hover { + background-color: #f1f1f1; /* Change background color on hover */ + color: #333; /* Change text color on hover */ + border-radius: 4px; /* Optional: add rounded corners */ +} + +.mdx-badge__icon:hover { + transform: scale(1.1); /* Slightly scale the icon */ + transition: transform 0.3s; /* Smooth scaling */ +} + +.mdx-badge__text:hover { + font-weight: bold; /* Make the text bold on hover */ +} + +/* Hide the stars */ +li.md-source_fact.md-source_fact--stars { + display: none; +} + +/* Hide the forks */ +li.md-source_fact.md-source_fact--forks { + display: none; +} + +li.md-source__fact.md-source__fact--version{ + color: #154271; +} + +.md-typeset .admonition.tip, .md-typeset details.tip{ +border-color: #B2D7EE; +} + +.md-typeset .tip>.admonition-title, .md-typeset .tip>summary{ +background-color: #B2D7EE; +} + +.md-typeset .admonition, .md-typeset details{ + border: .075rem solid #B2D7EE; + border-radius: .2rem; + color: #154271; + display: flow-root; + font-size: .64rem; + margin: 1.5625em 0; + padding: 0 .6rem; + page-break-inside: avoid; +} + +.md-typeset .tip>.admonition-title:before, .md-typeset .tip>summary:before{ + background-color: #154271; +} + +.md-typeset .md-button--primary{ + background-color: #154271; + color: #FFFFFF; + border-color: #154271; + text-decoration: none; +} + +.md-typeset .md-button--primary:hover{ + background-color: #01689B; + color: #FFFFFF; + border-color: #01689B; + text-decoration: none; +} + +:root { + --md-admonition-icon--expander: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M8 13.1l-6-6 1.5-1.5 4.5 4.5 4.5-4.5 1.5 1.5z'/%3E%3C/svg%3E");} + +.md-typeset .admonition.expander, +.md-typeset details.expander { + border-color: rgb(43, 155, 70, 0); +} +.md-typeset .expander > .admonition-title, +.md-typeset .expander > summary { + background-color: rgba(43, 155, 70, 0); + font-size: 1.1em; /* Adjust font size */ + color: #154271; /* Change text color */ + font-weight: 400; + padding-top: 8px; + text-decoration: underline; +} +.md-typeset .expander > .admonition-title::before, +.md-typeset .expander > summary::before { + background-color: #154271; + -webkit-mask-image: var(--md-admonition-icon--expander); + mask-image: var(--md-admonition-icon--expander); + margin-top: 0; + margin-left: -3px; + width: 16px; + height: 16px; +} + +.md-typeset .expander > .admonition-title::before, +.md-typeset .expander > summary::after { + display:none; +} \ No newline at end of file diff --git a/pr-preview/pr-478/stylesheets/filters.css b/pr-preview/pr-478/stylesheets/filters.css new file mode 100644 index 0000000000..3802a8bb76 --- /dev/null +++ b/pr-preview/pr-478/stylesheets/filters.css @@ -0,0 +1,138 @@ +/* Filter container using flexbox */ +.filter-container { + display: flex; + flex-wrap: wrap; + gap: 16px; + max-width: 100%; + box-sizing: border-box; + align-items: flex-start; + justify-content: flex-start; +} + +/* Style each filter item */ +.filter-item { + flex: 0 1 250px; + margin: 0; + padding: 0; + box-sizing: border-box; + min-height: 48px !important; +} + +/* Input and select fields */ +#filterInput, +#filterSelect, +#filterLevenscyclusSelect { + border: 2px solid #154273; + border-radius: 4px; + padding: 12px; + box-sizing: border-box; + outline: none; + font-size: 16px; + font-family: "ROsanswebtextregular", sans-serif; + width: 100%; + min-width: 250px; + width: 260px; + min-height: 48px; + text-align: left; +} + +/* Focus style for input fields */ +#filterInput:focus { + border-color: #1c5ba7; + box-shadow: 0 0 4px rgba(28, 91, 167, 0.5); +} + +/* Label styling */ +.filter-item label { + display: block; + margin-bottom: 8px; + font-weight: bold; + color: #154273; + font-family: "ROsanswebtextregular", sans-serif; +} + +/* Custom styles for selected items (the "chips") */ +.choices__list--multiple .choices__item { + border: 1px solid #154273 !important; + border-radius: 5px !important; + background-color: #ffffff !important; + color: #154273 !important; + margin: 0 4px 4px 0 !important; + font-style: italic; + max-width: calc(100% - 24px) !important; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.choices__list { + background-color: #ffffff !important; +} + +.choices { + padding: 0 !important; + background-color: #ffffff; + min-height: 44px !important; + width: 260px !important; + border: 2px solid #154273; + border-radius: 5px; +} + +.choices__inner { + width: 100%; + background-color: #ffffff !important; + font-size: 14px; + overflow: hidden; + border: none !important; + text-align: left; +} + +/* Custom CSS for the Choices.js close button with a cross icon */ +.choices[data-type*=select-multiple] .choices__button, +.choices[data-type*=text] .choices__button { + position: relative; + display: inline-block; + margin: 0 -4px 0 8px; + padding-left: 16px; + border: none !important; + background-image: url("data:image/svg+xml;charset=utf-8,") !important; + background-size: 16px !important; + background-repeat: no-repeat; + line-height: 1; + opacity: .75; + border-radius: 0; +} + +/* Hover state for the cross, if you want to change color on hover */ +.choices[data-type*=select-multiple] .choices__button:hover, +.choices[data-type*=text] .choices__button:hover { + background-image: url("data:image/svg+xml;charset=utf-8,") !important; + background-size: 16px; +} + +/* Hide the input field completely when there are selected items */ +.choices__list--multiple:not(:empty) + .choices__input { + display: none !important; +} + +.choices__input { + font-family: "ROsanswebtextregular", sans-serif !important; + background-color: #ffffff !important; + font-size: 16px !important; + margin-bottom: 0px !important; + text-align: left; +} + +.choices__input--cloned { + margin-bottom: 0px !important; + text-align: left; +} + +/* Hide Klik om te selecteren */ +.choices__item::after { + content: none !important; +} + +.mdx-badge{ + text-decoration: none; +} \ No newline at end of file diff --git a/pr-preview/pr-478/stylesheets/fonts/ROsanswebtextbold.woff b/pr-preview/pr-478/stylesheets/fonts/ROsanswebtextbold.woff new file mode 100644 index 0000000000..6f0e3c819e Binary files /dev/null and b/pr-preview/pr-478/stylesheets/fonts/ROsanswebtextbold.woff differ diff --git a/pr-preview/pr-478/stylesheets/fonts/ROsanswebtextitalic.woff b/pr-preview/pr-478/stylesheets/fonts/ROsanswebtextitalic.woff new file mode 100644 index 0000000000..7e74d66928 Binary files /dev/null and b/pr-preview/pr-478/stylesheets/fonts/ROsanswebtextitalic.woff differ diff --git a/pr-preview/pr-478/stylesheets/fonts/ROsanswebtextregular.woff b/pr-preview/pr-478/stylesheets/fonts/ROsanswebtextregular.woff new file mode 100644 index 0000000000..624c3f89a7 Binary files /dev/null and b/pr-preview/pr-478/stylesheets/fonts/ROsanswebtextregular.woff differ diff --git a/pr-preview/pr-478/stylesheets/fonts/RijksSansWeb-Italic.woff2 b/pr-preview/pr-478/stylesheets/fonts/RijksSansWeb-Italic.woff2 new file mode 100644 index 0000000000..e14e3d44ca Binary files /dev/null and b/pr-preview/pr-478/stylesheets/fonts/RijksSansWeb-Italic.woff2 differ diff --git a/pr-preview/pr-478/stylesheets/fonts/RijksSansWeb-Regular.woff2 b/pr-preview/pr-478/stylesheets/fonts/RijksSansWeb-Regular.woff2 new file mode 100644 index 0000000000..74c73f2195 Binary files /dev/null and b/pr-preview/pr-478/stylesheets/fonts/RijksSansWeb-Regular.woff2 differ diff --git a/pr-preview/pr-478/stylesheets/footer.css b/pr-preview/pr-478/stylesheets/footer.css new file mode 100644 index 0000000000..7e9a0618bb --- /dev/null +++ b/pr-preview/pr-478/stylesheets/footer.css @@ -0,0 +1,67 @@ +.md-footer { + background-color: #e6f3fb; /* Light blue background */ + padding: 20px; + border-top: 6px solid #B2D7EE; + } + + .md-footer__inner { + max-width: 1200px; + margin: 0 auto; + display: flex; + justify-content: space-between; + align-items: flex-start; +} + +.md-footer__links { + display: flex; + flex: 2; + max-width: 600px; /* Beperkt de breedte van de rechtersectie */ + justify-content: flex-start; +} + /* Left Section */ + .md-footer__notice { + flex: 1; + color: #154273; /* Dark blue for readability */ + font-size: 1.3em; + } + + .md-footer__column { + display: flex; + flex-direction: column; + gap: 10px; + min-width: 150px; + margin-left: auto; + } + + .md-footer__column a { + color: #154273; /* Darker link color */ + text-decoration: underline; + font-size: 1.3em; + position: relative; /* Nodig voor positionering van de chevron */ + } + +.md-footer__column a::before { + content: "›"; /* Unicode-karakter voor een chevron */ + margin-right: 6px; /* Ruimte tussen de tekst en de chevron */ + color: #154273; /* Matcht met de linkkleur */ + display: inline-block; + transition: transform 0.2s ease; /* Animatie voor hover */ +} + + .md-footer__column a:hover, td:hover { + color: #316fb3; + } + + /* Responsive Design */ + @media (max-width: 768px) { + .md-footer__inner { + flex-direction: column; + align-items: center; + text-align: center; + } + + .md-footer__links { + flex-direction: column; + align-items: center; + } + } \ No newline at end of file diff --git a/pr-preview/pr-478/stylesheets/navigation.css b/pr-preview/pr-478/stylesheets/navigation.css new file mode 100644 index 0000000000..056a7da6b9 --- /dev/null +++ b/pr-preview/pr-478/stylesheets/navigation.css @@ -0,0 +1,181 @@ +/* Bestaande CSS voor fonts, badges en andere componenten */ +body { + font-family: "ROsanswebtextregular" !important; + src: url("fonts/ROsanswebtextregular.woff") format('truetype'); +} + +/* Tabs Styling */ +.md-tabs { + background-color: #007bc7; + color: white !important; + border-bottom: 6px solid #B2D7EE; +} + +.md-tabs .md-grid { + background-color: #007bc7; + color: white; +} + +.md-tabs__item--active { + background-color: #B2D7EE; +} + +.md-tabs__link { + text-decoration:none; + color: #FFFFFF; + opacity: 100%; +} + +/* Header Styling */ +.md-header { + background-color: white; + height: auto; + align-content: center; +} + +h1{ + color: #154273 !important; +} + +.md-header__inner { + height: 90px; +} + +.md-header--shadow { + box-shadow: none; +} + +.md-header__button.md-logo img { + height: 50px; /* Adjust to the desired height */ + width: auto; /* Keeps the aspect ratio */ +} + +.md-header__topic { + display: none; +} + +/* Ensure hover effect is applied to the link itself */ +.md-tabs__list .md-tabs__item .md-tabs__link:hover { + color: #154273 !important; /* Same color as active */ + background-color: #B2D7EE !important; +} + +/* Apply color and background on both link and item on hover */ +.md-tabs__item:hover, +.md-tabs__item:hover .md-tabs__link, +.md-tabs__link:hover { + color: #154273 !important; /* Set text color to blue */ + background-color: #B2D7EE !important; /* Set background color to light blue */ +} + +.md-tabs__item:hover .md-tabs__link { + color: #154273 !important; /* Zorgt ervoor dat de link blauw blijft als je over het tab-item zweeft */ +} + +.md-tabs__item:hover { + background-color: #B2D7EE; /* Achtergrondkleur bij hover op het hele tab-item */ + color: #154273 !important; +} + +/* Apply hover effect to the tab item */ +.md-tabs__item:hover { + background-color: #B2D7EE !important; + color: #154273 !important; +} +/* Active tab styling */ +.md-tabs .md-tabs__list .md-tabs__item--active .md-tabs__link { + color: #154273 !important; /* Active color */ + background-color: #B2D7EE !important; /* Active background */ +} + +.md-search__input{ + background: #fff; + color: #154273; + border: #154273 solid 1px; + border-radius: 5px; +} + +.md-search__form{ + color: #154273; +} + +.md-search__input::placeholder { + color: #333333; /* Set your desired color */ + opacity: 1; /* Ensures the color appears as expected */ + font-size: .8rem; + font-family: "ROsanswebtextregular" !important; +} + +.md-search__input+.md-search__icon{ + color: #333333; +} + +.md-search__suggest{ + color: #154273; +} + + +.md-header__source{ + color: #154273; +} + +.md-search__overlay{ + color: #154273; +} + +.md-typeset a { + color: #154273; +} + +.md-ellipsis{ + color: #154273; +} + +:root { + --md-typeset-a-color: #154273; +} + +.md-nav__title{ + color: #154273; +} + +.md-nav--primary .md-nav__title[for=__drawer] { + background-color: #FFF; + color: #FFF; + font-weight: 700; +} + +@media screen and (max-width: 59.9844em) { + .md-nav__source { + background-color: #FFF; + } +} + +.md-source__repository md-source__repository--active{ + color: #154273; +} + +@media screen and (max-width: 76.2344em) { + .md-nav--primary .md-nav__item--active>.md-nav__link { + color: #154273; + } +} + +@media screen and (max-width: 76.2344em) { + .md-nav--primary .md-nav__title { + background-color: #fff; + color: #154273; + cursor: pointer; + height: 5.6rem; + line-height: 2.4rem; + padding: 3rem .8rem .2rem; + position: relative; + white-space: nowrap; + } +} + +.md-main__inner { + display: flex; + height: 100%; + margin-top: 0; +} \ No newline at end of file diff --git a/pr-preview/pr-478/version/index.html b/pr-preview/pr-478/version/index.html new file mode 100644 index 0000000000..68b7a64629 --- /dev/null +++ b/pr-preview/pr-478/version/index.html @@ -0,0 +1,877 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Version - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + +
+ + + + + + + + +

---

+

Huidige versie

+

v1.6.1-36-g2cca4342e

+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/ai-verordening/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/ai-verordening/index.html new file mode 100644 index 0000000000..d36e00b087 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/ai-verordening/index.html @@ -0,0 +1,1142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AI-verordening in het kort - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

AI-verordening in het kort

+

In de AI-verordening staan de Europese regels voor het verantwoord ontwikkelen en gebruiken van AI. Ongewenste AI is verboden vanaf 2 februari 2025. Andere AI-systemen moeten vanaf 2026 of vóór 2030 voldoen aan bepaalde vereisten.

+

Verordening (EU) 2024/1689 (AI-verordening)

+

Over de AI-verordening

+

De AI-verordening is de eerste uitgebreide wet over artificiële intelligentie (AI) ter wereld. De regels gelden voor alle Europese lidstaten.

+

De AI-verordening trad in werking op 1 augustus 2024 en gaat stap voor stap gelden. De eerste regels gaan in op 2 februari 2025. Vanaf 2 augustus 2025 geldt de volgende set regels. Op 2 augustus 2027 gaan de laatste regels in. Dan is de hele AI-verordening van kracht.

+

Europese regels voor het ontwikkelen en gebruiken van AI

+

De AI-verordening geldt in deze 3 situaties samen:

+
    +
  • Je ontwikkelt of gebruikt AI.
  • +
  • Dit doe je namens een overheid, bedrijf of andere organisatie.
  • +
  • Je organisatie is gevestigd in een EU-land.
  • +
+

Het maakt niet uit waar je AI-producten ontwikkelt. Ontwikkel je buiten de EU, maar is je organisatie gevestigd in een EU-land? Dan geldt de EU-verordening.

+

Verantwoord gebruik van AI

+

Het doel van de AI-verordening is om verantwoord gebruik van AI te stimuleren in de hele EU. Daarom gelden in alle EU-landen dezelfde regels voor het:

+
    +
  • Verkleinen van risico’s voor de gezondheid, veiligheid en grondrechten van mensen
  • +
  • Beschermen van de democratie, de rechtsstaat en het milieu
  • +
+

Het gaat dan om nieuwe risico’s, zoals misleiding en discriminatie door AI-systemen. Bestaande regels zoals de Algemene verordening gegevensbescherming (AVG) en de Algemene wet bestuursrecht (Awb) beschermen voor een deel tegen de risico’s van AI. De AI-verordening vult deze regels aan.

+

Definitie van een AI-systeem

+

De AI-verordening geldt voor AI-systemen. Volgens de verordening is dit:

+

'(…) een op een machine gebaseerd systeem dat is ontworpen om met verschillende niveaus van autonomie te werken en dat na de uitrol aanpassingsvermogen kan vertonen, en dat, voor expliciete of impliciete doelstellingen, uit de ontvangen input afleidt hoe output te genereren zoals voorspellingen, inhoud, aanbevelingen of beslissingen.'

+

Hieronder vallen systemen die kunstmatig intelligent zijn door zelflerende technieken zoals:

+
    +
  • supervised learning
  • +
  • unsupervised learning
  • +
  • reinforcement learning (bekrachtiginsleren)
  • +
  • deep learning
  • +
+

Onder AI-systemen vallen ook systemen die gebruik maken van op logica en kennis gebaseerde benaderingen (knowledge and logic-based approaches) die leren, redeneren of modelleren mogelijk maken.

+

Symbolische AI is meestal ook een AI-systeem.

+

Uitzondering

+

Onder AI-systemen vallen geen systemen die gebaseerd zijn op door mensen gemaakte regels om automatisch handelingen uit te voeren.

+

Risicogroepen

+

De AI-verordening deelt AI op in risicogroepen. Hoe groter het risico van AI voor de samenleving, hoe strenger de regels uit de AI-verordening. Het hangt ervan af waarvoor je dit AI-systeem gebruikt.

+

Risico op misleiding

+

Dit zijn AI-systemen die je gebruikt voor:

+
    +
  • interactie met mensen, zoals AI-chatbots
  • +
  • genereren van content, zoals afbeeldingen laten maken door Dall-E en of audio en tekst
  • +
+

Over deze systemen moet je transparant zijn. Gebruikers mogen niet denken dat zij te maken hebben met echte mensen of originele content.

+

Zie AI-verordening, hoofdstuk IV.

+

Hoog-risico-AI-systemen

+

Dit zijn AI-systemen die je gebruikt als veiligheidsonderdeel van bepaalde producten of AI-systemen die je gebruikt voor bepaalde diensten of processen.

+

'Gebruiken als veiligheidsonderdeel' betekent dat je AI-systeem een belangrijke rol speelt in de veiligheid van een product. En dit product valt onder de harmonisatiewetgeving van de EU, zoals:

+
    +
  • machines
  • +
  • speelgoed
  • +
  • liften
  • +
  • uitrusting en beveiligingssystemen voor plaatsen met ontploffingsgevaar
  • +
  • radioapparatuur
  • +
  • drukapparatuur
  • +
  • pleziervaartuigen
  • +
  • kabelbaaninstallaties
  • +
  • gastoestellen
  • +
  • medische hulpmiddelen
  • +
  • hulpmiddelen voor het testen van menselijk materiaal (in-vitrodiagnostiek)
  • +
  • auto-industrie
  • +
  • luchtvaartindustrie
  • +
+

Zie AI-verordening, bijlage I.

+

'Gebruik voor bepaalde diensten of processen' zijn:

+
    +
  • Biometrie, zoals het herkennen of indelen van mensen op basis van hun vingerafdruk, gezicht of andere lichamelijke kenmerken.
  • +
  • Kritieke infrastructuur, zoals het veilig houden van digitale netwerken en verkeersnetwerken en het leveren van elektriciteit, water, gas en warmte.
  • +
  • Onderwijs en beroepsopleiding, zoals het bepalen welke studenten je toelaat en het beoordelen van hun prestaties of gedrag.
  • +
  • Werkgelegenheid, personeelsbeheer en toegang tot zelfstandige arbeid, zoals het werven en selecteren van mensen, besluiten nemen die invloed hebben op hun contract en het beoordelen van hun prestaties of gedrag.
  • +
  • Essentiële particuliere en openbare diensten, zoals bepalen wie recht heeft op uitkeringen, gezondheidszorg en andere belangrijke diensten en wie noodhulp krijgt van politie, brandweer en ambulance, het beoordelen van iemands financiële situatie, fraude opsporen en het bepalen van risico’s en prijzen voor levensverzekeringen en ziektekostenverzekeringen.
  • +
  • Rechtshandhaving, zoals iemands kans inschatten om slachtoffer of dader te worden, het gebruik van een leugendetector, het beoordelen van bewijsmateriaal en het opsporen van verdachten.
  • +
  • Migratie, asiel en grenzen, zoals inschatten wat de kans is dat iemand gevaarlijk of illegaal is, het behandelen van aanvragen en klachten en het herkennen of opsporen van mensen.
  • +
  • Rechtsbedeling en democratische processen, zoals het uitleggen van de wet aan een rechtbank, gerechtshof of de Hoge Raad, advies geven bij een geschil of het beïnvloeden van de uitslag van een verkiezing.
  • +
+

Zie AI-verordening, bijlage III.

+

Verboden AI-systemen

+

Dit zijn AI-systemen die:

+
    +
  • misleiden
  • +
  • misbruik maken van kwetsbaarheden of gevoelige situaties, zoals het overhalen van mensen met schulden om iets te kopen
  • +
  • sociale scores bijhouden voor gedrag van mensen en hen hiervoor straffen
  • +
  • beoordelen hoe groot het risico is dat iemand een strafbaar feit pleegt
  • +
  • afbeeldingen van gezichten ‘scrapen’ (verzamelen) via internet of bewakingscamera’s en deze opslaan in een databank
  • +
  • emoties herkennen van mensen op hun werkplek of op school
  • +
  • biometrisch categoriseren: mensen indelen in gevoelige categorieën zoals ras en geloof, op basis van lichamelijke kenmerken zoals huidskleur
  • +
  • biometrisch identificeren op afstand voor rechtshandhaving, zoals gezichten herkennen via camera’s op een openbaar plein (hiervoor gelden uitzonderingen in ernstige situaties zoals ontvoeringen en terrorisme)
  • +
+

Zie AI-verordening, artikel 5.

+

2 februari 2025: stoppen met verboden AI

+

Organisaties die verboden AI ontwikkelen of gebruiken, moeten deze producten vóór 2 februari 2025 uitfaseren.

+

2 augustus 2026: AI ontwikkelen volgens vereisten

+

Organisaties die AI-systemen ontwikkelen, moeten ervoor zorgen dat deze producten vóór 2026 voldoen aan bepaalde vereisten, zoals:

+
    +
  • Personen die toezicht houden op het systeem beschikken over de juiste kennis, kunde en autoriteit.
  • +
  • Inputdata is voldoende relevant en representatief, voor zover dat mogelijk is.
  • +
  • Als een gebruiksverantwoordelijke aanneemt dat het systeem niet meer voldoet aan de eisen uit de AI-verordening, stelt deze de aanbieder op de hoogte en onderbreekt het gebruik.
  • +
  • Organisaties die beslissingen nemen over mensen met behulp van een hoog-risico-AI-systeem, informeren deze mensen hierover.
  • +
  • Organisaties die AI gebruiken voor emotieherkenning of biometrische categorisatie van mensen, informeren deze mensen hierover.
  • +
+

Toezicht

+
    +
  • Nationale toezichthouders: controleren organisaties en kunnen straffen opleggen zoals een product uit de handel nemen
  • +
  • AI-board: Europese raad voor artificiële intelligentie (nog in oprichting)
  • +
  • AI-bureau: stelt richtlijnen op voor de AI-board
  • +
  • Wetenschappelijk panel: advies van wetenschappers
  • +
  • Adviesforum: advies van belanghebbenden
  • +
+

Beslishulp AI-verordening

+

Met de beslishulp AI-verordening bepaal je snel en gemakkelijk of jouw AI-product onder de AI-verordening valt. En wat je dan moet doen.

+

Help ons deze pagina te verbeteren

+

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/ALTAI/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/ALTAI/index.html new file mode 100644 index 0000000000..174d0f7e52 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/ALTAI/index.html @@ -0,0 +1,984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Assessment List for Trustworthy Artificial Intelligence (ALTAI) - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+ +
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Assessment List for Trustworthy Artificial Intelligence (ALTAI)

+ +

OntwerpOntwikkelenJuristOntwikkelaarProjectleiderBeleid en adviesPrivacy en gegevensbeschermingDuurzaamheidFundamentele rechtenTechnische robuustheid en veiligheidTransparantieMenselijke controleData

+

Direct naar de ALTAI

+

Hulpmiddel

+

In 2019 publiceerde de High-Level Expert Group on Artificial Intelligence (AI HLEG), opgericht door de Europese Commissie, de Ethics Guidelines for Trustworthy Artificial Intelligence. De ALTAI is een hulpmiddel dat ontwikkelaars en organisaties helpt hun AI-systemen te beoordelen, gebaseerd op deze Ethics Guidelines for Trustworthy Artificial Intelligence. Het helpt te bepalen of het AI-systeem dat wordt ontwikkeld, ingezet, aangeschaft of gebruikt, voldoet aan zeven vereisten van betrouwbare AI:

+
    +
  • Menselijke tussenkomst en toezicht;
  • +
  • Technische robuustheid en veiligheid;
  • +
  • Privacy en gegevensbeheer;
  • +
  • Transparantie;
  • +
  • Diversiteit, non-discriminatie en eerlijkheid;
  • +
  • Maatschappelijk en ecologisch welzijn;
  • +
  • Verantwoordelijkheid
  • +
+

De ALTAI is bedoeld voor zelfevaluatie. Het hulpmiddel is verankerd in de bescherming van de fundamentele rechten van mensen, de term die in de Europese Unie wordt gebruikt om te verwijzen naar de mensenrechten die zijn vastgelegd in de EU-verdragen, het Handvest van de Grondrechten, en het internationale mensenrechtenrecht.

+

De ALTAI is bedoeld voor flexibele inzet: organisaties kunnen gebruikmaken van de relevante onderdelen van dit hulpmiddel voor een specifiek AI-systeem of er elementen aan toevoegen die zij passend achten, rekening houdend met de sector waarin zij opereren. Het helpt organisaties te begrijpen wat betrouwbare AI inhoudt, in het bijzonder welke risico's een AI-systeem zou kunnen meebrengen en hoe deze risico's kunnen worden geminimaliseerd terwijl de kansen van AI worden gemaximaliseerd. Organisaties halen het meeste waarde uit de ALTAI door de gestelde vragen uitgebreid te beantwoorden, die zijn bedoeld om zorgvuldige reflectie te stimuleren en passende vervolgacties aan te formuleren, en een organisatiecultuur te bevorderen die zich inzet voor de ontwikkeling van betrouwbare AI-systemen. Het vergroot het bewustzijn van de mogelijke impact van AI op de samenleving, het milieu, consumenten, werknemers en burgers (in het bijzonder kinderen en mensen die tot gemarginaliseerde groepen behoren).

+

Relevantie

+

De ALTAI biedt houvast bij het evalueren van in hoeverre een betreffend AI-systeem voldoet aan de zeven vereisten van betrouwbare AI, zoals geformuleerd door de EU. Deze zeven vereisten en de ALTAI hebben samen de basis gevormd voor de AI-verordening.

+

Auteur

+

De ALTAI is ontwikkeld door de High-Level Expert Group on Artificial Intelligence van de Europese Commissie.

+

Bijbehorende vereisten

+
Vereiste
aia-14 - Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+ +

Bijbehorende maatregelen

+
Maatregel
pba-03 - Beschrijf waarom een algoritme het probleem moet oplossen
owp-06 - Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging
imp-03 - Richt de juiste menselijke controle in van het algoritme
6-imp-06-proces-privacyrechten
mon-02 - Beveilig de software
pba-05 - Beschrijf de wettelijke grondslag voor de inzet van het algoritme
owp-03 - Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag
3-dat-03-persoonsgegevens-beschrijven
dat-04 - Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure
owp-07 - Maak een lijst van de meest kwetsbare groepen en bescherm hen extra
imp-04 - Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister
ver-01 - Toets het algoritme op bias
ver-01 - Controleer regelmatig of het algoritme werkt zoals het bedoeld is
owk-03 - Analyseer de privacy-risico’s en neem maatregelen om deze risico’s laag te houden
owk-01 - Ontwerp en ontwikkel het algoritme volgens de principes van ‘security by design’
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/BIO/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/BIO/index.html new file mode 100644 index 0000000000..655a33352b --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/BIO/index.html @@ -0,0 +1,980 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Baseline Informatiebeveiliging Overheid (BIO) - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+ +
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Baseline Informatiebeveiliging Overheid (BIO)

+ +

OntwerpImplementatieMonitoring en beheerJuristOntwikkelaarProjectleiderTechnische robuustheid en veiligheid

+

Direct naar de BIO

+

Hulpmiddel

+

De BIO is het basisnormenkader voor informatiebeveiliging voor alle overheidslagen, waardoor een gezamenlijke norm voor informatiebeveiliging is ontstaan. Het gebruik van 1 normenkader voor de gehele overheid biedt een aantal voordelen:

+
    +
  • Het versterken van de informatieveiligheid door betere afstemming binnen ketens van overheden en andere partijen;
  • +
  • Administratieve lastenverlichting bij overheid en bedrijven, zowel afnemers als leveranciers, door uniforme beveiligingsnormen bij de overheid;
  • +
  • Aansluiting bij internationale regelgeving en standaarden;
  • +
  • Vermindering van onderhoudskosten.
  • +
+

Op dit moment wordt er gewerkt aan de BIO2.0. Omdat de BIO2.0 pas eind 2024 van kracht zal worden, is op 1 juni 2023 de handreiking BIO2.0-opmaat opgeleverd. In deze handreiking is de indeling van de controls, doelstellingen en overheidsmaatregelen in deel 2 van de BIO in lijn gebracht met de 2022-versie van de ISO-27002. Naast tekstuele wijzigingen, zijn ook een aantal overheidsmaatregelen geactualiseerd, vanwege nieuwe dreigingen, zoals ransomware. Naast de verhoging van de feitelijke veiligheid, wordt ook geanticipeerd op aanpassingen die in de BIO2.0 zullen worden doorgevoerd. Overheidsorganisaties doen er goed aan deze actualisatie in hun beveiliging door te voeren.

+

Relevantie

+

Iedere overheidsorganisatie is verplicht de BIO in te voeren. De BIO is in december 2018 vastgesteld door de ministerraad voor de Rijksoverheid. Daarvoor was door de gemeenten, waterschappen en provincie reeds besloten tot invoering van de BIO. De overheidslagen zijn per 1 januari 2019 gestart met de implementatie van de BIO. Iedere overheidslaag heeft daarvoor zelf een implementatiepad opgesteld. De minister van BZK heeft bepaald dat in het digitale verkeer met het Rijk de BIO wordt gehanteerd.

+

Auteur

+

De interbestuurlijke werkgroep-BIO draagt zorg voor het onderhoud op de BIO. Onder het voorzitterschap van BZK zijn in de werkgroep de 4 overheidskoepels vertegenwoordigd: CIO Rijk, Vereniging Nederlandse Gemeenten, InterProvinciaal Overleg en Unie van Waterschappen. Verder bestaat de werkgroep uit een aantal grote uitvoeringsorganisaties, het Forum Standaardisatie, het Nationaal Cybersecurity Centrum en het Centrum voor Informatiebeveiliging & Privacybescherming. Besluitvorming over de BIO vindt plaats in het kern-IBO, waarin onder voorzitterschap van BZK vertegenwoordigers van de 4 overheidskoepels zitting hebben.

+

Bijbehorende vereisten

+
Vereiste
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
+ +

Bijbehorende maatregelen

+
Maatregel
None
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/DEDA/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/DEDA/index.html new file mode 100644 index 0000000000..b24f7182dc --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/DEDA/index.html @@ -0,0 +1,979 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + De Ethische Data Assistent - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+ +
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

De Ethische Data Assistent

+ +

ProbleemanalyseOntwerpBeleid en adviesJuristOntwikkelaarProjectleiderDataFundamentele rechten

+

Direct naar DEDA

+

Hulpmiddel

+

DEDA is ontwikkeld door de Data School van de Universiteit Utrecht en bestaat uit een toolkit die helpt bij het in kaart brengen van ethische kwesties bij dataprojecten, bij het documenteren van het beraadslagingsproces en bij de bevordering van de verantwoording aan de diverse stakeholders en het publiek.

+

DEDA bestaat uit een poster voor brainstormsessies, een interactieve vragenlijst en een handleiding. Alle tools zijn gepubliceerd door de Data School van de Universiteit Utrecht.

+

DEDA bevordert verantwoordingsplicht, onderwijst gebruikers, communiceert problemen en ondersteunt projectmanagement.

+

Relevantie

+

DEDA is een belangrijk hulpmiddel omdat het helpt bij de vroege identificatie en bespreking van ethische kwesties in dataprojecten. Net als de IAMA, biedt DEDA een gestructureerde aanpak om de implicaties van datagebruik en algoritmische besluitvorming te beoordelen. +Het ondersteunt overheden bij het naleven van het zorgvuldigheidsbeginsel en maakt ethische afwegingen inzichtelijk als onderdeel van de besluitvorming. +Door een interactieve vragenlijst en documentatie bevordert DEDA verantwoordingsplicht en transparantie.

+

DEDA stimuleert interdisciplinaire samenwerking en helpt beleidsmakers, juristen en ontwikkelaars de ethische dimensies van data-analyse beter te begrijpen. +Dit draagt bij aan zorgvuldige en rechtvaardige datagedreven oplossingen binnen de publieke sector. DEDA draagt bij aan transparantie en uitlegbaarheid van datagebruik, essentieel voor publiek vertrouwen.

+

Auteur

+

DEDA is ontwikkeld door de Data School van de Universiteit Utrecht. DEDA is in nauwe samenwerking met data-analisten ontwikkeld. Inmiddels is DEDA een wijdverspreid instrument, waar de Utrecht Data School ook trainingen en begeleiding bij geeft. Via deze link is meer informatie te vinden.

+

Bijbehorende vereisten

+
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+ +

Bijbehorende maatregelen

+
Maatregel
pba-03 - Beschrijf waarom een algoritme het probleem moet oplossen
2-owp-02-gebruikte-data
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/DPIA/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/DPIA/index.html new file mode 100644 index 0000000000..ea024cfa88 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/DPIA/index.html @@ -0,0 +1,996 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Data Protection Impact Assessment - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+ +
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Data Protection Impact Assessment

+ +

ProbleemanalyseOntwerpDataverkenning en datapreparatieBeleid en adviesJuristProjectleiderPrivacy en gegevensbescherming

+

Direct naar de DPIA

+

Hulpmiddel

+

Is je organisatie van plan persoonsgegevens te verwerken, maar levert dat waarschijnlijk een hoog privacyrisico op? +Dan is je organisatie verplicht eerst een 'data protection impact assessment' (DPIA) uit te voeren. +Als organisatie moet je zelf bepalen of de gegevensverwerking een hoog privacyrisico oplevert. +En je dus een DPIA moet uitvoeren. +De volgende criteria kunnen hierbij helpen:

+ +

De AVG geeft aan dat je in ieder geval een DPIA moet uitvoeren als je als organisatie:

+
    +
  • Systematisch en uitgebreid persoonlijke aspecten van mensen beoordeelt en dit gebeurt op basis van geautomatiseerde verwerking van persoonsgegevens, waaronder profiling. En hierop besluiten baseert die gevolgen hebben voor mensen. Bijvoorbeeld dat zij geen lening kunnen afsluiten. Een voorbeeld hiervan is creditscoring.
  • +
  • Op grote schaal bijzondere persoonsgegevens verwerkt.
  • +
  • Strafrechtelijke gegevens verwerkt.
  • +
  • Op grote schaal en systematisch mensen volgt in een publiek toegankelijk gebied. Bijvoorbeeld met cameratoezicht.
  • +
+

Een DPIA moet in een vroeg stadium van de beleids- of projectontwikkeling worden uitgevoerd. +Op dat moment kan namelijk nog zonder vooroordelen worden nagedacht over de gevolgen en kan het voorstel nog makkelijker worden herzien. +Dit voorkomt ook latere, kostbare aanpassingen in processen, herontwerp van systemen of zelfs stopzetten van een project. +Behalve aan het begin van een project kan een DPIA ook op andere momenten en meermaals worden uitgevoerd en geactualiseerd. +Als het voorstel wijzigt, wordt een DPIA opnieuw uitgevoerd. +Als de gegevensverwerkingen of de gevolgen ervan veranderen, moet de DPIA worden geactualiseerd. +Volgens de European Data Protection Board (EDPB) moet een DPIA iedere drie jaar worden geëvalueerd.

+

Relevantie

+

Een organisatie is bij wet verplicht een DPIA uit te voeren wanneer de verwerking van persoonsgegevens een hoog privacyrisico oplevert. Wanneer hier sprake van is binnen jouw organisatie, dan is de DPIA per definitie relevant voor jou.

+

Auteur

+

De DPIA is ontwikkeld door de Europese Unie in het kader van de AVG.

+

Bijbehorende vereisten

+
Vereiste
avg-01 - Persoonsgegevens worden op een rechtmatige manier verwerkt
avg-02 - Persoonsgegevens worden zo kort mogelijk bewaard
avg-13 - Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
avg-09 - Betrokkenen kunnen een beroep doen op hun privacyrechten
avg-05 - Persoonsgegevens zijn juist en actueel
avg-11 - Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-07 - Organisaties zijn transparant over het verwerken van persoonsgegevens
aia-35-verwerking-in-testomgeving
+ +

Bijbehorende maatregelen

+
Maatregel
owk-03 - Analyseer de privacy-risico’s en neem maatregelen om deze risico’s laag te houden
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/IAMA/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/IAMA/index.html new file mode 100644 index 0000000000..e84f0ed1a4 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/IAMA/index.html @@ -0,0 +1,1007 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Impact Assessment Mensenrechten en Algoritmes - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Impact Assessment Mensenrechten en Algoritmes

+ +

ProbleemanalyseOntwerpVerificatie en validatieMonitoring en beheerProjectleiderOntwikkelaarJuristBeleid en adviesFundamentele rechtenTransparantie

+

Direct naar het IAMA

+

Hulpmiddel

+

Het Impact Assessment voor Mensenrechten bij de inzet van Algoritmes (IAMA) is een instrument voor overheidsorganen om een interdisciplinaire dialoog en besluitvorming te faciliteren bij de ontwikkeling en inzet van algoritmische systemen. +Het IAMA stelt een reeks vragen die moeten worden besproken en beantwoord om een zorgvuldige afweging van de inzet van algoritmen te waarborgen. +Dit proces is onderverdeeld in drie fasen: voorbereiding, input en throughput, en output en toezicht, waarbij steeds aandacht wordt besteed aan het vierde onderdeel van het IAMA: de impact op mensenrechten. +Het IAMA fungeert als naslagwerk voor de besluitvorming en is gekoppeld aan andere relevante richtlijnen en instrumenten, zoals de gegevensbeschermingseffectbeoordeling (ook wel DPIA). +Hierdoor biedt het een overkoepelend kader dat helpt om algoritmen verantwoord te implementeren en mogelijke risico’s, zoals inbreuken op grondrechten, te identificeren en te mitigeren.

+

Relevantie

+

Het IAMA kan op dit moment op veel politieke en internationale belangstelling rekenen. +In zowel de Eerste als Tweede Kamer zijn hierover moties ingediend en vragen gesteld. +Daarbij is het IAMA een van de weinige instrumenten in de EU die een interdisciplinaire discussie rondom (de ontwikkeling, inzet en monitoring van) algoritmes, AI en grondrechten initieert en bevordert.

+

Auteur

+

Het IAMA is ontwikkeld door de Utrecht Data School. De auteurs van het IAMA zijn prof. mr. Janneke Gerards, dr. Mirko Tobias Schäfer, Arthur Vankan en Iris Muis, allen werkzaam aan de Universiteit Utrecht. Opdrachtgever voor de ontwikkeling is het Ministerie van Binnenlandse Zaken.

+

Bijbehorende vereisten

+
Vereiste
aia-29 - Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
+ +

Bijbehorende maatregelen

+

Geen maatregelen beschikbaar voor dit hulpmiddel.

+ +

Bronnen

+

Impact Assessment Mensenrechten en Algoritmes

+

Voorbeeld

+

Benieuwd naar ervaringen in de praktijk? Bekijk het rapport IAMA in Actie voor de lessons learned van 15 IAMA-trajecten bij Nederlandse overheidsorganisaties.

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/algoritmeregister/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/algoritmeregister/index.html new file mode 100644 index 0000000000..e699dff892 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/algoritmeregister/index.html @@ -0,0 +1,993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Algoritmeregister - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+ +
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Algoritmeregister

+ +

Monitoring en beheerProjectleiderOntwikkelaarTransparantie

+

Direct naar het Algoritmeregister

+

Hulpmiddel

+

De regering wil dat de overheid algoritmes verantwoord gebruikt. +Mensen moeten erop kunnen vertrouwen dat algoritmes voldoen aan de waarden en normen van de samenleving. +En er moet uitleg zijn over hoe algoritmes werken. +Het Algoritmeregister helpt hierbij. +Wanneer overheidsorganisaties open zijn over algoritmes en hun toepassing, kunnen burgers, organisaties en media de overheid kritisch volgen.

+

Je kunt hier meer lezen over de doelen van het Algoritmeregister.

+

Relevantie

+

In de Handreiking Algoritmeregister staan bruikbare handvatten voor overheidsorganisaties om met publicatie van hun algoritmes aan de slag te gaan. +Hierin wordt bijvoorbeeld duidelijkheid gegeven over welke doelen we ermee bereiken, welke algoritmes erin thuishoren en welke organisaties erin kunnen publiceren.

+

Bijbehorende vereisten

+
Vereiste
bzk-01 - Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister
+ +

Bijbehorende maatregelen

+
Maatregel
imp-04 - Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister
+ +

Bronnen

+

Algoritmeregister

+

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/fairness-handbook/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/fairness-handbook/index.html new file mode 100644 index 0000000000..0133329645 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/fairness-handbook/index.html @@ -0,0 +1,1002 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Fairness Handbook - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

The Fairness Handbook

+ +

ProbleemanalyseOntwerpProjectleiderBias en non discriminatieFundamentele rechten

+

Direct naar het Fairness Handbook

+

Hulpmiddel

+

Het Fairness Handbook biedt overheidsorganisaties een gedetailleerde richtlijn om eerlijkheid in algoritmen te waarborgen en schadelijke vooroordelen binnen AI-systemen te verminderen. Het handboek, dat origineel is ontwikkeld voor de Gemeente Amsterdam, richt zich op het voorkomen en mitigeren van vooroordelen en oneerlijke uitkomsten (bias) door middel van een gestructureerde Fairness Pipeline. Deze pipeline behandelt alle fasen van het ontwikkelproces, van het formuleren van het probleem tot de uiteindelijke implementatie en monitoring. Dit hulpmiddel biedt inzicht in de soorten schadelijke effecten van AI (zoals representatiebias en denigratieschade) en introduceert specifieke technieken, zoals het uitvoeren van een bias-analyse en het gebruik van contra-feitelijke scenario's (counterfactual fairness), om te controleren of de algoritmen rechtvaardige resultaten opleveren.

+

Naast praktische technieken voor het meten en mitigeren van vooroordelen, definieert het Fairness Handbook verschillende eerlijkheidsprincipes en bijbehorende statistische metrics. Deze metrics helpen ontwikkelaars en beleidsmakers om de prestaties van modellen te analyseren en verschillen in modelprestaties tussen verschillende groepen te detecteren. Door de nadruk te leggen op transparantie, zowel in de keuze van datasets als in de manier waarop het model beslissingen neemt, helpt het handboek om het vertrouwen in AI-systemen te vergroten en discriminerend gedrag in algoritmen te verminderen.

+

Relevantie

+

Het Fairness Handbook biedt ondersteuning voor overheden die streven naar verantwoorde, niet-discriminerende algoritmische besluitvorming. Het handboek ondersteunt overheidsinstanties bij het identificeren en corrigeren van vooroordelen in datasets en algoritmes, waardoor het risico op schadelijke effecten, zoals ongelijke verdeling van kansen of kwaliteit van dienstverlening, wordt geminimaliseerd. Het hulpmiddel sluit nauw aan bij andere hulpmiddelen, zoals de IAMA, door richtlijnen te geven voor het beoordelen van specifieke eerlijkheidsaspecten in de context van datagebruik en algoritmeontwikkeling.

+

Door de combinatie van technische en niet-technische benaderingen bevordert het Fairness Handbook een holistische benadering van algoritmische eerlijkheid. Er wordt rekening gehouden met zowel de technische als de sociale en ethische dimensies. Dit maakt het een bruikbaar hulpmiddel voor diverse overheidsprojecten, waaronder de ontwikkeling van AI-toepassingen in het sociaal domein en besluitvormingsprocessen waarbij kansengelijkheid van groot belang is.

+

Auteurs en Ontwikkeling

+

Het Fairness Handbook is ontwikkeld in 2022 door de Gemeente Amsterdam, met als doel de eerlijkheid en transparantie van haar AI-systemen te verbeteren. Het project is tot stand gekomen in samenwerking met diverse stakeholders, waaronder datawetenschappers, ethici en beleidsmakers, om ervoor te zorgen dat het handboek aansluit bij de bredere maatschappelijke behoeften en regelgeving. Door deze samenwerking biedt het Fairness Handbook een gebalanceerd perspectief, met aandacht voor zowel technische oplossingen als ethische en juridische overwegingen die nodig zijn voor verantwoorde AI-toepassingen.

+

Bijbehorende vereisten

+
Vereiste
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
grw-02 - Algoritmes discrimineren niet
aia-04 - Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
+ +

Bijbehorende maatregelen

+
Maatregel
dat-01 - Controleer de datakwaliteit
ver-01 - Toets het algoritme op bias
imp-02 - Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren
+ +

Bronnen

+

The Fairness Handbook

+

Voorbeeld

+

Heb jij een goed voorbeeld van het gebruik van het Fairness Handbook op het gebied van algoritmen? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/framework-meaningful-engagement/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/framework-meaningful-engagement/index.html new file mode 100644 index 0000000000..17f21d075f --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/framework-meaningful-engagement/index.html @@ -0,0 +1,999 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Framework for Meaningful Engagement - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Framework for Meaningful Engagement

+ + +

ProbleemanalyseOntwerpProjectleiderBeleid en adviesMenselijke controleTransparantieFundamentele rechten

+

Direct naar het Framework for Meaningful Engagement

+

Hulpmiddel

+

Het Framework for Meaningful Engagement biedt organisaties een praktische aanpak om verschillende stakeholders effectief te betrekken in processen rondom AI en algoritmes. +Het beschrijft stapsgewijs hoe men betrokkenheid kan ontwerpen en uitvoeren, met de nadruk op drie pijlers:

+
    +
  1. een gedeelde doelstelling
  2. +
  3. een betrouwbaar proces
  4. +
  5. een zichtbare impact
  6. +
+

Het framework helpt organisaties om input van belanghebbenden daadwerkelijk te integreren, wat leidt tot duurzamere, inclusievere besluitvorming.

+

Relevantie voor het Algoritmekader

+

Betekenisvolle betrokkenheid van stakeholders is cruciaal voor verantwoord algoritmegebruik. +Voor overheden biedt dit framework handvatten om transparanter te zijn over de ontwikkeling en impact van algoritmes en om een goed proces in te richten bij het gebruik van een algoritme. Dit sluit aan bij eisen rond menselijke controle.

+

Auteurs en ontwikkeling

+

Het framework is ontwikkeld door de European Center for Not-for-Profit Law Stichting (ECNL) en SocietyInside, als onderdeel van de Deense Tech for Democracy Initiative. De totstandkoming vond plaats via een consultatieproces met bijdragen van meer dan 150 individuen en organisaties wereldwijd, waaronder belanghebbenden uit het maatschappelijk middenveld, bedrijfsleven en overheden. +Het framework bouwt voort op de VN-richtlijnen voor bedrijfs- en mensenrechten.

+

Bijbehorende vereisten

+
Vereiste
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-23-gebruiksverantwoordelijken-menselijk-toezicht
+ +

Bijbehorende maatregelen

+
Maatregel
imp-03 - Richt de juiste menselijke controle in van het algoritme
ver-03 - Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleid
ver-01 - Controleer regelmatig of het algoritme werkt zoals het bedoeld is
owp-06 - Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging
owp-07 - Maak een lijst van de meest kwetsbare groepen en bescherm hen extra
pba-01 - Beschrijf het probleem dat het algoritme moet oplossen
pba-02 - Beschrijf het doel van het algoritme
pba-03 - Beschrijf waarom een algoritme het probleem moet oplossen
pba-04 - Overleg regelmatig met belanghebbenden
org-01 - Bepaal of er genoeg experts beschikbaar zijn
+ +

Bronnen

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/index.html new file mode 100644 index 0000000000..8ad9e1bc1e --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/handreiking-non-discriminatie/index.html @@ -0,0 +1,1050 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Handreiking non-discriminatie by design - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + +
+ + + + + + + + +

Handreiking non-discriminatie by design

+ +

OntwikkelenImplementatieProjectleiderOntwikkelaarBias en non discriminatieFundamentele rechten

+

Direct naar de Handreiking non-discriminatie by design

+

Hulpmiddel

+

Deze handreiking legt uit welke vragen en principes leidend zijn bij het ontwikkelen en implementeren van een AI-systeem met het oog op het discriminatieverbod, vanuit zowel juridisch, technisch, als organisatorisch perspectief. +De handreiking is een praktisch toepasbaar ontwerpkader dat ontwikkelaars helpt om al in de ontwikkelfase van een AI-systeem discriminerende patronen zoveel mogelijk te identificeren, te voorkomen en te bestrijden.

+

Er zijn 4 uitgangspunten die leidend zijn in de handreiking:

+
    +
  1. Diversiteit
  2. +
  3. Context
  4. +
  5. Controleerbaarheid
  6. +
  7. Evaluatie.
  8. +
+

Relevantie

+

Stuk over relevantie voor het AK volgt nog. +Net als bij het IAMA, is dit document een manier om een multidisciplinaire discussie te faciliteren en stimuleren. Hierbij kunnen verschillende rollen betrokken worden door de projectleider: data-scientists, juristen, de functionaris gegevensbescherming (FG), aangevuld met domeinspecialisten.

+

Wanneer toepassen?

+

De handreiking is primair geschreven voor teams die zelf AI-systemen bouwen. Het gaat in op verschillende fases van ontwikkeling: probleemanalyse, dataverkenning en datapreparatie, ontwikkeling, implementatie en evaluatie. +Daarnaast kan deze handreiking dienen voor opdrachtgevers van AI-systemen, ofwel om vooraf offrerende partijen te vragen aan te geven hoe zij rekening zullen houden met de diverse punten uit de handreiking, ofwel om tijdens het proces mee te kijken en op relevante punten aanwijzingen te geven, ofwel om achteraf te controleren of een opgeleverd product aan alle relevante voorwaarden voldoet.

+

Relatie tot IAMA

+

Gebruikers van zowel de Handreiking non-discriminatie by design als het IAMA geven enkele verschillen tussen de twee instrumenten. Deze bevindingen zijn te vinden in het rapport 'Bekendheid, toepasbaarheid en toegevoegde waarde handreiking “non-discriminatie by design"' van de Auditdienst Rijk.

+

Zij geven aan dat het IAMA wordt gezien als instrument voor het nagaan van de impact van grondrechten in algemenere zin, waar de Handreiking zich specifiek richt op discriminatie. De handreiking bevat dan weer meer praktische voorbeelden die kunnen helpen bij begrip en afwegingen, waar de IAMA wat abstracter is.

+

Relatie tot het Fairness Handbook

+

Over het Fairness Handbook werd in het rapport aangegeven dat het een technischere uitwerking bevat dan de Handreiking. Het Handbook biedt wellicht meer houvast voor iemand die analyses maakt om inzicht te geven in de prestaties van het algoritme met het oog op ‘fairness’ en ‘bias’. Dit komt doordat het Handbook meer details geeft over de technische stappen die nodig zijn om te komen tot bepaalde analyses.

+

Relatie tot Toetsingskader Risicoprofielen van College voor de Rechten van de Mens

+

Ook het toetsingskader voor discriminatie door risicoprofielen van het College voor de Rechten van de Mens kan worden gebruikt om te bepalen of er discriminatie plaatsvindt. Dit kader is afkomstig uit 2021 en er wordt gewerkt aan een nieuwe versie, die waarschijnlijk eind 2024 zal verschijnen. De verschillende stappen die daarin gebruikt worden om te bepalen of een risicoprofiel tot discriminatie leidt op grond van ras of nationaliteit, zijn zeer relevant. Daarvoor hebben zij een beslisboom ontwikkeld.

+

Bijbehorende vereisten

+
Vereiste
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
grw-02 - Algoritmes discrimineren niet
aia-04 - Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
+ +

Bijbehorende maatregelen

+
Maatregel
dat-01 - Controleer de datakwaliteit
ver-01 - Toets het algoritme op bias
imp-02 - Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren
+ +

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld van het gebruik van de Handreiking non-discriminatie by design op het gebied van algoritmen? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/index.html new file mode 100644 index 0000000000..331eeb8c2f --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/index.html @@ -0,0 +1,1157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hulpmiddelen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Hulpmiddelen

+

Overzicht van aanbevolen hulpmiddelen voor het verantwoord ontwikkelen, gebruiken, beoordelen en monitoren van algoritmes en AI-systemen.

+

Richtlijnen en andere hulpmiddelen

+

Met hulpmiddelen bedoelen we hulpmiddelen voor verantwoord en effectief gebruik van algoritmes en AI-systemen, zoals:

+
    +
  • richtlijnen
  • +
  • standaarden
  • +
  • leidraden
  • +
  • handboeken
  • +
+

Deze hulpmiddelen helpen je bij het op een rij zetten, beoordelen en verbeteren van de kenmerken, prestaties, effecten en risico’s van algoritmes en AI.

+

Hoe we hulpmiddelen selecteren

+

Hulpmiddelen die we aanbevelen, zijn:

+
    +
  • relatief bekend onder ambtenaren
  • +
  • in gebruik door overheid, wetenschap of industrie
  • +
  • positief beoordeeld door gebruikers
  • +
  • geschikt voor algoritmes of AI-systemen van overheden
  • +
+

Staat een instrument niet in onze selectie, dan kan het nog steeds een goed instrument zijn voor jouw organisatie. Er zijn dus meer hulpmiddelen mogelijk. We maken een selectie om 2 redenen:

+
    +
  • Een selectie is duidelijker. Als we alle hulpmiddelen aanbieden, is het voor gebruikers moeilijker te bepalen welk instrument of welke combinatie het meest geschikt is. Daarvoor lijken de hulpmiddelen te veel op elkaar.
  • +
  • Een selectie kunnen we controleren op kwaliteit. We kunnen niet alle hulpmiddelen controleren.
  • +
+

Sommige hulpmiddelen zijn verplicht

+

Als een instrument verplicht is, staat dit er duidelijk bij. Een verplicht hulpmiddel is bijvoorbeeld de Data protection impact assessment (DPIA).

+

De meeste hulpmiddelen zijn niet verplicht. Bepaal zelf of je er gebruik van maakt.

+

Overzicht hulpmiddelen

+
Hulpmiddelen
Assessment List for Trustworthy Artificial Intelligence (ALTAI)
Baseline Informatiebeveiliging Overheid (BIO)
De Ethische Data Assistent
Data Protection Impact Assessment
Impact Assessment Mensenrechten en Algoritmes
Algoritmeregister
The Fairness Handbook
Framework for Meaningful Engagement
Handreiking non-discriminatie by design
Inkoopvoorwaarden
Discriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader
Onderzoekskader algoritmes Auditdienst Rijk 2023
Standaarden
Toetsingskader Algoritmes Algemene Rekenkamer
+ +

Help ons deze pagina te verbeteren

+

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/index.html new file mode 100644 index 0000000000..0141843b1f --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/inkoopvoorwaarden/index.html @@ -0,0 +1,1039 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Inkoopvoorwaarden - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Inkoopvoorwaarden

+ +

ProbleemanalyseOntwerpJuristProjectleiderBeleid en adviesPublieke inkoop

+

Hulpmiddel

+

Voorbeelden of templates van inkoopvoorwaarden kunnen helpen om een contract op te stellen dat een organisatie in staat stelt veilige en verantwoorde algoritmen of AI-systemen in te kopen. Deze worden ook wel eens modelcontractbepalingen genoemd. +Deze voorwaarden of bepalingen kunnen opgenomen worden wanneer er een contract wordt afgesloten met een leverancier van een algoritme of algoritmisch systeem. +Er kunnen dan bijvoorbeeld beperkingen gelden om onaanvaardbare risico's van AI te vermijden, of bepaalde voorwaarden gesteld worden waaraan een algoritme juist moet voldoen. +Ook kunnen bepaalde voorwaarden worden opgenomen op basis van de vereisten in het Algoritmekader.

+

Europese Commissie

+

De Europese contractvoorwaarden voor AI bieden aanbestedende organisaties de mogelijkheid om specifieke clausules op te nemen in de overeenkomst. Op deze manier worden afspraken gemaakt over onderwerpen die in lijn zijn met de aankomende AI-Act. Er zijn 2 versies van de AI-inkoopvoorwaarden opgesteld: een set voorwaarden voor AI-toepassingen met een hoog-risicoprofiel en een set voorwaarden voor AI-toepassingen met een laag-risicoprofiel.

+

Gemeente Amsterdam

+

De Europese contractvoorwaarden voor AI zijn gebaseerd op onder andere de modelbepalingen die de Gemeente Amsterdam al eerder opstelde. Deze dienen als voorbeeld voor andere gemeenten die algoritmische toepassingen willen inkopen.

+

AI-module bij ARBIT-2022

+

De AI-module bij de ARBIT is gebaseerd op het gepubliceerd model van de Europese Commissie dat hierboven beschreven wordt. Via een verwijzing in de gebruikte modelovereenkomst kan de AI-module onderdeel gaan uitmaken van een onder de ARBIT te sluiten overeenkomst.

+

De ARBIT zijn de Algemene Rijksinkoopvoorwaarden bij IT‑overeenkomsten (ARBIT) en zijn bedoeld voor kleine en middelgrote IT-inkopen door de overheid. Lees meer hierover op de website van PIANOo.

+

Relevantie

+

Steeds meer organisaties kopen algoritmische toepassingen in die veel impact hebben op gebruikers of beslissingen. Het is daarom van belang dat aanbestedende overheidsorganisaties afspraken maken met leveranciers, zodat de werking van de algoritmische toepassing transparant is en op een veilige en verantwoorde manier gebruikt wordt. Verschillende organisaties hebben daarom (voorbeeld-)contractvoorwaarden voor het inkopen van AI-systemen beschikbaar gesteld. Denk aan de Europese Commissie en de Gemeente Amsterdam.

+

Bijbehorende vereisten

+

Geen vereisten beschikbaar voor deze maatregel.

+ +

Bijbehorende maatregelen

+
Maatregel
dat-08 - Zorg dat je controle of eigenaarschap hebt over de data
owp-16 - Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output.
owp-15 - Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving.
owp-13 - Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-23 - Laat de aanbieder aangeven welke mate van opleiding en ondersteuning bij de implementatie nodig is om de beoogde algoritmes verantwoord te gebruiken.
2-owp-11-data-beschikbaarheid
+ +

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld van het gebruik van modelbepalingen of contractvoorwaarden op het gebied van algoritmen? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/mensenrechtelijktoetsingskader/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/mensenrechtelijktoetsingskader/index.html new file mode 100644 index 0000000000..5c36fac582 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/mensenrechtelijktoetsingskader/index.html @@ -0,0 +1,984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Discriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+ +
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Discriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader

+ +

ProbleemanalyseOntwerpBeleid en adviesJuristBias en non discriminatieFundamentele rechten

+

Direct naar het Mensenrechtelijk Toetsingskader

+
+

Let op!

+

Dit toetsingskader wordt momenteel vernieuwd. Een nieuwe versie wordt hier gepubliceerd zodra beschikbaar.

+
+

Hulpmiddel

+

Dit toetsingskader helpt overheidsfunctionarissen om te bepalen wanneer risicoprofielen leiden tot discriminatie op grond van ras of nationaliteit. +Het presenteert de (denk)stappen die doorlopen moeten worden om te toetsen of een risicoprofiel binnen de grenzen van het discriminatieverbod blijft. +Het is belangrijk om te benadrukken dat het hierbij gaat om de juridische ondergrens van het discriminatieverbod, zoals geformuleerd door internationale en nationale rechters. +Aan de regels uit dit toetsingskader moet de overheid zich dus ten minste houden. Dit laat onverlet dat de overheid kan beslissen om strengere regels te hanteren.

+
Noot voor de lezer
+

Dit toetsingskader is gebaseerd op geldende verdragen, wetten en jurisprudentie tot aan november 2021. De normen en jurisprudentie op dit terrein zijn echter continu in ontwikkeling. Zo heeft het gerechtshof Den Haag in 2023 in een belangrijke uitspraak vastgesteld dat het gebruik van etnische kenmerken als een van de selectiecriteria voor controle, zoals dat plaatsvond binnen het ‘Mobiel Toezicht Veiligheid’ door de Koninklijke Marechaussee, in strijd is met het discriminatieverbod.

+

Ook op Europees niveau is er nieuwe relevante jurisprudentie verschenen. Dit alles biedt een verdere aanscherping en concretisering van de geldende normen. Het College werkt daarom op dit moment aan een aangepast en doorontwikkeld toetsingskader waarin alle nieuwe ontwikkelingen worden verwerkt.

+

Relevantie

+

Het spreekt voor zich dat overheidsinstanties zich bij het uitvoeren van hun taken moeten onthouden van discriminatie. Recente voorbeelden zoals de Kinderopvangtoeslagaffaire laten echter zien dat het in de praktijk toch mis kan gaan. Duidelijk is dat discriminerende elementen toch in risicoprofielen voorkomen. Dat heeft er mede mee te maken dat het voor medewerkers van uitvoeringsinstanties niet altijd duidelijk is wat in welke context wel en niet mag.

+

Er komt daarbij veel kijken bij de beoordeling of een risicoprofiel binnen de grenzen van het discriminatieverbod blijft, zeker wanneer afkomst-gerelateerde kenmerken als selectiecriteria binnen dit risicoprofiel een rol spelen. In alle gevallen zal nauwkeurig afgewogen moeten worden welke kenmerken voor welke doeleinden worden gebruikt en hoe zich dat verhoudt tot het toepasselijke wettelijke kader. Dit toetsings- kader biedt handvatten voor het maken van deze afweging.

+

Auteur

+

Het Mensenrechtelijk Toetsingskader is ontwikkeld door het College voor de Rechten van de Mens.

+

Bijbehorende vereisten

+
Vereiste
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
grw-02 - Algoritmes discrimineren niet
+ +

Bijbehorende maatregelen

+
Maatregel
ver-01 - Toets het algoritme op bias
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/onderzoekskader-adr/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/onderzoekskader-adr/index.html new file mode 100644 index 0000000000..a04d82b656 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/onderzoekskader-adr/index.html @@ -0,0 +1,1004 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Onderzoekskader algoritmes Auditdienst Rijk 2023 - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+ +
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Onderzoekskader algoritmes Auditdienst Rijk 2023

+ +

OntwerpImplementatieMonitoring en beheerProjectleiderBeleid en adviesGovernance

+

Direct naar het Onderzoekskader Algoritmes

+

Hulpmiddel

+

Dit onderzoekskader is een instrument om de beheersing van algoritmes in kaart te brengen. +Het geeft inzicht in de risico’s die algoritmes met zich meebrengen en met welke maatregelen deze +risico’s beheerst (kunnen) worden.

+

Het onderzoekskader is in eerste instantie bedoeld als instrument voor auditors om de beheersing +en werking van algoritmes binnen overheidsorganisaties te onderzoeken, maar is ook bruikbaar +voor andere partijen om inzicht te krijgen in de huidige en/of gewenste beheersing van algoritme(s).

+

Het kader richt zich op algoritmes die binnen overheidsorganisaties gebruikt worden. Het is +ingericht op algoritmes die zelf van voorbeelden leren, zoals machine learning, maar is ook +toepasbaar op regelgebaseerde algoritmes. Het kader is ook bruikbaar voor andere organisaties +en kan bij verschillende fases van de levenscyclus van een algoritme worden ingezet. Mogelijk zijn +niet alle thema’s relevant gezien de context van het algoritme. De opdrachtgever en auditor(s) +dienen daarom voorafgaand aan een onderzoek te analyseren en te bepalen welke thema’s en +onderwerpen worden onderzocht. Het onderzoekskader is ingedeeld in 4 thema’s:

+
    +
  • Sturing en Verantwoording
  • +
  • Privacy
  • +
  • Data en Model
  • +
  • Informatiebeveiliging
  • +
+

Ethiek raakt alle thema’s en komt daarom bij elk thema in het kader terug. Elk thema bevat +deelgebieden en de risico’s en beheersmaatregelen die daarbij horen (inclusief de bron). +Ook deze kunnen weer gerelateerd zijn aan een ander thema. Een apart werkbestand voor +auditors is opgesteld wat kan worden gebruikt bij het uitvoeren van een onderzoek. Dit bestand +heeft dezelfde opbouw, maar bevat ook invulvelden om als auditor het risico (kans x impact) in te +schatten en de bevindingen op te nemen. Daarnaast zijn toelichtingen en voorbeelden van checks +en evidence opgenomen per beheersmaatregel.

+

Relevantie

+

Het onderzoekskader is ontwikkeld met behulp van nationale en internationale richtlijnen en +kaders, rapporten en instrumenten, zoals de Ethics guidelines for trustworthy AI van de Europese +Commissie (EC), Impact Assessment voor Mensenrechten bij de inzet van Algoritmes (IAMA), de +richtlijnen van het ministerie van JenV, het DPIA model Rijksoverheid (gebaseerd op o.a. AVG) en +de Guiding Principles Trustworthy AI Investigations van NOREA (beroepsvereniging IT-auditors +Nederland). De bron van de betreffende risico’s en beheersmaatregelen is tevens opgenomen.

+

Dit onderzoekskader is erg overkoepelend (net als het toetsingskader van de Algemene Rekenkamer). Er zijn dan ook veel maatregelen in het Algoritmekader gebaseerd op maatregelen die in het kader van de ADR staan. Bekijk alle maatregelen van het Algoritmekader hier.

+

Auteur

+

Het Onderzoekskader Algoritmes is ontwikkeld door de Auditdienst Rijk

+

Bijbehorende vereisten

+
Vereiste
aia-06 - Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
+ +

Bijbehorende maatregelen

+

Geen maatregelen beschikbaar voor dit hulpmiddel.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/index.html new file mode 100644 index 0000000000..e3ec6e4c47 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/standaarden/index.html @@ -0,0 +1,1097 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Standaarden - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Standaarden

+ +

Wat zijn standaarden?

+

Standaarden zijn afspraken die worden vastgelegd om ervoor te zorgen dat producten, processen of diensten voldoen aan specifieke eisen op het gebied van kwaliteit, veiligheid en prestaties. Ze worden ontwikkeld door standaardisatieorganisaties, meestal op initiatief van belanghebbenden die een behoefte aan een bepaalde standaard zien, zoals de Europese Commissie, bij of na het ontwikkelen van Europese regelgeving.

+

Er zijn verschillende soorten standaarden, zoals normen, Technische Rapporten (TR) en Technische Specificaties (TS).

+
    +
  • Normen zijn formele, breed geaccepteerde afspraken, vaak ontwikkeld door internationale organisaties zoals ISO/IEC.
  • +
  • Technische Rapporten (TR) hebben een meer informatief karakter. Een TR wordt gebruikt om informatie te delen die niet geschikt is voor een norm, bijvoorbeeld gegevens uit onderzoeken of enquêtes. Een TR is vaak de opmaat voor het opstellen van een norm.
  • +
  • Technische Specificaties (TS) zijn normatief, en bieden voorlopige specificaties, vooral voor technologieën in ontwikkeling. Een TS kan in een later stadium worden omgezet in een volledige norm als er voldoende consensus voor is.
  • +
+
+

Nog geen norm, maar toch interessant!

+
+

Zowel een Technisch Rapport als een Technische Specificatie bieden dus ondersteuning in situaties waar nog geen norm bestaat of waar consensus nog niet is bereikt. Dus een TS of TR kan ook zeker interessante informatie bevatten voor organisaties, maar ze hebben niet de status of juridische binding van een norm.

+

Daarnaast is er onderscheid tussen internationale normen (ISO), Europese normen (EN) en Nederlandse normen (NEN). +Europese normen zijn essentieel voor de AI Verordening, omdat ze geharmoniseerde standaarden bieden die juridische zekerheid verschaffen, met name voor hoog-risico AI-systemen. +Veel Europese normen beginnen als internationale ISO-normen en worden vervolgens aangepast aan de Europese context.

+

Waarom zijn standaarden belangrijk voor de AI-verordening?

+

Wanneer AI-systemen worden ontworpen of gebruikt, bieden standaarden praktische richtlijnen en technische kaders (praktische meerwaarde) waarmee compliance aantoonbaar kan worden gemaakt (juridische meerwaarde).

+

Juridische waarde van standaarden

+

Als een organisatie zich houdt aan de bij de wet behorende geharmoniseerde Europese normen, wordt er vanuit gegaan dat er wordt voldaan aan de AI-verordening (Presumption of Conformity). Dit betekent dat het AI-systeem wordt beschouwd als conform de wettelijke vereisten, wat zorgt voor juridische zekerheid en eenvoudiger toezicht​. +Hoewel het gebruik van standaarden vrijwillig is, bewijst naleving ervan dat producten en diensten een bepaald niveau van kwaliteit, veiligheid en betrouwbaarheid bereiken. In sommige gevallen worden standaarden in de wetgeving genoemd als een voorkeursmethode of zelfs als een verplichte vereiste om aan specifieke wetten te voldoen, zoals veiligheidswetgeving of interoperabiliteitsvereisten.

+

Praktische waarde van standaarden

+

Geharmoniseerde normen hebben daarnaast een duidelijke praktische waarde. Ze vertalen abstracte wettelijke verplichtingen uit de AI-verordening naar concrete technische en organisatorische eisen, bijvoorbeeld op het gebied van risicomanagement en kwaliteitsmanagement, maar ook voor duurzaamheid en transparantie​. Zo helpen standaarden organisaties dus bij het ontwikkelen en implementeren van betrouwbare AI-systemen.

+

Wat is er al beschikbaar? Een overzicht van bestaande standaarden

+

Belangrijke internationale (ISO/IEC) en Europese normen

+

Overzicht van actuele standaarden die relevant zijn voor de AI-verordening

+

De rol van de JTC 21

+

Wat moeten Nederlandse overheidsorganisaties doen?

+

Hoe gebruik je bestaande AI-standaarden?

+

Verwachte ontwikkelingen

+

Bronnen

+

Lijst van gebruikte bronnen, standaarden, en aanvullende documentatie +- Standards in Europe +-

+

Beslishulp AI-verordening

+

Met de beslishulp AI-verordening bepaal je snel en gemakkelijk of jouw AI-product onder de AI-verordening valt. En wat je dan moet doen.

+

Help ons deze pagina te verbeteren

+

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/toetsingskader-algemene-rekenkamer/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/toetsingskader-algemene-rekenkamer/index.html new file mode 100644 index 0000000000..3a522e81ce --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/hulpmiddelen/toetsingskader-algemene-rekenkamer/index.html @@ -0,0 +1,976 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Toetsingskader Algoritmes Algemene Rekenkamer - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+ +
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Toetsingskader Algoritmes Algemene Rekenkamer

+ +

Monitoring en beheerVerificatie en validatieProjectleiderBeleid en adviesJuristGovernance

+

Direct naar het Toetsingskader

+

Hulpmiddel

+

Het toetsingskader omvat 5 perspectieven op algoritmes, elk met hun belangrijkste risico's geformuleerd. Het gaat om Sturing en Verantwoordelijkheid, Model en Data, Privacy, IT-beheer en Ethiek. Voor elk risico is er een specifieke onderzoeksvraag opgesteld. Door deze vragen te beantwoorden en een score toe te kennen, krijgt de gebruiker inzicht in hoe goed het gekozen algoritme de risico's beheerst.

+

De mate van risico voor een specifiek algoritme wordt bepaald door twee factoren: de gebruikte geavanceerde technieken en de impact van het algoritme op de burger.

+

Het toetsingskader is in eerste instantie bedoeld als toetsinstrument voor auditors (controleurs en toezichthouders). Zij kunnen dit kader gebruiken om de risico's van het beoordeelde algoritme in beeld te krijgen.

+

Relevantie

+

Het digitale toetsingskader 'Aandacht voor algoritmes' is ontwikkeld vanwege de toenemende maatschappelijke aandacht voor algoritmes en de behoefte aan een integraal instrument voor toetsing en analyse. Het is gebaseerd op bestaande informatie en raamwerken, zowel binnen het Rijk als door externe partijen zoals NOREA en grote accountantskantoren.

+

Dit onderzoekskader is erg overkoepelend (net als het onderzoekskader van de ADR). Er zijn dan ook veel maatregelen in het Algoritmekader gebaseerd op maatregelen die in het kader van de Algemene Rekenkamer staan. Bekijk alle maatregelen van het Algoritmekader hier.

+

Auteur

+

Het Toetsingskader Algoritmes is ontwikkeld door de Algemene Rekenkamer

+

Bijbehorende vereisten

+
Vereiste
avg-01 - Persoonsgegevens worden op een rechtmatige manier verwerkt
avg-02 - Persoonsgegevens worden zo kort mogelijk bewaard
avg-13 - Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
avg-09 - Betrokkenen kunnen een beroep doen op hun privacyrechten
avg-05 - Persoonsgegevens zijn juist en actueel
avg-11 - Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-07 - Organisaties zijn transparant over het verwerken van persoonsgegevens
aia-35-verwerking-in-testomgeving
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
+ +

Bijbehorende maatregelen

+

Geen maatregelen beschikbaar voor dit hulpmiddel.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/index.html new file mode 100644 index 0000000000..e83930aa67 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/index.html @@ -0,0 +1,993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Algoritmekader - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Voldoen aan wetten en regels

+
+
    +
  • +

    Vereisten

    +
    +

    Overzicht van de belangrijkste vereisten voor overheden die algoritmes of AI-systemen ontwikkelen of gebruiken.

    +
  • +
  • +

    Maatregelen

    +
    +

    Overzicht van aanbevolen maatregelen voor verantwoord gebruik van algoritmes en AI-systemen. Het zijn adviezen om te voldoen aan de vereisten voor overheden. Andere maatregelen zijn ook mogelijk.

    +
  • +
  • +

    Hulpmiddelen

    +
    +

    Overzicht van aanbevolen hulpmiddelen voor het verantwoord ontwikkelen, gebruiken, beoordelen en monitoren van algoritmes en AI-systemen.

    +
  • +
  • +

    AI-verordening in het kort

    +
    +

    In de AI-verordening staan de Europese regels voor het verantwoord ontwikkelen en gebruiken van AI. Ongewenste AI is verboden vanaf 2 februari 2025. Andere AI-systemen moeten vanaf 2026 of vóór 2030 voldoen aan bepaalde vereisten.

    +
  • +
  • +

    Beslishulp AI-verordening

    +
    +

    Stel snel en gemakkelijk vast of de AI-verordening geldt voor jouw overheidsorganisatie. En aan welke vereisten je dan moet voldoen.

    +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-01-benodigde-expertise-en-capaciteit/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-01-benodigde-expertise-en-capaciteit/index.html new file mode 100644 index 0000000000..b9f7651e76 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-01-benodigde-expertise-en-capaciteit/index.html @@ -0,0 +1,994 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bepaal of er genoeg experts beschikbaar zijn - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Bepaal of er genoeg experts beschikbaar zijn

+ +

org-01OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

+

Maatregel

+ +

Bepaal welke expertise en capaciteit noodzakelijk is voor het ontwikkelen, inkopen en gebruiken van algoritmes en stel vast of er voldoende expertise en capaciteit beschikbaar is.

+

Toelichting

+ +
    +
  • Bepaal welke expertise en capaciteit binnen de organisatie noodzakelijk is voor het ontwikkelen, inkopen en gebruiken van algoritmes.
  • +
  • Dit is sterk afhankelijk van de specifieke toepassing en de inzichten die voortkomen uit risicoanalyses. Hoe complexer en risicovoller de toepassing, des te meer expertise en capaciteit noodzakelijk is.
  • +
  • Interne en externe actoren die betrokken zijn bij het ontwikkelen, inkopen en gebruik moeten over voldoende expertise en capaciteit beschikken om hun taken naar behoren uit te voeren.
  • +
  • Stel vast of er afhankelijkheden van externe aanbieders ontstaan.
  • +
  • Bepaal voorafgaand aan het (laten) ontwikkelen of inkopen van algoritmes of voldoende expertise en capaciteit beschikbaar is om tot een verantwoorde inzet ervan te komen.
  • +
  • Leg vast of er voldoende expertise en capaciteit beschikbaar is en onderbouw dit in projectdocumentatie.
  • +
  • Om menselijke controle te kunnen uitoefenen in verschillende fases van de ontwikkeling (of inkoop) van algortimes moet de mens bepaalde kennis, tijd en vaardigheden hebben. Alleen met de juiste kennis, tijd en vaardigheden kunnen risico’s op tijd geïdentificeerd en afgedekt worden. Deze kennis en expertise kan ook buiten de organisatie liggen, maar dan is het belangrijk om verantwoordelijkheden goed vast te leggen.
  • +
+

Bijbehorende vereiste(n)

+ + +
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
aia-21 - Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkheden
+
+

Bronnen

+ + + +

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-02-beleid_opstellen_inzet_algoritmes/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-02-beleid_opstellen_inzet_algoritmes/index.html new file mode 100644 index 0000000000..e4049797aa --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-02-beleid_opstellen_inzet_algoritmes/index.html @@ -0,0 +1,1027 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Stel beleid op voor een verantwoorde inzet van algoritmes binnen de organisatie. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Stel beleid op voor een verantwoorde inzet van algoritmes binnen de organisatie.

+ +

org-04OrganisatieverantwoordelijkhedenBeleid en adviesGovernanceTransparantie

+

Maatregel

+

Stel beleid op voor een verantwoorde inzet van algoritmes binnen de organisatie.

+

Toelichting

+

Een duidelijk beleid over de inzet van algoritmes helpt organisaties te voldoen aan de vereisten voor het verantwoord gebruik ervan. Hierin worden zaken beschreven als:

+
    +
  • +

    Hoe de inzet van algoritmes gaat bijdragen aan het realiseren van de organisatiedoelstellingen.

    +
  • +
  • +

    Het beschrijven van de stappen die moeten worden gezet om algoritmes op een verantwoorde wijze in te gaan zetten. Dit is afhankelijk en verschilt per type algoritme en de bijbehorende risicoclassificatie.

    +
  • +
  • +

    Het beschrijven van welke hulpmiddelen in welke gevallen moeten worden ingezet om te voldoen aan de vereisten die gelden voor algoritmes. Hierbij kan worden gedacht aan:

    + +
  • +
  • +

    Hoe burgers worden geïnformeerd over de inzet van algoritmes door de organisatie (communicatiestrategie) en welke kanalen hiervoor kunnen worden gebruikt. Hierbij kan worden gedacht aan:

    +
      +
    • Het Algoritmeregister voor het publiceren van hoog risico AI-systemen of impactvolle algoritmes.
    • +
    • Een algemene pagina op de website met informatie over de inzet van algoritmes.
    • +
    • Het verwerkingsregister.
    • +
    • Een intern registratiesysteem, bijvoorbeeld voor het registreren van laag risico of niet-impactvolle algoritmes zodat deze informatie voor medewerkers beschikbaar is.
    • +
    • In welke gevallen een (openbaar) besluit wordt genomen door het bestuur over de inzet van een algoritme.
    • +
    +
  • +
  • +

    Er is beschreven welke informatie over welke typen algoritmes wordt gecommuniceerd met betrokkenen bij de ontwikkeling of gebruik ervan door de organisatie.

    +
  • +
  • +

    Er is beschreven welke stappen worden gezetten in het geval dat er incidenten ontstaan rondom de inzet van algoritmes, denk hierbij aan een discriminatieprotocol.

    +
  • +
  • +

    Dit beleidsdocument is beschikbaar en toegankelijk voor geïnteresseerden.

    +
  • +
+

Bronnen

+

Bijbehorende vereiste(n)

+ + + +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+ +

Risico

+

Zonder duidelijk beleid over de inzet van algoritmes kan het gebeuren dat algoritmes worden ontwikkeld of gebruikt die niet passend zijn binnen de organisatie.

+

Voorbeelden

+ +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-03-toepassen_risicobeheer/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-03-toepassen_risicobeheer/index.html new file mode 100644 index 0000000000..5e83e9434f --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-03-toepassen_risicobeheer/index.html @@ -0,0 +1,1009 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak een plan voor het omgaan met risico’s - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak een plan voor het omgaan met risico’s

+ + +

org-03OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

+

Maatregel

+ +

Pas risicobeheer gestructureerd toe voorafgaand en gedurende de ontwikkeling en gebruik van algoritmes.

+

Toelichting

+ +
    +
  • Bepaal tijdig, bijvoorbeeld in de probleemanalyse- of ontwikkelfase, om wat voor toepassing het gaat (algoritme of AI-systeem) en bepaal welke risicoclassificatie hierbij hoort.
  • +
  • Bepaal op basis van de toepassing en de risicoclassificatie, welke aspecten van risicobeheer moeten worden toegepast.
  • +
  • Inventariseer tijdig, bijvoorbeeld in de probleemanalayse- of ontwikkelfase, bij betrokken experts welke beleidskaders en hulpmiddelen binnen de organisatie moeten worden ingezet om risicobeheer toe te passen.
  • +
  • Bepaal op basis van de levenscyclus van een algoritme of AI-systeem wanneer welke aspecten van risicobeheer moeten worden toegepast.
  • +
  • Maak inzichtelijk op welke niveaus risicobeheer kan en moet worden belegd bij het ontwikkelen en gebruiken van algoritmes.
  • +
  • Daarbij gaat het om het identificeren, analyseren, evalueren (afhankelijk van de risicobereidheid), behandelen (risicoreactie, o.a. maatregelen), monitoren & beoordelen en communiceren & rapporteren van risico's.
  • +
  • Gedurende de levenscyclus van een algoritme of AI-systemen kunnen nieuwe risico's ontstaan waar mogelijk nieuwe maatregelen voor moeten worden getroffen. Het is van belang dat iteratief wordt gewerkt aan mitigerende maatregelen en dat risicobeheer periodiek wordt toegepast.
  • +
+

Let op! Sommige maatregelen in het Algoritmekader gaan dieper in op het uitvoeren van risicoanalyses.

+

Risico

+

Risico's worden niet (tijdig) vastgesteld en adequaat geadresseerd en behandeld.

+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
aia-03 - Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+
+

Bronnen

+ + +

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-04-politiek-bestuurlijke-verantwoordelijkheid/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-04-politiek-bestuurlijke-verantwoordelijkheid/index.html new file mode 100644 index 0000000000..8ed15e4b64 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-04-politiek-bestuurlijke-verantwoordelijkheid/index.html @@ -0,0 +1,1015 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid.

+ +

org-04OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernanceTransparantie

+

Maatregel

+

Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid.

+

Toelichting

+
    +
  • Voor een passende algoritmegovernance is politiek-bestuurlijk bewustzijn, betrokkenheid en verantwoordelijkheid essentieel.
  • +
  • De kernvraag voor publieke organisaties bij de inzet van algoritmen is altijd: Hoe wegen we (als publieke organisatie of samenleving) de voordelen en nadelen van de inzet van algoritmen?
  • +
  • Dit is per definitie een kwalitatieve en politieke vraag.
  • +
  • Dit gaat niet alleen over direct opbrengsten maar ook over lange termijn en indirecte effecten, de mate waarin de inzet van technologie bijdraagt aan de legitimiteit van publieke organisatie en hoe burgers met deze technologie worden bejegend.
  • +
  • Om te zorgen voor politiek-bestuurlijke betrokkenheid kan het helpen om een meerjarige visie/strategie rondom verantwoorde inzet te formuleren waar een communicatiestrategie richting burgers onderdeel van is.
  • +
  • Zorg ervoor dat bestuurders bewust zijn van de voor- en nadelen van de inzet van algoritmes en daarnaar kunnen handelen.
  • +
  • Dit ondersteunt teams bij het maken van de juiste overwegingen bij de ontwikkeling en gebruik van algoritmes. Het geeft ook inzicht wanneer de politiek of bestuurlijk verantwoordelijke(n) moeten worden betrokken bij het project om beslissingen te nemen, bijvoorbeeld of de mate van onbewuste vooringenomenheid (bias) binnen acceptabele grenzen ligt.
  • +
  • Het doorlopen van een concrete casus voor de ontwikkeling en gebruik van een algoritme, inclusief het uitvoeren van een IAMA, kan waardevolle informatiegeven om een meerjarige visie of strategie op te stellen.
  • +
+

Bronnen

+

Kleur bekennen - vervolgonderzoek algoritmes

+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +

Geen vereisten beschikbaar voor deze maatregel.

+
+

Risico

+ + +

Voorbeelden

+
+

Voorbeeld gemeente Rotterdam

+

Één van de belangrijkste hoofdconclusies van het rapport Kleur Bekennen van de gemeente Rotterdam, opgesteld door de Algemene Rekenkamer, onderstreept het belang van actief bestuur binnen algoritme- en AI-governance:

+
+

"Het ontbreekt aan een politiek-bestuurlijk kader dat duidelijk maakt welke normen en principes leidend zijn bij de ontwikkeling en het gebruik van algoritmes. Dit heeft als effect dat belangrijke besluit over bijvoorbeeld wenselijkheid, haalbaarheid, transparantie en bias bij de ambtelijke organisatie komen te liggen. Deze besluiten vragen om een politieke afweging".

+
+

De algoritmegovernance van de Gemeente Rotterdam bestaat uit de volgende onderdelen:

+
    +
  1. een visie op de inzet van algoritmes;
  2. +
  3. instrumentarium voor risicobeheersing dat onder andere bestaat uit een risico-assessment en een mensenrechtenassessment;
  4. +
  5. een uiteenzetting van rollen en verantwoordelijkheden en;
  6. +
  7. een omschrijving van de verantwoordelijkheden voor controle en advies.
  8. +
+

Deze stappen volgen kan helpen bij het inrichten van een algoritmegovernance.

+
+

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-05-bestaande-governance/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-05-bestaande-governance/index.html new file mode 100644 index 0000000000..65a762bd64 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-05-bestaande-governance/index.html @@ -0,0 +1,1024 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sluit algoritmegovernance aan op bestaande governancestructuren binnen de organisatie. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Sluit algoritmegovernance aan op bestaande governancestructuren binnen de organisatie.

+ +

org-05OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

+

Maatregel

+

Sluit algoritmegovernance aan op bestaande governancestructuren binnen de organisatie.

+

Toelichting

+

Bij de vormgeving van een algoritmegovernance van een organisatie is het van belang om aansluiting en samenwerking te bewerkstelligen met huidige governancestructuren binnen de organisatie, zoals:

+ +

Deze governancestructuren kunnen waardevolle aanknopingspunten bieden voor algoritmegovernance, omdat hierin vaak al duidelijke afspraken zijn gemaakt en processen zijn geschreven om bijvoorbeeld risico's zo goed mogelijk te managen. +In veel organisaties werken bijvoorbeeld privacy- en informatiebeveiliging en informatiebeheerders nauw samen van strategisch organisatieniveau tot operationeel, omdat deze onderwerpen raken aan beide domeinen. +Voor een verantwoorde inzet van algoritmes zullen deze expertise moeten gaan samengewerkt met andere expertise, zoals die van data science en ethiek. +Het is van belang dat deze expertises tijdig en voldoende ruimte krijgen om samen te werken, zodat de functionele en niet functionele requirements kunnen worden gedefinieerd voor een verantwoorde inzet van algoritmes.
+Stel vast waar deze expertise elkaar nodig hebben en waar deze zelfstandige taken en verantwoordelijkheden hebben. +Voorgaande geeft inzichten om te bepalen in hoeverre algoritmegovernance, naast de bestaande governancestructuren, moet worden ingericht.

+

De volgende vragen kunnen bedragen om bovenstaande inzichtelijk te krijgen: +- Welke lessen zijn geleerd met de implementatie van de AVG of de toepassing van de BIO? +- Is er iemand intern verantwoordelijk gemaakt voor (toezicht op) algoritmes? +- Hoe werken experts vanuit verschillende onderwerpen zoals privacy, informatiebeheer, informatiebeveiliging en data op dit moment samen als het gaat om de inzet van algoritmes?

+

Bronnen

+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +

Geen vereisten beschikbaar voor deze maatregel.

+
+

Risico

+ + +

Voorbeelden

+

Een concreet voorbeeld van samen optrekken is deze handreiking om de IAMA en DPIA gezamelijk uit te voeren.

+
+

Voorbeeld: Ervaringen Kadaster

+
    +
  1. Bij inwerkingtreding van de AVG ging men snel aan de slag met DPIA’s, vinkenlijstjes. Let op voor een schijndossier: Begrijp wat er toegepast moet worden, voordat je aan de slag gaat; niet uitvoeren om maar te laten zien dat je eraan voldoet.
  2. +
  3. Nadenken over governance. De FG is bij de wet geregeld, maar er is meer nodig. Welke profielen heeft de ondersteuning voor de uitvoering; (centrale) privacy officers en is hier ruimte voor?
  4. +
  5. Zorg dat interpretaties over wet- en regelgeving gelijk zijn binnen de organisatie en de collega’s die binnen de governance structuur samenwerken.
  6. +
  7. Er is beleid gemaakt, maar in de praktijk is te weinig capaciteit om dit uit te voeren. Stel een realistisch beleidsplan op om de gestelde doelen daadwerkelijk te kunnen realiseren.
  8. +
+

Centrale privacy officer Kadaster

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/index.html new file mode 100644 index 0000000000..25e451a34b --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-06-volwassenheidsmodel/index.html @@ -0,0 +1,1066 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gebruik een algoritme volwassenheidsmodel om te weten waar de organisatie staat - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Gebruik een algoritme volwassenheidsmodel om te weten waar de organisatie staat

+ +

org-06OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

+

Maatregel

+

Breng de volwassenheid van je organisatie op het gebied van algoritmes in kaart.

+

Toelichting

+
    +
  • Om tot een passende algoritmegovernance voor een organisatie te komen, moet eerst worden vastgesteld wat op dit moment al is ingericht binnen een organisatie op het gebied van algoritmes.
  • +
  • Hiervoor kan een volwassenheidsmodel worden toegepast.
  • +
  • Op basis hiervan kunnen vervolgstappen worden gedefinieerd, zodat je een handelingsperspectief hebt om je organisatie te organiseren. Ook kunnen deze uitkomsten helpen bewustzijn over de uitdagingen te vergroten.
  • +
  • Het is denkbaar dat het realiseren van algoritmegovernance vraagt om een organisatieverandering. De noodzaak voor implementatie van de AI-Verordening kan hier een katalysator voor zijn. Pas daarom verandermanagementtechnieken toe.
  • +
  • Deel deze informatie met het bestuur en zorg dat hier bewustzijn ontstaat. Bepaal vervolgens hoe algoritmegovernance moet worden ingericht.
  • +
  • Het is aan te raden om verantwoordelijkheden te beleggen voor het realiseren van algoritmegovernance.
  • +
+

Bronnen

+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +

Geen vereisten beschikbaar voor deze maatregel.

+
+

Risico

+ + +

Voorbeelden van volwassenheidsmodellen

+

Er zijn verschillende modellen om het volwassenheidsniveau te bepalen. Deze modellen richten zich niet altijd specifiek op het beheer van algoritmes, maar kijken breder naar algoritmes in de organisatie of naar ethische vraagstukken. Governance is altijd een onderdeel van deze modellen.

+

AI ethics maturity model van Krijger, Thuis, de Ruiter, Ligthart & Broekman (2023)

+

Het AI ethics maturity model van Krijger, Thuis, de Ruiter, Ligthart & Broekman (2023) brengt de volwassenheid op verschillende niveau's in kaart op basis van zes categorieën:

+
    +
  • awareness & culture
  • +
  • policy
  • +
  • governance
  • +
  • communication & training
  • +
  • pevelopment proces
  • +
  • tooling
  • +
+

Het Datavolwassenheidsmodel van de IBDS

+

Het datavolwassenheidmodel van de Interbestuurlijke Datastrategie (IBDS) kijkt naar hoe goed organisaties omgaan met data. Dit model is ook belangrijk voor kunstmatige intelligentie (AI), omdat data daar een grote rol speelt. Het model heeft een beslishulp datavolwassenheid waarmee bepaald kan worden hoe volwassen een organisatie is met data. IBDS biedt ook een gids met verschillende manieren om de datavolwassenheid in kaart te brengen.

+

Innovatie en volwassenheid

+

Het gebruik van algoritmes wordt vaak gezien als een vorm van innovatie. Hoe kan AI helpen bij het ondersteunen van nieuwe ideeën en het vinden van nieuwe toepassingen? Een voorbeeld van een volwassenheidsmodel over innovatie is de Innovatie Maturity Scan van Innoveren met Impact.

+

MITRE AI Maturity Model en Organizational Assessment Tool

+

Het AI Maturity Model en de bijbehorende Organizational Assessment Tool zijn ontwikkeld door de Amerikaanse organisatie MITRE. MITRE is een non-profitorganisatie en enigzins vergelijkbaar met het Nederlandse TNO. Dit volwassenheidsmodel onderscheidt een zestal pijlers in de AI volwassenheid van een organisatie en daarbij een vijftal volwassenheidsniveaus. Het volwassenheidsmodel en assessment zijn goed gedocumenteerd.

+

MITRE AI Maturity Model

+
+

Heb je een voorbeeld of best practice, laat het ons weten via

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-07-intern-toezicht/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-07-intern-toezicht/index.html new file mode 100644 index 0000000000..8399f02de9 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-07-intern-toezicht/index.html @@ -0,0 +1,952 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Richt een algoritmegovernance in met three lines of defence - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Richt een algoritmegovernance in met three lines of defence

+ +

Maatregel

+

Richt een algoritmegovernance in met three lines of defence.

+

Toelichting

+

Een inrichting van algoritmegovernance die vaak wordt toegepast is het three lines of defence model:

+
    +
  • De eerste linie gaat over eigenaarschap, ontwikkeling, gebruik en risicobeheersing van algoritmes.
  • +
  • De tweede linie identificeert, beoordeelt en rapporteert over risico’s en het uitgevoerde gebruik algoritmes.
  • +
  • De derde verdedigingslinie controleert de werking van de governance en betreft interne advisering en toetsing.
  • +
+

Schuett (2022) presenteert het three lines of defence model als volgt:

+

Three Lines of Defence Model

+

Het toepassen van een 'three lines of defence' is slechts één aspect van het toepassen van algoritmegoverance.

+

Voorbeelden

+

Onder andere de UWV en de Gemeente Rotterdam hanteren dit model met drie linies. Bij de gemeente Rotterdam zijn bijvoorbeeld de drie lijnen ingevuld via de volgende rollen en verantwoordelijkheden: “De eerste lijn bestaat uit de proceseigenaren en de operationeel verantwoordelijken. Proceseigenaren zijn verantwoordelijk voor de gehele algoritmetoepassing en de operationeel verantwoordelijken voor de ontwikkeling. De tweede lijn is de algoritme expert, die een onafhankelijke toezicht- en adviestaak heeft. De derde lijn wordt volgens de stukken die gaan over de algoritme governance vervuld door Financial audit.” (Rekenkamer Rotterdam, 2024)

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-08-beslismoment-levenscyclus/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-08-beslismoment-levenscyclus/index.html new file mode 100644 index 0000000000..61b3ffd35a --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-08-beslismoment-levenscyclus/index.html @@ -0,0 +1,1022 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak gebruik van beslismomenten in de algoritmelevenscyclus - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak gebruik van beslismomenten in de algoritmelevenscyclus

+ +

org-08OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

+

Maatregel

+

Maak gebruik van beslismomenten in de levenscyclus van een algoritme.

+

Toelichting

+
    +
  • Algoritmegovernance kan op de levenscyclus aansluiten door 'gates' of controlepunten in te voeren. Deze gates bevatten belangrijke mijlpalen om te beoordelen of de juiste taken zijn uitgevoerd, of ethische afwegingen zijn geamaakt, of documentatie heeft plaatsgevonden en of akkoord is ingewonnen (go/no-go moment) bij de verantwoordelijke(n) om naar de volgende fase te mogen.
  • +
  • Het is belangrijk om te weten dat toepassing van deze ‘gates’ niet altijd hetzelfde is. Dit kan namelijk verschillen afhankelijk van het type algoritme.
  • +
  • Een hoog-risico-AI-systeem moet aan meer vereisten voldoen dan een niet impactvol algoritme. Een hoog-risico AI-systeem moet daarom binnen de gates worden getoetst op meer onderdelen dan een niet impactvol algoritme.
  • +
+

Bronnen

+
    +
  • Hulpmiddel handelingsruimte waardevolle AI in de zorg ([presentatie](https://nlaic.com/wp-content/uploads/2022/06/04a.
  • +
  • Hulpmiddel-Handelingsruimte-Waardevolle-AI-voor-gezondheid-en-zorg.pdf))(samenvatting) is beschikbaar via de NL AI Coalitie en Data voor gezondheid
  • +
  • UWV Beleidsdocument model risico management, Modellevenscyclus (blz 21), 29 september 2021
  • +
  • Lifecyclemanagement in het toetsingskader van de Algemene Rekenkamer nr (1.07) .
  • +
+

Bijbehorende vereiste(n)

+ + +
+Bekijk alle vereisten +

Geen vereisten beschikbaar voor deze maatregel.

+
+

Risico

+ + +

Voorbeelden

+

Hieronder volgen twee voorbeelden van hoe governance effectief kan worden geïntegreerd in de levenscyclus van algoritmen en AI-modellen:

+
+

Ministerie VWS In de levenscyclus

+

In het hulpmiddel handelingsruimte waardevolle AI in de zorg is tussen elke fase in de levenscyclus een ‘gate’ geplaatst. Tussen de afronding van een fase en de start van de daaropvolgende fase wordt een formele poort geplaatst. Om door deze poort te gaan, moet de voorgaande fase volledig zijn afgerond: vraagstukken dienen beantwoord te zijn, activiteiten uitgevoerd en aan interne en externe vereisten dient te zijn voldaan. Deze zaken kunnen in de vorm van documentatie aan de organisatie worden opgeleverd, waarna een gesprek of review kan plaatsvinden.

+

Het vormgeven van deze overgangen geeft verantwoordelijke stakeholders binnen de organisatie een structuur om de ontwikkeling en inzet van algoritmen in elke fase te beoordelen en bij te sturen. De gezamenlijke kernvraag voor alle betrokkenen in de gates is: Geloven we dat de voordelen van de inzet (en ontwikkeling) van dit algoritme opwegen tegen eventueel te verwachten nadelen? En hoe gaan we om met deze dilemma's? Daarbij kunnen opvolgende fasen in de levenscyclus een eigen accentvraag kennen, zoals “Is het beoogde algoritme wenselijk?” in de probleemanalyse fase tot “Levert het algoritme nog de waarde op die we beogen?” tijdens de monitoring- en beheerfase.

+

Afbeelding

+
+
+

Voorbeeld: Het UWV

+

In haar modellevenscyclus [^3] maakt het UWV gebruik van een gelaagdheid in de “gates” door gebruik te maken van een zachte en harde knip tussen de opvolgende fasen. Enerzijds is er een zachte knip voorzien door aan het eind van elke fase de mogelijkheid te laten om een stap terug te zetten in de levenscyclus. Mocht het onduidelijk zijn wat de beoogde voordelen zijn ten opzichte van de nadelen, of er onvoldoende invulling gegeven is aan de vereisten/activiteiten, dan kan het algoritme of AI-model ontwikkelproces bij een zachte knip een stap terugnemen in de levenscyclus. Anderzijds zijn er 4 harde grenzen in de levenscyclus aangebracht waarin formele vereisten aan het ontwikkeltraject worden opgelegd.

+

Afbeelding

+
+
+

Voorbeeld: BD (Analytische en Cognitieve Technologie - CoE Cognitieve Oplossingen)

+

Enkele ervaringen m.b.t. levencyclus: +Plot sleutelmomenten en mijlpaal momenen in die nodig zijn om het proces te kunnen laten werken en bepaal de requirements die daarmee samenhangen. +Richt als eerste een basis (b.v. voor low risk) de AI-governance in op operationeel niveau, implementeer deze basis en stel gaandeweg/ondertussen op basis van o.a. best practices de requirements op naar de "wereld" er om heen (tactisch en strategisch niveau).

+

image

+
+
+

Voorbeeld: Algoritmeprocesmodel Ministerie van Defensie

+

Het Ministerie van Defensie heeft een "algoritmeprocesmodel" ontwikkeld. Op level 1 is het een levenscyclus zoals ook in het Algoritmekader. Op level 2 wordt ingegaan op de rollen en verantwoordelijkheden. Op level 3 zijn ook formulieren om op specifieke momenten in de AI-levenscyclus de juiste documentatie op te leveren. N.B.: Defensie heeft dit ingericht in Sharepoint, waardoor verantwoordelijken te koppelen zijn aan activiteiten in de levenscyclus.

+

image

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-09-governance-per-risicocategorie/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-09-governance-per-risicocategorie/index.html new file mode 100644 index 0000000000..9f63ef7ea0 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-09-governance-per-risicocategorie/index.html @@ -0,0 +1,1011 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Richt algoritmegovernance op basis van de risicoclassificatie van algoritmes. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Richt algoritmegovernance op basis van de risicoclassificatie van algoritmes.

+ +

Maatregel

+

Richt algoritmegovernance in op basis van de risicoclassificatie van algoritmes.

+

Toelichting

+
    +
  • Er is een verschil in de vereisten die van toepassing zijn op type algoritmes. Dit is mede afhankelijk van de risioclassificatie en de impact van het algoritme op betrokkenen.
  • +
  • Zo zullen op basis van de AI-verordening meer vereisten moeten worden nageleefd bij hoog-risico AI-systemen, dan voor een AI-systeem met een beperkt risico.
  • +
  • +

    Dit betekent dat algoritmegovernance uitgebreider moet zijn voor de risicovollere, complexere toepassingen dan voor de eenvoudige, niet-risicovolle toepassingen.

    +
  • +
  • +

    Stel daarom tijdig vast om welk type algoritme het gaat en welke vereisten hiervoor gelden. Dat draagt eraan bij dan alleen wordt gefocust op het realiseren van de vereisten waar daadwerkelijk aan moet worden voldaan. Dit zorgt ervoor dat projecten sneller kunnen worden gerealiseerd.

    +
  • +
  • Let op dat niet enkel naar de AI-verordening wordt gekeken. Ook op impactvolle algoritmes die niet vallen onder het bereik van de AI-Verordening zijn ook vereisten van toepassing, en moet algoritmegovernance op worden toegepast.
  • +
  • Is algoritmegovernance nieuw bij jouw organisatie, dan kan het helpen om een use-case met beperkt risico grondig te doorlopen om hiervan te leren.
  • +
+

Bronnen

+ + + +
+Bekijk alle vereisten +

Geen vereisten beschikbaar voor deze maatregel.

+
+

Bijbehorende vereiste(n)

+

Geen vereisten beschikbaar voor deze maatregel.

+ +

Risico

+ + +

Voorbeelden

+

De gemeente Rotterdam kiest ervoor om de algoritmegovernance alleen in te zetten bij hoog-risico AI-toepassingen. +Deze risicoclassificatie volgt de AI-Verordening. Voor laag-risico toepassingen geldt de standaard governance van de gemeente: de informatiebeveiligings- en privacy governance (Kleur Bekennen, Rekenkamer Rotterdam, 2024, p.71). Tabel 1 geeft inzicht in verschillende typen algoritmen en AI-toepassingen. De afbeelding uit hetzelfde rapport geeft een flowchart van hoe de governance anders is afhankelijk van de risico-categorie.

+

Afbeelding

+

In dit voorbeeld is ook het principe gehanteerd dat naast hoog-risico volgens de AI-verordening, bij ieder algoritme aan de hand van een drietal vragen moet worden besloten of een uitgebreidere algoritmegovernance nodig is. +* Is de werking van het algoritme niet volledig én beknopt uit te leggen aan een gemiddelde Rotterdammer? +* Ontbreekt er een menselijke beoordeling voordat de uitkomst van het algoritme in de praktijk wordt gebracht door middel van een concrete handeling van de gemeente? +* Is het voorstelbaar dat de algoritmetoepassing uitmondt in een onrechtvaardige handeling van de gemeente tegen burgers of bedrijven

+

Kijk zelf goed wat passend is voor jouw organisatie.

+

Voorbeeld BD (Analytische en Cognitieve Technologie | CoE Cognitieve Oplossingen): +* Richt als eerste een basis (b.v. voor low risk) algoritmegovernance in op operationeel niveau, implementeer deze basis en stel gaandeweg/ondertussen op basis van o.a. best practices de requirements op naar de "wereld" er om heen (tactisch en strategisch niveau).

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-10-inrichten-taken-en-verantwoordelijkheden-algoritmegovernance/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-10-inrichten-taken-en-verantwoordelijkheden-algoritmegovernance/index.html new file mode 100644 index 0000000000..8a092e4d82 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-10-inrichten-taken-en-verantwoordelijkheden-algoritmegovernance/index.html @@ -0,0 +1,1010 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Taken en verantwoordelijkheden zijn toebedeeld in de algoritmegovernance - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Taken en verantwoordelijkheden zijn toebedeeld in de algoritmegovernance

+ +

org-10OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

+

Maatregel

+

Taken en verantwoordelijkheden zijn toebedeeld in de algoritmegovernance

+

Toelichting

+
    +
  • Bij het vormgeven van een doeltreffende algoritmegovernance is het beleggen van expliciete taken en verantwoordelijkheden cruciaal.
  • +
  • Het beleggen van deze taken en verantwoordelijkheden zorgt voor een actiegerichte structuur waarin duidelijkheid bestaat over wie wanneer aan zet is.
  • +
  • Denk hierbij aan het opstellen van een RACI-matrix en pas dit binnen de organisatie toe per risicoclassificatie voor algoritmes.
  • +
  • Rollen en verantwoordelijkheden kunnen worden gekoppeld aan de vereisten en maatregelen die moeten worden gerealiseerd in de verschillende fasen van de levenscyclus van een algoritme.
  • +
  • Organisaties zullen zelf moeten beoordelen welke taken en verantwoordelijkheden ze willen koppelen aan de beschikbare (of nieuwe) rollen binnen hun organisaties.
  • +
  • Zie hieronder een mogelijk voorbeeld van hoe dit eruit kan zien.
  • +
+

Format

+

Bronnen

+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +

Geen vereisten beschikbaar voor deze maatregel.

+
+

Risico

+ + +

Voorbeelden

+
+

Three lines of defence - diverse organisaties

+

Het three lines of defence model dat zowel de gemeente Rotterdam als het UWV hanteert biedt hiervoor handvatten. De essentie van dit model is het scheiden van drie niveau’s in verantwoordelijkheden om effectieve governance mogelijk te maken. Daarnaast wordt in veel governance structuren een RACI model opgesteld om rollen en verantwoordelijkheden expliciet te maken.

+
+
+

RACI matrix - diverse organisaties

+

RACI is de afkorting voor Responsible (Verantwoordelijk – uitvoerder van de taak), Accountable (Aanspreekbaar – eigenaar van de taak), Consulted (Geconsulteerd) en Informed (Geïnformeerd). De gemeente Rotterdam heeft de interactie tussen rollen/verantwoordelijkheden van algoritme/AI governance en de volledige datamanagement structuur in een RACI model vormgegeven (Bron: Kleur bekennen rekenkamer Rotterdam). Wees bewust dat iedere organisatie anders is, en waarschijnlijk op een andere RACI-matrix uitkomt.

+

RACI model gemeente Rotterdam

+
+
+

Niet alles town down vast te leggen - CoE Belastingdienst

+

Het te regide vastleggen van functies en bijbehorende taken en verantwoordelijkheden kan nadelen hebben. Een team bij de belastingdienst (Analytische en Cognitieve Technologie | CoE Cognitieve Oplossingen) heeft ervaren dat het definieren van werkpakketten in plaats van uitwerkte functies beter werkt. Alles dient belegd te zijn, maar alles op microniveau vastleggen is vaak niet te doen zonder in de praktijk te staan, en kan avenrechts werken. Wees als algoritmegovernance nog nieuw is zeker in het begin bewust dat inrichting altijd beter kan; ga grondig maar ook flexibel te werk.

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-11-gebruikersbeheer/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-11-gebruikersbeheer/index.html new file mode 100644 index 0000000000..50d6ab048e --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-11-gebruikersbeheer/index.html @@ -0,0 +1,1011 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak afspraken over het beheer van gebruikers - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak afspraken over het beheer van gebruikers

+ +

org-11OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesTechnische robuustheid en veiligheidGovernance

+

Maatregel

+

Richt gebruikersbeheer in, waarmee bepaald wordt wie toegang heeft tot wat, en wat er bijvoorbeeld gebeurt bij indiensttreding, functiewijziging en uitdiensttreding.

+

Toelichting

+

Gebruikersbeheer zorgt ervoor dat accounts en autorisaties beheerst worden aangevraagd, geautoriseerd, gewijzigd en ingetrokken bij indiensttreding, functiewijziging en uitdiensttreding. Ook wordt functievermenging voorkomen bij toegang en gebruik van het algoritme, de data of de uitkomsten van een algoritme.

+

Bij het inrichten van gebruikersbeheer moeten aan de volgende elementen worden gedacht:

+
    +
  • Gebruikers en beheerders krijgen slechts toegang tot functionaliteit die zij uit hoofde van hun functie nodig hebben (need to know, need to use). Daartoe is een beschrijving beschikbaar welke rollen en rechten per applicatie bij een functie horen (BIO 6.1.2, 9.2.2 en 9.4).
  • +
  • Het verlenen en muteren van accounts en toegangsrechten vindt plaats na goedkeuring door een bevoegde functionaris. Dit aan de hand van een actueel mandaatregister waaruit blijkt welke personen beslissende bevoegdheden hebben voor het verlenen van een bepaald type (niveau) toegangsrechten danwel functieprofielen (BIO 9.2.1.2, 9.2.2.1, 9.4).
  • +
  • Er bestaat functiescheiding tussen het aanvragen, autoriseren en doorvoeren van wijzigingen in gebruikersaccounts en toegangsrechten (BIO 9.2.1.2, 9.2.2.1, 9.2.3).
  • +
  • Functiewijzigingen en uitdiensttredingen worden bewaakt voor aanpassen van de toegangsrechten en voor intrekken van de identiteits- en authenticatiemiddelen (BIO 9.2.2, 9.2.6).
  • +
  • Het aantal accounts met verhoogde rechten is beperkt en verklaard, en staat in logische verhouding tot de beheerders en of ICT-afdeling (BIO 9.1.2.(1), 9.2.3, 9.2.4).
  • +
  • Gebruikersaccounts en beheeraccounts dienen altijd persoonsgebonden en verklaard te zijn, zodat handelingen altijd te herleiden zijn naar één verantwoordelijke (BIO 9.1, 9.4.2).
  • +
  • Eindgebruikers hebben geen directe toegang tot de onderliggende componenten (zoals de database) (BIO 9.2.3, 13.1.3).
  • +
  • Toegangsrechten op onderliggende componenten dienen periodiek, minimaal jaarlijks, geëvalueerd te worden. Dit interval dient te zijn beschreven in het toegangsbeleid en zijn bepaald op basis van het risiconiveau. De uitkomsten van de evaluatie en de opvolging daarvan worden vastgelegd (BIO 9.2.5).
  • +
+

Voor deze maatregelen is het van belang om aandacht te hebben voor de volgende zaken:

+
    +
  • Autorisatiematrix en beschrijving rollen/rechten per systeem(laag)
  • +
  • Lijst met wijzigingen rollen en bijbehorende goedkeuringen
  • +
  • Overzicht aantallen en rechten per (systeem)laag
  • +
+

Risico

+

Er bestaan meerdere risico's wanneer er geen gebruikersbeheer is: +- Toegangsrechten kunnen niet meer up-to-date zijn, bijvoorbeeld wanneer er geen rekening wordt gehouden met het IDU-proces (). Er bestaat dan het risico dat gebruikers toegang tot de omgeving van het algoritme, de data of de uitkomsten van het algoritme hebben die zij niet zouden mogen hebben. +- Wanneer functievermenging niet wordt voorkomen bij toegang en gebruik van het algoritme, bestaat het risico dat er ongeautoriseerde wijzigingen worden doorgevoerd aan het algoritme, de data of de uitkomsten van het algoritme. +- Wanneer gebruik wordt gemaakt van generieke-, groeps- of onpersoonlijke accounts, bestaat het risico dat handelingen niet te herleiden zijn naar een verantwoordelijke persoon.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
+
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-12-periodieke-evaluatie-kwaliteit/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-12-periodieke-evaluatie-kwaliteit/index.html new file mode 100644 index 0000000000..92026217f4 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-12-periodieke-evaluatie-kwaliteit/index.html @@ -0,0 +1,1002 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Controleer en verbeter regelmatig de kwaliteit van het algoritme - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Controleer en verbeter regelmatig de kwaliteit van het algoritme

+ + +

org-12OrganisatieverantwoordelijkhedenMonitoring en beheerProjectleiderBeleid en adviesGovernanceMenselijke controle

+

Maatregel

+

Richt een proces in voor een periodieke evaluatie van de kwaliteit van het algoritme.

+

Toelichting

+
    +
  • Het is van belang dat een proces wordt ingericht waarmee periodiek de kwaliteit van algoritmes wordt geëvalueerd.
  • +
  • Bij kwaliteit van een algoritme kan worden gedacht aan doeltreffenheid, doelmatigheid, betrouwbaarheid en accuraatheid (geschiktheid), non-discriminatie en menselijke controle.
  • +
  • Hieronder vallen het analyseren en evalueren van ingediende klachten en incidenten.
  • +
  • Hieronder vallen ook het analyseren evalueren van besluiten door of aan de hand van het algoritmen.
  • +
  • Na verloop van tijd kan de accuraatheid van machine learning modellen bijvoorbeeld wijzigen of kan het gebeuren dat bepaalde groepen (indien van toepassing) anders worden behandeld.
  • +
  • Het is van belang dat monitoringsactiviteiten worden ingericht om deze kwaliteitsaspecten tijdig te beoordelen.
  • +
  • Als er ongewenste wijzigingen plaatsvinden met betrekking tot de kwaliteit, moeten die worden geëvalueerd en zullen maatregelen moeten worden getroffen om deze te herstellen.
  • +
  • Het proces moet er voor zorgen dat de juiste experts of stakeholders worden betrokken bij het proces van evaluatie en het treffen van passende maatregelen.
  • +
+

Let op! Sommige maatregelen in het Algoritmekader gaan dieper in op het uitvoeren van risicoanalyses.

+

Risico

+

Zonder evaluatie van de kwaliteit van het algoritme is er geen goede sturing, beheersing en verantwoording mogelijk als er ongewenste wijzigingen plaatsvinden in het algoritme of AI-systeem.

+

Bijbehorende vereiste(n)

+ +
+Bekijk alle vereisten +
Vereiste
aia-11 - Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-29 - Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
+
+

Bronnen

+ +

Voorbeeld

+

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-13-wachtwoordbeheer/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-13-wachtwoordbeheer/index.html new file mode 100644 index 0000000000..96d2343a27 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-13-wachtwoordbeheer/index.html @@ -0,0 +1,999 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak afspraken over het beheer van wachtwoorden - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak afspraken over het beheer van wachtwoorden

+ +

org-13OrganisatieverantwoordelijkhedenProjectleiderOntwikkelaarTechnische robuustheid en veiligheidGovernance

+

Maatregel

+

Richt wachtwoordbeheer in, waarmee bepaald wordt hoe wachtwoorden worden opgeslagen, wanneer wijzigingen moeten plaatsvinden en waaraan wachtwoorden moeten voldoen. Hiermee wordt de toegang tot bijvoorbeeld ontwikkelomgevingen geregeld op een veilige manier.

+

Toelichting

+

Bij het inrichten van wachtwoordbeheer moeten de volgende zaken worden toegepast:

+
    +
  • Alle wachtwoorden van gebruikers en beheerders dienen periodiek te worden gewijzigd, met een maximum van 1 jaar (BIO 9.4.3). Initiële wachtwoorden en wachtwoorden die gereset zijn, hebben een maximale geldigheidsduur van 24 uur en moeten bij het eerste gebruik worden gewijzigd.
  • +
  • Voor toegang vanuit een onvertrouwde omgeving dient twee-factor authenticatie te worden gebruikt (BIO 9.4.2.1). Als er geen gebruik wordt gemaakt van two-factor authenticatie, is de wachtwoordlengte minimaal 8 posities en complex van samenstelling. In situaties waar geen two-factor authenticatie mogelijk is, wordt minimaal halfjaarlijks het wachtwoord vernieuwd.
  • +
  • Na een periode van maximaal 15 minuten inactiviteit dient de toegang tot de applicatie te worden vergrendeld en na 10 foutieve inlogpogingen dient het account geblokkeerd te worden (BIO 11.2.9, BIO 9.4.3). De tijdsduur dat een account wordt geblokkeerd na overschrijding van het aantal keer foutief inloggen is vastgelegd.
  • +
  • Wachtwoorden mogen niet in originele vorm (plaintext) worden opgeslagen, maar dienen versleuteld te worden. (NIST 5.1.1.2)
  • +
  • De eisen aan wachtwoorden moeten geautomatiseerd worden afgedwongen.
  • +
+

Risico

+

Als het wachtwoordbeheer van onvoldoende kwaliteit is, kan oneigenlijke toegang plaatsvinden tot het algoritme of uitkomsten van het algoritme, bijvoorbeeld doordat het wachtwoord te eenvoudig is.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
+
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-14-wijzigingenproces/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-14-wijzigingenproces/index.html new file mode 100644 index 0000000000..c5e47c076f --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-14-wijzigingenproces/index.html @@ -0,0 +1,998 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak afspraken over het wijzigen van de code - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak afspraken over het wijzigen van de code

+ +

org-14OrganisatieverantwoordelijkhedenProjectleiderOntwikkelaarTechnische robuustheid en veiligheidGovernance

+

Maatregel

+

Richt een wijzigingenproces in, waarmee bepaald wordt hoe codewijzigingen plaatsvinden.

+

Toelichting

+

Bij het inrichten van een proces om wijzigingen aan de code te mogen aanbrengen, kunnen aan de volgende elementen worden gedacht:

+
    +
  • Wijzigingen dienen van te voren te worden geautoriseerd door de systeemeigenaar of product owner. (BIO 12.1.2)
  • +
  • Wijzigingen worden getest in een andere omgeving dan de productieomgeving. (BIO 12.1.4, 14.2.3, 14.2.9, 14.3.1)
  • +
  • Wijzigingen worden door de systeemeigenaar of product owner goedgekeurd op basis van gedocumenteerde testresultaten en pas daarna doorgevoerd in de productieomgeving. (BIO 12.1.2, 14.2.2, 14.2.9)
  • +
  • Er dient functiescheiding te zijn ingericht tussen het aanvragen, goedkeuren en doorvoeren van wijzigingen om onbevoegde en onbedoelde wijzigingen te beperken. (BIO 6.1.2, 14.2.2)
  • +
  • Er dient periodiek controle plaats te vinden op wijzigingen aan het systeem, zodanig dat oneigenlijke wijzigingen worden gesignaleerd. (BIO 9.4.4, 12.4.1)
  • +
+

Risico

+

Als een formeel wijzigingenproces ontbreekt bestaat het risico van ongeautoriseerde toegang, wijziging of beschadiging van de code van het algoritme, of de uitkomsten van het algoritme.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
+
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/index.html new file mode 100644 index 0000000000..4afc51ac42 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/0-org-15-discriminatieprotocol/index.html @@ -0,0 +1,1095 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Stel een protocol vast voor de situatie dat er (een vermoeden van) discriminatie door een algoritme is geconstateerd en pas dit wanneer nodig toe. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Stel een protocol vast voor de situatie dat er (een vermoeden van) discriminatie door een algoritme is geconstateerd en pas dit wanneer nodig toe.

+ +

imp-10OrganisatieverantwoordelijkhedenImplementatieProjectleiderBeleid en adviesBias en non discriminatie

+

Maatregel

+

Stel een protocol vast voor de situatie dat er (een vermoeden van) discriminatie door een algoritme is geconstateerd en pas dit wanneer nodig toe.

+

Toelichting

+

De inzet van algoritme kan onbedoeld leiden tot discriminerende effecten. +Het is van belang om als organisatie een protocol te hebben vastgesteld waarin is uitgewerkt hoe wordt omgegaan met situaties waarin (een vermoeden van) discriminatie door een algoritme is geconstateerd. +In een dergelijk protocol kunnen de handelingen worden beschreven die moeten worden uitgevoerd om deze situatie te gaan herstellen. +Het vaststellen van een dergelijk protocol geeft ontwikkelaar en gebruikers (vooraf) duidelijkheid wat van hen wordt verwacht en wat zij kunnen doen om discriminatie door algoritmes te voorkomen.
+Een voorbeeld hiervan is het analyseren van de data op datakwaliteit en bias in de data en toets regelmatig je algoritmisch systeem op bias.

+

Het Ministerie van Binnenlandse Zaken en Koninkrijksrelaties heeft een discriminatieprotocol opgesteld wat organisaties handvatten biedt.

+

Een discriminatieprotocol kan de volgende stappen bevatten:

+

Stap 1: Vermoeden van onrechtmatigheid

+

Een vermoeden van bevooroordeeldheid of discriminatie kan vanuit verschillende partijen gemeld worden. +Signalen hiervoor kunnen worden ontvangen vanuit de interne organisatie, bijvoorbeeld door de betrokken ontwikkelaars, gebruikers of beheerders, of door externe partijen, zoals belanghebbenden, toezichthouder, journalisten.

+
    +
  • Zorg dat signalen tijdig bij de goede medewerkers terecht komen.
  • +
  • Indien er sprake is van zo'n vermoeden, zorg je dat bijvoorbeeld de uitvoerend directeur, de interne toezichthouder en/of de CIO en CDO hierover worden geïnformeerd.
  • +
  • Maak met de verantwoordelijken een afweging of het betreffende systeem in werking kan blijven of dat bijvoorbeeld het noodplan voor het stopzetten van het algoritme (tijdelijk) in gang moet worden gezet.
  • +
+

Stap 2: Inzicht en overzicht

+

Het is van belang om inzicht en overzicht te krijgen over de oorzaak en de gevolgen van eventuele discriminerende effecten van het algoritme. +Daarvoor kan worden gedacht aan het uitvoeren van een bias analyse.

+
    +
  • Bepaal wie er verantwoordelijk is voor het uitvoeren van het onderzoek.
  • +
  • Bepaal of je een onafhankelijk onderzoek wilt doen naar het algoritme.
  • +
  • Breng in kaart wat de omvang van het probleem is. Hoe lang doet het probleem zich al voort, en hoeveel mensen betreft het?
  • +
  • Ga snel met (vertegenwoordigers van) gedupeerden in gesprek over de gevolgen en de mogelijke schade
  • +
  • Trek een conclusie of er sprake is van discriminatie, of een sterk vermoeden van discriminatie.
  • +
+

Stap 3: Beperken schade

+

Bepaal welke mitigerende maatregelen er genomen moeten worden. Als er in het onderzoek is vastgesteld dat er sprake is van discriminatie, dan moet het betreffende systeem worden stopgezet. Hierbij kan je denken aan:

+
    +
  • Het in werking stellen van het het noodplan voor het stopzetten van het algoritme, indien dat in stap 1 nog niet gebeurd is.
  • +
  • Aanpassingen in het algoritme, de werkinstructies of de bijbehorende processen.
  • +
  • Indien het algoritme essentieel is in de uitvoer kan er sprake zijn van een een proportionaliteitsvraagstuk. In dat geval moet er worden bezien wat de alternatieven zijn, en of er delen van het systeem kunnen worden uitgeschakeld.
  • +
+

Stap 4: Melden en informeren

+

De conclusies van de eerdere stappen moeten, indien nodig, worden gemeld bij de betreffende instanties. De eventuele gedupeerde burgers dienen te worden geïnformeerd over de gevolgen.

+
    +
  • Als er sprake is van een hoog-risico-AI-systeem moeten ernstige incidenten worden gemeld bij de markttoezichtautoriteiten. Zie artikel 73 van de AI-verordening en artikel 3 (49.c) van de AI-verordening.
  • +
  • Voor alle algoritmes geldt: Informeer de interne toezichthouder, de externe toezichthouder en de politiek, afhankelijk van hoeveel mensen geraakt en gedupeerd zijn en de impact.
  • +
  • +

    Informeer de betrokken burgers over de sitatie. Maak indien nodig excuses en geef de mensen die (mogelijk) geraakt zijn uitleg zodat zij:

    +
      +
    • begrijpen wat er is gebeurd
    • +
    • weten wat de waarschijnlijke gevolgen zijn
    • +
    • welke mitigerende maatregelen zijn genomen
    • +
    • waar mensen terecht kunnen met vragen
    • +
    • op de hoogte zijn van het proces rondom de afhandeling van de schade.
    • +
    +
  • +
+

Stap 5: Registratie en afhandeling

+
    +
  • Registreer het algoritme in het algoritmeregister, indien dat nog niet gebeurd is.
  • +
  • Zorg voor goede klachtenafhandeling en herstelprocedures.
  • +
+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
grw-02 - Algoritmes discrimineren niet
+
+

Bronnen

+ + +

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-01-formuleren-probleemdefinitie/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-01-formuleren-probleemdefinitie/index.html new file mode 100644 index 0000000000..cdec33969f --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-01-formuleren-probleemdefinitie/index.html @@ -0,0 +1,1006 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beschrijf het probleem dat het algoritme moet oplossen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Beschrijf het probleem dat het algoritme moet oplossen

+ +

pba-01ProbleemanalyseProjectleiderGovernanceTransparantie

+

Maatregel

+

Formuleer en documenteer wat de aanleiding is om een algoritme in te willen zetten. +Formuleer duidelijk de probleemdefinitie en probleemafbakening waarvoor het algoritme een oplossing zou moeten vormen.

+

Toelichting

+

Formuleer de probleemdefinitie en probleemafbakening zo concreet en precies mogelijk. Maak dit waar mogelijk kwantificeerbaar.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+
+

Risico

+

Het algoritme dient niet het onderliggende probleem. +Zonder eenduidigheid over het op te lossen probleem is geen sturing op en verantwoording over het algoritme mogelijk.

+

Bijbehorende vereiste(n)

+
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+ +

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-02-formuleren-doelstelling/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-02-formuleren-doelstelling/index.html new file mode 100644 index 0000000000..7572d22206 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-02-formuleren-doelstelling/index.html @@ -0,0 +1,1023 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beschrijf het doel van het algoritme - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Beschrijf het doel van het algoritme

+ +

pba-02ProbleemanalyseProjectleiderGovernanceTransparantie

+

Maatregel

+

Het doel en de eventuele subdoelen van het algoritme moeten zo specifiek mogelijk zijn geformuleerd, en waar mogelijk gekwantificeerd. +Maak de consequenties van het algoritme specifiek en zorg dat het doel van het algoritme formeel is vastgesteld en vastgelegd.

+

Toelichting

+
    +
  • +

    Het doel van de inzet van een algoritme dient zo concreet en specifiek mogelijk gedefinieerd te worden. +Indien er meerdere doelen zijn, is het belangrijk om een zekere rangorde te maken: wat zijn de belangrijkste doelen? En waarom? +Welke doelen zijn subdoelen, waarvoor het minder belangrijk is om deze te realiseren?

    +
  • +
  • +

    Indien mogelijk, dienen de doelstellingen gekwantificeerd te worden (SMART).

    +
  • +
  • +

    Om te zorgen voor voldoende draagvlak voor de beoogde doelen, is het noodzaak om voldoende belanghebbenden te betrekken. +Hierbij kan het ook helpen om burgers te betrekken bij de totstandkoming van de doelstellingen, bijvoorbeeld door middel van een burgerpanel of het betrekken van belangengroepen.

    +
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+
+

Risico

+

Het algoritme dient niet het beoogde doel en onderliggend probleem. +Zonder eenduidigheid over het doel is geen sturing op en verantwoording over het algoritme mogelijk. +Er is dan een groter risico op fouten en/of verschillen in interpretatie.

+

Wanneer doelstellingen niet meetbaar zijn gemaakt, is het onmogelijk om achteraf te kwantificeren of de doelstellingen zijn behaald. +Doelstellingen zijn in dat geval moeilijk bespreekbaar.

+

Bijbehorende vereiste(n)

+
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+ +

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-03-onderbouwen-gebruik-algoritme/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-03-onderbouwen-gebruik-algoritme/index.html new file mode 100644 index 0000000000..267202189a --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-03-onderbouwen-gebruik-algoritme/index.html @@ -0,0 +1,1001 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beschrijf waarom een algoritme het probleem moet oplossen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Beschrijf waarom een algoritme het probleem moet oplossen

+ +

pba-03ProbleemanalyseProjectleiderGovernanceMenselijke controle

+

Maatregel

+

Bepaal en documenteer waarom het gewenst of nodig is om een algoritme in te zetten om het probleem te kunnen aanpakken.

+

Toelichting

+
    +
  • +

    Bepaal waarom het gewenst of nodig is om een algoritme in te zetten, en of er ook alternatieven zijn om het probleem op te lossen. +Documenteer de onderbouwing waarom een algoritme een betere oplossing zou bieden dan een niet-geautomatiseerd of niet-digitaal proces.

    +
  • +
  • +

    Maak een bewuste afweging of een algoritme het juiste middel is om het probleem op doelmatige en doeltreffende wijze op te lossen, en documenteer deze afweging.

    +
  • +
  • +

    Beoordeel of de gewenste oplossing is toegestaan op grond van de AI-Verordening.

    +
  • +
+

Risico

+

Het algoritme is niet het juiste middel om het probleem op te lossen. Het risico daarbij bestaat dat het probleem niet wordt opgelost.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
aia-01 - Verboden AI-systemen mogen niet worden gebruikt.
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-04-betrek-belanghebbenden/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-04-betrek-belanghebbenden/index.html new file mode 100644 index 0000000000..7ce3968ba3 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-04-betrek-belanghebbenden/index.html @@ -0,0 +1,1017 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Overleg regelmatig met belanghebbenden - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Overleg regelmatig met belanghebbenden

+ + +

pba-04ProbleemanalyseOntwerpImplementatieProjectleiderGovernanceFundamentele rechten

+

Maatregel

+ +

Breng in kaart welke belanghebbenden er zijn en betrek hen op verschillende momenten in de levenscyclus.

+

Toelichting

+ +

Het betrekken van belanghebbenden is van belang in bijna alle fasen van de levenscyclus. +Belanghebbenden zijn onder meer eindgebruikers, mensen en rechtspersonen die door het algoritme geraakt kunnen worden en vertegenwoordigende organisaties.

+

In de fase van de probleemanalyse is het allereerst van belang in kaart te brengen welke stakeholders er zijn. +Wie gaan bijvoorbeeld werken met het algoritme (eindgebruikers)? En welke demografieën worden geraakt door een algoritme? +Bij wie liggen de voordelen en bij wie liggen de nadelen? +Ga in gesprek met deze belanghebbenden - al dan niet vertegenwoordigd door belangenorganisaties zoals burgerrechtenorganisaties - over het te ontwerpen algoritme en de context waarin het gebruikt wordt. Zij kunnen waardevolle inzichten en wensen delen, wat kan bijdragen aan een betere werking van het algoritme.

+

Enkele voorbeelden hierbij zijn: +- Het betrekken van burgers bij het ontwerpen van een algoritme in de ontwerpfase. +- Het bespreken welke definitie en metriek van fairness past bij de context met de proceseigenaar en een ethicus. +- Het betrekken van domeinexperts in de fase van dataverkenning en datapreparatie, om zo in kaart te brengen wat de data features betekenen en waar zij vandaan komen. +- Het betrekken van eindgebruikers bij het ontwikkelen en het implementeren van het algoritme. +- Het betrekken van belanghebbenden bij het monitoren en evalueren van het algoritme.

+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+
+

Bronnen

+ + + +

Risico

+ +

Het niet betrekken van belanghebbenden bij de ontwikkeling en het gebruik van algoritmes, kan ertoe leiden dat belangrijke inzichten of perspectieven niet worden verwerkt en het algoritme onjuist gaat functioneren.

+

Voorbeeld

+ +

Er zijn veel verschillende methoden om belanghebbenden te betrekken. Zo kan je bijvoorbeeld werken met persona’s of ‘empathy maps’ maken. Ook kan je focusgroepen houden. Denk dan bijvoorbeeld aan een burgerpanel.

+

Andere methoden zijn: Methodologie van Waag, Civic AI lab, Stakeholder escalation ladder.

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-05-wettelijke-grondslag/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-05-wettelijke-grondslag/index.html new file mode 100644 index 0000000000..d6383d305b --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/1-pba-05-wettelijke-grondslag/index.html @@ -0,0 +1,994 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beschrijf de wettelijke grondslag voor de inzet van het algoritme - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Beschrijf de wettelijke grondslag voor de inzet van het algoritme

+ +

pba-05ProbleemanalyseJuristGovernanceTransparantie

+

Maatregel

+

Beschrijf de wettelijke grondslag voor de inzet van het algoritme en de beoogde besluiten die genomen zullen worden op basis van het algoritme.

+

Toelichting

+
    +
  • Analyseer of er een concrete wettelijke grondslag is die de inzet van het algoritme mogelijk maakt en deze inzet voldoende voorzienbaar maakt.
  • +
  • Als de verwachting is dat een algoritme tot gevolg heeft dat wordt ingegrepen in het leven of de vrijheid van mensen, en zeker als de verwachting is dat er grondrechten worden geraakt, moet er een wettelijke grondslag bestaan voor de inzet van het algoritme.
  • +
  • Voor het verwerken van persoonsgegevens is een wettelijke grondslag noodzakelijk.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
avg-01 - Persoonsgegevens worden op een rechtmatige manier verwerkt
+
+

Bronnen

+ +

Risico

+

Het algoritme en beoogde besluiten voldoen niet aan wet- en regelgeving en intern beleid en kaders.

+

Voorbeeld

+

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-01-rollen-en-verantwoordelijkheden/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-01-rollen-en-verantwoordelijkheden/index.html new file mode 100644 index 0000000000..907eac399c --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-01-rollen-en-verantwoordelijkheden/index.html @@ -0,0 +1,1048 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmes - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmes

+ + +

owp-01OntwerpImplementatieMonitoring en beheerProjectleiderGovernance

+

Maatregel

+

Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmes. De rollen en verantwoordelijkheden worden vastgesteld door de verantwoordelijke(n).

+

Toelichting

+

Een reëel risico is dat bepaalde groepen en belanghebbenden over het hoofd worden gezien tijdens het ontwikkelproces van een algoritme. +Daarom is het noodzakelijk om al vroeg in kaart te brengen welke groepen allemaal een mening over het beoogde algoritme kunnen hebben.

+

Duidelijkheid en borging van rollen en verantwoordelijkheden zorgen voor een effectief en verantwoord verloop van het proces rondom de ontwikkeling, inkoop en gebruik van een algoritme. +Zeker wanneer ongewenste effecten optreden en maatregelen nodig zijn, is duidelijkheid over rollen, verantwoordelijkheden en bijbehorende besluitvormingsstructuren van belang.

+

Om deze reden kan het handig zijn om een matrix van belanghebbenden op te stellen.
+Deze matrix kan in verdere fases helpen wanneer belanghebbenden betrokken moeten worden. In deze matrix kunnen de volgende onderdelen staan:

+
    +
  • Per belanghebbende een beschrijving van wie deze groep is
  • +
  • Mate van invloed van belanghebbende op het algoritme: wie, wanneer in de levenscyclus zorgt voor passende menselijke controle
  • +
  • Impact van algoritme op de belanghebbende
  • +
  • Risico’s voor belanghebbende (wat zal de belanghebbende merken als het algoritme eventueel niet naar behoren functioneert).
  • +
+

Een RACI-matrix/VERI-matrix is een passend middel om de verantwoordelijkheden (Responsible/Verantwoordelijk, Accountable/Eindverantwoordelijk, Consulted/Geraadpleegd, Informed/Geïnfomeerd) te bepalen. +Werk specifieke, gevoelige activiteiten nader uit te in concrete taken en verantwoordelijkheden, bijvoorbeeld welke stappen moeten worden gezet om data veilig te leveren ten behoeve van een onderzoek naar onbwuste vooringenomenheid.

+

Vaststellen van rollen en verantwoordelijkheden

+
    +
  • Laat de rollen en verantwoordelijkheden vaststellen door de verantwoordelijke(n). Het doel van vaststelling is dat de verantwoordelijke(n) de verantwoordelijkheid neemt en actief een keuze maakt om het algoritme te (laten) ontwikkelen of gebruiken op de beoogde wijze en met de bijbehorende verantwoordelijkheden. Met het vaststellen worden afspraken geformaliseerd.
  • +
  • Vaststelling van de verantwoordelijkheden kan plaatsvinden door beleidsdocumenten, werkinstructies, verwerkersovereenkomst of een PIA/DPIA, mits de verantwoordelijkheden voldoende duidelijk zijn beschreven.
  • +
  • Gedurende de levenscyclus kan het voorkomen dat rollen en verantwoordelijkheden opnieuw moet worden beschreven en vastgesteld.
  • +
+

Verwerking van persoonsgegevens

+
    +
  • Bij het verwerken van persoonsgegevens moet worden vastgelegd wie de (gezamelijke) verwerkingsverantwoordelijken zijn en wie de verwerkers. Uit deze vaststelling van de rolverdeling volgen onder de AVG verschillende rechten en plichten.
  • +
  • Bij de ontwikkeling en gebruiken van algoritmes is het denkbaar dat de noodzaak voor het verwerken van persoonsgegevens wijzigt en dat meer of andere verwerkingen moeten plaatsvinden. Het is van belang dat wederom wordt beoordeeld wat dit betekent voor de bijbehorende verantwoordelijkheden. Als er sprake is van een wezenlijke wijziging ten opzichte van de al vastgestelde situatie, bijvoorbeeld doordat er meer persoonsgegevens worden verwerkt door een andere partij, dan zal de verwerkingsverantwoordelijke opnieuw tot vaststelling moeten overgaan om de afspraken te formaliseren.
  • +
+

Voorbeelden

+ +
    +
  • Rapport Kleur Bekennen, Algemene Rekenkamer, p. 114, figuur 5-4
  • +
  • De proceseigenaar wordt vaak verantwoordelijk gehouden voor eventuele gevolgen van het gebruik van het algoritme. Deze maatregel zorgt ervoor dat de proceseigenaar niet alle verantwoordelijkheid draagt, omdat dit vaak niet realistisch is. Met deze maatregel kunnen er heldere afspraken over de verschillende verantwoordlijkheden worden gemaakt. Hierdoor wordt het draagvlak groter, zonder ten koste te gaan van de duidelijkheid over rollen en verantwoordelijkheden.
  • +
+

Risico

+

De sturing en verantwoording is ontoereikend of niet geborgd, waardoor er onvoldoende betrokkenheid of capaciteit is van verantwoordelijken. Ook kan er dan onvoldoende deskundigheid in de organisatie zijn, wat de kans vergroot op fouten en ongewenste effecten. Zonder het vaststellen van rollen en verantwoordelijkheden, kan er geen effectieve sturing plaatsvinden op partijen die betrokken zijn bij het ontwikkelen of gebruiken van algoritmes.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-06 - Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+
+

Bronnen

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-02-data-beschikbaarheid/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-02-data-beschikbaarheid/index.html new file mode 100644 index 0000000000..3aebc49e8d --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-02-data-beschikbaarheid/index.html @@ -0,0 +1,988 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Voer voorafgaand aan een project een data beschikbaarheid, kwaliteit- en toegankelijkheidsanalayse uit. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Voer voorafgaand aan een project een data beschikbaarheid, kwaliteit- en toegankelijkheidsanalayse uit.

+ + +

owp-11OntwerpProjectleiderBeleid en adviesPublieke inkoopData

+

Maatregel

+ +

Voer voorafgaand aan een project een data beschikbaarheids- en datakwaliteitsanalayse uit.

+

Toelichting

+ +
    +
  • Het is van belang om voorafgaand aan een project vast te stellen of de data die noodzakelijk is om een algoritme te ontwikkelen of te kunnen gebruiken beschikbaar is, gaat worden en of de data van voldoende kwaliteit is.
  • +
  • Er moet worden onderzocht of en hoe data vanuit de eigen organisatie, die van een eventuele externe aanbieder of elders beschikbaar kan worden gesteld, kan worden opgeslagen en of goedkeuring kan worden gegeven voor het verwerken van de data.
  • +
  • De infrastructuur van de eigen organisatie en/of die van een eventuele externe aanbieder moet van voldoende niveau zijn om de beoogde verwerkingen uit te kunnen voeren.
  • +
  • Een dergelijke analyse levert inzichten op welke problemen er eventueel op dit vlak kunnen ontstaan en geeft input voor de verdere ontwikkeling of (in geval van inkoop) de behoeftestelling.
  • +
+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
+
+

Bronnen

+ + +

Towards a Systematic Understanding on the Challenges of Procuring Artificial Intelligence in the Public Sector

+

Risico

+ +

Het zou kunnen voorkomen dat de data niet beschikbaar is en ook niet gaat worden. Dit betekent dat een algoritme ook niet goed gemaakt of gebruikt kan worden. Ook is het belangrijk om te checken of de data beschikbaar blijft als dat nodig is voor het functioneren van het algoritme (bijv. voor het bijleren). Ook bestaat er een risico dat als de data van onvoldoende kwaliteit is, het algoritme niet goed gaat werken. Wanneer niet vooraf bepaald is of de data beschikbaar is en van voldoende kwaliteit kan het gebeuren dat er wel een algoritme gemaakt wordt door een derde partij, maar deze vervolgens niet gebruikt kan worden binnen de organisatie.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-03-doel-verwerken-persoonsgegevens/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-03-doel-verwerken-persoonsgegevens/index.html new file mode 100644 index 0000000000..7b16cc2b2b --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-03-doel-verwerken-persoonsgegevens/index.html @@ -0,0 +1,998 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag

+ +

owp-03OntwerpDataverkenning en datapreparatieOntwikkelenVerificatie en validatieImplementatieProjectleiderJuristPrivacy en gegevensbescherming

+

Maatregel

+

Het doel voor het verwerken van persoonsgegevens met een algoritme is welbepaald en omschreven.

+

Toelichting

+

Persoonsgegevens mogen alleen worden verwerkt voor een ‘welbepaald, uitdrukkelijk omschreven en gerechtvaardigd’ doel. De wettelijke grondslag voor de verwerking van de persoonsgegevens moet zijn beschreven.

+

De verwerking van persoonsgevens voor het ontwikkelen en gebruiken van een algoritme moet verenigbaar met het oorspronkelijke verwerkingsdoel (doelbinding). Eventuele verdere (subsidiaire) verwerkingen, zoals het verwerken van persoonsgegevens voor een onderzoek naar onbewuste vooringenomenheid, moeten uitdrukkelijk worden omschreven.

+

Stel een overzicht op waarin is beschreven welke persoonsgegevens mogen worden verwerkt. +Bij de persoonsgegevens is aangegeven om wat voor categorie persoonsgegevens het gaat. +Per kenmerk is toegelicht waarom deze noodzakelijk is om te verwerken voor het ontwikkelen en gebruiken van het algoritme. +Het principe van dataminimalisatie is toegepast, wat betekent dat een keuze is gemaakt of een persoonsgegevens al dan niet strikt noodzakelijk is om het doel te bereiken of dat verwerking ervan achterwege kan blijven.

+

Voor het beschermen van deze persoonsgegevens wordt per kenmerk aangegeven op welke manier deze kan worden beschermd. Denk hierbij aan het anonimiseren, pseudonomiseren, aggregeren van de persoonsgegevens.

+

Gebruik een DPIA om bovenstaande zaken te beschrijven.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-01 - Persoonsgegevens worden op een rechtmatige manier verwerkt
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+
+

Risico

+

Als het doel voor het verwerken van persoonsgegevens onvoldoende is omschreven en onderbouwd, ontstaat het risico dat onrechtmatig persoonsgegevens worden verwerken en een inbreuk wordt gemaakt op privacyrechten van betrokkenen.

+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-04-gebruikte-techniek/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-04-gebruikte-techniek/index.html new file mode 100644 index 0000000000..55302ba2a4 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-04-gebruikte-techniek/index.html @@ -0,0 +1,1008 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beschrijf welke techniek gebruikt wordt voor de beoogde toepassing - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Beschrijf welke techniek gebruikt wordt voor de beoogde toepassing

+ +

owp-04OntwerpOntwikkelaarTechnische robuustheid en veiligheid

+

Maatregel

+

Beschrijf welke techniek gebruikt wordt voor de beoogde toepassing.

+

Toelichting

+
    +
  • Beschrijf wat voor soort algoritme er gebruikt gaat worden voor de beoogde toepassing.
  • +
  • +

    Bepaal of je gebruik wilt maken van een:

    + +
  • +
  • +

    Beschrijf vervolgens ook:

    +
      +
    • waarom er voor dit type algoritme wordt gekozen
    • +
    • wat de alternatieven zijn en waarom die minder passend zijn?
    • +
    • waarom dit algoritme het meest geschikt is om het beoogde doel van het algoritme te bereiken.
    • +
    +
  • +
  • +

    De precieze details kunnen in dit stadium van de levenscyclus waarschijnlijk nog niet ingevuld worden. Maak een goede eerste inschatting van de gebruikte techniek. Eventueel kan je er ook voor kiezen om verschillende technieken verder te onderzoeken. Dat betekent dat er meerdere algoritmes ontwikkeld worden (op basis van verschillende technieken), en je later een definitieve keuze maakt.

    +
  • +
  • +

    Het is belangrijk om uiteindelijk een passend uitlegbaar algoritme te selecteren voor de context waarin het wordt toegepast. Daarin moet de afweging gemaakt worden of de technische uitlegbaarheid voldoende is in de context die de inzet van het algoritme vereist. Hierbij kan ook de conclusie worden getrokken dat een simpeler, inzichtelijker algoritme de voorkeur krijgt.

    +
  • +
+

Voorbeeld

+

Risico

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
aia-06 - Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
+
+

Bronnen

+

Impact Assessment Mensenrechten en Algoritmes, 2A.1, 2B.1

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-05-soort-algoritme/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-05-soort-algoritme/index.html new file mode 100644 index 0000000000..236db1ad6e --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-05-soort-algoritme/index.html @@ -0,0 +1,984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horen

+ + +

owp-05OntwerpOntwikkelenProjectleiderBeleid en adviesPublieke inkoopGovernance

+

Maatregel

+ +

Stel vast om wat voor type algoritme het gaat en wat de bijbehorende risicoclassificatie is om te bepalen welke vereisten hierop van toepassing zijn.

+

Toelichting

+ +

Het verschilt per type algoritme welke vereisten hierop van toepassing is en waar een aanbieder of gebruiksverantwoordelijke aan moet voldoen. +Dit is mede afhankelijk van de bijbehorende risicoclassificatie. +Hiervoor kan in de nabije toekomst de 'beslisboom' in het Algoritmekader voor worden gebruikt'. +Deze stap is van groot belang, omdat dit ook bepalend is welke contractuele verplichtingen moeten worden gecreëerd tussen opdrachtgever en opdrachtnemer/aanbieder.

+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
avg-04 - Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
aia-06-documentatie-beoordeling-niet-hoog-risico-ai
+
+

Bronnen

+ +

Algoritmekader

+

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-06-afwegen-grondrechten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-06-afwegen-grondrechten/index.html new file mode 100644 index 0000000000..456203b672 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-06-afwegen-grondrechten/index.html @@ -0,0 +1,1017 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging

+ + +

owp-06ProbleemanalyseOntwerpVerificatie en validatieMonitoring en beheerProjectleiderBeleid en adviesFundamentele rechten

+

Maatregel

+

Identificeer welke grondrechten geraakt worden door het in te zetten algoritme en maak een afweging of dit aanvaardbaar is

+

Toelichting

+ +

Een algoritme kan invloed hebben op grondrechten. Op een aantal grondrechten kan een algoritme sneller invloed hebben, zoals recht op persoonsgegevensbescherming, recht op behoorlijk bestuur en recht op gelijke behandeling. +Deze veelvoorkomende grondrechten krijgen op andere plekken in het Algoritmekader specifieke aandacht. +Er zijn echter ook grondrechten die bij minder algoritmen relevant zijn, maar desalniettemin in die gevallen zeer invloedrijk kunnen zijn. +Het is van belang uiteindelijk een totale afweging te maken van alle grondrechten die (mogelijk) geraakt worden ten opzichte van de voordelen van het in te zetten algoritme. +Een voorbeeld van een grondrecht dat minder snel geraakt wordt is bijvoorbeeld een algoritme om hate speech te kunnen detecteren. Zo'n algoritme zal van invloed kunnen zijn op de vrijheid van meningsuiting en het recht op informatie.

+

Doorloop in lijn met Deel 4 van het Impact Assessment Mensenrechten en Algoritmes de volgende stappen:

+
    +
  1. Breng in kaart welke grondrechten geraakt kunnen worden door de inzet van het algoritme. Hiervoor kan bijlage 1 uit het Impact Assessment Mensenrechten en Algoritmes gebruikt worden.
  2. +
  3. Als dat het geval is, is het allereerst van belang om te controleren of hiervoor specifieke wetgeving is waar de inzet van het algoritme aan moet voldoen.
  4. +
  5. Bepaal hoe zwaar de geindentificeerde grondrechten worden geraakt door het beoogde algoritme.
  6. +
  7. Bepaal hoe doeltreffend/effectief het algoritme in de praktijk is.
  8. +
  9. Bepaal of de inzet van het algoritme noodzakelijk is om het beoogde doel te bereiken. Zijn er alternatieven? Of zijn er mitigerende maatregelen die genomen kunnen worden waardoor grondrechten niet of minder worden geraakt en eventuele nadelige gevolgen verzacht kunnen worden?
  10. +
  11. Gegeven alle voorgaande stappen, bepaal of de inzet van het algoritme en proportioneel is om het beoogde doel te bereiken. Wegen de voordelen op tegen de nadelen?
  12. +
+

Het is van belang voldoende belanghebbenden te betrekken bij het doorlopen van deze stappen om te zorgen dat alle eventueel nadelige aspecten van het in te zetten algoritme worden meegenomen. +Documenteer de doorlopen stappen en leg de keuzes en afwegingen goed vast.

+
+

Opmerking

+

Zoals vermeld in de vereiste voor beoordeling van gevolgen voor grondrechten uit de AI-verordening moeten sommige hoog-risico AI-systemen een beoordeling doen van de gevolgen voor grondrechten. Het is nog niet bekend welke vorm dit precies moet hebben.

+
+

Bijbehorende vereiste(n)

+ + +
+Bekijk alle vereisten +
Vereiste
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
aia-29 - Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
+
+

Bronnen

+ + +

Risico

+ +

Het risico is dat er grondrechten, anders dan die expliciet beschermd zijn in andere maatregelen en vereisten, aangetast worden.

+

Voorbeeld

+ +

Hoofdstuk 4 van het Impact Assesment Mensenrechten en Algoritmen (IAMA) richt zich specifiek op de grondrechten. In bijlage 1 is tevens een overzicht te vinden van mogelijk relevante grondrechten.

+

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-07-kwetsbare-groepen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-07-kwetsbare-groepen/index.html new file mode 100644 index 0000000000..277ef55476 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-07-kwetsbare-groepen/index.html @@ -0,0 +1,1008 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak een lijst van de meest kwetsbare groepen en bescherm hen extra - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak een lijst van de meest kwetsbare groepen en bescherm hen extra

+ +

owp-07OntwerpBeleid en adviesFundamentele rechten

+

Maatregel

+

Bepaal wat de impact van het in te zetten algoritme is voor betrokkenen (personen of groepen). +Bepaal vervolgens of er groepen zijn waarbij de impact van het algoritme dermate groot kan zijn, dat het wenselijk is om deze groepen extra bescherming te bieden.

+

Toelichting

+
    +
  • Verschillende groepen kunnen op een andere manier geraakt worden door het inzetten van een algoritme. Dit is afhankelijk van de context waarin het algoritme wordt ingezet, en dient daardoor bij iedere toepassing opnieuw bekeken te worden.
  • +
  • Bedenk wat er met de uitkomsten van het algoritme gedaan wordt, en wat de consequenties daarvan zijn voor burgers. Hierbij kan gedacht worden aan de volgende aspecten:
      +
    • Worden bepaalde groepen sneller gemonitord?
    • +
    • Wat als het model het fout heeft?
    • +
    • Wordt het systeem gebruikt om informatie te verkrijgen, om besluiten voor te bereiden of om zelfstandige besluiten te nemen en welke gevolgen heeft dat voor de mate waarin het algoritme bepalend zal zijn in de praktijk?
    • +
    • Worden de gegevens veilig en vertrouwelijk behandeld; welke gevolgen zou een datalek hebben voor groepen of categorieën personen?
    • +
    • Worden data gedeeld met andere partijen en wat is het gevaar dat die misbruik maken van de data met negatieve gevolgen voor groepen of categorieën personen?
    • +
    +
  • +
  • Houd hierbij ook rekening met de impact van het in te zetten algoritme op de samenleving (vanuit sociaal, democratisch en milieu/ecologisch perspectief).
  • +
  • Om de impact op groepen te bepalen, kan het handig zijn een mensenrechtentoets zoals het Impact Assessment Mensenrechten en Algoritmes toe te passen.
  • +
  • Bepaal of er maatregelen genomen kunnen worden om de geïdentificeerde groepen extra bescherming te bieden. Hierbij kan men denken aan de volgende aspecten: Kan de (extra) administratieve druk voor bepaalde groepen worden weggenomen? Worden resultaten van het algoritme naast de resultaten van een expert gelegd? Is het wenselijk om een proces in te richten waarbij zowel algoritme als een expert een uitkomst geven? Kunnen we de betreffende groep extra hulp aanbieden? Is het wenselijk bij negatieve uitkomsten een vier-ogen-principe toe te passen?
  • +
  • De impact van het algoritme op de groepen die geïdentificeerd worden in deze stap, kunnen mogelijk onderzocht worden in een biasanalyse. Daarbij kan geidentificeerd worden of bepaalde groepen oververtegenwoordigd of ondervertegenwoordigd zijn in selecties, of dat het algoritme andere of meer fouten maakt voor bepaalde groepen.
  • +
  • Merk op dat het onmogelijk is om de risico's voor alle specifieke groepen af te vangen. Hierbij kan het helpen om te focussen op de meest kwetsbare groepen.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
aia-04 - Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
+
+

Risico

+

De impact van het algoritme op de besluitvorming en op personen, doelgroepen en/of de samenleving is niet inzichtelijk, waardoor onvoldoende maatregelen zijn getroffen om ongewenste effecten (zoals bias en discriminatie) te voorkomen.

+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-08-archiveren-documenten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-08-archiveren-documenten/index.html new file mode 100644 index 0000000000..66d34939d3 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-08-archiveren-documenten/index.html @@ -0,0 +1,990 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bepaal welke documenten voor hoe lang gearchiveerd moeten worden - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Bepaal welke documenten voor hoe lang gearchiveerd moeten worden

+ +

owp-08OntwerpOntwikkelenOntwikkelaarProjectleiderJuristTransparantie

+

Maatregel

+

Stel vast welke documenten, (samengesteld geheel van) data/informatie van/in het algoritme gelden als "archiefbescheiden" in de zin van artikel 1 c Archiefwet en documenteer daarvan een overzicht, bij voorkeur vastgesteld door een daartoe bevoegde. Bepaal de bijbehorende bewaartermijnen vast voor de archiefbescheiden.

+

Toelichting

+
    +
  • Bij archiefbescheiden kan worden gedacht aan de broncode, trainings- en testdata, (technische) documentatie en de output.
  • +
  • Deze archiefbescheiden moeten voor een bepaalde tijd worden bewaard (de bewaartermijn).
  • +
  • Overleg hierover met de verantwoordelijke binnen de organisatie voor het toepassen van de Archiefwet.
  • +
  • Het is mogelijk dat de selectielijsten nog niet duiden welke informatie of data, specifiek bij de toepassing van algoritmen, moet worden toegepast en hier dus ook nog geen termijnen bij zijn gekoppeld.
  • +
  • Stel vast of beperkingen aan openbaarheid van de archiefbescheiden moeten worden gesteld. Er zijn gevallen waarbij het openbaren van archiefbescheiden is uitgesloten. Stem in het begin van het proces (pro-actief) met de opdrachtgever af wat de wenselijkheid is t.a.v. +transparantie/openheid (uitgangspunt zou 'open, tenzij' moeten zijn).
  • +
  • Stel vast hoe de archiefbescheiden op een duurzame wijze toegankelijk kunnen worden gemaakt. Het moet mogelijk zijn dat de archiefbescheiden daadwerkelijk overhandigd kunnen worden aan betrokken partijen. Denk hierbij aan burgers, onderneming, toezichthouder of rechters. Duurzaam betekent hier met behoud van functie en kwaliteit voor langere tijd. Onderzoek welke voorziening hiervoor beschikbaar is binnen de organisatie.
  • +
+
+

Tip

+

Formeer hierbij een multi-discipinaire groep (bestaande uit bijvoorbeeld een inkoper, ontwikkelaar, data scientist, proceseigenaar en archiefdeskundige) om deze maatregel toe te passen.

+
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
arc-01 - Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
aia-12--bewaartermijn-voor-documentatie
+
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-model-verwerkersovereenkomst-onderdeel-aanbesteding/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-model-verwerkersovereenkomst-onderdeel-aanbesteding/index.html new file mode 100644 index 0000000000..27d8511c94 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-model-verwerkersovereenkomst-onderdeel-aanbesteding/index.html @@ -0,0 +1,974 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Een model-verwerkersovereenkomst is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Een model-verwerkersovereenkomst is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt

+ +

owp-09OntwerpMonitoring en beheerProjectleiderBeleid en adviesPublieke inkoopPrivacy en gegevensbescherming

+

Maatregel

+

Inventariseer of er mogelijk sprake is van een algoritme dat een hoog risico kan inhouden voor de rechten en vrijheden van natuurlijke personen of impactvol kan zijn voor hen en maak in voorkomend geval in de model-verwerkersovereenkomst een uitdrukkelijke verwijzing naar een concreet DPIA-document (met datum/kenmerk) of (indien op dat moment nog in bezit of bekend bij de steller) een expliciet invulveld voor het duiden van de betreffende DPIA, zodat die wordt genoemd ter completeren van de verwerkersovereenkomst vooraf het overeenkomen/ondertekenen van die verwerkersovereenkomst.

+

Toelichting

+

Een model-verwerkersoverenkomst is veelal een verplicht onderdeel bij het publiek inkopen van software waarbij persoonsgegevens worden verwerkt en bij de totstandkoming van de overeenkomst.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-13 - Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
+
+

Bronnen

+

Algoritmekader

+

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-multidisciplinair-inkoopteam/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-multidisciplinair-inkoopteam/index.html new file mode 100644 index 0000000000..933158c593 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-09-multidisciplinair-inkoopteam/index.html @@ -0,0 +1,1000 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Stel een multidisciplinair team samen bij het ontwikkelen of inkopen van algoritmes. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Stel een multidisciplinair team samen bij het ontwikkelen of inkopen van algoritmes.

+ + +

owp-09OntwerpProjectleiderBeleid en adviesPublieke inkoop

+

Maatregel

+

Stel een multidisciplinair team samen bij het ontwikkelen of inkopen van algoritmes.

+

Toelichting

+ +
    +
  • Bij een project gericht op het ontwikkelen of inkopen van algoritmes is het belangrijk dat betrokkenen al in een vroeg stadium samenwerken. Dit betekent dat zowel een interne opdrachtgever als het ontwikkelingsteam of de afdeling inkoop tijdig worden aangehaakt om te zorgen voor een goed afgestemd proces.
  • +
  • Wanneer het gaat om het ontwikkelen of inkopen van algoritmes, is een multidisciplinair team wenselijk. Zo'n team brengt relevante kennis en ervaring samen om de behoeften en specificaties helder te krijgen. Afhankelijk van de aard en complexiteit van het algoritme kunnen de rollen binnen dit team variëren.
  • +
  • Naast een interne opdrachtgever, materiedeskundige en gebruiker kun je voor het ontwikkelen van algoritmes denken aan een data-engineer, data scientist, IT-architect, ethicus, data- en privacy-officer. Bij een overheidsopdracht gericht op de inkoop van een algiritme, horen daar nog een (aanbestedings)jurist en inkoper bij. Afhankelijk van de complexiteit van de oplossing zijn meer of minder disciplines en dus te beleggen verantwoordelijkheden binnen het team wenselijk.
  • +
  • Een multidisciplinair team kan ondersteunen bij het formuleren van de probleemstelling of formuleren van de doelstellingen van een project, verkennen van de mogelijke oplossingsrichtingen en het vertalen van de gewenste oplossingsrichting naar de concrete behoefte.
  • +
+

Bijbehorende vereisten

+ + +
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+
+

Bronnen

+ + +

Risico

+ +

Zonder een multidisciplinair team is het waarschijnlijk dat belangrijke aspecten voor een verantwoorde inzet van algoritmes niet worden geadresseerd en ongewenste algoritmes worden ontwikkeld of ingekocht.

+

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-10-projectstartarchitectuur/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-10-projectstartarchitectuur/index.html new file mode 100644 index 0000000000..bdd6863368 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-10-projectstartarchitectuur/index.html @@ -0,0 +1,1001 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes

+ +

owp-10OntwerpOntwikkelenVerificatie en validatieImplementatieProjectleiderBeleid en adviesTechnische robuustheid en veiligheid

+

Maatregel

+

Voer een Project Startarchitectuur (PSA) uit als algoritmes worden ontwikkeld of ingekocht.

+

Toelichting

+
    +
  • Een Project Startarchitectuur (PSA) is een hulpmiddel dat bij een project wordt ingezet om veranderingen van A naar Beter te faciliteren.
  • +
  • De PSA richt zich daarbij op de kaders die op een project van toepassing zijn en wat de oplossing bijdraagt aan het realiseren van de gewenste, toekomstige architectuur, wat de implicaties zullen zijn voor bestaande voorzieningen en waar het project zal afwijken van bestaande beelden.
  • +
  • Met de PSA wordt een concreet en doelgericht ICT-architectuurkader opgesteld, waarbinnen het project moet worden uitgevoerd.
  • +
  • De PSA maakt concreet wat architectuur voor een project betekent.
  • +
  • Door een PSA uit te voeren ontstaan inzichten hoe het betreffende algoritme zo optimaal mogelijk onderdeel kan worden gemaakt van het bestaande applicatielandschap, waarmee bijvoorbeeld kan worden voorkomen dat het algoritme of AI-systeem na verloop van tijd geen input meer kan ontvangen door onverwachte wijzigingen in systemen.
  • +
  • Onderwerpen als privacy, informatiebeheer en beheer worden hierin ook globaal meegenomen.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
avg-11 - Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
+
+

Risico

+

Het algoritme kan niet of na verloop van tijd niet meer functioneren, doordat onverwachte of ongewenst wijzigingen in het applicatielandschap plaatsvinden.

+

Bronnen

+ +

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/index.html new file mode 100644 index 0000000000..011102b777 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-duurzaam-inkopen/index.html @@ -0,0 +1,1072 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Koop duurzaam algoritmes in - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Koop duurzaam algoritmes in

+ + +

owp-11OntwerpProjectleiderBeleid en adviesPublieke inkoopDuurzaamheid

+

Maatregel

+ +

Kies softwareoplossingen van aanbieders die duurzaamheid bevorderen, en stel heldere eisen aan energieverbruik, hernieuwbare energiebronnen en transparantie over de milieuprestaties van software.

+

Toelichting

+ +

Door software duurzaam in te kopen, kun je als organisatie al vroeg in het ontwikkelproces bijdragen aan de verduurzaming van je algoritmes. Kies daarom softwareoplossingen van aanbieders die maatschappelijk verantwoord ondernemen (MVI) en energie-efficiëntie vooropstellen.

+

Duurzaamheidscriteria en selectie van aanbieders

+

Om software duurzaam in te kopen, kun je aanbieders beoordelen op specifieke duurzaamheidscriteria. Enkele belangrijke criteria zijn:

+
    +
  • het energieverbruik van de software
  • +
  • het gebruik van hernieuwbare energiebronnen in de benodigde datacenters
  • +
  • het beperken van CO₂-uitstoot tijdens de levenscyclus van de software
  • +
+

Vraag om inzicht in milieuprestaties en certificeringen, zoals ISO-14001, om de toewijding van aanbieders aan duurzaamheid te toetsen. +De ISO-14001 is een internationaal geaccepteerde standaard met eisen voor een milieumanagementsysteem.

+

Inkoopvoorwaarden en contractuele eisen

+

Stel bij het inkopen duidelijke eisen aan duurzaamheidscriteria, zoals het gebruik van "groene technologieën", het aanbieden van Software-as-a-Service (SaaS) en open standaarden. Zo maak je duurzame keuzes die bijdragen aan een langere levensduur en energie-efficiëntie van je algoritmes. Door KPI’s op te nemen voor energie-efficiëntie en CO₂-reductiedoelen kun je de voortgang van deze doelen concreet monitoren. Je kunt deze voorwaarden opnemen als standaard inkoopvoorwaarden.

+

Bonus-malusregeling en monitoring

+

Om naleving van duurzame doelstellingen te stimuleren, kun je een bonus-malusregeling inzetten. Aanbieders ontvangen een bonus wanneer zij duurzame doelstellingen halen, en kunnen worden aangesproken als beloofde duurzaamheidsnormen niet worden behaald. Monitoring via jaarlijkse rapportages helpt om de voortgang van de duurzaamheidsdoelen te evalueren en, indien nodig, bij te sturen.

+

Extra overwegingen

+

Extra overwegingen die je kunt maken bij het aankopen van algoritmes, zoals genoemd in de handreiking 'Hoe maak ik mijn inkoop van software duurzamer?' van PIANOo:

+
    +
  • Ga na of je de software wel echt moet inkopen.
  • +
  • Probeer zoveel mogelijk uit te vragen in een SaaS-oplossing.
  • +
  • Vraag een oplossing in een Cloud-omgeving.
  • +
  • Ga na of ‘serverless’ ook een oplossing is.
  • +
  • Vraag om de broncode van de software.
  • +
  • Denk goed na over de technische levensduur van verschillende componenten.
  • +
  • Open standaarden zijn een vorm van duurzaamheid.
  • +
  • Pas containerisatie en virtualisatie toe.
  • +
  • Neem eisen op over opschalingsmogelijkheden.
  • +
+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+
+

Risico

+

Zonder duurzaamheidscriteria bij het inkopen van software loop je het risico op hogere energie- en kostenlasten, en beperk je de mogelijkheden om duurzaamheidsdoelstellingen te halen bij je algoritmes.

+

Bronnen

+ + +

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-gebruikte-data/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-gebruikte-data/index.html new file mode 100644 index 0000000000..ec2191aea3 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-11-gebruikte-data/index.html @@ -0,0 +1,994 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beschrijf welke data gebruikt wordt voor de beoogde toepassing - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Beschrijf welke data gebruikt wordt voor de beoogde toepassing

+ + +

owp-02OntwerpDataverkenning en datapreparatieOntwikkelaarBeleid en adviesData

+

Maatregel

+

Beschrijf welke data gebruikt wordt voor de beoogde toepassing.

+

Toelichting

+
    +
  • Maak in een vroege fase van de ontwikkeling een inschatting van welke data er gebruikt gaat worden voor het algoritme.
  • +
  • Leg na het uitvoeren van een beschikbaarheids-, kwaliteit en toegankelijkheidsanalyse vast, welke data wordt verwerkt voor het ontwikkelen en gebruiken van het algoritme
  • +
  • Beschrijf daarbij om wat voor gegevens het gaat en uit welke bron deze komen.
  • +
  • Bepaal of het is toegestaan om deze data te verwerken.
  • +
  • Het is denkbaar dat het onderzoek van de kwaliteit van de data in een latere fase in de levenscyclus pas grondig kan worden uitgevoerd.
  • +
+

Voorbeeld

+

Risico

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
+
+

Bronnen

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-bespreek-vereisten-met-aanbieders/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-bespreek-vereisten-met-aanbieders/index.html new file mode 100644 index 0000000000..6382d6b6a9 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-bespreek-vereisten-met-aanbieders/index.html @@ -0,0 +1,998 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.

+ + +

owp-12OntwerpOntwikkelenProjectleiderPublieke inkoop

+

Maatregel

+ +

Bespreek de vereiste die gelden voor een verantwoorde inzet van algoritmes met een aanbieder.

+

Toelichting

+ +

Ga met een aanbieder in gesprek over in hoeverre zij invulling kunnen geven aan de vereisten die gelden voor een verantwoorde inzet van algoritmes. Dit kan worden gedaan bijvoorbeeld bij een informatiesessie met aanbieders voorafgaand aan een aanbesteding.

+

Op basis van nieuwe of gewijzigde wet- en regelgeving of de totstandkoming van nieuwe standaard, is het denkbaar dat aanbieders van algoritmes nog niet of niet meer voldoet aan deze vereisten. Het is van belang om deze inzichten bijvoorbeeld tijdens een aanbesteding worden verkregen. Indien van toepassing, laat de aanbieder inzichtelijk maken welke stappen deze gaat zetten om hieraan te gaan voldoen. Dit is ook relevant bij reeds afgesloten contracten.

+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
aia-02 - Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd
aia-03 - Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
aia-04 - Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-06 - Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-07 - Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-11 - Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-12 - Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder
aia-13 - Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder
aia-14 - Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure
aia-15 - Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring
aia-16 - Hoog-risico-AI-systemen zijn voorzien van een CE-markering
aia-17 - Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank
aia-18 - Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
aia-19 - Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-20-verstrekken-van-informatie-op-verzoek
aia-21-aantoonbaarheid-vereisten-hoog-risico
aia-28-recht-op-uitleg-ai-besluiten
aia-29 - Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
aia-30-transparantieverplichtingen
aia-31-ai-modellen-algemene-doeleinden
aia-32-ai-modellen-algemene-doeleinden-systeemrisico
aia-33-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten
aia-34-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging
aia-35-verwerking-in-testomgeving
aia-36-monitoring-na-het-in-de-handel-brengen
aia-37-melding-ernstige-incidenten
aia-38-melding-inbreuk-op-ai-verordening
aia-39-recht-klacht-indienen-bij-ai-bureau
bzk-01 - Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister
arc-01 - Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
aut-01 - Auteursrechten zijn beschermd
avg-01 - Persoonsgegevens worden op een rechtmatige manier verwerkt
avg-02 - Persoonsgegevens worden zo kort mogelijk bewaard
avg-03 - Persoonsgegevens worden zo min mogelijk verwerkt
avg-04 - Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
avg-05 - Persoonsgegevens zijn juist en actueel
avg-06 - Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken
avg-07 - Organisaties zijn transparant over het verwerken van persoonsgegevens
avg-08 - Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
avg-09 - Betrokkenen kunnen een beroep doen op hun privacyrechten
avg-10 - Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
avg-11 - Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-12 - Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
avg-13 - Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
awb-02 - Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
dat-01 - Databanken worden alleen gebruikt met toestemming van de databank-producent
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
grw-02 - Algoritmes discrimineren niet
woo-01 - Iedereen kan openbare informatie over algoritmes vinden of aanvragen
+
+

Bronnen

+ + +

Risico

+ +

Door de vereisten voor een verantwoorde inzet van algoritmes niet te bespreken met aanbieders, is het voor hen (deels) onduidelijk aan welke vereisten diens algoritmes moet voldoen om te kunnen contractueren met overheidsorganisaties.

+

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/index.html new file mode 100644 index 0000000000..6714eee036 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-12-eenvoudigere-algoritmes/index.html @@ -0,0 +1,1048 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ontwerp algoritmes zo eenvoudig mogelijk - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Ontwerp algoritmes zo eenvoudig mogelijk

+ + +

owp-12OntwerpOntwikkelenOntwikkelaarDuurzaamheid

+

Maatregel

+

Ontwerp algoritmes gericht op eenvoud en efficiëntie, zodat het energieverbruik en de benodigde rekenkracht tijdens gebruik minimaal blijven.

+

Toelichting

+

Complexe algoritmes vereisen vaak aanzienlijke rekenkracht, wat energie-intensief kan zijn. Door algoritmes minder complex en rekenintensief te ontwerpen, verlaag je de benodigde middelen en energie bij het trainen en uiteindelijk toepassen van deze algoritmes. Een efficiënter ontwerp maakt de algoritmes energiezuiniger in de trainings- en gebruiksfase en draagt zo bij aan duurzaamheid in de gehele levenscyclus.

+

Modellen vereenvoudigen en focussen op kernfunctionaliteit

+

Wanneer je een nieuw algoritme ontwikkelt, kun je de omvang en rekenbelasting beperken door alleen noodzakelijke functionaliteit op te nemen. Focus op de kernfunctionaliteit, zodat je gebruik maakt van een kleiner model dat beter te begrijpen en gemakkelijker te beheren is. Het vermijden van overbodige functionaliteiten maakt het algoritme minder zwaar en verlaagt de milieu-impact aanzienlijk.

+

Minder complexiteit door divide-and-conquer en dynamisch programmeren

+

Een populaire methode om complexiteit te verlagen is het divide-and-conquer principe, waarbij je een grote algoritmische berekening opsplitst in kleinere, overzichtelijke deelberekeningen en deze vervolgens oplost (je splitst hierbij het technische probleem in meerdere kleinere problemen). Dit vermindert de rekenlast aanzienlijk en verhoogt de efficiëntie. Ook kun je met dynamisch programmeren optimalisaties toevoegen door eerder berekende resultaten op te slaan en te hergebruiken, wat herhaling van berekeningen voorkomt en de rekenkracht vermindert.

+

Minder complexiteit door modeloptimalisatie

+
    +
  • Door gebruik te maken van pruning kunnen minder relevante verbindingen en nodes in een neuraal netwerk worden verwijderd, waardoor de rekenbelasting vermindert.
  • +
  • Quantization verlaagt de precisie van numerieke waarden in een model, wat opslag en rekenkracht verlaagt zonder de prestaties significant te beïnvloeden.
  • +
  • Knowledge distillation kan verder helpen door de kennis van een groot model over te dragen naar een kleiner, minder complex model, dat vervolgens efficiënter werkt.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +

Geen vereisten beschikbaar voor deze maatregel.

+
+

Risico

+

Ontwerpen zonder oog voor efficiëntie kan leiden tot energie-intensieve algoritmes die hoge kosten en milieubelasting met zich meebrengen.

+

Bronnen

+

- What is knowledge distillation? (IBM)

+

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-13-vereisten-onderdeel-algemene-inkoopvoorwaarden-en-contractovereenkomst/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-13-vereisten-onderdeel-algemene-inkoopvoorwaarden-en-contractovereenkomst/index.html new file mode 100644 index 0000000000..f488904d9f --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-13-vereisten-onderdeel-algemene-inkoopvoorwaarden-en-contractovereenkomst/index.html @@ -0,0 +1,1007 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.

+ + +

owp-13OntwerpProjectleiderBeleid en adviesPublieke inkoopTransparantie

+

Maatregel

+ +

Maak vereisten voor algoritmes onderdeel van contractvoorwaarden en de contractovereeenkomst.

+

Toelichting

+ +
    +
  • Door vereisten die gelden voor algoritmes onderdeel te maken van contractvoorwaarden, is voor een aanbieder vooraf duidelijk aan welke voorwaarden zij moeten voldoen als zijn algoritmes willen aanbieden aan overheidsorganisaties.
  • +
  • Het is van belang om een afweging te maken welke vereisten voor algoritmes als 'algemene contractvoorwaarden' kunnen gelden en welke aanvullend in een contractovereenkomst moeten worden opgenomen.
  • +
+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
aia-02 - Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd
aia-03 - Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
aia-04 - Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-06 - Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-07 - Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-11 - Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-12 - Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder
aia-13 - Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder
aia-14 - Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure
aia-15 - Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring
aia-16 - Hoog-risico-AI-systemen zijn voorzien van een CE-markering
aia-17 - Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank
aia-18 - Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
aia-19 - Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-20-verstrekken-van-informatie-op-verzoek
aia-21-aantoonbaarheid-vereisten-hoog-risico
aia-28-recht-op-uitleg-ai-besluiten
aia-29 - Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
aia-30-transparantieverplichtingen
aia-31-ai-modellen-algemene-doeleinden
aia-32-ai-modellen-algemene-doeleinden-systeemrisico
aia-33-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten
aia-34-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging
aia-35-verwerking-in-testomgeving
aia-36-monitoring-na-het-in-de-handel-brengen
aia-37-melding-ernstige-incidenten
aia-38-melding-inbreuk-op-ai-verordening
aia-39-recht-klacht-indienen-bij-ai-bureau
bzk-01 - Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister
arc-01 - Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
aut-01 - Auteursrechten zijn beschermd
avg-01 - Persoonsgegevens worden op een rechtmatige manier verwerkt
avg-02 - Persoonsgegevens worden zo kort mogelijk bewaard
avg-03 - Persoonsgegevens worden zo min mogelijk verwerkt
avg-04 - Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
avg-05 - Persoonsgegevens zijn juist en actueel
avg-06 - Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken
avg-07 - Organisaties zijn transparant over het verwerken van persoonsgegevens
avg-08 - Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
avg-09 - Betrokkenen kunnen een beroep doen op hun privacyrechten
avg-10 - Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
avg-11 - Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-12 - Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
avg-13 - Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
awb-02 - Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
dat-01 - Databanken worden alleen gebruikt met toestemming van de databank-producent
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
grw-02 - Algoritmes discrimineren niet
woo-01 - Iedereen kan openbare informatie over algoritmes vinden of aanvragen
+
+

Bronnen

+ + +

Risico

+ +

Door de vereisten voor een verantwoorde inzet van algoritmes niet te communiceren met aanbieders, is het voor hen (deels) onduidelijk aan welke vereisten diens algoritmes moet voldoen om te kunnen contractueren met overheidsorganisaties.

+

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-14-verwerkersovereenkomst-onderdeel-aanbesteding/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-14-verwerkersovereenkomst-onderdeel-aanbesteding/index.html new file mode 100644 index 0000000000..43db5f29ab --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-14-verwerkersovereenkomst-onderdeel-aanbesteding/index.html @@ -0,0 +1,1013 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak het opstellen van een verwerkersovereenkomst onderdeel van de aanbesteding als persoonsgegevens worden verwerkt. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak het opstellen van een verwerkersovereenkomst onderdeel van de aanbesteding als persoonsgegevens worden verwerkt.

+ +

owp-14OntwerpMonitoring en beheerProjectleiderBeleid en adviesPublieke inkoopPrivacy en gegevensbescherming

+

Maatregel

+

Het opstellen van een verwerkersovereenkomst met aanbieder is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt of noodzakelijk zijn voor het trainen of genereren van output door algoritmes van aanbieder.

+

Toelichting

+

Een verwerkersovereenkomst moet worden opgesteld als persoonsgegevens worden verwerkt voor het trainen of het genereren van output door algoritmes van aanbieder. Met een verwerkersovereenkomst worden een aantal afspraken schriftelijk vastgelegd het bij de verwerking van persoonsgegevens. Het gaat om de volgende zaken:

+
    +
  • +

    Algemene beschrijving. Een omschrijving van het onderwerp, de duur, de aard en het doel van de verwerking, het soort persoonsgegevens, de categorieën van betrokkenen en uw rechten en verplichtingen als verwerkingsverantwoordelijke.

    +
  • +
  • +

    Instructies voor de verwerking. De verwerking vindt in principe uitsluitend plaats op basis van uw schriftelijke instructies. De verwerker mag de persoonsgegevens niet voor eigen doeleinden gebruiken. +Geheimhoudingsplicht. Personen in dienst van of werkzaam voor de verwerker hebben een geheimhoudingsplicht. +Beveiliging. De verwerker treft passende technische en organisatorische maatregelen om de verwerking te beveiligen. Bijvoorbeeld pseudonimisering en versleuteling van persoonsgegevens, permanente informatiebeveiliging, herstel van beschikbaarheid en toegang tot gegevens bij incidenten, regelmatige beveiligingstesten.

    +
  • +
  • +

    Subverwerkers. De verwerker schakelt geen subverwerker(s) in zonder uw voorafgaande schriftelijke toestemming. De verwerker legt aan een subverwerker in een subverwerkersovereenkomst dezelfde verplichtingen op als de verwerker richting u heeft. In de overeenkomst kunt u ook direct afspreken dat de verwerker subverwerkers mag inschakelen en onder welke voorwaarden. Komt de subverwerker de verplichtingen niet na? Dan blijft de verwerker volledig aansprakelijk richting u voor het nakomen van de verplichtingen van de subverwerker (artikel 28, vierde lid, van de AVG).

    +
  • +
  • +

    Privacyrechten. De verwerker helpt u om te voldoen aan uw plichten als betrokkenen hun privacyrechten uitoefenen (zoals het recht op inzage, correctie, verwijdering en dataportabiliteit).

    +
  • +
  • +

    Andere verplichtingen. De verwerker helpt u ook om andere verplichtingen na te komen. Zoals bij het melden van datalekken, het uitvoeren van een data protection impact assessment (DPIA) en bij een voorafgaande raadpleging.

    +
  • +
  • +

    Gegevens verwijderen. Na afloop van de verwerkingsdiensten verwijdert de verwerker de gegevens. Of bezorgt de verwerker de gegevens aan u terug, als u dat wilt. Ook verwijdert de verwerker kopieën. Tenzij de verwerker wettelijk verplicht is de gegevens te bewaren.

    +
  • +
  • +

    Audits. De verwerker werkt mee aan uw audits of die van een derde partij. En stelt alle relevante informatie beschikbaar om te kunnen controleren of de verwerker zich houdt aan de hierboven genoemde verplichtingen (artikel 28 AVG).

    +
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-13 - Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
+
+

Bronnen

+

Verwerkersovereenkomst

+

Risico

+ +

Er is sprake van een onrechtmatige verwerking van persoonsgegevens als geen verwerkersovereenkomst is opgesteld tussen de verwerker en de verwerkingsverantwoordelijke.

+

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-15-leveren-bewijs_voldoen-aan-vereisten-algoritme-aanbieder/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-15-leveren-bewijs_voldoen-aan-vereisten-algoritme-aanbieder/index.html new file mode 100644 index 0000000000..72a5361195 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-15-leveren-bewijs_voldoen-aan-vereisten-algoritme-aanbieder/index.html @@ -0,0 +1,998 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving.

+ + +

owp-15OntwerpProjectleiderBeleid en adviesPublieke inkoop

+

Maatregel

+ +

Maak het leveren van bewijs voor het voldoen aan de vereiste onderdeel van de beoordeling van een inschrijving

+

Toelichting

+ +

Het leveren van bewijs door aanbieder dat de ontwikkelde algoritmes voldoen aan de vereisten, draagt bij aan het kunnen beoordelen of een aanbieder geschikt is om mee te contracteren. Bij het leveren van bewijs kan worden gedacht aan het overhandigen van bijvoorbeeld een certificaat of een EU-conformiteitsverklaring voor hoog risico AI-systemen.

+

Daarbij is het relevant om te beoordelen in hoeverre er is voldaan aan geharmoniseerde standaarden. Deze standaarden zijn momenteel in ontwikkeling. In de (nabije) toekomst zal dit naar verwachting op een vergelijkbare manier kunnen worden benaderd als bij het moeten leveren van een NEN-ISO 27001 certificaat (voldoen aan informatiebeveiligingsvereisten) door een leverancier.

+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
aia-14 - Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure
aia-15 - Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring
aia-16 - Hoog-risico-AI-systemen zijn voorzien van een CE-markering
+
+

Bronnen

+ + +

+
+

Risico

+ +

Er wordt gecontracteerd met een aanbieder die niet voldoet aan de vereisten voor een verantwoorde inzet van algoritmes.

+

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/index.html new file mode 100644 index 0000000000..325d109ff1 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-16-leveren-bewijs-door-aanbieder-niet-schenden-auteursrechten/index.html @@ -0,0 +1,1059 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output.

+ + +

owp-16Dataverkenning en datapreparatieVerificatie en validatieProjectleiderBeleid en adviesPublieke inkoopData

+

Maatregel

+

Maak het al dan niet kunnen leveren van bewijs door een aanbieder dat auteursrechten niet worden geschonden met de trainingsdata en output van diens algoritme van bijvoorbeeld een aanbesteding.

+

Toelichting

+

Trainingsdata

+
    +
  • +

    Algoritmes worden veelal getraind aan de hand van een omvangrijke hoeveelheid data. Wanneer grote hoeveelheden data, bijvoorbeeld door deze te scrapen van internet, worden gebruikt is het zeer aannemelijk (of: nagenoeg zeker) dat zich onder de gescrapete inhoud (ook) veel auteursrechtelijk beschermde werken bevinden, zoals bijvoorbeeld e-books en afbeeldingen. De gebruikte auteursrechtelijke werken kunnen soms bijvoorbeeld uit illegale bron verkregen zijn, en ook los daarvan zijn rechthebbenden veelal niet op de hoogte van het feit dat hun auteursrechtelijke werken voor de ontwikkeling van een algoritme of AI gebruikt worden.

    +
  • +
  • +

    Onder auteursrechtjuristen wordt aangenomen dat het gebruik van auteursrechtelijk beschermde werken ter training van algoritmes (waarschijnlijk) als kopiëren geldt: een handeling die de rechthebbende kan verbieden. Dat betekent dat aanbieders van algoritmes het gebruik van auteursrechtelijk beschermd materiaal in de inputfase steeds moeten kunnen legitimeren op grond van (a) toestemming van de rechthebbende(n) of (b) een in de wet neergelegde exceptie op het auteursrechtelijke verveelvoudigingsrecht.

    +
  • +
  • +

    Laat de aanbieder(s) uitleggen en (aantoonbaar) onderbouwen op welke manier de trainingsdata is verkregen en of dit rechtmatig was. Laat de aanbieders(s) ook aantonen welke maatregelen er zijn getroffen om dit te voorkomen en ga hier eventueel over in gesprek. Maak een jurist onderdeel van de beoordeling hiervan. Overweeg om een bronvermelding te laten opnemen.

    +
  • +
+

Output

+

Laat de aanbieder(s) uitleggen en (aantoonbaar) onderbouwen op welke manier de trainingsdata is verkregen en of dit rechtmatig was. Laat de aanbieders(s) ook aantonen welke maatregelen er zijn getroffen om dit te voorkomen. Maak een jurist onderdeel van de beoordeling hiervan. Overweeg om een bronvermelding te laten opnemen.

+

Risicomanagement

+

Het is van belang dat de (rest)risico's inzichtelijk zijn gemaakt als er sprake is van een (potentiële) schending van auteursrechten. Laat een aanbieder deze risico's inzichtelijk maken, zodat aanbieder en gebruiksverantwoordelijke maatregelen kunnen treffen en handelen als dit nodig is. Beoordeel of deze rest(risico's) acceptabel zijn.

+

Contractovereenkomst

+

Neem in de conceptovereenkomst op dat de aanbieder garandeert dat auteursrechten niet worden geschonden met de trainingsdata of output van het algoritme en dat aanbieder dit gedurende de ontwikkeling en levensduur actief bewaakt.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
aut-01 - Auteursrechten zijn beschermd
+
+

Bronnen

+ +

Risico

+ +

Dat wordt gecontracteerd met een aanbieder waarbij niet kan worden uitgesloten dat auteursrechten worden geschonden.

+

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-17-beoordeel-aansprakelijkheidsvoorwaarden-van-aanbieder/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-17-beoordeel-aansprakelijkheidsvoorwaarden-van-aanbieder/index.html new file mode 100644 index 0000000000..1e2e420c17 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-17-beoordeel-aansprakelijkheidsvoorwaarden-van-aanbieder/index.html @@ -0,0 +1,1001 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aansprakelijkheidsvoorwaarden van een aanbieder worden beoordeeld in de aanbesteding - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Aansprakelijkheidsvoorwaarden van een aanbieder worden beoordeeld in de aanbesteding

+ +

owp-17OntwerpImplementatieJuristBeleid en adviesPublieke inkoop

+

Maatregel

+

Maak de aansprakelijkheidsvoorwaarden die een aanbieder stelt ten aanzien van auteursrechten een vast onderdeel om te beoordelen in de aanbesteding.

+

Toelichting

+
    +
  • +

    Eindgebruikers van algoritmes kunnen er niet altijd op vertrouwen, of (eenvoudig) nagaan, of datgene wat zij door middel van een algoritme laten genereren, inbreuk maakt op rechten van anderen. Het is onwenselijk dat een eindgebruiker aansprakelijk wordt gesteld voor het maken van een inbreuk op rechten van derden, als deze gebruik maakt van algoritmes die worden aangeboden door aanbieders. Organisatie moeten daarom afspraken hierover maken met aanbieders.

    +
  • +
  • +

    Hoe groot de kans is dat eindgebruikers vanwege het gebruik van algoritmes aansprakelijk worden gesteld, is nog onduidelijk. Er zijn wel voorbeelden waarbij eindgebruikers voor een eventuele inbreuk aansprakelijk kunnen worden gesteld.

    +
  • +
  • +

    Op dit moment zijn (nog) geen gevallen of rechtszaken bekend waarin eindgebruikers (of hun werkgevers) aansprakelijk zijn gesteld voor een inbreuk op het intellectuele-eigendomsrecht vanwege het gebruik van op basis van algoritme. Feit is echter wel dat een dergelijke aansprakelijkstelling in voorkomende gevallen dus mogelijk zullen zijn, te meer nu de aanbieders van algoritmes in hun algemene voorwaarden het risico voor aansprakelijkheid volledig of grotendeels uitsluiten, of zelfs verlangen dat gebruikers hen vrijwaren voor de gevolgen van eventuele aansprakelijkstellingen.

    +
  • +
  • +

    Het is daarom van belang om een beoordeling te maken in hoeverre de aansprakelijkheidsvoorwaarden van de aanbieder passend zijn. Maak een jurist onderdeel van de beoordeling.

    +
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
aut-01 - Auteursrechten zijn beschermd
+
+

Bronnen

+

Advies Landsadvocaat Pels Rijcken over het gebruik van generatieve AI-tools door medewerkers van de Staat

+

Risico

+ +

Er wordt gecontracteerd met een aanbieder die ongewenste aansprakelijkheidsvoorwaarden hanteert.

+

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-18-maak-vereisten-onderdeel-van-subgunningscriteria/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-18-maak-vereisten-onderdeel-van-subgunningscriteria/index.html new file mode 100644 index 0000000000..205a2cb430 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-18-maak-vereisten-onderdeel-van-subgunningscriteria/index.html @@ -0,0 +1,994 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.

+ + +

owp-18OntwerpOntwikkelaarPublieke inkoop

+

Maatregel

+ +

Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.

+

Toelichting

+ +
    +
  • Door een vereiste onderdeel te maken van een (sub)gunningscriteria, ontstaat een mogelijkheid voor aanbieders om zich te onderscheiden van andere aanbieders.
  • +
  • Dit kan zorgen voor een extra stimulatie op kwaliteitsaspecten van algoritmes
  • +
  • In de context van algoritmes is dit in het bijzonder relevant, bijvoorbeeld in relatie tot vereisten als non-discriminatie, eerbiedigen fundamentele rechten of het verbod op schenden auteursrechten.
  • +
  • Door vereisten te vertalen naar een (sub)gunningscriteria, kan een inhoudelijke beoordeling worden gemaakt in hoeverre een aanbieder voldoet aan deze vereisten.
  • +
+

Bijbehorende vereiste(n)

+ + + + +
+Bekijk alle vereisten +
Vereiste
aia-28-recht-op-uitleg-ai-besluiten
aut-01 - Auteursrechten zijn beschermd
dat-01 - Databanken worden alleen gebruikt met toestemming van de databank-producent
aia-04 - Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
aia-01 - Personeel en gebruikers zijn voldoende AI-geletterd
aia-18 - Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
avg-08 - Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
aia-11 - Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-29 - Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
grw-02 - Algoritmes discrimineren niet
avg-03 - Persoonsgegevens worden zo min mogelijk verwerkt
avg-11 - Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-10 - Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
aia-03 - Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
aia-04 - Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
avg-07 - Organisaties zijn transparant over het verwerken van persoonsgegevens
aia-03 - Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
aia-19 - Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-20-verstrekken-van-informatie-op-verzoek
woo-01 - Iedereen kan openbare informatie over algoritmes vinden of aanvragen
+
+

Bronnen

+ + + +

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-19-ruimte-voor-samenwerking-met-aanbieder/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-19-ruimte-voor-samenwerking-met-aanbieder/index.html new file mode 100644 index 0000000000..0d26bf7d5b --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-19-ruimte-voor-samenwerking-met-aanbieder/index.html @@ -0,0 +1,1009 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren

+ + +

owp-19OntwerpOntwikkelenProjectleiderPublieke inkoop

+

Maatregel

+ +

Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te gaan realiseren.

+

Toelichting

+ +
    +
  • +

    Om op een betekenisvolle manier invulling te geven aan bepaalde vereisten, kan het noodzakelijk zijn dat opdrachtgever en aanbieder (innovatief) moeten gaan samenwerken. Op basis van nieuwe wet- en regelgeving (bv. AI-Verordening) of geharmoniseerde standaarden kunnen aanbieders mogelijk nog niet voldoen aan nieuwe vereisten. Het kan ook onduidelijk zijn hoe moet worden voldaan aan vereisten nu de technologie zich snel ontwikkelt of dat de specifieke omstandigheden van het beoogde gebruik vragen om een samenspel tussen opdrachtgever en aanbieder.

    +
  • +
  • +

    Bij een verantwoorde inzet van algoritmes kan het bij vereisten zoals non-discriminatie, transparantie, menselijke controle en grondrechten van belang zijn om samen te onderzoeken hoe hier invulling aan moet worden gegeven. Het is belangrijk om bij de behoeftestelling al te verkennen om welke onderwerpen dit mogelijk van toepassing is. Bij een marktverkenning of informatiesessie kan worden verkend hoe aanbieders ervoor staan. Op basis hiervan kan worden beoordeeld in hoeverre bijvoorbeeld in een aanbesteding contractuele ruimte moet worden gecreëerd voor opdrachtgever en aanbieder om hieraan te werken.

    +
  • +
+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
aia-02 - Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd
aia-03 - Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
aia-04 - Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-06 - Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-07 - Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-11 - Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-12 - Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder
aia-13 - Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder
aia-14 - Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure
aia-15 - Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring
aia-16 - Hoog-risico-AI-systemen zijn voorzien van een CE-markering
aia-17 - Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank
aia-18 - Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
aia-19 - Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-20-verstrekken-van-informatie-op-verzoek
aia-21-aantoonbaarheid-vereisten-hoog-risico
aia-28-recht-op-uitleg-ai-besluiten
aia-29 - Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
aia-30-transparantieverplichtingen
aia-31-ai-modellen-algemene-doeleinden
aia-32-ai-modellen-algemene-doeleinden-systeemrisico
aia-33-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten
aia-34-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging
aia-35-verwerking-in-testomgeving
aia-36-monitoring-na-het-in-de-handel-brengen
aia-37-melding-ernstige-incidenten
aia-38-melding-inbreuk-op-ai-verordening
aia-39-recht-klacht-indienen-bij-ai-bureau
bzk-01 - Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister
arc-01 - Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
aut-01 - Auteursrechten zijn beschermd
avg-01 - Persoonsgegevens worden op een rechtmatige manier verwerkt
avg-02 - Persoonsgegevens worden zo kort mogelijk bewaard
avg-03 - Persoonsgegevens worden zo min mogelijk verwerkt
avg-04 - Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
avg-05 - Persoonsgegevens zijn juist en actueel
avg-06 - Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken
avg-07 - Organisaties zijn transparant over het verwerken van persoonsgegevens
avg-08 - Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
avg-09 - Betrokkenen kunnen een beroep doen op hun privacyrechten
avg-10 - Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
avg-11 - Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-12 - Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
avg-13 - Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
awb-02 - Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
dat-01 - Databanken worden alleen gebruikt met toestemming van de databank-producent
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
grw-02 - Algoritmes discrimineren niet
woo-01 - Iedereen kan openbare informatie over algoritmes vinden of aanvragen
+
+

Bronnen

+ + + +

Risico

+ +

Door niet te kunnen samenwerken aan vereisten, kan de situatie ontstaan dat uiteindelijk niet op een betekenisvolle manier wordt voldaan aan deze vereisten voor een verantwoorde inzet van algoritmes. +Gebrek aan samenwerking kan leiden tot onvermogen om de benodigde vereisten voldoende in de praktijk te garanderen. Ook is het belangrijk dat de verantwoordelijke goed genoeg begrijpt hoe het algoritme werkt en welke keuzes er gemaakt zijn tijdens het ontwerp, omdat alleen dan goed beoordeeld kan worden welke vereisten zijn voldaan en welke risico’s nog niet of minder goed zijn afgedekt.

+

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-20-vaststellen-aanleveren-informatie-technische-documentatie/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-20-vaststellen-aanleveren-informatie-technische-documentatie/index.html new file mode 100644 index 0000000000..43c04a57bb --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-20-vaststellen-aanleveren-informatie-technische-documentatie/index.html @@ -0,0 +1,998 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke.

+ + +

owp-20OntwerpProjectleiderBeleid en adviesOntwikkelaarPublieke inkoopTransparantie

+

Maatregel

+

Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke, zodat het alle relevante onderdelen van het algoritme zijn beschreven.

+

Toelichting

+
    +
  • +

    Het is van belang dat duidelijke afspraken worden gemaakt over het opstellen, aanvullen en actueel houden van technische documentatie van algorites. Bij het inkopen van algoritmes moet hier rekening mee worden gehouden. De aanbieder zal een belangrijk deel van de technische documentatie moeten aanleveren, maar bij gebruik door de gebruiksverantwoordelijken zal deze informatie moeten worden aangevuld.

    +
  • +
  • +

    Bespreek met het projectteam welke onderdelen van de technische documentatie, als genoemd in de Bijlage 4 AI-verordening, van het AI-systeem door welke partij (aanbieder of gebruiksverantwoordelijke) moeten worden ingevuld of aangevuld.

    +
  • +
  • +

    Hierbij is het van belang dat de documentatie aansluit bij de verschillende gebruikers van het systeem, waarbij rekening wordt gehouden met verschillende toepassingen of versies. Bespreek met het projectteam welke onderdelen van de technische documentatie voor AI-systemen, als genoemd in de Bijlage 4 AI-verordening, door welke partij (aanbieder of gebruiksverantwoordelijke) moeten worden ingevuld of aangevuld.

    +
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
aia-06:-technische-documentatie
+
+

Bronnen

+

Risico

+ +

Door de technische documentatie niet volledig op te stellen, is niet geheel transparant hoe het algoritme functioneert en kan daar geen verantwoording voor worden afgelegd.

+

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-21-uitvoeren-audit-voor-naleving-vereisten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-21-uitvoeren-audit-voor-naleving-vereisten/index.html new file mode 100644 index 0000000000..27dc259823 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-21-uitvoeren-audit-voor-naleving-vereisten/index.html @@ -0,0 +1,1002 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst

+ + +

owp-21OntwerpProjectleiderBeleid en adviesPublieke inkoop

+

Maatregel

+ +

Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst

+

Toelichting

+ +

Het is van belang dat opdrachtgever mogelijkheden heeft om te controleren in hoeverre door aanbieder/opdrachtnemer wordt voldaan aan naleving van de contractvoorwaarden

+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
aia-02 - Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd
aia-03 - Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
aia-04 - Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-06 - Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-07 - Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-11 - Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-12 - Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder
aia-13 - Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder
aia-14 - Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure
aia-15 - Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring
aia-16 - Hoog-risico-AI-systemen zijn voorzien van een CE-markering
aia-17 - Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank
aia-18 - Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
aia-19 - Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-20-verstrekken-van-informatie-op-verzoek
aia-21-aantoonbaarheid-vereisten-hoog-risico
aia-28-recht-op-uitleg-ai-besluiten
aia-29 - Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
aia-30-transparantieverplichtingen
aia-31-ai-modellen-algemene-doeleinden
aia-32-ai-modellen-algemene-doeleinden-systeemrisico
aia-33-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten
aia-34-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging
aia-35-verwerking-in-testomgeving
aia-36-monitoring-na-het-in-de-handel-brengen
aia-37-melding-ernstige-incidenten
aia-38-melding-inbreuk-op-ai-verordening
aia-39-recht-klacht-indienen-bij-ai-bureau
bzk-01 - Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister
arc-01 - Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
aut-01 - Auteursrechten zijn beschermd
avg-01 - Persoonsgegevens worden op een rechtmatige manier verwerkt
avg-02 - Persoonsgegevens worden zo kort mogelijk bewaard
avg-03 - Persoonsgegevens worden zo min mogelijk verwerkt
avg-04 - Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
avg-05 - Persoonsgegevens zijn juist en actueel
avg-06 - Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken
avg-07 - Organisaties zijn transparant over het verwerken van persoonsgegevens
avg-08 - Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
avg-09 - Betrokkenen kunnen een beroep doen op hun privacyrechten
avg-10 - Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
avg-11 - Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-12 - Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
avg-13 - Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
awb-02 - Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
dat-01 - Databanken worden alleen gebruikt met toestemming van de databank-producent
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
grw-02 - Algoritmes discrimineren niet
woo-01 - Iedereen kan openbare informatie over algoritmes vinden of aanvragen
+
+

Bronnen

+ + + +

Risico

+ +

Er kunnen geen controles of inspecties worden uitgevoerd om te beoordelen of de algoritmes van aanbieder nog voldoen aan de vereisten voor een verantwoorde inzet van algoritmes.

+

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-22-invloed-besluitvorming-algoritmes-aanbieders/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-22-invloed-besluitvorming-algoritmes-aanbieders/index.html new file mode 100644 index 0000000000..002a21083e --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-22-invloed-besluitvorming-algoritmes-aanbieders/index.html @@ -0,0 +1,997 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bepaal in een aanbesteding of algoritmes van een aanbieder bepalende invloed hebben in een besluit richting personen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Bepaal in een aanbesteding of algoritmes van een aanbieder bepalende invloed hebben in een besluit richting personen

+ +

owp-22OntwerpProjectleiderBeleid en adviesOntwikkelaarPublieke inkoopTransparantie

+

Maatregel

+

Ga na of algoritmes van een aanbieder een bepalende invloed hebben in een besluit richting personen en laat de aanbieder onderbouwen in hoeverre dit wel of niet het geval is.

+

Toelichting

+
    +
  • +

    Als overheidsorganisaties algoritmes willen gebruiken van aanbieders, dan zal bijvoorbeeld tijdens een aanbestedingsproces moeten worden beoordeeld in hoeverre deze algoritmes invloed hebben op besluitvormingprocessen van deze organisaties. Algoritmes kunnen namelijk gebruikers ondersteunen bij de totstandkoming van besluiten, maar ook de besluitvorming van gebruikers overnemen. De mate van menselijke tussenkomst speelt daarbij een belangrijk rol.

    +
  • +
  • +

    Een opdrachtgever moet zelf bepalen welke algoritmes, gezien de specifieke context, wenselijk en toegestaan zijn. Vervolgens moet worden beoordeeld of de algoritmes die worden aangeboden door aanbieder daarbij aansluiten.

    +
  • +
  • +

    Tijdens het aanbestedingsproces moeten daarom inzichten worden verkregen hoe de algoritmes van aanbieders functioneren om tot een beoordeling te kunnen komen. Laat de aanbieder dit toelichten.

    +
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-10 - Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
+
+

Bronnen

+

Risico

+ +

Algoritmes van aanbieders nemen besluitvormende taken over, zonder dat daar zicht op is of dat dit is beoordeeld.

+

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-23-kennisoverdracht-en-ondersteuning-aanbieder/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-23-kennisoverdracht-en-ondersteuning-aanbieder/index.html new file mode 100644 index 0000000000..c92b064701 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-23-kennisoverdracht-en-ondersteuning-aanbieder/index.html @@ -0,0 +1,988 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Laat de aanbieder aangeven welke mate van opleiding en ondersteuning bij de implementatie nodig is om de beoogde algoritmes verantwoord te gebruiken. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Laat de aanbieder aangeven welke mate van opleiding en ondersteuning bij de implementatie nodig is om de beoogde algoritmes verantwoord te gebruiken.

+ +

owp-23OntwerpProjectleiderBeleid en adviesOntwikkelaarPublieke inkoop

+

Maatregel

+

Laat de aanbieder aangeven welke mate van kennisoverdracht (opleiding en training) en ondersteuning bij de organisatorische implementatie nodig is om de beoogde algoritmes verantwoord te kunnen gebruiken.

+

Toelichting

+

Beoordeel of de kennisoverdracht en ondersteuning van aanbieder voldoende is om voor een langere periode zelfstandig op een verantwoorde wijze gebruikt te kunnen maken van de algoritmes.

+

Laat de aanbieder aangeven op welk niveau de noodzakelijkerwijs te leveren trainingen passend is voor het beoogde gebruik, waarbij de opdrachtgever vooraf inzicht geeft in het bestaande niveau, zodat een aanbieder concreet kan zijn over eventuele verschillen tussen beiden.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
aia-01 - Personeel en gebruikers zijn voldoende AI-geletterd
+
+

Risico

+ +

Zonder kennisoverdracht aan de organisaties en gebruikers, ontstaat het risico's dat algoritmes onjuist worden toegepast of dat de output onjuist wordt geïnterpreteerd en zo fouten ontstaan bij het uitvoeren van overheidstaken.

+

Bronnen

+

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-24-risico-analyse-informatiebeveiliging-leverancier/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-24-risico-analyse-informatiebeveiliging-leverancier/index.html new file mode 100644 index 0000000000..597194a003 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-24-risico-analyse-informatiebeveiliging-leverancier/index.html @@ -0,0 +1,995 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstraject - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstraject

+ +

owp-24OntwerpProjectleiderBeleid en adviesTechnische robuustheid en veiligheidPublieke inkoop

+

Maatregel

+

Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstraject

+

Toelichting

+
    +
  • Stel vast of een aanbieder voldoet aan de Baseline Informatiebeveiliging Overheid.
  • +
  • Bespreek de informatiebeveiligingseisen met aanbieder die verband houden met de beschikbaarheid, integriteit en vertrouwelijkheid van de informatie en de informatiesystemen.
  • +
  • Bepaal of er, gezien de restrisico's, aanvullende beveiligingsmaatregelen (door de aanbieder of opdrachtgever) moeten worden getroffen om deze te beschermen.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
+
+

Bronnen

+ +

Risico

+ +

Er is onvoldoende zicht op risico's op het gebied van informatiebeveiliging als gebruikt wordt gemaakt van algoritmes van aanbieders.

+

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-25-maak-vereisten-onderdeel-van-programma-van-eisen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-25-maak-vereisten-onderdeel-van-programma-van-eisen/index.html new file mode 100644 index 0000000000..c88166cc93 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-25-maak-vereisten-onderdeel-van-programma-van-eisen/index.html @@ -0,0 +1,1000 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak vereisten onderdeel van het programma van eisen bij een aanbesteding - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak vereisten onderdeel van het programma van eisen bij een aanbesteding

+ + +

owp-25OntwerpProjectleiderBeleid en adviesOntwikkelaarPublieke inkoop

+

Maatregel

+ +

Maak vereisten onderdeel van het programma van eisen bij een aanbesteding

+

Toelichting

+ +
    +
  • Door vereisten onderdeel te maken van het programma van eisen bij een aanbesteding, is het voor aanbieders duidelijk aan welke specifieke eisen een oplossing moet voldoen.
  • +
  • Op basis hiervan kan een aanbieder een zo goed mogelijke aanbieding doen.
  • +
  • Afhankelijk van de behoeftestelling kan het relevant zijn om bepaalde vereisten te verfijnen in het Programma van Eisen en aan te geven wanneer hieraan voldaan is, bijvoorbeeld met betrekking tot het transparantievereiste. Bepaal met het inkoopteam bij welke vereisten dit noodzakelijk is.
  • +
+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
aia-02 - Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd
aia-03 - Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
aia-04 - Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-06 - Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie
aia-07 - Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
aia-11 - Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-12 - Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder
aia-13 - Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder
aia-14 - Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure
aia-15 - Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring
aia-16 - Hoog-risico-AI-systemen zijn voorzien van een CE-markering
aia-17 - Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank
aia-18 - Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
aia-19 - Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-20-verstrekken-van-informatie-op-verzoek
aia-21-aantoonbaarheid-vereisten-hoog-risico
aia-28-recht-op-uitleg-ai-besluiten
aia-29 - Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
aia-30-transparantieverplichtingen
aia-31-ai-modellen-algemene-doeleinden
aia-32-ai-modellen-algemene-doeleinden-systeemrisico
aia-33-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten
aia-34-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging
aia-35-verwerking-in-testomgeving
aia-36-monitoring-na-het-in-de-handel-brengen
aia-37-melding-ernstige-incidenten
aia-38-melding-inbreuk-op-ai-verordening
aia-39-recht-klacht-indienen-bij-ai-bureau
bzk-01 - Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister
arc-01 - Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
aut-01 - Auteursrechten zijn beschermd
avg-01 - Persoonsgegevens worden op een rechtmatige manier verwerkt
avg-02 - Persoonsgegevens worden zo kort mogelijk bewaard
avg-03 - Persoonsgegevens worden zo min mogelijk verwerkt
avg-04 - Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
avg-05 - Persoonsgegevens zijn juist en actueel
avg-06 - Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken
avg-07 - Organisaties zijn transparant over het verwerken van persoonsgegevens
avg-08 - Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt
avg-09 - Betrokkenen kunnen een beroep doen op hun privacyrechten
avg-10 - Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
avg-11 - Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
avg-12 - Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
avg-13 - Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
awb-02 - Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
dat-01 - Databanken worden alleen gebruikt met toestemming van de databank-producent
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
grw-02 - Algoritmes discrimineren niet
woo-01 - Iedereen kan openbare informatie over algoritmes vinden of aanvragen
+
+

Risico

+ +

Er is niet gespecificeerd en daarmee achteraf niet afdwingbaar dat algoritmes aan bepaalde vereisten moeten voldoen die van de belangen voor de betreffende overheidsorganisatie.

+

Bronnen

+ + +

Hoe specificeer ik mijn vraag?

+

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-26-maak-vereisten-onderdeel-van-service-level-agreement/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-26-maak-vereisten-onderdeel-van-service-level-agreement/index.html new file mode 100644 index 0000000000..7795f968ff --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-26-maak-vereisten-onderdeel-van-service-level-agreement/index.html @@ -0,0 +1,1006 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak vereisten voor algoritmes onderdeel van de Service Level Agreement - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak vereisten voor algoritmes onderdeel van de Service Level Agreement

+ + +

owp-26OntwerpProjectleiderBeleid en adviesOntwikkelaarPublieke inkoop

+

Maatregel

+ +

Maak de vereiste onderdeel van Service Level Agreement

+

Toelichting

+ +
    +
  • Onderzoek met het inkoopteam het relevant is om vereiste voor een verantwoorde inzet van algoritmes onderdeel te maken van de Service Level Agreement.
  • +
  • Met een SLA kunnen specifieke afspraken worden gemaakt over de kwaliteit van de dienstverlening van aanbieder.
  • +
  • Hierbij kan worden gedacht aan onderwerpen als incidentmanagement, servicemanagement, verantwoordelijkheden matrix, hersteltijd, prestatiecriteria, reproduceerbaarheid, versiebeheer van de gebruikte algoritmes en informatiebeveiliging.
  • +
  • Laat de aanbieder aangeven welke vormen van onderhoud aan de betreffende algoritmes nodig zijn en de snelheid waarmee signalen vanuit gebruik, ongeacht de bron, kunnen worden verwerkt in het systeem en welke expertise hiervoor beschikbaar is.
  • +
+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
avg-12 - Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
aia-37-melding-ernstige-incidenten
aia-07 - Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
aia-01 - Personeel en gebruikers zijn voldoende AI-geletterd
aia-18 - Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
aia-11 - Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-36-monitoring-na-het-in-de-handel-brengen
aia-03 - Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
avg-07 - Organisaties zijn transparant over het verwerken van persoonsgegevens
aia-03 - Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
aia-19 - Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-20-verstrekken-van-informatie-op-verzoek
woo-01 - Iedereen kan openbare informatie over algoritmes vinden of aanvragen
+
+

Risico

+ +

Zonder concrete afspraken te maken in de SLA, ontstaat het risico dat aloritmes (tijdelijk) of te langdurig niet kunnen worden gebruikt, onjuist fuctioneren of dat er geen verantwoording over de output kan worden afgelegd.

+

Bronnen

+ + + +

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-27-contractuele-afspraken-data-en-artefacten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-27-contractuele-afspraken-data-en-artefacten/index.html new file mode 100644 index 0000000000..9a3c79850a --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-27-contractuele-afspraken-data-en-artefacten/index.html @@ -0,0 +1,985 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak (contractuele) afspraken over data en artefacten met een aanbieder - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak (contractuele) afspraken over data en artefacten met een aanbieder

+ +

owp-27OntwerpImplementatieJuristPublieke inkoop

+

Maatregel

+

Maak (contractuele) afspraken met de aanbieder wie eigenaar is van de data en artefacten die ontstaan bij het gebruik van algoritmes.

+

Toelichting

+

Hier kan worden gedacht aan (initiële) trainingsdatasets, outputdata (richting gebruikers) en nieuwe trainingsdata (vanuit gebruikers).

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
aut-01 - Auteursrechten zijn beschermd
dat-01 - Databanken worden alleen gebruikt met toestemming van de databank-producent
+
+

Bronnen

+ + + + + + + + + + + +
Bron
Algoritmekader
+

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-28-pas-vastgestelde-beleidskaders-zijn-nageleefd/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-28-pas-vastgestelde-beleidskaders-zijn-nageleefd/index.html new file mode 100644 index 0000000000..004fa76112 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-28-pas-vastgestelde-beleidskaders-zijn-nageleefd/index.html @@ -0,0 +1,995 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.

+ +

owp-28OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

+

Maatregel

+

Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.

+

Toelichting

+
    +
  • Interne vastgestelde beleidskaders moeten worden toegepast bij het ontwikkelen, inkopen of gebruiken van algoritmes.
  • +
  • Het is van belang dat tijdig, bijvoorbeeld in de probleemanalyse fase, inzichtelijk wordt gemaakt welke interne beleidskaders moeten worden toegepast.
  • +
  • Hierbij kan worden gedacht aan definities die moeten worden gehanteerd, het naleven van inkoopbeleid, strategisch beleid volgen met betrekking tot het mogen inzetten van algoritmes binnen de organisaties of het doorlopen van processen en protocollen die moeten worden toegepast.
  • +
  • Vraag de betrokken experts welke beleidskaders van toepassing zijn vanuit diens specifieke expertise.
  • +
  • Ten behoeve van controles en audits is het van belang dat aantoonbaar wordt gemaakt dat de vastgestelde beleidskaders zijn nageleefd.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
aia-11 - Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-37-melding-ernstige-incidenten
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
avg-11 - Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen
aia-03 - Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
avg-09 - Betrokkenen kunnen een beroep doen op hun privacyrechten
grw-02 - Algoritmes discrimineren niet
aia-19 - Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-20-verstrekken-van-informatie-op-verzoek
+
+

Risico

+

De in te zetten algoritmes voldoen niet aan vastgestelde beleidskaders.

+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-29-informeer_betrokkenen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-29-informeer_betrokkenen/index.html new file mode 100644 index 0000000000..79f8423b52 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-29-informeer_betrokkenen/index.html @@ -0,0 +1,1048 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Stel vast welke betrokkenen geïnformeerd moeten worden en welke informatie zij nodig hebben. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Stel vast welke betrokkenen geïnformeerd moeten worden en welke informatie zij nodig hebben.

+ + +

pba-04OntwerpOntwikkelenProjectleiderBeleid en adviesTransparantie

+

Maatregel

+ +

Stel vast welke betrokkenen geïnformeerd moeten worden over de ontwikkeling en het gebruik van algoritmes en welke informatie zij hierover nodig hebben.

+

Toelichting

+ +

Welke informatie over algoritmes relevant is, verschilt per partij. Het is van belang om deze partijen in beeld te brengen en vast te stellen welke informatie voor hen relevant is. Raadpleeg hierbij vastgestelde beleidskaders, waarin is beschreven welke informatie in welke gevallen moet worden gecommuniceerd.

+

Stel bijvoorbeeld de volgende vragen:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VragenActies die je kan ondernemen
Wie heeft informatie nodig over het ontwikkelen en gebruiken van algoritmes?Stel vast welke betrokken(en) binnen of buiten de organisatie iets over het algoritme wil of zou moeten weten.
Wat voor informatie voor algoritmes heeft deze betrokken partij nodig?Toets dit ook bij vastgesteld beleid. Ga na wat de doelgroep moet weten over de werking of inzet van het algoritme. Bepaal om welk technisch niveau dit gaat.
Op wat voor manier informeer je de betrokken partij?Pas de juiste methodes toe om de doelgroep te informeren.
Wanneer wordt deze informatie gebruikt?Ga na in welke fase van de levenscyclus de gewenste informatie over de werking of inzet van het algoritme wordt gebruikt. Hoe verschilt de informatiebehoefte in elke fase van de levenscyclus?
Wie is er verantwoordelijk voor de informatieverstrekking?Bepaal wie er informatie over het algoritme moet ophalen, en wie er voor die informatie kan zorgen.
+

Maak bij het vaststellen van de informatiebehoefte onderscheid tussen transparantie, uitlegbaarheid en interpreteerbaarheid. Houd daarbij ook rekening met zaken die moeten worden gecommuniceerd. Denk hierbij aan het kunnen uitleggen hoe een automatisch genomen besluit tot stand is gekomen.

+

Stel een communicatieplan op over de ontwikkeling en gebruik van het algoritme. Bepaal vervolgens aan de hand van de levenscyclus wanneer, welke informatie wanneer beschikbaar moet worden gesteld. Stel vast wie verantwoordelijk is voor het opstellen of het leveren van een bijdrage aan deze informatie. In het communicatieplan kunnen verder zaken worden opgenomen als:

+
    +
  • Het doel van het algoritme.
  • +
  • Mogelijkheden van het algoritme.
  • +
  • Beperkingen van het algoritme.
  • +
  • Context waarin het algoritme wordt toegepast.
  • +
  • Wie heeft informatie nodig?
  • +
  • Wat voor informatie heeft deze betrokken partij nodig?
  • +
  • Op wat voor manier informeer je de betrokken partij?
  • +
  • Wanneer wordt deze informatie gebruikt?
  • +
  • Wie is er verantwoordelijk voor de informatieverstrekking?
  • +
  • Hoe en naar wie communiceer je in het geval van een incident?
  • +
  • Wat is de planning voor de communicatieactiviteiten?
  • +
+

Overleg regelmatig met betrokkenen en belanghebbenden in hoeverre de informatieverstrekking aansluit bij de (nieuwe) behoeften.

+

Bijbehorende vereiste(n)

+ + + +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
aia-08-transparantie-aan-gebruikersverantwoordelijken
aia-28-transparantieverplichtingen-richting-natuurlijke-personen
+ +

Bronnen

+ +

Algoritmekader

+

Risico

+ +

Het risico is dat partijen niet of onvolledig worden geïnformeerd over de ontwikkeling en gebruik van algoritmes, en hierdoor hun rechten niet kunnen effectueren of belangen kenbaar kunnen maken.

+

Voorbeeld

+ +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/index.html new file mode 100644 index 0000000000..f098c55ca4 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-30-toepassen_uitlegbaarheidstechnieken/index.html @@ -0,0 +1,1047 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.

+ +

owp-07OntwerpProjectleiderBeleid en adviesOntwikkelaarTransparantie

+

Maatregel

+

Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.

+

Toelichting

+

Uitlegbaarheidstechnieken helpen om de werking van een algoritme transparant te maken. +De keuze voor het type algoritme bepaalt hoe transparant je kunt zijn. Van rekenregels kun je namelijk precies uitleggen hoe deze tot een beslissing komen. Maar complexe AI-systemen kunnen een black box zijn. Het is dan onduidelijk hoe deze systemen beslissingen maken.

+

Afhankelijk van het type algoritme zijn er uitlegbaarheidstechnieken beschikbaar om de werking en keuzes van een algoritme bloot te leggen. Er moet eerst een keuze worden gemaakt welk type algoritme geschikt is gezien de informatiebehoefte. Het is belangrijk om samen met de betrokken partijen vast te leggen welke uitlegbaarheidstechnieken moeten worden toegepast. Bij bronnen kan informatie worden geraadpleegd die helpen bij het vinden van de juiste methodiek.

+

Gebruik uitlegbaarheid bij besluiten

+

Onderzoek hoe uitlegbaarheidstechnieken kunnen bijdragen aan het motiveren van besluiten. Dit kan bijvoorbeeld door:

+
- De output van het algoritme te koppelen aan het zaakdossier, met een toelichting op de interpretatie van die output.
+- De output of een samenvatting hiervan op te nemen in de beschikking.
+
+

Beperkingen en veiligheid

+

Vanuit veiligheidsoverwegingen kan bij specifieke algoritmes besloten worden om bepaalde informatie over de werking van een algoritme niet aan iedereen vrij te geven. Denk hierbij aan de beperkingen die de Wet Open Overheid oplegt. Houd ook rekening met mogelijke risico’s op aanvallen die kunnen ontstaan door het gebruik van uitlegbaarheidstechnieken, zoals omschreven in: A Survey of Privacy-Preserving Model Explanations: Privacy Risks, Attacks, and Countermeasures.

+

Evaluatie en validatie

+

Evalueer de uitlegbaarheid van het systeem op functionele, operationele, bruikbaarheids- en veiligheidsvereisten in samenwerking met betrokkenen zoals gebruikers. Valideer of de uitkomst van het algoritme begrijpelijk genoeg is voor gebruiker om hier op een verantwoorde wijze mee te werken.

+

Bijbehorende vereiste(n)

+
Vereiste
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
aia-28 - Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluiten
awb-02 - Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
+ +

Risico

+

Als er geen rekening wordt gehouden met de uitlegbaarheid van een algoritme binnen een bepaalde context, ontstaat het risico dat de output van het algoritme niet wordt begrepen of verkeerd wordt geïnterpreteerd, wat kan leiden tot onjuist gebruik.

+

Bronnen

+ +

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-genereren-bronvermelding/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-genereren-bronvermelding/index.html new file mode 100644 index 0000000000..e652536713 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-genereren-bronvermelding/index.html @@ -0,0 +1,982 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.

+ +

imp-10OntwerpValidatie en verificatieProjectleiderBeleid en adviesTransparantiePublieke inkoop

+

Maatregel

+

Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.

+

Toelichting

+

Bij het gebruik van generatieve AI/LLM’s is bronvermelding van belang. +Hiermee kan tot op zekere hoogte een beoordeling worden gegeven in hoeverre bij het trainen van het AI-model rechtmatig gebruik is gemaakt van bronnen. +Bronvermelding is daarnaast essentieel om de output van het AI-model inhoudelijk te kunnen controleren, wat ook informatie geeft in hoeverre het AI-model bijvoorbeeld al dan niet hallucineert of manipuleert.

+

Voor het ontwikkelen van een AI-model is bronvermelding noodzakelijk, omdat het voor ontwikkelaars de enige manier is om te kunnen controleren of het model goed werkt. Dit geldt ook voor ontwikkelaars die pre-trained modellen gebruiken.

+

Neem het kunnen generenen van een bronvermelding mee als een 'requirement' voor het te ontwikkelen AI-model in de ontwerpfase of maakt het onderdeel van de behoeftestelling en specificeer deze behoefte in het inkoopproces.

+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
dat-01 - Databanken worden alleen gebruikt met toestemming van de databank-producent
awb-02 - Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
aut-01 - Auteursrechten zijn beschermd
aia-28 - AI-systemen worden zo ontworpen en gebruikt, dat mensen begrijpen wanneer zij met een AI-systeem communiceren en welke content gemaakt is door een AI-systeem
aia-09-menselijke-toezicht
+
+

Bronnen

+ + +

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-toepassen_vastgestelde-beleidskaders/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-toepassen_vastgestelde-beleidskaders/index.html new file mode 100644 index 0000000000..711db22a6b --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/2-owp-31-toepassen_vastgestelde-beleidskaders/index.html @@ -0,0 +1,993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pas vastgestelde beleidskaders toe - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Pas vastgestelde beleidskaders toe

+ +

org-02OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernanceTransparantie

+

Maatregel

+

Pas vastgestelde beleidskaders toe.

+

Toelichting

+
    +
  • Vastgestelde (interne) beleidskaders moeten worden toegepast bij het ontwikkelen, inkopen of gebruiken van algoritmes. Denk aan specifiek beleid voor de inzet van algoritmes.
  • +
  • Het is van belang dat tijdig, bijvoorbeeld in de probleemanalyse fase, inzichtelijk wordt gemaakt welke interne beleidskaders moeten worden toegepast.
  • +
  • Hierbij kan worden gedacht aan definities die moet worden gehanteerd, het naleven van inkoopbeleid, strategisch beleid volgen met betrekking tot het mogen inzetten van algoritmes binnen de organisaties of het doorlopen van processen en protocollen die moeten worden toegepast.
  • +
  • Vraag de betrokken experts welke beleidskaders van toepassing zijn vanuit diens expertise.
  • +
  • Ten behoeve van controles en audits is het van belang dat aantoonbaar wordt gemaakt dat de vastgestelde beleidskaders zijn nageleefd.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
aia-11 - Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-03 - Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
aia-19 - Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
+
+

Risico

+

De in te zetten algoritmes voldoen niet aan vastgestelde beleidskaders.

+

Bronnen

+

Onderzoekskader Algoritmes Auditdienst Rijk, SV.8

+

Voorbeeld

+

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-01-datakwaliteit/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-01-datakwaliteit/index.html new file mode 100644 index 0000000000..aacbefda75 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-01-datakwaliteit/index.html @@ -0,0 +1,1034 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Controleer de datakwaliteit - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Controleer de datakwaliteit

+ +

dat-01Dataverkenning en datapreparatieOntwikkelaarData

+

Maatregel

+

Stel vast of de gebruikte data van voldoende kwaliteit is voor de beoogde toepassing.

+

Toelichting

+
    +
  • +

    Stel functionele eisen voor de datakwaliteit vast en analyseer structureel of er aan deze eisen wordt voldaan.

    +
  • +
  • +

    De kwaliteit van de data die als input voor het algoritme wordt gebruikt is bepalend voor de uitkomsten van het algoritme. Hier wordt soms ook naar gerefereerd als garbage in = garbage out.

    +
  • +
  • Een vraag die gesteld dient te worden: beschrijft de data het fenomeen dat onderzocht dient te worden?
  • +
  • +

    Het Raamwerk gegevenskwaliteit bevat een breed toepasbare set van kwaliteitsdimensies:

    +
      +
    • juistheid
    • +
    • compleetheid
    • +
    • validiteit
    • +
    • consistentie
    • +
    • actualiteit
    • +
    • precisie
    • +
    • plausibiliteit
    • +
    • traceerbaarheid
    • +
    • begrijpelijkheid
    • +
    +

    Deze dimensies zijn aangevuld met kwaliteitsattributen welke gebruikt kunnen worden om de verschillende dimensies meetbaar te maken.

    +
  • +
  • +

    De vraag of de data kwaliteit voldoende is, hangt sterk samen met de vraag of er bias in de onderliggende data zit. Analyseer daarom ook welke bias en aannames er besloten zijn in de onderliggende data. Denk hierbij onder andere aan de volgende vormen van bias:

    + +
  • +
  • +

    Zorg dat je data vindbaar, toegankelijk, interoperabel en herbruikbaar (FAIR) is.

    +
  • +
+
+

Let op!

+

Wanneer je een algoritme inkoopt en de ontwikkeling van het algoritme uitbesteedt aan een derde partij, houdt er dan dan rekening mee dat data traceerbaar en reproduceerbaar moet zijn. Maak hier heldere afspraken over met de aanbieder.

+
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-05 - Persoonsgegevens zijn juist en actueel
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
+
+

Risico

+
    +
  • Door onjuiste beslissingen van gegevens kunnen verkeerde beslissingen genomen worden.
  • +
  • Het model creëert onwenselijke systematische afwijking voor specifieke personen, groepen of andere eenheden. Dit kan leiden tot ongelijke behandeling en discriminerende effecten met eventuele schade voor betrokkenen.
  • +
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/index.html new file mode 100644 index 0000000000..4c977f941c --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-02-fair-data/index.html @@ -0,0 +1,1060 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak waardevolle data vindbaar, toegankelijk, interoperabel en herbruikbaar (FAIR) binnen en buiten de eigen organisatie. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak waardevolle data vindbaar, toegankelijk, interoperabel en herbruikbaar (FAIR) binnen en buiten de eigen organisatie.

+ +

dat-02Dataverkenning en datapreparatieOntwikkelaarData

+

Maatregel

+

Maak waardevolle data vindbaar, toegankelijk, interoperabel en herbruikbaar (FAIR) binnen en buiten de eigen organisatie.

+

Toelichting

+

De internationale FAIR-principes zijn richtlijnen voor de manier van beschrijven, opslag en publicatie van data.

+
    +
  • Findable (vindbaar): Metadata moet gemakkelijk te vinden zijn voor zowel mensen als computers.
  • +
  • Accessible (toegankelijk): Gebruikers moeten weten hoe toegang tot de data verkregen kan worden (autorisatie en authenticatie)
  • +
  • Interoperable (uitwisselbaar): Data moet meestal geïntegreerd worden met andere data en bijbehorden applicaties, opslag en processen.
  • +
  • Reusable (herbruikbaar): Het uiteindelijke doel van FAIR is om hergebruik van data te optimaliseren.
  • +
+

Wanneer je voldoet aan de 15 principes is je data 'machine actionable'. Dit maakt het mogelijk dat de data effectief gebruikt kan worden voor verschillende algoritmes.

+

FAIR data betekent niet per definitie dat data open data is. Juist ook voor (privacy) gevoelige data (gesloten data) kan het heel zinvol zijn om te voldoen aan de principes voor FAIR data, om juist daarmee specifieke geautoriseerde toegang tot gevoelige data mogelijk te kunnen maken.

+

15 principes voor FAIR data

+

Er zijn 15 principes voor FAIR data geformuleerd:

+

Findable (vindbaar)

+ +

Accessible (toegankelijk)

+ +

Interoperable (uitwisselbaar)

+ +

Reusable (herbruikbaar)

+ +

Vereisten

+
+Bekijk alle vereisten +

Geen vereisten beschikbaar voor deze maatregel.

+
+
+

Opmerking

+

Artikel 5b van de Wet hergebruik van overheidsinformatie stelt dat dnderzoeksgegevens in overeenstemming met de FAIR-beginselen actief beschikbaar moeten worden gesteld voor hergebruik door een publiek gefinancierde onderzoeksorganisatie. Dit geldt voor zover:

+
    +
  1. die documenten zijn geproduceerd in het kader van geheel of gedeeltelijk met overheidsmiddelen gefinancierde wetenschappelijke onderzoeksactiviteiten;
  2. +
  3. die documenten openbaar zijn gemaakt via een institutionele of thematische databank als bedoeld in artikel 10, tweede lid, van de richtlijn; en
  4. +
  5. rechtmatige handelsbelangen, activiteiten inzake kennisoverdracht en reeds bestaande intellectuele eigendomsrechten zich hiertegen niet verzetten.
  6. +
+
+

Bronnen

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-04-bewaartermijnen-persoonsgegevens/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-04-bewaartermijnen-persoonsgegevens/index.html new file mode 100644 index 0000000000..6401d13425 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-04-bewaartermijnen-persoonsgegevens/index.html @@ -0,0 +1,985 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure

+ +

dat-04OntwikkelenMonitoring en beheerJuristProjectleiderTechnische robuustheid en veiligheidPrivacy en gegevensbescherming

+

Maatregel

+

Bepaal de bewaartermijnen en richt een vernietigingsprocesdure in voor de verwerkte (persoons)gegevens.

+

Toelichting

+
    +
  • (Persoons)gegevens die het algoritme verwerkt worden niet langer bewaard dan voor de verwezenlijking van de +verwerkingsdoeleinden noodzakelijk is.
  • +
  • Beschrijf de bewaartermijnen voor de gegevens, bijvoorbeeld in een DPIA.
  • +
  • Beschrijf hoe de (persoons)gegeven moeten worden vernietigd.
  • +
  • Zorg ervoor dat de vereisten met betrekking tot bewaartermijnen correct zijn of worden vertaald naar het algoritme en de onderliggende (zaak)systemen.
  • +
  • Controleer of deze maatregelen voor de bewaartermijnen en vernietiging van de (persoons)gegevens (in de onderliggende systemen) zijn getroffen en zorg dat dit aantoonbaar is, bijvoorbeeld met logbestanden.
  • +
  • Maak aantoonbaar dat persoonsgegevens zijn vernietigd, bijvoorbeeld met logbestanden.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
arc-01 - Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet
aia-12 - Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder
avg-02 - Persoonsgegevens worden zo kort mogelijk bewaard
+
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-05-pseudonimiseren-anonimiseren/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-05-pseudonimiseren-anonimiseren/index.html new file mode 100644 index 0000000000..6280d57574 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-05-pseudonimiseren-anonimiseren/index.html @@ -0,0 +1,982 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bescherm persoonsgegevens door data te anonimiseren, pseudonimiseren of te aggregeren - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Bescherm persoonsgegevens door data te anonimiseren, pseudonimiseren of te aggregeren

+ +

dat-05Dataverkenning en datapreparatieOntwikkelenOntwikkelaarJuristPrivacy en gegevensbescherming

+

Maatregel

+

Pas maatregelen toe als pseudonimiseren, anonimisering of aggregeren van persoonsgegevens toe bij het verwerken van de data.

+

Toelichting

+
    +
  • Als is vastgesteld welke persoonsgegevens mogen worden verwerkt voor het ontwikkelen en gebruiken van algoritmes, moet worden nagegaan of er maatregelen kunnen worden getroffen om deze te beschermen.
  • +
  • Het algoritme verwerkt niet meer persoonsgegevens dan noodzakelijk; de verwerkte gegevens zijn proportioneel en substantieel.
  • +
  • Hierbij kan worden gedacht aan het pseudonomiseren, anonimiseren of aggregeren van persoonsgegevens.
  • +
  • Het bepalen of persoonsgegevens mogen worden verwerkt voor algoritmes moet worden bekeken in samenhang met maatregelen die kunnen worden getroffen om deze gegevens te beschermen.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-03 - Persoonsgegevens worden zo min mogelijk verwerkt
avg-12 - Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
+
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-06-schending-auteursrechten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-06-schending-auteursrechten/index.html new file mode 100644 index 0000000000..5f8cf19d2e --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-06-schending-auteursrechten/index.html @@ -0,0 +1,976 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Controleer de auteursrechten van eigen data - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Controleer de auteursrechten van eigen data

+ +

dat-06OntwerpDataverkenning en datapreparatieJuristData

+

Maatregel

+

Controleer of eventueel door de eigen organisatie verstrekte data binnen of buiten auteursrechten vallen. +Bij voorkeur blijven de data eigendom van de (verstrekkende) overheidsorganisatie.

+

Toelichting

+

Het is van belang om te controleren of de te verwerken data waar overheidsorganisaties zelf over beschikken rechtmatig zijn verkregen en geen inbreuken maken op auteursrechten. +Hier kan worden gedacht aan data die is gescraped van het internet en zou kunnen worden gebruikt voor de ontwikkeling van een algoritme.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
aut-01 - Auteursrechten zijn beschermd
+
+

Bronnen

+

Algoritmekader

+

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-duurzame-datacenters/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-duurzame-datacenters/index.html new file mode 100644 index 0000000000..57d197d697 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-duurzame-datacenters/index.html @@ -0,0 +1,1004 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gebruik duurzame datacenters - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Gebruik duurzame datacenters

+ + +

dat-07OntwerpDataverkenning en datapreparatieOntwikkelenImplementatieMonitoring en beheerOntwikkelaarProjectleiderBeleid en adviesDuurzaamheid

+

Maatregel

+

Maak gebruik van datacenters die gebruikmaken van duurzame energiebronnen en energie-efficiënte technologieën voor de opslag en verwerking van data.

+

Toelichting

+

Door data op te slaan en algoritmes te laten draaien in datacenters die hernieuwbare energiebronnen inzetten en bijvoorbeeld de ontstane restwarmte recyclen, kun je de ecologische voetafdruk van de algoritmes aanzienlijk verkleinen. +Datacenters die zich op duurzaamheid richten, verlagen de CO₂-uitstoot van hun infrastructuur en bieden mogelijk duurzaamheidsrapportages. Let bij het kiezen van een aanbieder op mogelijke greenwashing; dit gebeurt wanneer bedrijven beweren groen te zijn zonder dit met concrete maatregelen te onderbouwen.

+

Technologieën voor energie-efficiënte datacenters

+

Om datacenters energie-efficiënt te maken, zijn er verschillende benaderingen:

+
    +
  • Gebruik van groene energiebronnen: Kies voor datacenters/aanbieders die hernieuwbare energie gebruiken. Maak bijvoorbeeld afspraken over een doel, zoals een DCie-score van minimaal 50%, gewogen over een heel jaar. De DCie score van elk Overheids Datacenter (ODC) kun je hier bekijken. +Je kunt ook kijken of naast duurzame stroom ook restwarmte van servers wordt benut om bijvoorbeeld nabijgelegen gebouwen te verwarmen.
  • +
  • Koeling en energiebeheer optimaliseren: Adiabatische koeling, waarbij water en lucht worden gebruikt in plaats van elektriciteit, verlaagt het energieverbruik. Efficiënte stroomverdeling en warmteterugwinning dragen verder bij aan een lagere ecologische voetafdruk.
  • +
  • Monitoren: Blijf controleren op duurzame prestaties door te letten op certificeringen, zoals ISO 14001, ISO 50001 en BREEAM, en vraag naar energierapportages en details over het energieverbruik en de herkomst van stroom. Dit helpt om claims van duurzaamheid te toetsen en te voorkomen dat je in greenwashing trapt.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +

Geen vereisten beschikbaar voor deze maatregel.

+
+

Risico

+

Door geen gebruik te maken van duurzame datacenters, loop je het risico op een hogere CO₂-uitstoot, en wordt daardoor niet aangesloten bij Rijksbreed beleid. Ook loop je risico op hogere energiekosten.

+

Bronnen

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-training-validatie-en-testdata/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-training-validatie-en-testdata/index.html new file mode 100644 index 0000000000..c8dcff2e44 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-07-training-validatie-en-testdata/index.html @@ -0,0 +1,1053 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gebruik bij machine learning technieken gescheiden train-, test- en validatiedata en houdt rekening met underfitting en overfitting. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Gebruik bij machine learning technieken gescheiden train-, test- en validatiedata en houdt rekening met underfitting en overfitting.

+ +

dat-07Dataverkenning en datapreparatieOntwikkelenOntwikkelaarDataTechnische robuustheid en veiligheidBias en non discriminatie

+

Maatregel

+

Indien je gebruik maakt van machine learning technieken, maak een passende keuze voor gescheiden train-, test- en validatiedata en houd hierbij rekening met underfitting en overfitting.

+

Toelichting

+

Verdeel je dataset in drie delen:

+
    +
  1. +

    de trainingsset

    +

    Deze dataset wordt gebruikt om het model te trainen. Uit deze dataset worden de onderliggende patronen of relaties geleerd die later gebruikt kunnen worden om voorspellingen mee te doen.

    +

    De kwaliteit van deze dataset moet goed zijn en zo representatief mogelijk voor de doelpopulatie. Eventuele bias of vooroordelen in deze dataset kan door het trainen in het model sluipen.

    +
  2. +
+

Let bij het samenstellen van de traningsset op dat de data waarop het model gebaseerd is, niet beschikbaar zijn voordat de uitkomsten zijn geobserveerd. Met andere woorden, zorg ervoor de de voorspellingen geen onderdeel kunnen zijn van de inputvariabelen.

+
    +
  1. +

    de validatieset

    +

    De validatieset fungeert als een onafhankelijke, onbevooroordeelde dataset voor het vergelijken van de prestaties van verschillende algoritmes die zijn getraind op onze trainingsset.

    +

    Verschillende modellen kunnen getraind worden op de trainingsdataset. Zo kan je bijvoorbeeld variëren in de (hyper)parameters of de inputvariabelen. Dit leidt tot verschillende varianten van het model. Om de prestaties van de verschillende modellen te vergelijken, moeten we een nieuwe dataset gebruiken: de validatieset. Zou je hiervoor de trainingsdataset gebruiken, kan dat leiden tot overfitting, wanneer het model dan te specifiek afgestemd is op 1 dataset. Het model kan dan niet voldoende generaliseren voor nieuwe situaties.

    +
  2. +
  3. +

    de testset

    +

    Nadat er met behulp van de validatieset een keuze is gemaakt voor een passend model en bijbehorende (hyper)parameters, moet je het model nog testen op nieuwe data. Dit geeft een beeld van de werkelijke prestaties van het model in nieuwe omstandigheden.

    +

    Let op dat je pas naar deze resultaten kijkt als laatste stap. Inzichten uit deze testdataset mogen niet worden meegenomen in de ontwikkeling, omdat dit kan leiden tot overfitting. Het model zal dan in productie mogelijk minder goed presteren.

    +
  4. +
+

Grootte van de drie datasets

+

Er is geen optimale verdeling van de drie datsets. Veelvoorkomende verhoudingen om je data in te splitten zijn:

+
    +
  • 80% trainingsset, 10% validatieset, 10% testset
  • +
  • 70% trainingsset, 15% validatieset, 15% testset
  • +
  • 60% trainingsset, 20% validatieset, 20% testset
  • +
+

Afhankelijk van de hoeveelheid beschikbare data en de context maak je hierin een keuze. Houdt hierbij rekening met:

+
    +
  • Hoe minder trainingdata, hoe groter de variantie van het model tijdens het trainen. De patronen en relaties die ontdekt zijn, bevatten dan een grotere onzekerheid.
  • +
  • Hoe minder validatie- en testdata je gebruikt, hoe grote de variantie en de onzekerheid in de verwachte prestaties van het algoritme.
  • +
  • Hoe complexer het model, en hoe meer (hyper)parameters er zijn om te optimaliserne, hoe groter de validatieset moet zijn om het model met optimale presetaties te vinden. Wanneer er weinig hyperparameters zijn, is een relatief kleine validatieset vaak voldoende.
  • +
+

k-fold cross validation

+

Naast dat je de datasets willekeurig kan verdelen in drie delen (aselect), kan je ook meer geavanceerde technieken gebruiken. Een robuuste en veelgebruikte techniek is k-fold cross validation, waarbij het model k keer wordt getraind op verschillende delen van de data.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
+
+

Risico

+

Door onjuiste training van het model presteert het model in de praktijk minder goed dan bij de tests. Als trainings-, validatie- en testdata door elkaar lopen ("data leakage"), kan dit leiden tot overfitting, waardoor het model beter lijkt te presteren dan in werkelijkheid het geval is.

+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-08-eigenaarschap-data/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-08-eigenaarschap-data/index.html new file mode 100644 index 0000000000..06ca5f912b --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-08-eigenaarschap-data/index.html @@ -0,0 +1,997 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Zorg dat je controle of eigenaarschap hebt over de data - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Zorg dat je controle of eigenaarschap hebt over de data

+ +

dat-08Dataverkenning en datapreparatieProjectleiderDataPublieke inkoop

+

Maatregel

+

De organisatie heeft volledige controle of eigenaarschap over de data. Wanneer dit niet mogelijk is, zijn afspraken gemaakt om de functionele eisen te waarborgen.

+

Toelichting

+

Wanneer een algoritme ontwikkeld of ingekocht wordt, is het belangrijk om toegang tot de gebruikte data goed te regelen. +Maak bijvoorbeeld afspraken over wie ervoor zorgt dat de data:

+
    +
  • op een centrale plek beschikbaar wordt gesteld
  • +
  • van voldoende kwaliteit is
  • +
  • goed beveiligd is
  • +
+

Wanneer een algoritme wordt ontwikkeld door een derde partij en dus niet wordt beheerd door de eigen organisatie, maak je duidelijke afspraken over eigenaarschap van de data. Dat geldt zowel voor de inputdata als de outputdata. +Zorg dat de inputdata tot je beschikking blijft, zodat resultaten altijd reproduceerbaar zijn.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
dat-01 - Databanken worden alleen gebruikt met toestemming van de databank-producent
aut-01 - Auteursrechten zijn beschermd
+
+

Risico

+

De organisatie is afhankelijk voor de data of het model afhankelijk van derden en kan daardoor reproduceerbaarheid en prestatie niet garanderen.

+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-09-dataminimalisatie/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-09-dataminimalisatie/index.html new file mode 100644 index 0000000000..8cb956d8b3 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/3-dat-09-dataminimalisatie/index.html @@ -0,0 +1,1003 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beperk de omvang van datasets voor energie-efficiëntie - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Beperk de omvang van datasets voor energie-efficiëntie

+ + +

dat-09Dataverkenning en datapreparatieOntwikkelenOntwikkelaarProjectleiderDataDuurzaamheid

+

Maatregel

+

Houd datasets beperkt tot het noodzakelijke en voldoende specifiek om onnodige energieconsumptie te voorkomen tijdens de verwerking en opslag van data voor algoritmes. We noemen dit ook wel dataminimalisatie.

+

Toelichting

+

Hoe meer je bewaart, hoe meer ruimte dat kost om op te slaan. Bovendien verbruikt elk apparaat dat nodig is om data op te slaan stroom. Dat heeft grote invloed op de CO₂-uitstoot van een datacentrum. +Grote datasets brengen daarom hoge energie- en opslagkosten met zich mee. Door de dataset bewust te beperken tot relevante gegevens, kun je ook de energie-efficiëntie van algoritmes aanzienlijk verbeteren. Vooral bij de ontwikkeling van AI-systemen kan het verminderen van data bijdragen aan lagere energiebehoeften en CO₂-uitstoot.

+

Technieken voor dataminimalisatie

+
    +
  • Slimme selectie van trainingsdata: Gebruik methoden die irrelevante data uit de dataset filteren, zoals dataselectie-algoritmes en sampling-technieken. Door te focussen op relevante data, beperk je de omvang zonder de prestaties van het model te beïnvloeden.
  • +
  • Verwijderen van redundante en dubbele data: Deduplicatie van data minimaliseert onnodige verwerkingskracht. Door alleen unieke en relevante gegevens op te slaan, wordt de opslagbehoefte verder beperkt.
  • +
  • Opschonen en archiveren van verouderde data: Regelmatige archivering of verwijdering van verouderde data in je dataset zorgt voor een verminderde voetafdruk en verhoogt ook de efficiëntie.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +

Geen vereisten beschikbaar voor deze maatregel.

+
+

Risico

+

Zonder dataminimalisatie loopt je organisatie het risico op onnodig hoge energie- en opslagkosten, en een grotere ecologische impact.

+

Bronnen

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-01-security-by-design/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-01-security-by-design/index.html new file mode 100644 index 0000000000..ec24eb1d98 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-01-security-by-design/index.html @@ -0,0 +1,994 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ontwerp en ontwikkel het algoritme volgens de principes van ‘security by design’ - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Ontwerp en ontwikkel het algoritme volgens de principes van ‘security by design’

+ +

owk-01OntwikkelenProjectleiderOntwikkelaarTechnische robuustheid en veiligheid

+

Maatregel

+

Hanteer principes van ‘security by design’ (informatiebeveiligingsmaatregelen) als uitgangspunten bij de ontwikkeling van het algoritme. +Stel vast welke principes horen bij security by design en welke relevant zijn voor het ontwerp of de ontwikkeling van het algoritme. +Mogelijke documenten waarin deze principes kunnen worden opgenomen, zijn het security beleid, of ontwikkelbeleid. Bij het bepalen en vaststellen van de juiste principes kunnen interviews met de ontwikkelaar en software-architecten helpen.

+

Toelichting

+

Security by design is gehanteerd en terug te zien als uitgangspunt. (BIO 14.2.1.1)

+

Security by design benadrukt het belang van het in een vroeg stadium integreren van securitymaatregelen. Op die manier kan worden voldaan aan regelgeving, maar wordt de weerbaarheid tegen bijvoorbeeld cyberaanvallen verhoogd. In een vroeg stadium nadenken over security betekent dat vroeg al de benodigde expertise wordt betrokken, zoals een security-officer.

+

Risico

+

Wanneer tijdens het ontwerp en de inrichting van het algoritmisch systeem niet voldoende rekening wordt gehouden met vastgestelde security-by-design principes kan dit leiden tot een onvoldoende veilige (software-)omgeving. Dit kan tot gevolg hebben: oneigenlijke toegang, wijzigingen of vernietigingen van het algoritme, de data of uitkomsten van het algoritme.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
avg-12 - Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
aia-07 - Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
+
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-02-stopzetten-gebruik/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-02-stopzetten-gebruik/index.html new file mode 100644 index 0000000000..001f46e564 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-02-stopzetten-gebruik/index.html @@ -0,0 +1,1007 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak een noodplan voor het stoppen van het algoritme - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak een noodplan voor het stoppen van het algoritme

+ + +

owk-02OntwikkelenImplementatieProjectleiderOntwikkelaarGovernanceMenselijke controle

+

Maatregel

+ +

Tref (technische) maatregelen waarmee het gebruik van het algoritme kan worden stopgezet.

+

Toelichting

+ +
    +
  • Er moet in een proces zijn beschreven wanneer en hoe het gebruik van algoritmes moet worden stopgezet.
  • +
  • Het is van belang dat bij het ontwerp van algoritmes er rekening wordt gehouden met dat het werkproces ook zonder het algoritme kan worden uitgevoerd.
  • +
  • In het geval van risicoselectie kan er bijvoorbeeld worden teruggevallen op het enkel uitvoeren van een aselecte steekproef als selectieinstrument.
  • +
  • Als blijkt dat het algoritme ongewenst functioneert, dan moeten (technische) maatregelen zijn getroffen waarmee het gebruik daadwerkelijk kan worden stopgezet. Denk hierbij aan een stopknop en werkinstructies hoe het gebruik kan worden beëindigd.
  • +
  • Maak aantoonbaar dat deze maatregelen zijn getroffen.
  • +
  • De proceseigenaar of een menselijk toezichthouder moet in staat zijn om het algoritme op elk moment te kunnen beëindigen.
  • +
  • Het stopzetten van het gebruik van een algoritme mag niet tot gevolg hebben dat betrokkenen niet meer kunnen achterhalen hoe besluiten tot stand zijn gekomen of dat gevolgen niet meer kunnen worden gecorrigeerd als dat noodzakelijk is.
  • +
+

Risico

+

Betrokkenen of belanghebbenden kunnen nadelige gevolgen ondervinden van een algoritme dat onjuist functioneert en niet tijdig kan worden stopgezet.

+

Bijbehorende vereiste(n)

+ +
+Bekijk alle vereisten +
Vereiste
aia-18 - Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
aia-11 - Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
aia-29 - Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
grw-02 - Algoritmes discrimineren niet
aia-19 - Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
avg-04 - Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair
aia-22 - De werking van hoog-risico-AI-systemen wordt gemonitord
+
+

Bronnen

+ + + +

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-03-privacyrisico/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-03-privacyrisico/index.html new file mode 100644 index 0000000000..ccabd8d7ef --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-03-privacyrisico/index.html @@ -0,0 +1,1000 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Analyseer de privacy-risico’s en neem maatregelen om deze risico’s laag te houden - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Analyseer de privacy-risico’s en neem maatregelen om deze risico’s laag te houden

+ +

owk-03OntwerpOntwikkelenMonitoring en beheerProjectleiderJuristPrivacy en gegevensbescherming

+

Maatregel

+

Uitvoeren risicoanalyse en formuleren mitigerende maatregelen voor privacyrisico.

+

Toelichting

+
    +
  • Verifieer of een DPIA is uitgevoerd over het werkproces dat wordt of zal worden ondersteund met een algoritme. Zo nee, voer een risico analyse (DPIA) uit om de risico's voor de rechten en vrijheden van betrokkenen met de inzet van algoritmes in beeld te brengen.
  • +
  • Organisatorische en technische maatregelen moeten worden getroffen om persoonsgegevens bij de ontwikkeling en het gebruik van het algoritme te beschermen.
  • +
  • Beleg de mitigerende maatregelen bij betrokken actoren. Denk bijvoorbeeld aan het toekennen van de maatregelen als anonimiseren en pseudonimiseren van persoonsgegevens aan een data engineer, voordat deze kunnen worden gebruikt ten behoeve van het ontwikkelen of controleren van het algoritme.
  • +
  • Bepaal welke maatregelen moeten zijn gerealiseerd voordat mag worden gestart met de verwerking van de persoonsgegevens en welke moeten worden gemonitord.
  • +
  • Monitor de voortgang op het realiseren van de maatregelen en zorg voor bewijsstuken als deze zijn gerealiseerd. Deze bewijsstukken kunnen onderdeel worden van een audit.
  • +
  • Als er een noodzaak is om na verloop van tijd meer persoonsgegevens te verwerken of om andere verwerkingen uit te voeren, zal opnieuw een beoordeling moeten plaatsvinden of er privacyrisico's ontstaan en hoe deze kunnen worden gemitigeerd. Gedurende de levenscyclus van het algoritme moet aandacht blijven voor het uitvoeren van de risicoanalyse voor privacyrisico's.
  • +
  • Bij hoge risico's voor het verwerken van persoonsgegevens is een voorafgaande raadpleging bij de Autoriteit Persoonsgegevens onder artikel 36 AVG verplicht. Bepaal of raadpleging noodzakelijk is.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-13 - Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen
+
+

Risico

+

Privacyrisico's met de inzet van algoritmes worden niet gemitigeerd, waardoor privacyrechten van betrokkenen worden geschonden.

+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-04-logging/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-04-logging/index.html new file mode 100644 index 0000000000..eead7ee5ce --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-04-logging/index.html @@ -0,0 +1,1002 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak logbestanden waarin staat wie wanneer toegang had tot de data en de code - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak logbestanden waarin staat wie wanneer toegang had tot de data en de code

+ +

owk-04OntwikkelenMonitoring en beheerOntwikkelaarTechnische robuustheid en veiligheid

+

Maatregel

+

Zorg ervoor dat logbestanden worden gecreëerd waarin informatie wordt geregistreerd over gebruikersactiviteiten, uitzonderingen en informatiebeveiligingsgebeurtenissen. +Door goede logging is te achterhalen wanneer en door wie er toegang is geweest tot code en data (audit trail). +Er kan loginformatie gegenereerd, bewaard, toegankelijk gemaakt en gemonitord worden. Logbestanden bevatten vaak gebeurtenissen die gebruikersactiviteiten, uitzonderingen en informatiebeveiligingsgebeurtenissen registreren. +Bedenk wat deze informatie betekent in de context van de werking van het algoritme.

+

Toelichting

+
    +
  • Met logbestanden is te achterhalen wanneer en door wie er (ongewenste) aanpassingen zijn gedaan (audit trail).
  • +
  • Loginformatie moet worden gegenereerd, bewaard, gemonitord en toegankelijk worden gemaakt.
  • +
  • Logbestanden bevatten vaak gebeurtenissen die gebruikersactiviteiten, uitzonderingen en informatiebeveiligingsgebeurtenissen registreren.
  • +
  • Bedenk wat deze informatie betekent in de context van de werking van het algoritme. loginformatie gegenereerd, bewaard, toegankelijk gemaakt en gemonitord worden. Logbestanden bevatten vaak gebeurtenissen die gebruikersactiviteiten, uitzonderingen en informatiebeveiligingsgebeurtenissen registreren.
  • +
  • Stel vast welke informatie bij het ontwikkelen en gebruiken van algoritmes relevant is om te loggen.
  • +
  • Log behalve het aanpassen van gegevens ook het uitlezen van gegevens waar dat relevant is. Bijvoorbeeld als persoonsgegevens worden opgevraagd.
  • +
  • Logs dienen periodiek (of doorlopend) gecontroleerd to worden op relevante incidenten. Dat betekent dat wat er gelogd wordt geschikt moet zijn om relevante beveiligingsincidenten op te merken.
  • +
+

Risico

+

Wanneer loginformatie ontbreekt, is niet te achterhalen wanneer er (eventueel ongewenste) aanpassingen zijn gedaan (audit trail) op (de code van) het algoritme, of door wie.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
aia-07 - Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens
aia-13 - Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder
+
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-05-energiezuinige-programmeermethoden/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-05-energiezuinige-programmeermethoden/index.html new file mode 100644 index 0000000000..0ea41e85bd --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-05-energiezuinige-programmeermethoden/index.html @@ -0,0 +1,1028 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Kies energiezuinige programmeermethoden - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Kies energiezuinige programmeermethoden

+ + +

owk-05OntwikkelenOntwikkelaarDuurzaamheid

+

Maatregel

+

Gebruik energie-efficiënte programmeertechnieken en methoden die de benodigde rekenkracht minimaliseren.

+

Toelichting

+

Energiezuinig programmeren maakt het mogelijk om de voetafdruk van algoritmes te verkleinen door minder energie en middelen te verbruiken. Door specifieke technieken toe te passen, zoals optimalisatie van processen en efficiënte geheugenbeheerstrategieën, kun je als ontwikkelaar bijdragen aan het verduurzamen van algoritmes.

+

Technieken voor energiezuinige softwareontwikkeling

+
    +
  1. +

    Lean coding en minimalisatie van code bloat
    + Lean coding richt zich op het gebruik van alleen de benodigde code zonder overbodige complexiteit of libraries, wat resulteert in lagere energieconsumptie. Door “code bloat” te vermijden, zorg je ervoor dat het algoritme minder verwerkingskracht en geheugen verbruikt.

    +
  2. +
  3. +

    Gebruik van energiezuinige programmeertalen en frameworks
    + Programmeren in talen zoals Rust, Go en Elixir draagt bij aan energie-efficiëntie doordat deze ontworpen zijn voor lage resource-omvang en hoge efficiëntie. Ook frameworks die lichtgewicht en modulair zijn, ondersteunen energiezuinige processen.

    +
  4. +
  5. +

    Parallel processing en multi-core optimalisaties
    + Door parallelle verwerking en multi-core optimalisaties toe te passen, wordt rekenwerk verdeeld over meerdere cores. Dit reduceert de totale verwerkingstijd, bespaart energie en verhoogt de prestaties van je code op het vlak van duurzaamheid.

    +
  6. +
  7. +

    Microservices en modulaire architecturen
    + Een modulaire architectuur, zoals microservices, zorgt ervoor dat je onderdelen van de applicatie alleen activeert wanneer dat nodig is. Dit voorkomt onnodige belasting en beperkt energieverbruik behoorlijk.

    +
  8. +
  9. +

    Geoptimaliseerd geheugenbeheer
    + Door efficiënt geheugenbeheer, zoals caching en lazy loading, voorkom je onnodige data-opslag en bewerkingen. Dit verlaagt de energievraag en verbetert de snelheid van het algoritme aanzienlijk.

    +
  10. +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
+

Geen vereisten beschikbaar voor deze maatregel.

+ +

Risico

+

Zonder energie-efficiënte methoden kan het algoritme onnodig veel energie verbruiken, wat leidt tot hogere operationele kosten en een grotere milieu-impact.

+

Bronnen

+

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-06-optimaliseer-AI-training/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-06-optimaliseer-AI-training/index.html new file mode 100644 index 0000000000..1ff1d2e868 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/4-owk-06-optimaliseer-AI-training/index.html @@ -0,0 +1,1027 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Optimaliseer AI-trainingsprocessen voor energie-efficiëntie - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Optimaliseer AI-trainingsprocessen voor energie-efficiëntie

+ + +

owk-06OntwikkelenOntwikkelaarDuurzaamheid

+

Maatregel

+

Streef naar energiezuinige methoden voor AI-training, zoals het beperken van trainingscycli en het gebruik van energie-efficiënte hardware.

+

Toelichting

+

Het trainen van AI, vooral generatieve AI-modellen, vergt aanzienlijke energie en heeft daardoor een grote ecologische voetafdruk. Een enkele trainingsronde kan al een enorme hoeveelheid CO₂ uitstoten. Door enkele concrete methoden toe te passen, kun je deze impact beperken.

+

Energie-optimalisatie door hardwarekeuze en serverbeheer

+
    +
  • Gebruik energie-efficiënte hardware zoals specifiek afgestemde GPU's, die geschikt zijn voor de trainingsbehoeften van het model. Door bijvoorbeeld te kiezen voor GPU’s die optimaal bij je model passen in plaats van de krachtigste beschikbare hardware, kan het energieverbruik drastisch worden verminderd. Houd hiermee rekening in je keuze voor een trainingsomgeving.
  • +
  • Verder kan servergebruik geoptimaliseerd worden door onnodige trainingsomgevingen tijdig te stoppen of voor andere trainingsomgevingen of testomgevingen te kiezen. Ook kun je servers dynamisch schalen met tools zoals Kubernetes of autoscaling technologie.
  • +
+

Slimme data- en trainingsoptimalisatie

+

Niet alle beschikbare data dragen bij aan de modelprestaties. Door een dataselectiestrategie toe te passen, gebruik je enkel relevante datasets (dataminimalisatie), wat zorgt voor minder intensieve rekenbelasting tijdens het trainingsproces. Daarnaast kan slimme caching helpen om repetitieve data-opvragingen te beperken, wat bijdraagt aan een lagere energievraag. Bovendien kun je hertrainingscycli van AI beperken door enkel updates te doen wanneer nieuwe data dit echt vereist. Dit voorkomt overbodige trainingscycli en bespaart energie.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +

Geen vereisten beschikbaar voor deze maatregel.

+
+

Risico

+

Zonder energie-efficiënte methoden kan AI-training leiden tot hoge operationele kosten en een aanzienlijke ecologische impact, met name door overmatig gebruik van rekenkracht en energie-intensieve hardware.

+

Bronnen

+ +

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/5-ver-01-functioneren-in-lijn-met-doeleinden/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/5-ver-01-functioneren-in-lijn-met-doeleinden/index.html new file mode 100644 index 0000000000..3a99cb8288 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/5-ver-01-functioneren-in-lijn-met-doeleinden/index.html @@ -0,0 +1,1000 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Controleer regelmatig of het algoritme werkt zoals het bedoeld is - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Controleer regelmatig of het algoritme werkt zoals het bedoeld is

+ +

ver-01OntwikkelenVerificatie en validatieMonitoring en beheerProjectleiderOntwikkelaarTechnische robuustheid en veiligheidBias en non discriminatie

+

Maatregel

+

Stel vast dat het algoritme voortdurend functioneert in lijn met de vastgestelde doelstelling.

+

Toelichting

+
    +
  • Vertaal de vastgestelde doelstelling naar functionele eisen voor het algoritme. Werk het vastgestelde doel uit in een beschrijving in logische taal/pseudo code of documentatie die handvatten biedt aan de ontwikkelaar.
  • +
  • Monitor de mate waarin aan deze eisen wordt voldaan door het algoritme.
  • +
  • Bepaal en leg vast hoe eventuele parameters, business rules en indicatoren bepaald worden. Zorg dat dit breed wordt afgestemd in de organisatie (ontwikkelteam, opdrachtgevers en beheer).
  • +
  • Houd hier rekening met eventuele (statistische) bias: meten we daadwerkelijk wat we denken te meten?
  • +
  • Wanneer het algoritme meerdere doelen dient, is het belangrijk ook te evalueren op meerdere functionele eisen.
  • +
  • Wanneer er sprake is van een (handmatige) behandeling, bepaal dan wanneer deze behandeling als 'succesvol' gezien kan worden.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
+
+

Risico

+

Het algoritme functioneert niet in lijn met geformuleerde doelstellingen.

+ + +

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/index.html new file mode 100644 index 0000000000..f8d0635f8e --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/5-ver-02-biasanalyse/index.html @@ -0,0 +1,1176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Toets het algoritme op bias - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Toets het algoritme op bias

+ +

ver-01OntwerpVerificatie en validatieMonitoring en beheerProjectleiderBeleid en adviesOntwikkelaarJuristBias en non discriminatie

+

Maatregel

+

Analyseer of het gebruik van het algoritme of het proces daaromheen leidt tot onwenselijke of onrechtmatige verschillen in de behandeling van individuen en/of groepen.

+

Toelichting

+

Het uitvoeren van een analyse over onwenselijke of onrechtmatige verschillen bestaat grofweg uit 3 stappen:

+
    +
  • Stap 1: Analyseer of er sprake is van bias: systematisch verschil in behandeling van bepaalde objecten, mensen of groepen in vergelijking met anderen.
  • +
  • Stap 2: Voer een rechtvaardigingstoets uit om te bepalen of het geconstateerde verschil uit stap 1 te rechtvaardigen is.
  • +
  • Stap 3: Voer een ethische wenselijkheidstoets uit om te bepalen of het geconstateerde verschil uit stap 1 ethisch wenselijk is.
  • +
+

Voor alle stappen geldt dat het belangrijk is om de gemaakte keuzes en afwegingen zorgvuldig te onderbouwen en te documenteren. De 3 stappen worden hieronder verder toegelicht.

+
+

Opmerking

+

Deze maatregel is in ieder geval van toepassing op natuurlijke personen. Voor andere rechtspersonen zoals bedrijven kan dit ook van toepassing zijn. Denk bijvoorbeeld aan een gelijke behandeling tussen eenmanszaken en grotere bedrijven.

+
+

Stap 1: Analyseer of er sprake is van bias

+

In deze stap is het doel om te bepalen in welke mate er sprake is van een systematisch verschil in behandeling van bepaalde objecten, mensen of groepen in vergelijking met anderen. +Dit verschil kan zowel op een directe als een indirecte manier ontstaan.

+

Toetsen op direct onderscheid

+

Toetsen op direct onderscheid is in vergelijking tot toetsen op indirect onderscheid relatief eenvoudig.

+

Bepaal of de inputvariabelen die gebruikt worden leiden tot een direct onderscheid op basis van godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, nationaliteit, hetero- of homoseksuele gerichtheid1 of burgelijke staat.

+

Het is niet mogelijk om een uitputtend overzicht te geven van alle selectiecriteria die mogelijk tot direct onderscheid op grond van ras of nationaliteit kunnen leiden. +Wel zijn in de jurisprudentie verschillende voorbeelden en aanknopingspunten te vinden. +Zo staat vast dat selectie op basis van fysieke etnische kenmerken, zoals huidskleur, direct onderscheid op grond van ras oplevert2. +Een ander voorbeeld is dat onderscheid op grond van een niet-westers klinkende naam direct onderscheid op grond van afkomst (en dus ras) oplevert3.

+

Toetsen op indirect onderscheid

+

Ook selectiecriteria die op het eerste gezicht geen enkele link lijken te hebben met een discriminatiegrond kunnen leiden tot indirect onderscheid op grond van een discriminatiegrond. +Enkele voorbeelden van zulke 'ogenschijnlijk neutrale' selectiecriteria die verband hebben met ras of nationaliteit zijn: postcode, hoogte van het inkomen, kenteken, familielid in het buitenland, laaggeletterdheid. +Indirect onderscheid is in vergelijking met direct onderscheid lastiger op te signaleren en te voorkomen. +Daarom is het belangrijk jouw algoritmische toepassing regelmatig te analyseren op eventueel indirect onderscheid. +Het toetsen op indirect onderscheid bestaat uit 5 stappen:

+
    +
  1. +

    Bepaal wat de kwetsbare groepen zijn. +Eventueel kan dit aangevuld worden op basis van de discriminatiegronden uit non-discriminatie wetgeving. Of andere groepen waarvoor verschillen in behandeling ethisch onwenselijk zijn.

    +
  2. +
  3. +

    Bepaal wat "verschillen in behandeling" betekent in de context van het algoritme. +In deze stap is het belangrijk om voorafgaand aan de daadwerkelijke analyse met een brede groep stakeholders te bepalen wat 'eerlijk' en 'rechtvaardig' wordt bevonden in de context van het betreffende algoritme. +Er zijn veel verschillende manieren waarop je kan kijken naar onderscheid bij het gebruik van algoritmes. Voorbeelden van manieren waarop je naar onderscheid kan kijken zijn:

    +
      +
    • Onderscheid op basis van gelijke uitkomsten (representatie). +De belangrijkste vraag die hier mee beantwoord wordt is: hebben personen uit verschillende groepen gelijke kans om geselecteerd te worden door het algoritme? Of is er sprake van een over- of ondervertegenwoording van bepaalde groepen in de selectie ten opzichte van de betreffende populatie?
    • +
    • Onderscheid op basis van gelijke prestaties (fouten). +De belangrijkste vraag die hier mee beantwoord wordt is: presteert het algoritme gelijk voor personen uit verschillende groepen? Met andere woorden: maakt het algoritme vaker fouten bij bepaalde groepen? Dat kan er eventueel toe leiden dat bepaalde groepen vaker onterecht wel of niet geselecteerd worden door het algoritme.
    • +
    +

    Om te toetsen of er sprake is van onderscheid op basis van gelijke prestaties, is het noodzakelijk om de prestaties van het algoritme goed te analyseren. +In het geval van classificatie is het daarvoor nodig om een zogeheten confusion matrix op te stellen. +Een confusion matrix is een tabel waarin de voorspellingen van het algoritme worden vergeleken met de werkelijke waarden (de ground truth).

    +

    De verschillende maten/metrieken waarop gekeken kan worden naar onderscheid, worden in de (wetenschappelijke) literatuur ook wel fairness metrieken genoemd. +Veel van deze metrieken kunnen op basis van de confusion matrix berekend worden. +Een hulpmiddel om de meest passende metrieken te kiezen in jouw situatie is de Fairness tree.

    +

    Door te denken vanuit verschillende perspectieven, zullen er in de praktijk meerdere metrieken van belang zijn. +Het kan echter voorkomen dat deze metrieken elkaar tegenspreken. +Maak een duidelijke prioritering van de verschillende metrieken om afwegingen te maken tussen de verschillende opvattingen van eerlijkheid.

    +
  4. +
  5. +

    Verzamel de benodigde data die nodig is om bovenstaande groepen te bepalen. +Bepaal welke data benodigd is om te analyseren of er verschillen zijn tussen bepaalde groepen. +In veel gevallen zal data benodigd zijn die demografische en beschermde kenmerken van groepen omschrijft. +Het verzamelen en verwerken van deze data kan in strijd zijn met privacy vereisten uit bijvoorbeeld de Algemene Verordening Gegevensbescherming. +Het is daarom van belang om duidelijk afwegingen te maken tussen privacy en het analyseren van bias die rekening houdt met de juridische en ethische vereisten.

    +
    +

    Uitzondering voor hoog risico AI-systemen

    +

    De AI-verordening biedt een uitzondering voor het verwerken van bijzondere categorieën persoonsgegevens voor het monitoren, opsporen en corrigeren van bias bij AI-systemen met een hoog risico. Zie artikel 10.5, AI-verordening.

    +
    +

    Om de data op een veilige en rechtmatige manier te gebruiken voor een biasanalyse dient de data van voldoende kwaliteit te zijn. +Denk hier goed na of de data eventuele bias bevat die kan duiden op een bepaalde vooringenomenheid in de biasanalyse zelf (historische bias of representatie bias). +De data dient bijvoorbeeld voldoende actueel en volledig te zijn.

    +

    Voor sommige groepen zal het onmogelijk zijn om te beschikken over data van voldoende kwaliteit om zorgvuldig te toetsen op bias. +De laaggeletterdheid van burgers of personen is bijvoorbeeld lastig meetbaar en in veel gevallen niet beschikbaar. +Bepaal in zo'n situatie of er andere mogelijkheden zijn deze groepen te helpen, of dat er andere mogelijkheden zijn om eventuele ongelijke behandeling bij deze groepen te constateren. +Bijvoorbeeld door hierop te monitoren in de klacht- en bezwarenprocedure.

    +
  6. +
  7. +

    Bereken de verschillen in behandeling en/of uitkomsten van het algoritme. +Er zijn verschillende open source softwarepakketten die je hierbij kunnen ondersteunen, zoals fairlearn, Aequitas, fairml, fairness of AI Fairness 360.

    +
  8. +
  9. +

    Probeer te verklaren hoe het geconstateerde onderscheid is ontstaan. +Als er in de vorige stap een significant onderscheid is geconstateerd, is het belangrijk om na te gaan hoe dit onderscheid is ontstaan. +Dit kan bijvoorbeeld ontstaan door:

    +
      +
    • een vorm van bias in de onderliggende inputdata. Je kan hierbij denken aan:
        +
      • historische bias: in hoeverre beschrijft de data de huidige situatie?
      • +
      • representatie bias: is de data waarop getraind wordt representatief voor de bijbehorende populatie? Zijn trends uit de gebruikte data generaliseerbaar naar de totale populatie?
      • +
      • meetbias: beschrijven de inputvariabelen wel wat ze moeten beschrijven? In hoeverre zijn dit benaderingen waarbij eventuele factoren worden weggelaten?
      • +
      +
    • +
    • een vorm van bias in het proces na afloop van het algoritme
        +
      • is er sprake van automatiseringsbias of bevestigingsbias in de (handmatige) beoordeling?
      • +
      +
    • +
    +
  10. +
+

Wanneer duidelijker is hoe de geconstateerde bias is ontstaan, is het goed om te verkennen of er mogelijkheden zijn om dit (in de toekomst) te voorkomen.

+

Het is belangrijk hier een brede groep aan belanghebbenden bij te betrekken. +De oorzaken van bias komen uit de 'echte wereld', waarbij patronen in datasets historische, demografische en sociale verschillen weerspiegielen. +Het verklaren en voorkomen van bias vraagt daarmee niet alleen om technische oplossingen, maar het is belangrijk de hele socio-technische omgeving waarin het algoritme wordt ingezet mee te nemen.

+

Stap 2: Voer een rechtvaardigingstoets uit

+

Wanneer er in Stap 1 is geconstateerd dat er sprake is van een onderscheid, dient de volgende vraag beantwoord te worden:

+
+

Valt dit onderscheid te rechtvaardigen?

+
+

Een geconstateerd systematisch onderscheid is niet altijd fout en is niet altijd verboden, maar het vraagt wel altijd om aandacht en zorgvuldigheid. +Het geconstateerde onderscheid kan in bepaalde situaties en onder bepaalde strikte voorwaarden gerechtvaardigd zijn:

+
    +
  • Voor direct onderscheid kan er bijvoorbeeld sprake zijn van een wettelijke uitzondering die het gemaakte onderscheid toelaat.
  • +
  • Voor indirect onderscheid geldt dat behalve een wettelijke uitzondering er ook een objectieve rechtvaardiging kan bestaan, waarmee het geconstateerde onderscheid in bepaalde gevallen toelaatbaar kan zijn.
  • +
+

Twee subvragen die hierbij beantwoord moeten worden zijn:

+
    +
  • streeft het in te zetten algoritme een legitiem doel na?
  • +
  • bestaat er een redelijke relatie van evenredigheid tussen het gebruikte algoritme en de nagestreefde doelstelling?
  • +
+

Wanneer er geen rechtvaardiging is voor het gemaakte onderscheid, spreken we van een verboden direct of indirect onderscheid, ofwel discriminatie. +Het algoritme mag in dat geval niet gebruikt worden.

+

Voor meer toelichting over het uitvoeren van een rechtvaardigingstoets, verwijzen we naar het rapport Discriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader van het College voor de Rechten van de Mens.

+

Stap 3: Voer een ethische wenselijkheidstoets uit

+

Bepaal of het geconstateerde onderscheid uit Stap 1 ethisch wenselijk is. Dit hangt samen met de algemene wenselijkheid van de inzet van het algoritme.

+ + +

In sommige gevallen kan het zo zijn dat ondanks dat er een objectieve rechtvaardiging bestaat voor het gemaakte onderscheid, dit vanuit ethisch perspectief toch onwenselijk is. +Bepaal met een grote groep belanghebbenden wat eventuele (nadelige) effecten van het gemaakte onderscheid kunnen zijn, of jullie dit eerlijk vinden en of er eventuele alternatieven zijn.

+
+

Opmerking

+

De bepaling over wat eerlijk is en wat ethisch wenselijk is kan in sommige gevallen ook politiek bevonden worden. Houd hier rekening met de politiek-bestuurlijke verantwoordelijkheden en zorg indien nodig dat de politiek-bestuurlijke verantwoordelijkhden duidelijk zijn.

+
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
grw-02 - Algoritmes discrimineren niet
aia-29 - Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
+
+

Risico

+

Wanneer er geen zorgvuldige analyse naar (onwenselijke) bias is uitgevoerd, bestaat het risico dat het gebruik van het algoritme discriminerende effecten met zich meebrengt. +Dit kan leiden tot een ongelijke behandeling van burgers met eventuele schade voor betrokkenen.

+

Bronnen

+ +

Voorbeelden

+ +
+
+
    +
  1. +

    Er is een wetsvoorstel om de term 'hetero- of homoseksuele gerichtheid' in de Algmemene wet gelijke behandeling (Awgb) te wijzigingen in 'seksuele gerichtheid'. Met deze wijziging sluit de Awgb aan bij een eerdere wijziging van artikel 1 van de Grondwet. 

    +
  2. +
  3. +

    Zie Discriminatie door risicoprofielen, een mensenrechtelijk toetsingskader, College voor de Rechten van de Mens 

    +
  4. +
  5. +

    Zie Discriminatie door risicoprofielen, een mensenrechtelijk toetsingskader, College voor de Rechten van de Mens, College voor de Rechten van de Mens 7 juni 2021, oordeel 2021-70; College voor de Rechten van de Mens 23 april 2015, oordeel 2015-44; College voor de Rechten van de Mens 23 april 2015, oordeel 2014-0426

    +
  6. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/5-ver-03-vertaling-wetgeving-naar-systeem/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/5-ver-03-vertaling-wetgeving-naar-systeem/index.html new file mode 100644 index 0000000000..e517b6a6a6 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/5-ver-03-vertaling-wetgeving-naar-systeem/index.html @@ -0,0 +1,1009 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleid - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleid

+ +

ver-03Verificatie en validatieJuristGovernanceTransparantie

+

Maatregel

+

Stel regelmatig vast dat wetgeving en (lokaal) beleid correct is vertaald naar de uitvoering van het te ondersteunen werkproces en de onderliggende systemen.

+

Toelichting

+
    +
  • Systemen die overheidsorganisaties inzetten voor bijvoorbeeld het verlenen van subsidies, vergunningen of bijstandsuitkeringen moeten de regels en processtappen volgen die in wetgeving zijn voorgeschreven.
  • +
  • Er is een vertaling nodig van deze regels en processtappen naar de uitvoering van het werkproces, het datagebruik en onderliggende systemen.
  • +
  • Algoritmes moeten ook voldoen aan deze regels en processtappen.
  • +
  • Als algoritmes worden ontwikkeld, moet worden onderzocht wat deze regels zijn en hoe deze moeten worden toegepast bij het ontwikkelen van algoritmes.
  • +
  • Het moeten voldoen aan wetgeving en beleid kan dus in zekere zin 'begrenzend' werken op wat mag worden gedaan met algoritmes. Dit is mede afhankelijk van de risico classificatie van de specifieke toepassing.
  • +
  • Voor algoritmes, bijvoorbeeld regelgebaseerde rekenregels, moet bijvoorbeeld nauwkeurig worden geprogrammeerd in welke gevallen welke bedragen moeten worden uitgekeerd voor een bijstandsuitkering.
  • +
  • +

    Voor machine learning algoritmes moet bijvoorbeeld worden vastgesteld of de trainingsdata wel tot stand is gekomen in lijn met wetgeving en vastgesteld beleid (datakwaliteit) en welke verbanden en patronen (inputvariabelen) al dan niet passend zijn bij het ondersteunen van wettelijke taken.

    +
  • +
  • +

    Er is een multidisciplinaire samenwerking nodig tussen de proceseigenaar, gebruikers, juristen, informatieanalisten en ontwikkelaar om deze vertaling zorgvuldig en doorlopend te maken.

    +
  • +
  • Voorafgaand aan het (laten) ontwikkelen van een algoritme moet dit zijn uitgevoerd.
  • +
  • De toegepaste 'business rules' en de verwerkte data voor de uitvoering van het te ondersteunen werkproces met algoritmes moeten worden onderzocht en beoordeeld.
  • +
  • Diepgaande procesanalyses (Bv. BPMN niveau Analytisch) en procesbeschrijvingen kunnen hierbij ondersteunen.
  • +
  • Als blijkt dat een werkproces niet (meer) conform (gewijzigde) wetgeving of beleid wordt uitgevoerd, dan moet worden beoordeeld of de verworven data of welke deel van de data geschikt is voor het ontwikkelen een algoritme.
  • +
  • Het is dan raadzaam om de uitvoering van het betreffende werkproces en de werking van onderliggende systemen eerst te 'herstellen' en om hiermee een nieuw datafundament te creëeren (eerst een groot aantal zaken behandelen) die later als trainingsdata kan worden gebruikt.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
awb-02 - Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
+
+

Risico

+

Een beslissing of besluit wordt niet conform wetgeving genomen en is daarmee onrechtmatig, als geen goede vertaling wordt gemaakt van wetgeving naar het algoritme.

+

Bron

+ +

Voorbeeld

+

Handleiding Wetanalyse

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-01-werkinstructies-gebruikers/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-01-werkinstructies-gebruikers/index.html new file mode 100644 index 0000000000..054858ad69 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-01-werkinstructies-gebruikers/index.html @@ -0,0 +1,1007 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Stel een werkinstructie op voor gebruikers. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Stel een werkinstructie op voor gebruikers.

+ + +

imp-01ImplementatieProjectleiderOntwikkelaarMenselijke controleTransparantie

+

Maatregel

+

Stel een werkinstructie op voor gebruikers.

+

Toelichting

+

Het is belangrijk dat gebruikers een werkinstructie ontvangen met informatie over hoe zij met het algoritme kunnen en moeten werken. Hierin worden zaken beschreven als:

+
    +
  • Op wat voor manier het algoritme ondersteunt bij het uitvoeren van (wettelijke) taken.
  • +
  • Wat de mogelijkheden en beperkingen zijn bij het gebruik van het algoritme.
  • +
  • Wat de impact is van het gebruik van het algoritme op de samenleving en individuen (denk aan energieverbruik of dat een besluit met rechtsgevolgen wordt genomen).
  • +
  • Wat de risico's zijn die aan het gebruik verbonden zijn (bijv. (automation) bias, false positives/negatives).
  • +
  • Welke maatregelen zijn getroffen om deze risico's te beperken (bijv. bias analyse, 'stopknop' ingebouwd, transparantie over de output).
  • +
  • Hoe de output van het algoritme moet worden geïnterpreteerd.
  • +
  • Hoe het werkproces kan worden uitgevoerd, zonder ondersteuning van het algoritme.
  • +
  • Welke protocollen er zijn als incidenten zich voordoen.
  • +
+

Denk hierbij na over het eventueel bijscholen van medewerkers als het kennisniveau nog onvoldoende is om de werkinstructies goed te begrijpen.

+

Bijbehorende vereiste(n)

+ +
Vereiste
aia-01 - Personeel en gebruikers zijn voldoende AI-geletterd
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
aia-28 - AI-systemen worden zo ontworpen en gebruikt, dat mensen begrijpen wanneer zij met een AI-systeem communiceren en welke content gemaakt is door een AI-systeem
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
+ +

Bronnen

+ + + +

Risico

+ + +

Het algoritme wordt onjuist gebruikt of verkeerd geïnterpreteerd door gebruikers, waardoor onjuiste belissingen of besluiten worden genomen.

+

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-02-aselecte-steekproeven/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-02-aselecte-steekproeven/index.html new file mode 100644 index 0000000000..d4131cbd5a --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-02-aselecte-steekproeven/index.html @@ -0,0 +1,1025 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren

+ + +

imp-02Dataverkenning en datapreparatieImplementatieMonitoring en beheerOntwikkelaarBias en non discriminatieTechnische robuustheid en veiligheid

+

Maatregel

+

Uitvoeren van aselecte steekproeven als aanvulling wanneer gebruik gemaakt wordt van risicogestuurde selectie.

+

Toelichting

+ +

Aselecte steekproeven kunnen een waardevolle toevoeging zijn bij risicogestuurde selectie.

+

Het toevoegen van aselecte steekproeven maakt het mogelijk om over tijd te beoordelen of het algoritme nog voldoende effectief is. +Populaties veranderen immers over tijd. Een selectie die het meest effectief was bij ingebruikname, kan over tijd dat niet meer zijn. +Door alleen risicogestuurd te selecteren, wordt dit niet inzichtelijk, omdat bepaalde groepen zelden tot nooit gecontroleerd worden. +Door de aanvullende mogelijkheid van monitoring, kan over tijd beoordeeld worden of er nog steeds sprake is van de meest proportionele vorm. +Als dat niet zo is, kan bijvoorbeeld gekozen worden voor aanpassing van de risicogestuurde selectie of overgaan op volledig aselect.

+

De maatregel gaat daarmee niet direct discriminatie tegen, omdat er sprake kan zijn van discriminatie ongeacht de effectiviteit van de risicogestuurde selectie. +Een lagere effectiviteit maakt het echter lastiger het gemaakte onderscheid te rechtvaardigen.

+

Het gebruik van een aselecte steekproef is in veel gevallen essentieel om het systeem te kunnen toetsen op vooringenomenheid. +Een aselecte steekproef geeft ook inzicht in heel deel van de populatie dat doorgaans niet geselecteerd en behandeld wordt door het betreffende risicogestuurde algoritme. +Dit maakt het mogelijk om te toetsen of er sprake is van een over- of ondervertegenwoordiging van bepaalde groepen, of om te bepalen of bepaalde typen fouten vaker gemaakt worden in bepaalde groepen.

+

Bij AI-systemen die verder leren op basis van verkregen data kan daarnaast sprake zijn van een reinforcing feedbackloop, omdat zij geen representatieve data krijgen. +Het toevoegen van aselecte steekproeven kan deze feedbackloop doorbreken.

+

Het is aan te bevelen om, waar mogelijk, behandelaars niet in te lichten of een casus toegewezen is op basis van een risicogestuurd of aselecte selectie. +Daardoor wordt beperkt dat een behandelaar met tunnelvisie een zaak bekijkt. +De behandelaar weet immers dat er tussen de selecties zaken zitten waar niet sprake is van verhoogd risico. +Op die manier kan automation bias beperkt te worden. +Niet in alle gevallen zal dit mogelijk zijn, omdat de behandelaar ook uit andere aangeleverde gegevens kan halen op basis waarvan een casus geselecteerd is. +Het is dan belang om op andere wijze de tunnelvisie tegen te gaan.

+

De precieze inzet van aselecte steekproeven zal afhangen van de context. +Zo verschilt het per context hoeveel zaken aselect geselecteerd moeten worden. +Bepaal welke groepen er precies vergeleken dienen te worden en bepaal aan de hand daarvan een passende steekproefgrootte zodanig dat er gesproken kan worden over statistische significantie.

+

In sommige gevallen zal de impact van een selectie ook dusdanig zijn, dat het zich niet leent voor aselecte steekproef. +Zo kan een aselecte steekproef wel de basis zijn voor bureauonderzoek, maar mogelijk niet als enige basis voor een huisbezoek. +Deze belangenenafweging moet per context gemaakt worden.

+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
aia-29 - Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten
grw-02 - Algoritmes discrimineren niet
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
+
+

Bronnen

+ + +

Rapportage Algoritmerisico's Nederland voorjaar 2024 (pp. 36-41)

+

Risico

+ +
    +
  • Historical bias
  • +
  • Representation bias
  • +
  • Automation bias en Reinforcing Feedback Loop
  • +
+

Voorbeeld

+ +

In het onderzoek van zowel Algorithm Audit als PricewaterhouseCoopers naar de Controle Uitwonendenbeurs is het belang van de aselecte steekproef duidelijk geworden.

+

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/index.html new file mode 100644 index 0000000000..6f733970db --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-03-menselijke-tussenkomst/index.html @@ -0,0 +1,1045 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Richt de juiste menselijke controle in van het algoritme - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Richt de juiste menselijke controle in van het algoritme

+ +

imp-03OntwerpImplementatieMonitoring en beheerProjectleiderBeleid en adviesMenselijke controleGovernance

+

Maatregel

+

Richt (technische) controlemechanismen in voor menselijke tussenkomst (of: menselijke controle) waarmee de output van een algoritme kan worden gecontroleerd.

+

Toelichting

+

Algoritmes ondersteunen vaak beslissingen en besluitvorming van overheidsorganisaties. Deze beslissingen of besluiten kunnen betrokkenen in aanmerkelijke mate raken of zelfs rechtsgevolgen hebben. Omdat algoritmes niet foutloos zijn, is het belangrijk dat een mens controleert wat een algoritme doet en, waar nodig, corrigeert. Dit proces heet 'menselijke tussenkomst' en moet betekenisvol zijn, niet slechts symbolisch.

+

Het inrichten, monitoren en evalueren van menselijke controle is cruciaal om te voorkomen dat algoritmes negatieve effecten veroorzaken of de menselijke autonomie ondermijnen.

+

Betekenisvolle menselijke controle houdt in dat:

+
    +
  • Het toezicht wordt uitgevoerd door iemand die bevoegd en bekwaam is om een beslissing of besluit te wijzigen.
  • +
  • Automatische aanbevelingen niet klakkeloos worden overgenomen. Bijvoorbeeld: een systeem dat standaard een suggestie accepteert door een enkele klik voldoet hier niet aan.
  • +
  • De vormen van menselijke tussenkomst al in een vroeg stadium, bijvoorbeeld in de ontwerpfase, worden vastgesteld op basis van risicoanalyses.
  • +
  • Gebruikers voldoende kennis, tijd en verantwoordelijkheid hebben om weloverwogen beslissingen te nemen over het functioneren van algoritmes. Dit betekent ook dat externe factoren, zoals tijdsdruk of onvoldoende informatie, de beoordeling van de output niet mogen beïnvloeden. (zie ook het onderzoekskader van de ADR, SV.6)
  • +
+

Soms is menselijke tussenkomst minder relevant, zoals bij ‘gebonden bevoegdheden’. Hierbij is weinig tot geen ruimte om een beslissing of besluit aan te passen. Voorbeelden zijn:

+
    +
  • Het opleggen van verkeersboetes onder de Wet administratiefrechtelijke handhaving verkeersvoorschriften (Wahv).
  • +
  • Het automatisch aanpassen van studiefinanciering op basis van inkomenswijzigingen.
  • +
+

Om menselijke tussenkomst goed te organiseren, zijn technische en organisatorische maatregelen nodig. Dit geldt ook wanneer een externe aanbieder de algoritmes levert. In dat geval moet de verantwoordelijke organisatie (gebruiksverantwoordelijke) samen met de aanbieder bepalen hoe menselijke tussenkomst zinvol kan worden ingericht.

+

Inrichten van menselijke controle

+

Er zijn verschillende manieren om menselijke tussenkomst in te richten, afhankelijk van de specifieke toepassing van een algoritme. Hieronder worden vier mogelijkheden beschreven die kunnen worden ingezet, los of in combinatie:

+

1. Human in the loop

+

Bij dit model speelt de mens een actieve rol in elke fase van het algoritme. Deze variant geeft de meeste controle en invloed, maar kan leiden tot vertraagde of minder efficiënte besluitvorming, vooral bij real-time of zeer complexe taken waarbij snelheid cruciaal is. +Een voorbeeld van toepassen van Human-in-the-loop is het nakijken en beoordelen van de output van een algoritme door een mens, telkens voordat een beslissing wordt genomen. Het verwerken van data gebeurt alleen in opdracht van de mens en verder neemt het algoritme of AI model geen autonome beslissingen.

+

2. Human on the loop

+

Hier behoudt de mens toezicht en kan ingrijpen wanneer dat nodig is, om te garanderen dat een model veilig en ethisch opereert. Dit model biedt daardoor een balans tussen autonome besluitvorming en menselijke controle. Het is vooral nuttig in situaties waarin afwijkende keuzes of acties van het algoritme grote gevolgen kunnen hebben. De menselijke operator houdt de werking van het algoritme in de gaten en staat klaar om in te grijpen of beslissingen terug te draaien wanneer nodig.

+

3. Human above the loop

+

In dit model houdt de mens toezicht op een hoger niveau, met een focus op strategische en ethische keuzes, in plaats van dat de menselijke operator zich bezighoudt met directe operationele beslissingen. Dit stelt de mens in staat in te grijpen wanneer kritieke morele, juridische of sociale zorgen ontstaan om het model op de langere termijn bij te sturen. De menselijke tussenkomst is gericht op het bepalen van beleid en de richtlijnen voor algoritmes. Het gaat daarbij niet alleen over het definiëren van operationele procedures maar ook het maken van bepaalde ethische overwegingen, het zorgen voor naleving van regelgeving en het overwegen van de implicaties van de inzet van algoritmes op de lange termijn.

+

4. Human before the loop

+

Hier maakt de mens vooraf ethische en morele afwegingen die in het algoritme zelf worden ingebouwd. Hoewel het model in productie autonoom opereert, zal de menselijke input gedurende de ontwikkeling ervoor zorgen dat het model ook in complexe situaties volgens de juiste (ethische) afwegingen keuzes en acties onderneemt.

+

Dit model is essentieel in situaties waar menselijk ingrijpen tijdens de uitvoering niet mogelijk is (wanneer er bijvoorbeeld weinig of helemaal geen tijd is om als mens te interveniëren), maar waar ethische keuzes cruciaal blijven. Denk aan bestrijding van zeemijnen of situaties met zelfrijdende auto’s in onvoorspelbare verkeerssituaties (bron: TNO visiestuk 2022). Deze variant kan ook worden ingezet voor situaties waarin wel nog menselijk ingrijpen mogelijk is.

+

Risico

+

Het niet inrichten van passende menselijke controle leidt tot onverantwoorde inzet van algoritmen en het niet voldoen aan wettelijke vereisten.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-10 - Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd
grw-01 - Algoritmes schenden geen grondrechten of mensenrechten
aia-22 - De werking van hoog-risico-AI-systemen wordt gemonitord
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-21 - Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkheden
+
+

Bronnen

+ +

Voorbeeld

+

HvJEU december 2023, ECLI:EU:C:2023:957 (SCHUFA Scoring)

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-04-publiceren-algoritmeregister/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-04-publiceren-algoritmeregister/index.html new file mode 100644 index 0000000000..d3323b0b33 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-04-publiceren-algoritmeregister/index.html @@ -0,0 +1,1005 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister

+ +

imp-04ImplementatieMonitoring en beheerProjectleiderBeleid en adviesTransparantie

+

Maatregel

+

Publiceer het algoritme in het Nederlandse Algoritmeregister.

+

Toelichting

+
    +
  • De regering wil dat de overheid algoritmes verantwoord gebruikt. Mensen moeten erop kunnen vertrouwen dat algoritmes voldoen aan de waarden en normen van de samenleving.
  • +
  • Wanneer de overheid open is over algoritmes en hun toepassing, kunnen burgers, organisaties en media haar kritisch volgen.
  • +
  • Impactvolle algoritmes en hoog risico AI-systemen moeten daarom worden gepubliceerd in het Algoritmeregister.
  • +
  • In het Algoritmeregister moet uitleg zijn over hoe algoritmes, of het proces wat hiermee wordt ondersteund werkt.
  • +
  • Er is een Handreiking Algoritmeregister opgesteld met informatie over het publiceren van algoritmes in het Algoritmeregister.
  • +
  • De Algoritmeregister Publicatiestandaard kan overheidsorganisaties ondersteunen bij het helpen invullen van het Algoritmeregister.
  • +
  • Sommige overheidsorganisaties publiceren hun algoritmes ook in een eigen Algoritmeregister, zodat burgers dit makkelijker kunnen vinden. Bijvoorbeeld het Algoritmeregister van de Gemeente Rotterdam, het Algoritmeregister van de Gemeente Amsterdam of het Algoritmeregister van het UWV.
  • +
  • Zorg na publicatie dat de informatie in het Algoritmeregister up-to-date blijft en indien nodig regelmatig wordt aangepast.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
bzk-01 - Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
avg-07 - Organisaties zijn transparant over het verwerken van persoonsgegevens
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
+
+

Risico

+

Betrokkenen zijn niet op de hoogte dat hun persoonsgegevens worden verwerkt met een algoritme, waardoor zij hier geen controle over hebben.

+

Bronnen

+ +

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-proces-privacyrechten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-proces-privacyrechten/index.html new file mode 100644 index 0000000000..a6ed7d27d0 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-proces-privacyrechten/index.html @@ -0,0 +1,992 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Spreek af hoe de organisatie omgaat met privacy-verzoeken - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Spreek af hoe de organisatie omgaat met privacy-verzoeken

+ +

imp-06OrganisatieverantwoordelijkhedenOntwikkelenProjectleiderBeleid en adviesJuristPrivacy en gegevensbeschermingGovernanceData

+

Maatregel

+

Richt een proces in waarmee betrokkenen hun privacyrechten kunnen inroepen als algoritmes worden ontwikkeld of gebruikt.

+

Toelichting

+
    +
  • Betrokkenen moeten hun persoonsgegevens kunnen inzien, rectificeren, laten verwijderen of het gebruik ervan beperken bij het toepassen van algorimtes.
  • +
  • Betrokkenen moeten hun verzoek kunnen indienen bij de betreffende organisatie. Denk hierbij aan het inrichten van een privacyloket.
  • +
  • Er zullen afspraken moeten worden gemaakt door servicemanagement in te richten hoe deze verzoeken effectief kunnen worden behandeld door bijvoorbeeld door het ontwikkel- of beheerteam (aanbieder).
  • +
  • Bij het inrichten van servicemanagement moet zijn nagedacht over hoe een verzoek tot het inzien, rectificeren, verwijderen of beperken van de verwerking van persoonsgegevens op een betekenisvolle manier kan of moet worden behandeld.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-09 - Betrokkenen kunnen een beroep doen op hun privacyrechten
+
+

Risico

+

Betrokkenen hebben geen controle over hun persoonsgegevens doordat ze geen beroep kunnen doen op hun privacyrechten.

+

Bronnen

+

Onderzoekskader Algoritmes Auditdienst Rijk, PRI.9

+

Voorbeeld

+

Privacyverzoek Gemeente Amsterdam

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-werkinstructies-medewerkers/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-werkinstructies-medewerkers/index.html new file mode 100644 index 0000000000..fb2deef029 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-05-werkinstructies-medewerkers/index.html @@ -0,0 +1,1025 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Spreek af hoe medewerkers omgaan met het algoritme. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Spreek af hoe medewerkers omgaan met het algoritme.

+ + +

imp-05ImplementatieProjectleiderBeleid en adviesGovernanceMenselijke controle

+

Maatregel

+

Stel duidelijke werkinstructies op voor de medewerkers die het algoritme gaan gebruiken.

+

Toelichting

+
    +
  • Maak keuzes rondom de rol van het systeem in de werkwijze van medewerkers.
  • +
  • Gebruik duidelijke werkinstructies en protocollen om te voorkomen dat beslissingen, gebaseerd op de output van het systeem, door (automation) bias worden beïnvloed.
  • +
  • Stel een structuur op voor het melden van mogelijke problemen die medewerkers ervaren met het systeem.
  • +
  • +

    Opleiding van medewerkers over:

    +
      +
    • Algoritmes, waaronder AI;
    • +
    • het systeem waarmee ze gaan werken;
    • +
    • de rol van het systeem in hun werkwijze;
    • +
    • de risico's die aan het gebruik van een systeem verbonden zijn (bijv. (automation) bias, false positives/negatives);
    • +
    • de maatregelen die genomen zijn om deze risico’s te beperken (bijv. willekeurige of fictieve casussen, transparantie over de output).
    • +
    +
  • +
  • +

    Bespreek regelmatig de uitdagingen die medewerkers ondervinden bij het werken met het systeem (bijv. tijdsdruk).

    +
  • +
  • +

    Documenteer alle keuzes en de onderliggende redenen/afwegingen rondom menselijke tussenkomst en overzicht. Evalueer en pas gemaakte keuzes waar nodig aan.

    +
  • +
  • +

    Goede samenwerking tussen medewerkers en systemen helpt bij het voorkomen van (automation) bias en discriminatie, het signaleren van algoritmische problemen, en het vermijden van de facto automatische besluitvorming.

    +
  • +
+

Bijbehorende vereiste(n)

+ + + +
+Bekijk alle vereisten +
Vereiste
grw-02 - Algoritmes discrimineren niet
aia-09 - Hoog-risico-AI-systemen staan onder menselijk toezicht
aia-21 - Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkheden
+
+

Bronnen

+ + + +

Risico

+ + +

Bias, discriminatie, de facto automatische besluitvorming.

+

Voorbeeld

+ + +

Heb je een voorbeeld of best practice, laat het ons weten via algoritmes@minbzk.nl

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-06-vermelding-in-privacyverklaring/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-06-vermelding-in-privacyverklaring/index.html new file mode 100644 index 0000000000..ca1e90cf44 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-06-vermelding-in-privacyverklaring/index.html @@ -0,0 +1,1017 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vermeld het gebruik van persoonsgegevens in een privacyverklaring - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Vermeld het gebruik van persoonsgegevens in een privacyverklaring

+ +

imp-07ImplementatieProjectleiderJuristPrivacy en gegevensbeschermingTransparantie

+

Maatregel

+

Neem het gebruik van een algoritme op in de privacyverklaring als hierbij persoonsgegevens worden verwerkt.

+

Toelichting

+
    +
  • Door in een privacyverklaring te vermelden welke persoonsgegevens worden verwerkt voor het gebruik van een algoritme, wordt een betrokkene geïnformeerd over de verwerking van diens persoonsgegevens.
  • +
  • Een privacyverklaring kan op organistieniveau worden opgesteld en ook voor specifieke verwerkingen.
  • +
  • +

    In een privacyverklaring wordt in ieder geval het volgende opgenomen:

    +
  • +
  • +

    de identiteit en contactgegevens van uw organisatie. En ook die van vertegenwoordiger in de Europese Unie (EU), als deze er zijn.

    +
  • +
  • de contactgegevens van de functionaris gegevensbescherming (FG), als een organistie deze heeft.
  • +
  • de doeleinden van de verwerking en de AVG-grondslag.
  • +
  • de (categorieën van) ontvangers van de persoonsgegevens.
  • +
  • of de persoonsgegevens door worden geven buiten de EER of aan een internationale organisatie. En zo ja, op welke juridische grond.
  • +
  • de bewaartermijn van de gegevens.
  • +
  • de privacyrechten van de betrokkenen, zoals het recht op inzage, rectificatie en gegevens verwijderen.
  • +
  • het recht van de betrokkenen om de toestemming die zij voor een bepaalde verwerking hebben gegeven, altijd weer te mogen intrekken.
  • +
  • dat de betrokkenen een klacht kunnen indienen bij de privacytoezichthouder. In Nederland is dat de Autoriteit Persoonsgegevens (AP).
  • +
  • of de betrokkenen verplicht zijn de persoonsgegevens te verstrekken. En zo ja, waarom. Vermeld dan ook wat de gevolgen zijn als zij de gegevens niet verstrekken.
  • +
  • of er sprake is van geautomatiseerde besluitvorming, inclusief profilering. En zo ja, hoe deze beslissing wordt genomen.
  • +
  • +

    als persoonsgegevens van een andere organisatie zijn ontvangen: de bron waar de persoonsgegevens vandaan komen. En of de gegevens afkomstig zijn van openbare bronnen.

    +
  • +
  • +

    Het is denkbaar dat in een specifieke privacyverklaring informatie over onderliggende logica van het algoritme, alsmede het belang en de verwachte gevolgen van die verwerking voor de betrokkene. Het is ook denkbaar dat deze informatie in het algoritmeregister wordt opgenomen.

    +
  • +
  • Als ervoor wordt gekozen om het algoritme uit te faseren, dan moet informatie in het algoriteregister hierop worden aangepast.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-07 - Organisaties zijn transparant over het verwerken van persoonsgegevens
+
+

Risico

+

Betrokkenen zijn niet op de hoogte dat hun persoonsgegevens worden verwerkt met een algoritme, waardoor zij hier geen controle over hebben en zich niet kunnen beroepen op hun privacyrechten.

+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-07-klacht-bezwaar-beroep/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-07-klacht-bezwaar-beroep/index.html new file mode 100644 index 0000000000..78a294cbe8 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-07-klacht-bezwaar-beroep/index.html @@ -0,0 +1,993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme en monitor dit proces. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme en monitor dit proces.

+ +

imp-09ImplementatieMonitoring en beheerProjectleiderOntwikkelaarGovernance

+

Maatregel

+

Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme. Zorg voor goede monitoring van dit proces zodat het projectteam op de hoogte is van klachten, bezwaren en beroepen over het systeem.

+

Toelichting

+
    +
  • Een goede datahuishouding van de binnengekomen bezwaren, klachten en beroepen is essentieel om de informatie rondom de klachten, bezwaren en beroepen vanuit datagedreven perspectief te kunnen monitoren.
  • +
  • Goede monitoring kan ervoor zorgen dat eventuele patronen in bezwaar, klacht en beroep snel gesignaleerd worden. Eventuele patronen in klacht, bezwaar en beroep kunnen duiden op problemen in het functioneren van het algoritme. Dit kan bijvoorbeeld duiden op discriminerende effecten van het algoritme, waardoor nader onderzoek wenselijk is.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-09 - Betrokkenen kunnen een beroep doen op hun privacyrechten
+
+

Risico

+

Bronnen

+ +

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-08-vermelding-in-verwerkingsregister/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-08-vermelding-in-verwerkingsregister/index.html new file mode 100644 index 0000000000..8972ee503c --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-08-vermelding-in-verwerkingsregister/index.html @@ -0,0 +1,999 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vermeld het gebruik van persoonsgegevens in het verwerkingsregister - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Vermeld het gebruik van persoonsgegevens in het verwerkingsregister

+ +

imp-08ImplementatieProjectleiderJuristTransparantiePrivacy en gegevensbescherming

+

Maatregel

+

Neem de ontwikkeling en gebruik van een algoritme op in het verwerkingsregister als persoonsgegevens worden verwerkt.

+

Toelichting

+
    +
  • Door in het verwerkingsregister te vermelden welke persoonsgegevens worden verwerkt voor het gebruik van een algoritme, wordt een betrokkene geïnformeerd over de verwerking van diens persoonsgegevens
  • +
  • Hiermee is ook voor de organisatie intern inzichtelijk welke persoonsgegevens voor welke toepassingen worden verwerkt;
  • +
  • Het is van belang dat vanaf het moment dat persoonsgegevens worden verwerkt, meteen een vermelding hiervan wordt gemaakt in het verwerkingsregister;
  • +
  • Dat betekent dat als persoonsgegevens worden verwerkt bij het ontwikkelen en trainen van het algoritme, en deze nog niet in gebruik zijn genomen, al een vermelding moet worden gedaan in het verwerkingsregister;
  • +
  • Bij beëindiging van het gebruik van het algoritme, moet het verwerkingsregister worden aangepast.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
avg-07 - Organisaties zijn transparant over het verwerken van persoonsgegevens
+
+

Risico

+

Betrokkenen en de interne organisatie zijn niet op de hoogte welke persoonsgegevens worden verwerkt met een algoritme, waardoor zij hier geen controle over hebben.

+

Bronnen

+ +

Voorbeeld

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-09-politiek-bestuurlijk-besluit/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-09-politiek-bestuurlijk-besluit/index.html new file mode 100644 index 0000000000..fd168088ab --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/6-imp-09-politiek-bestuurlijk-besluit/index.html @@ -0,0 +1,993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak een openbaar besluit over de inzet van het algoritme - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak een openbaar besluit over de inzet van het algoritme

+ +

imp-01OrganisatieverantwoordelijkhedenImplementatieProjectleiderGovernanceTransparantie

+

Maatregel

+

Een politieke-bestuurlijk besluit wordt genomen over de inzet van een impactvol algoritme.

+

Toelichting

+
    +
  • Door een politiek-bestuurlijk besluit te nemen over de inzet of beëindiging van een impactvol algoritme, wordt een afweging en keuze gemaakt over de wenselijkheid, haalbaarheid, transparantie, invulling van menselijke controle en eventueel de mate van onbewuste vooringenomenheid van het betreffende algoritme.
  • +
  • Impactvolle algoritmes bevatten aspecten die vragen om politieke afwegingen, en niet enkel door de ambtelijke organistie mogen worden beoordeeld.
  • +
  • Een voorbeeld van een politiek afweging is wanneer er wel of geen sprake is van een gerechtvaardigd onderscheid wat wordt gemaakt door een algoritme.
  • +
  • Het is van belang dat overheidsorganisaties een politiek-bestuurlijk kader opstellen waarin wordt beschreven hoe wordt omgegaan met dergelijke gevallen.
  • +
  • Een openbaar besluit draagt bij aan de legitimiteit van de inzet van het algoritme en de controleerbaarheid van de overheidsorganisatie.
  • +
+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
awb-01 - Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.
aia-08 - Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen
awb-02 - Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit
aia-21 - Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkheden
aia-22 - De werking van hoog-risico-AI-systemen wordt gemonitord
+
+

Risico

+

De ambtelijke organisatie maakt politieke-bestuurlijke afwegingen en beslissingen bij de inzet of beëindiging van het gebruik van impactvolle algoritmes, terwijl deze daar niet toe bevoegd is.

+

Bronnen

+

Algemene Rekenkamer

+

Voorbeeld

+

Besluit College van Burgemeester en Wethouders Gemeente Amsterdam

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-01-backups-maken/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-01-backups-maken/index.html new file mode 100644 index 0000000000..c440284a3f --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-01-backups-maken/index.html @@ -0,0 +1,992 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak back-ups van algoritmes - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak back-ups van algoritmes

+ +

mon-01OntwikkelenMonitoring en beheerOntwikkelaarBeleid en adviesTechnische robuustheid en veiligheid

+

Maatregel

+

Back-up kopieën van informatie, software en systeemafbeeldingen dienen regelmatig te worden gemaakt en getest. Idealiter gebeurt dit in overeenstemming met een afgesproken back-up beleid. +Maak back-ups van de omgeving van het algoritme en zorg ervoor dat het algoritme en de data hersteld kunnen worden.

+

Toelichting

+

Er is een back-up beleid waarin de eisen voor het bewaren en beschermen zijn gedefinieerd en vastgesteld. Dit beleid moet vervolgens worden vertaald naar (technische) maatregelen om het kunnen maken van back-ups te realiseren.

+

Risico

+

Als er geen regelmatige back-ups worden gemaakt en de restore-procedure niet regelmatig wordt getest, bestaat het risico dat er geen hersteloptie is en mogelijkheid van gegevensverlies.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
+
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-02-beveiliging-algoritme/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-02-beveiliging-algoritme/index.html new file mode 100644 index 0000000000..f3c14a6b0d --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-02-beveiliging-algoritme/index.html @@ -0,0 +1,1004 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beveilig de software - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Beveilig de software

+ +

mon-02Dataverkenning en datapreparatieOntwikkelenMonitoring en beheerProjectleiderBeleid en adviesOntwikkelaarTechnische robuustheid en veiligheid

+

Maatregel

+

Zorg voor een goede beveiliging van de verschillende softwarecomponenten van een algoritme. +Bepaal of de data voldoende is beveiligd en maak hierin onderscheid tussen de inputdata en de outputdata.

+

Toelichting

+

Er zijn beheersmaatregelen die kunnen helpen bij het zorgen voor een goede beveiliging van verschillende (software-)componenten van een algoritme. Hierbij kan worden gedacht aan: +Het toepassen van wachtwoordbeheer. Baseline Informatiebeveiliging Overheid, de NCSC Handreiking voor implementatie van detectieoplossingen en het Impact Assessment Mensenrechten en Algoritmes.

+
    +
  • Inzicht creëren in de beoogde opzet van de IT-infrastructuur (de architectuur) en de werkelijk geconfigureerde hard- en software. (CIS Control 1, BIO 8.1.1).
  • +
  • Inrichten van een formeel proces voor het beheer van technische kwetsbaarheden. Dit omvat minimaal periodieke (geautomatiseerde) controle op de aanwezigheid van kwetsbaarheden in de te toetsen systemen, een risicoafweging en navolgbare afwerking daarvan of risicoacceptatie (BIO 12.6).
  • +
  • Beoordelen, patchen en updaten van kwetsbaarheden in IT-systemen als deze bekend zijn. (BIO 12.6.1)
  • +
  • Verwijderen of deactiveren van softwarecomponenten en services die niet noodzakelijk zijn voor het functioneren van het algoritme om beveiligingsrisico’s te beperken. (BIO 12.6.1)
  • +
  • Er vindt zonering plaats binnen de technische infrastructuur conform de uitgangspunten die zijn vastgelegd in een operationeel beleidsdocument, waarbij minimaal sprake is van scheiding tussen vertrouwde en onvertrouwde netwerken (BIO 9.4.2). Denk ook aan het scheiden in netwerken (BIO 13.1.3).
  • +
  • Actieve monitoring van de algoritme data vindt plaats zodat beveiligingsincidenten en -gebeurtenissen in een vroeg stadium worden gedetecteerd. (BIO 12.4.1, NCSC Handreiking voor implementatie van detectieoplossingen).
  • +
  • Netwerkverkeer en componenten worden actief gemonitord. (BIO 12.4.1).
  • +
  • Beoordeel of de data ten behoeve van het ontwikkelen en gebruiken van het algoritme voldoende is beveiligd. Maak hierin onderscheid tussen de trainingsdata, inputdata en de outputdata.
  • +
+

Risico

+

Oneigenlijke toegang van buitenaf kan plaatsvinden via zwakheden in het systeem.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
avg-12 - Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
+
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-03-informatiebeveiligingsincidenten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-03-informatiebeveiligingsincidenten/index.html new file mode 100644 index 0000000000..8d0d17fdb9 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-03-informatiebeveiligingsincidenten/index.html @@ -0,0 +1,991 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maak een noodplan voor beveiligingsincidenten - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Maak een noodplan voor beveiligingsincidenten

+ +

mon-03OrganisatieverantwoordelijkhedenMonitoring en beheerProjectleiderBeleid en adviesJuristTechnische robuustheid en veiligheidGovernance

+

Maatregel

+

Richt een proces in waarmee beveiligingsincidenten m.b.t. algoritmes en data zo spoedig mogelijk worden opgelost.

+

Toelichting

+

Er zijn procedures aanwezig die borgen dat beveiligingsincidenten m.b.t. algoritmes en data zo spoedig mogelijk, afhankelijk van de kwalificatie van het incident, worden opgepakt.

+

Risico

+

Te late reactie op incidenten kan ervoor zorgen dat de BIV (beschikbaarheid, integriteit en vertrouwelijkheid) van het algoritme of data kan worden aangetast.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
bio-01 - Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
avg-12 - Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen
+
+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-04-evalueer-bij-veranderingen-in-data/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-04-evalueer-bij-veranderingen-in-data/index.html new file mode 100644 index 0000000000..55eeac7773 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-04-evalueer-bij-veranderingen-in-data/index.html @@ -0,0 +1,999 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme.

+ +

mon-04Monitoring en beheerOntwikkelaarDataTechnische robuustheid en veiligheid

+

Maatregel

+

Monitor regelmatig op veranderingen in de inputdata. Bij geconstateerde veranderingen evalueer je de prestaties en de output van het algoritme.

+

Toelichting

+

De inputdata kan voortdurend veranderen. +Dat kan komen doordat de context waarin het algoritme wordt gebruikt verandert, of door een technische fout wanneer de data bijvoorbeeld niet goed is ingelezen of aangeleverd. +Het te laat opmerken van zo'n verandering kan grote gevolgen hebben. +Daarom is het belangrijk om regelmatig te controleren en evalueren of:

+ +

Zeker wanneer er gebruikt wordt gemaakt van informatie van derden, is het belangrijk om regelmatig te controleren of er veranderingen in de data zijn. Goede monitoring op datakwaliteit zorgt ervoor dat je voldoende controle hebt over de kwaliteit van de data, zelfs als je hiervoor afhankelijk bent van andere partijen.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +
Vereiste
aia-05 - Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria
aia-11 - Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem
aia-10 - Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig
avg-05 - Persoonsgegevens zijn juist en actueel
+
+

Risico

+

Door veranderingen in de data presteert het model niet meer zoals verwacht.

+

Bronnen

+ +

Voorbeeld

+

Heb jij een goed voorbeeld? Laat het ons weten!

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-05-meten-milieu-impact/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-05-meten-milieu-impact/index.html new file mode 100644 index 0000000000..a125276c04 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/7-mon-05-meten-milieu-impact/index.html @@ -0,0 +1,1029 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Meten, monitoren en rapporteren van milieu-impact van algoritmes - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Meten, monitoren en rapporteren van milieu-impact van algoritmes

+ + +

mon-05OntwerpMonitoring en beheerOntwikkelaarBeleid en adviesProjectleiderDuurzaamheid

+

Maatregel

+

Inventariseer en monitor de milieu-impact van algoritmes (bijvoorbeeld door het doen van een impact-assessment), zowel tijdens ontwerp als bij het gebruik, en rapporteer deze om duurzame keuzes mogelijk te maken.

+

Toelichting

+

Tref bijvoorbeeld de volgende maatregelen, wanneer je de milieu-impact van algoritmes gaat inventariseren of monitoren:

+

Digital Product Passports

+

De milieu-impact van algoritmes kan worden gemeten en geoptimaliseerd door een Digital Product Passport (DPP) te overwegen. +DPP's bieden een platform voor duurzame rapportage door middel van real-time informatie over onder andere CO₂-uitstoot, herkomst en energiegebruik, wat kan helpen om de ecologische voetafdruk van een algoritme transparant te maken. +Door deze gegevens structureel te verzamelen en te delen, kunnen gebruikers en bedrijven inzicht krijgen in de duurzaamheidsprestaties. +De milieu-impact van verschillende algoritmes/modellen kan een rol spelen bij het kiezen van een model in de ontwerpfase. Ook kan het ervoor zorgen dat je later kiest om een ander model te gebruiken, of het gebruik van een model of systeem zelfs te beëindigen.

+

Milieu-impact assessments

+

Wanneer de milieu-impact (in bepaalde mate) inzichtelijk is, kan er een milieu-impact assessment worden gedaan. Ga na of je organisatie die een heeft of overweeg deze te ontwikkelen.

+

Periodieke monitoring

+

Probeer ook periodieke monitoringsrapporten op te stellen waarin de milieu-impact van algoritmes wordt bijgehouden. +Hiermee vergroot je de duurzaamheid door tijdig verbeteringen te signaleren en door te voeren. Hierbij kan ook een onderscheid worden gemaakt in de impact tijdens de trainingsfase van het algoritme en de gebruiksfase.

+

Bijbehorende vereiste(n)

+
+Bekijk alle vereisten +

Geen vereisten beschikbaar voor deze maatregel.

+
+

Risico

+

Wanneer in de ontwerpfase niet wordt nagedacht over milieu-impact kan onbewust voor een algoritme of model worden gekozen dat meer energie verbruikt (en wellicht hogere kosten met zich mee brengt) dan een model dat misschien even goed presteert voor het gekozen doel. +Zonder structurele monitoring van de milieu-impact kan de organisatie onbewust bijdragen aan een hoge CO₂-uitstoot en hoge energieverbruikskosten.

+

Bronnen

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/images/MITRE_Maturity-Model-Overview_0.png b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/images/MITRE_Maturity-Model-Overview_0.png new file mode 100644 index 0000000000..762b18de99 Binary files /dev/null and b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/images/MITRE_Maturity-Model-Overview_0.png differ diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/index.html new file mode 100644 index 0000000000..821e18253b --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/maatregelen/index.html @@ -0,0 +1,5120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maatregelen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Maatregelen

+

Overzicht van aanbevolen maatregelen voor verantwoord gebruik van algoritmes en AI-systemen. Het zijn adviezen om te voldoen aan de vereisten voor overheden. Andere maatregelen zijn ook mogelijk.

+

Alle maatregelen zijn adviezen

+

De maatregelen zijn niet verplicht. Het zijn adviezen uit:

+
    +
  • Toetsingskader Algoritmes, Algemene Rekenkamer
  • +
  • Onderzoekskader algoritmes, Auditdienst Rijk
  • +
  • nationale en internationale standaarden (NEN, JTC21 en ISO)
  • +
  • onze werkgroepen
  • +
+

Voorbeeld

+
+

Onderzoek het ontwikkelde algoritme op onbewuste vooringenomenheid (discriminatie) door middel van een bias-analyse.

+
+

Deze maatregel helpt om te voldoen aan de vereiste om niet te discrimineren. Maar deze maatregel is niet verplicht. Je organisatie mag ook eigen maatregelen nemen. Zolang je uiteindelijk maar voldoet aan de vereiste.

+
+

Tip

+

Aantal maatregelen verschilt per situatie

+

Welke maatregelen handig zijn in jouw situatie, hangt af van:

+ +
+
+

Tip

+

Met één maatregel voldoe je soms aan meerdere vereisten.

+
+

Overzicht maatregelen

+
idMaatregelenRollenLevenscyclusOnderwerpen
org-01Bepaal of er genoeg experts beschikbaar zijn + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + +
org-04Stel beleid op voor een verantwoorde inzet van algoritmes binnen de organisatie. + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + + + + + + + + transparantie + + +
org-03Maak een plan voor het omgaan met risico’s + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + +
org-04Zorg voor politiek-bestuurlijk bewustzijn, betrokkenheid, en verantwoordelijkheid. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + + + + + + + + transparantie + + +
org-05Sluit algoritmegovernance aan op bestaande governancestructuren binnen de organisatie. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + +
org-06Gebruik een algoritme volwassenheidsmodel om te weten waar de organisatie staat + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + +
org-07Richt een algoritmegovernance in met three lines of defence + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + +
org-08Maak gebruik van beslismomenten in de algoritmelevenscyclus + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + +
org-09Richt algoritmegovernance op basis van de risicoclassificatie van algoritmes. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + +
org-10Taken en verantwoordelijkheden zijn toebedeeld in de algoritmegovernance + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + +
org-11Maak afspraken over het beheer van gebruikers + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + technische-robuustheid-en-veiligheid + + + + + + + + + governance + + +
org-12Controleer en verbeter regelmatig de kwaliteit van het algoritme + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + monitoring-en-beheer + + + + + + + + + governance + + + + + + + + + menselijke-controle + + +
org-13Maak afspraken over het beheer van wachtwoorden + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + technische-robuustheid-en-veiligheid + + + + + + + + + governance + + +
org-14Maak afspraken over het wijzigen van de code + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + technische-robuustheid-en-veiligheid + + + + + + + + + governance + + +
imp-10Stel een protocol vast voor de situatie dat er (een vermoeden van) discriminatie door een algoritme is geconstateerd en pas dit wanneer nodig toe. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + implementatie + + + + + + + + + bias-en-non-discriminatie + + +
pba-01Beschrijf het probleem dat het algoritme moet oplossen + + + + + + projectleider + + + + + + + + + probleemanalyse + + + + + + + + + governance + + + + + + + + + transparantie + + +
pba-02Beschrijf het doel van het algoritme + + + + + + projectleider + + + + + + + + + probleemanalyse + + + + + + + + + governance + + + + + + + + + transparantie + + +
pba-03Beschrijf waarom een algoritme het probleem moet oplossen + + + + + + projectleider + + + + + + + + + probleemanalyse + + + + + + + + + governance + + + + + + + + + menselijke-controle + + +
pba-04Overleg regelmatig met belanghebbenden + + + + + + projectleider + + + + + + + + + probleemanalyse + + + + + + + + + ontwerp + + + + + + + + + implementatie + + + + + + + + + governance + + + + + + + + + fundamentele-rechten + + +
pba-05Beschrijf de wettelijke grondslag voor de inzet van het algoritme + + + + + + jurist + + + + + + + + + probleemanalyse + + + + + + + + + governance + + + + + + + + + transparantie + + +
owp-01Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmes + + + + + + projectleider + + + + + + + + + ontwerp + + + + + + + + + implementatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + governance + + +
owp-11Voer voorafgaand aan een project een data beschikbaarheid, kwaliteit- en toegankelijkheidsanalayse uit. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + + + + + + + + data + + +
owp-03Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag + + + + + + projectleider + + + + + + + + + jurist + + + + + + + + + ontwerp + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + ontwikkelen + + + + + + + + + verificatie-en-validatie + + + + + + + + + implementatie + + + + + + + + + privacy-en-gegevensbescherming + + +
owp-04Beschrijf welke techniek gebruikt wordt voor de beoogde toepassing + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + technische-robuustheid-en-veiligheid + + +
owp-05Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horen + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + publieke-inkoop + + + + + + + + + governance + + +
owp-06Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + probleemanalyse + + + + + + + + + ontwerp + + + + + + + + + verificatie-en-validatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + fundamentele-rechten + + +
owp-07Maak een lijst van de meest kwetsbare groepen en bescherm hen extra + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + fundamentele-rechten + + +
owp-08Bepaal welke documenten voor hoe lang gearchiveerd moeten worden + + + + + + ontwikkelaar + + + + + + + + + projectleider + + + + + + + + + jurist + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + transparantie + + +
owp-09Een model-verwerkersovereenkomst is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + monitoring-en-beheer + + + + + + + + + publieke-inkoop + + + + + + + + + privacy-en-gegevensbescherming + + +
owp-09Stel een multidisciplinair team samen bij het ontwikkelen of inkopen van algoritmes. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + +
owp-10Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + verificatie-en-validatie + + + + + + + + + implementatie + + + + + + + + + technische-robuustheid-en-veiligheid + + +
owp-11Koop duurzaam algoritmes in + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + + + + + + + + duurzaamheid + + +
owp-02Beschrijf welke data gebruikt wordt voor de beoogde toepassing + + + + + + ontwikkelaar + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + data + + +
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders. + + + + + + projectleider + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + publieke-inkoop + + +
owp-12Ontwerp algoritmes zo eenvoudig mogelijk + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + duurzaamheid + + +
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + + + + + + + + transparantie + + +
owp-14Maak het opstellen van een verwerkersovereenkomst onderdeel van de aanbesteding als persoonsgegevens worden verwerkt. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + monitoring-en-beheer + + + + + + + + + publieke-inkoop + + + + + + + + + privacy-en-gegevensbescherming + + +
owp-15Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + +
owp-16Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + verificatie-en-validatie + + + + + + + + + publieke-inkoop + + + + + + + + + data + + +
owp-17Aansprakelijkheidsvoorwaarden van een aanbieder worden beoordeeld in de aanbesteding + + + + + + jurist + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + implementatie + + + + + + + + + publieke-inkoop + + +
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding. + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + +
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren + + + + + + projectleider + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + publieke-inkoop + + +
owp-20Vul technische documentatie van aanbieder aan met relevante informatie vanuit de gebruiksverantwoordelijke. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + + + + + + + + transparantie + + +
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + +
owp-22Bepaal in een aanbesteding of algoritmes van een aanbieder bepalende invloed hebben in een besluit richting personen + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + + + + + + + + transparantie + + +
owp-23Laat de aanbieder aangeven welke mate van opleiding en ondersteuning bij de implementatie nodig is om de beoogde algoritmes verantwoord te gebruiken. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + +
owp-24Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstraject + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + technische-robuustheid-en-veiligheid + + + + + + + + + publieke-inkoop + + +
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + +
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + +
owp-27Maak (contractuele) afspraken over data en artefacten met een aanbieder + + + + + + jurist + + + + + + + + + ontwerp + + + + + + + + + implementatie + + + + + + + + + publieke-inkoop + + +
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + +
pba-04Stel vast welke betrokkenen geïnformeerd moeten worden en welke informatie zij nodig hebben. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + transparantie + + +
owp-07Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + transparantie + + +
imp-10Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + validatie-en-verificatie + + + + + + + + + transparantie + + + + + + + + + publieke-inkoop + + +
org-02Pas vastgestelde beleidskaders toe + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + + + + + + + + transparantie + + +
dat-01Controleer de datakwaliteit + + + + + + ontwikkelaar + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + data + + +
dat-02Maak waardevolle data vindbaar, toegankelijk, interoperabel en herbruikbaar (FAIR) binnen en buiten de eigen organisatie. + + + + + + ontwikkelaar + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + data + + +
dat-04Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure + + + + + + jurist + + + + + + + + + projectleider + + + + + + + + + ontwikkelen + + + + + + + + + monitoring-en-beheer + + + + + + + + + technische-robuustheid-en-veiligheid + + + + + + + + + privacy-en-gegevensbescherming + + +
dat-05Bescherm persoonsgegevens door data te anonimiseren, pseudonimiseren of te aggregeren + + + + + + ontwikkelaar + + + + + + + + + jurist + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + ontwikkelen + + + + + + + + + privacy-en-gegevensbescherming + + +
dat-06Controleer de auteursrechten van eigen data + + + + + + jurist + + + + + + + + + ontwerp + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + data + + +
dat-07Gebruik duurzame datacenters + + + + + + ontwikkelaar + + + + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + ontwikkelen + + + + + + + + + implementatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + duurzaamheid + + +
dat-07Gebruik bij machine learning technieken gescheiden train-, test- en validatiedata en houdt rekening met underfitting en overfitting. + + + + + + ontwikkelaar + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + ontwikkelen + + + + + + + + + data + + + + + + + + + technische-robuustheid-en-veiligheid + + + + + + + + + bias-en-non-discriminatie + + +
dat-08Zorg dat je controle of eigenaarschap hebt over de data + + + + + + projectleider + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + data + + + + + + + + + publieke-inkoop + + +
dat-09Beperk de omvang van datasets voor energie-efficiëntie + + + + + + ontwikkelaar + + + + + + + + + projectleider + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + ontwikkelen + + + + + + + + + data + + + + + + + + + duurzaamheid + + +
owk-01Ontwerp en ontwikkel het algoritme volgens de principes van ‘security by design’ + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + ontwikkelen + + + + + + + + + technische-robuustheid-en-veiligheid + + +
owk-02Maak een noodplan voor het stoppen van het algoritme + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + ontwikkelen + + + + + + + + + implementatie + + + + + + + + + governance + + + + + + + + + menselijke-controle + + +
owk-03Analyseer de privacy-risico’s en neem maatregelen om deze risico’s laag te houden + + + + + + projectleider + + + + + + + + + jurist + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + monitoring-en-beheer + + + + + + + + + privacy-en-gegevensbescherming + + +
owk-04Maak logbestanden waarin staat wie wanneer toegang had tot de data en de code + + + + + + ontwikkelaar + + + + + + + + + ontwikkelen + + + + + + + + + monitoring-en-beheer + + + + + + + + + technische-robuustheid-en-veiligheid + + +
owk-05Kies energiezuinige programmeermethoden + + + + + + ontwikkelaar + + + + + + + + + ontwikkelen + + + + + + + + + duurzaamheid + + +
owk-06Optimaliseer AI-trainingsprocessen voor energie-efficiëntie + + + + + + ontwikkelaar + + + + + + + + + ontwikkelen + + + + + + + + + duurzaamheid + + +
ver-01Controleer regelmatig of het algoritme werkt zoals het bedoeld is + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + ontwikkelen + + + + + + + + + verificatie-en-validatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + technische-robuustheid-en-veiligheid + + + + + + + + + bias-en-non-discriminatie + + +
ver-01Toets het algoritme op bias + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwikkelaar + + + + + + + + + jurist + + + + + + + + + ontwerp + + + + + + + + + verificatie-en-validatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + bias-en-non-discriminatie + + +
ver-03Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleid + + + + + + jurist + + + + + + + + + verificatie-en-validatie + + + + + + + + + governance + + + + + + + + + transparantie + + +
imp-01Stel een werkinstructie op voor gebruikers. + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + implementatie + + + + + + + + + menselijke-controle + + + + + + + + + transparantie + + +
imp-02Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren + + + + + + ontwikkelaar + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + implementatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + bias-en-non-discriminatie + + + + + + + + + technische-robuustheid-en-veiligheid + + +
imp-03Richt de juiste menselijke controle in van het algoritme + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + implementatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + menselijke-controle + + + + + + + + + governance + + +
imp-04Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + implementatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + transparantie + + +
imp-06Spreek af hoe de organisatie omgaat met privacy-verzoeken + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + jurist + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + ontwikkelen + + + + + + + + + privacy-en-gegevensbescherming + + + + + + + + + governance + + + + + + + + + data + + +
imp-05Spreek af hoe medewerkers omgaan met het algoritme. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + implementatie + + + + + + + + + governance + + + + + + + + + menselijke-controle + + +
imp-07Vermeld het gebruik van persoonsgegevens in een privacyverklaring + + + + + + projectleider + + + + + + + + + jurist + + + + + + + + + implementatie + + + + + + + + + privacy-en-gegevensbescherming + + + + + + + + + transparantie + + +
imp-09Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme en monitor dit proces. + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + implementatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + governance + + +
imp-08Vermeld het gebruik van persoonsgegevens in het verwerkingsregister + + + + + + projectleider + + + + + + + + + jurist + + + + + + + + + implementatie + + + + + + + + + transparantie + + + + + + + + + privacy-en-gegevensbescherming + + +
imp-01Maak een openbaar besluit over de inzet van het algoritme + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + implementatie + + + + + + + + + governance + + + + + + + + + transparantie + + +
mon-01Maak back-ups van algoritmes + + + + + + ontwikkelaar + + + + + + + + + beleid-en-advies + + + + + + + + + ontwikkelen + + + + + + + + + monitoring-en-beheer + + + + + + + + + technische-robuustheid-en-veiligheid + + +
mon-02Beveilig de software + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwikkelaar + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + ontwikkelen + + + + + + + + + monitoring-en-beheer + + + + + + + + + technische-robuustheid-en-veiligheid + + +
mon-03Maak een noodplan voor beveiligingsincidenten + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + jurist + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + monitoring-en-beheer + + + + + + + + + technische-robuustheid-en-veiligheid + + + + + + + + + governance + + +
mon-04Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme. + + + + + + ontwikkelaar + + + + + + + + + monitoring-en-beheer + + + + + + + + + data + + + + + + + + + technische-robuustheid-en-veiligheid + + +
mon-05Meten, monitoren en rapporteren van milieu-impact van algoritmes + + + + + + ontwikkelaar + + + + + + + + + beleid-en-advies + + + + + + + + + projectleider + + + + + + + + + ontwerp + + + + + + + + + monitoring-en-beheer + + + + + + + + + duurzaamheid + + +
+ +

Help ons deze pagina te verbeteren

+

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-01-ai-geletterdheid/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-01-ai-geletterdheid/index.html new file mode 100644 index 0000000000..6dc1bb88c9 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-01-ai-geletterdheid/index.html @@ -0,0 +1,988 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Personeel en gebruikers zijn voldoende AI-geletterd - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Personeel en gebruikers zijn voldoende AI-geletterd

+ +

aia-01OrganisatieverantwoordelijkhedenProjectleiderMenselijke controleGovernance

+

Vereiste

+

Aanbieders en gebruiksverantwoordelijken van AI-systemen nemen maatregelen om, zoveel als mogelijk, te zorgen voor een toereikend niveau van AI-geletterdheid bij hun personeel en andere personen die namens hen AI-systemen exploiteren en gebruiken, en houden daarbij rekening met hun technische kennis, ervaring, onderwijs en opleiding en de context waarin de AI-systemen zullen worden gebruikt, evenals met de personen of groepen personen ten aanzien van wie de AI-systemen zullen worden gebruikt.

+

Toelichting

+

Aanbieders en gebruiksverantwoordelijken van AI-systemen nemen maatregelen om ervoor te zorgen dat hun personeel en andere betrokkenen voldoende kennis hebben van AI. +Dit omvat het bevorderen van kennis over de techniek, evenals kennis over de context waarin de AI-systemen worden gebruikt en de gebruikers van deze systemen. +Daarnaast moet er worden ingezet op het delen van ervaringen, passend onderwijs en opleiding van inidividuen. +Het doel is om een adequaat niveau van begrip en vaardigheden te waarborgen, wat bijdraagt aan een verantwoord gebruik van AI en het minimaliseren van risico's.

+

Bronnen

+

Artikel 4 Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAI-model voor algemene doeleindenhoog risico AI-systeemverboden AIgeen hoog risico AI-systeemAanbiederGebruiksverantwoordelijke

+

Risico

+

Onvoldoende AI-geletterdheid kan leiden tot misbruik of onjuist gebruik van AI-systemen en tot situaties waarin AI-systemen verkeerd worden ingezet, onbedoeld gebruikt worden voor taken waar ze niet geschikt voor zijn, of dat de veiligheid en effectiviteit van de systemen in het gedrang komt. +Dit kan leiden tot inefficiëntie, fouten, en mogelijk schade aan organisaties, gebruikers of betrokkenen.

+

Maatregelen

+
idMaatregelen
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-23Laat de aanbieder aangeven welke mate van opleiding en ondersteuning bij de implementatie nodig is om de beoogde algoritmes verantwoord te gebruiken.
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
imp-01Stel een werkinstructie op voor gebruikers.
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-01-verboden-AI-praktijken/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-01-verboden-AI-praktijken/index.html new file mode 100644 index 0000000000..0d25260a98 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-01-verboden-AI-praktijken/index.html @@ -0,0 +1,999 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Verboden AI-systemen mogen niet worden gebruikt. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Verboden AI-systemen mogen niet worden gebruikt.

+ +

aia-01OrganisatieverantwoordelijkhedenProbleemanalyseProjectleiderGovernance

+

Vereiste

+

Verboden AI-systemen mogen niet worden gebruikt.

+

Toelichting

+

Afgezien van de vele nuttige toepassingen van AI kan zij ook worden misbruikt en nieuwe en krachtige instrumenten voor manipulatie, uitbuiting en sociale controle opleveren. +Dergelijke praktijken zijn bijzonder schadelijk en abusief en moeten worden verboden omdat zij in strijd zijn met de waarden van de Unie, namelijk eerbied voor de menselijke waardigheid, vrijheid, gelijkheid, democratie en de rechtsstaat, en met de grondrechten van de Unie die zijn vastgelegd in het Handvest, waaronder het recht op non-discriminatie, gegevensbescherming en privacy, en de rechten van het kind.

+

In de volgende gevallen gaat het om een verboden toepassing op grond van de AI-Verordening: +- gebruik kan gaan maken van subliminale technieken om mensen onbewust of bewust kunnen manipuleren, waardoor ze beslissingen nemen die ze anders niet zouden hebben genomen? +- gebruik kan gaan maken van kwetsbaarheden van individuen of specifieke groepen, zoals leeftijd, handicaps of sociale/economische omstandigheden, om het gedrag van die personen aanzienlijk te verstoren, wat kan leiden tot aanzienlijke schade bij henzelf of anderen? +- gebruikt kan worden om natuurlijke personen of groepen gedurende een periode te evalueren of te classificeren op basis van hun sociale gedrag of afgeleide persoonlijke kenmerken? +- gebruikt kan worden voor risicobeoordelingen van natuurlijke personen om het risico op crimineel gedrag te voorspellen, gebaseerd op profilering of persoonlijkheidskenmerken? (Dit geldt niet voor AI-systemen die worden gebruikt om menselijke beoordelingen te ondersteunen, gebaseerd op objectieve en verifieerbare feiten die rechtstreeks verband houden met criminele activiteiten) +- gebruikt kan worden om databanken voor gezichtsherkenning aan te leggen of aan te vullen door willekeurige gezichtsafbeeldingen van internet of CCTV-beelden te scrapen? +- gebruikt kan worden om emoties van een persoon op de werkplek of in het onderwijs af te leiden? (Dit is niet van toepassing als het gebruik van het AI-systeem is bedoeld voor medische- of veiligheidsdoeleinden) +- gebruikt kan worden om natuurlijke personen individueel in categorieën in te delen op basis van biometrische gegevens om ras, politieke opvattingen, lidmaatschap van een vakbond, religieuze of levensbeschouwelijke overtuigingen, seksleven of seksuele geaardheid af te leiden? (Dit verbod geldt niet voor het labelen of filteren van rechtmatig verkregen biometrische datasets, zoals afbeeldingen, op basis van biometrische gegevens, of voor categorisering van biometrische gegevens op het gebied van rechtshandhaving) +- gebruikt kan worden als een biometrisch systeem in de publieke ruimte voor identificatie op afstand in real-time, met het oog op de rechtshandhaving?

+

Er zijn een tweetal uitzonderingen voor het inzetten van verbonden AI-systemen. Deze zijn: +- Er is sprake van een rechtshandhavingsactiviteit i.v.m. een specifiek misdrijf (terrorisme, mensenhandel, seksuele uitbuiting van kinderen en materiaal over seksueel misbruik van kinderen, illegale handel in verdovende middelen en psychotrope stoffen, illegale handel in wapens, munitie en explosieven, moord, zware mishandeling, illegale handel in menselijke organen en weefsels, illegale handel in nucleaire en radioactieve stoffen, ontvoering, wederrechtelijke vrijheidsberoving en gijzeling, misdrijven die onder de rechtsmacht van het Internationaal Strafhof vallen, kaping van vliegtuigen/schepen, verkrachting, milieucriminaliteit, georganiseerde of gewapende diefstal, sabotage, deelneming aan een criminele organisatie die betrokken is bij een of meer van de bovengenoemde misdrijven). +- Er is sprake van gerichte opsporing van specifieke slachtoffers, ontvoering, mensenhandel en seksuele uitbuiting van mensen, vermiste personen; of het voorkomen van bedreigingen voor het leven of de fysieke veiligheid van personen of het reageren op de huidige of voorzienbare dreiging van een terreuraanslag.

+

Bepaal in een vroege fase en bij het onderbouwen van het gebruik van een AI-systeem of de beoogde toepassing is toegestaan.

+

Bronnen

+

Artikel 5 Verordening Artificiële Intelligentie.

+

Overweging 29 - 44 AI-Verordening.

+

Wanneer van toepassing?

+

AI-systeemverboden AIAanbiederGebruiksverantwoordelijke

+

Risico

+

Er ontstaat een onrechtmatige situatie voor een organisatie als deze AI inzet, die verboden is.

+

Maatregelen

+
idMaatregelen
pba-03Beschrijf waarom een algoritme het probleem moet oplossen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-02-documentatie-beoordeling-niet-hoog-risico-ai/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-02-documentatie-beoordeling-niet-hoog-risico-ai/index.html new file mode 100644 index 0000000000..2c0c399a42 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-02-documentatie-beoordeling-niet-hoog-risico-ai/index.html @@ -0,0 +1,994 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd

+ +

aia-02OntwerpProjectleiderGovernanceTransparantie

+

Vereiste

+

Een aanbieder die van mening is dat een in bijlage III bedoeld AI-systeem geen hoog risico inhoudt, documenteert zijn beoordeling voordat dat systeem in de handel wordt gebracht of in gebruik wordt gesteld. +Die aanbieder is onderworpen aan de registratieverplichting van artikel 49, lid 2 AI-verordening. +Op verzoek van de nationale bevoegde autoriteiten verstrekt de aanbieder de documentatie van de beoordeling.

+

Toelichting

+

Een aanbieder die oordeelt dat een AI-systeem niet valt onder hoog-risico zoals gefedinieerd in bijlage III van de AI-verordening, documenteert deze beoordeling voorafgaand aan het in de handel brengen of in gebruik nemen van het systeem. +Op verzoek van de nationale autoriteiten verstrekt de aanbieder de documentatie van de beoordeling. +De aanbieder of in voorkomend geval de gemachtigd registreert zichzelf en het betreffende AI-systeem in de EU-databank (artikel 71 AI-verordening). +AI-systemen met een hoog risico als bedoeld in punt 2 van bijlage III (kritieke infrastructuur) worden op nationaal niveau geregistreerd.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Gebrek aan transparantie en verantwoording bij risicobeoordeling kan leiden tot onrechtmatig in de markt brengen en onrechtmatig gebruik van risicovolle AI-systemen.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-03-risicobeheersysteem/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-03-risicobeheersysteem/index.html new file mode 100644 index 0000000000..da9140569d --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-03-risicobeheersysteem/index.html @@ -0,0 +1,991 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem

+ +

aia-03OrganisatieverantwoordelijkhedenProjectleiderGovernance

+

Vereiste

+

Voor AI-systemen met een hoog risico wordt een systeem voor risicobeheer vastgesteld, uitgevoerd, gedocumenteerd en in stand gehouden.

+

Toelichting

+

Het systeem voor risicobeheer moet bestaan uit een tijdens de gehele levensduur van een AI-systeem met een hoog risico doorlopend en gepland iteratief proces. +Dit proces moet gericht zijn op het vaststellen en beperken van de relevante risico’s van AI-systemen voor de gezondheid, veiligheid en grondrechten. +Het systeem voor risicobeheer moet periodiek worden geëvalueerd en geactualiseerd om de blijvende doeltreffendheid ervan te waarborgen, alsook de motivering en de documentatie van eventuele significante besluiten en maatregelen die op grond van de AI-verordening zijn genomen.

+

Dit proces moet ervoor zorgen dat de aanbieder de risico’s of negatieve effecten vaststelt en risicobeperkende maatregelen uitvoert voor de bekende en de redelijkerwijs te voorziene risico’s van AI-systemen voor de gezondheid, veiligheid en grondrechten. +Hierin moeten ook maatregelen zitten voor redelijkerwijs te voorzien misbruik, met inbegrip van de mogelijke risico’s die voortvloeien uit de wisselwerking tussen het AI-systeem en de omgeving waarin het werkt. +Het systeem voor risicobeheer moet de passendste risicobeheersmaatregelen vaststellen. +Bij het vaststellen van de passendste risicobeheersmaatregelen moet de aanbieder de gemaakte keuzes documenteren en toelichten en, in voorkomend geval, deskundigen en externe belanghebbenden betrekken. +Bij het vaststellen van het redelijkerwijs te voorzien misbruik van AI-systemen met een hoog risico moet de aanbieder aandacht hebben voor het gebruik van AI-systemen waarvan, hoewel zij niet rechtstreeks onder het beoogde doel vallen en niet in de gebruiksinstructies worden vermeld, mag worden verwacht dat zij kunnen voortvloeien uit gemakkelijk voorspelbaar menselijk gedrag.

+

Bronnen

+

Artikel 9(1) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Het ontbreken van risicobeheer kan leiden tot schade aan gebruikers of derden en wettelijke aansprakelijkheid voor de aanbieder.

+

Maatregelen

+
idMaatregelen
org-03Maak een plan voor het omgaan met risico’s
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
org-02Pas vastgestelde beleidskaders toe
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-04-risicobeoordeling-voor-jongeren-en-kwetsbaren/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-04-risicobeoordeling-voor-jongeren-en-kwetsbaren/index.html new file mode 100644 index 0000000000..ec9a5f3e0d --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-04-risicobeoordeling-voor-jongeren-en-kwetsbaren/index.html @@ -0,0 +1,984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen

+ +

aia-04OntwerpMonitoring en beheerProjectleiderBeleid en adviesFundamentele rechtenBias en non discriminatie

+

Vereiste

+

Bij het doorlopen, periodieke systematische toetsing en actualisatie van het risicosysteem nemen aanbieders in overweging of het beoogde doel van het AI-systeem negatieve effecten zal hebben op personen jonger dan 18 jaar of andere kwetsbare groepen.

+

Toelichting

+

Bij de uitvoering van het in de leden 1 tot en met 7 van art. 9 AI-Verordening bedoelde systeem voor risicobeheer houden aanbieders rekening met de vraag of het beoogde doel van het AI-systeem met een hoog risico waarschijnlijk negatieve gevolgen zal hebben voor personen jonger dan 18 jaar en, in voorkomend geval, voor andere groepen kwetsbare personen. Er moet een grondige risicoanalyse plaatsvinden en worden vertaald naar mitigerende maatregelen om het risico te elimineren of te mitigeren.

+

Bronnen

+

Artikel 9(9) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Niet adequaat adresseren van risico's voor jongeren en kwetsbare groepen kan leiden tot ernstige ethische en maatschappelijke schade.

+

Maatregelen

+
idMaatregelen
owp-07Maak een lijst van de meest kwetsbare groepen en bescherm hen extra
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-05-data-kwaliteitscriteria/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-05-data-kwaliteitscriteria/index.html new file mode 100644 index 0000000000..f8078d1e24 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-05-data-kwaliteitscriteria/index.html @@ -0,0 +1,992 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria

+ +

aia-05Dataverkenning en datapreparatieVerificatie en validatieProjectleiderOntwikkelaarData

+

Vereiste

+

AI-systemen met een hoog risico die technieken gebruiken die het trainen van AI-modellen met data omvatten, worden ontwikkeld op basis van datasets voor training, validatie en tests die voldoen aan de kwaliteitscriteria telkens wanneer dergelijke datasets worden gebruikt.

+

Toelichting

+

AI-systemen met een hoog risico die data gebruiken voor het trainen van AI-modellen, moeten gebaseerd zijn op datasets die voldoen aan specifieke kwaliteitscriteria. +Deze criteria zorgen ervoor dat de data geschikt zijn voor training, validatie en tests, wat de betrouwbaarheid en nauwkeurigheid van het AI-systeem waarborgt.

+

Deze vereiste houdt in dat de gebruikte datasets onder meer moeten voldoen aan:

+
    +
  • datasets voor training, validatie en tests worden onderworpen aan praktijken op het gebied van databeheer die stroken met het beoogde doel van het AI-systeem met een hoog risico. Dit heeft in het bijzonder betrekking op relevante ontwerpkeuzes, processen voor dataverzameling, verwerkingsactiviteiten voor datavoorbereiding, het opstellen van aannames met name betrekking tot de informatie die de data moeten meten en vertegenwoordigen, beschikbaarheid, kwantiteit en geschiktheid van de datasets en een beoordeling op mogelijke vooringenomenheid en passende maatregelen om deze vooringenomenheid op te sporen, te voorkomen en te beperken.
  • +
  • datasets voor training, validatie en tests zijn relevant, voldoende representatief en zoveel mogelijk foutenvrij en volledig met het oog op het beoogde doel.
  • +
  • Er wordt rekening gehouden met de eigenschappen of elementen die specifiek zijn voor een bepaalde geografische, contextuele, functionele of gedragsomgeving waarin het AI-systeem wordt gebruikt.
  • +
+

Bronnen

+

Artikel 10(1) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Gebruik van laagkwalitatieve of bevooroordeelde datasets kan leiden tot onbetrouwbare en oneerlijke AI-besluitvorming. +Onvoldoende kwaliteitsborging van testdata kan leiden tot vertekende resultaten en gebrekkige prestaties van het AI-systeem bij gebruik in de praktijk.

+

Maatregelen

+
idMaatregelen
owp-11Voer voorafgaand aan een project een data beschikbaarheid, kwaliteit- en toegankelijkheidsanalayse uit.
owp-02Beschrijf welke data gebruikt wordt voor de beoogde toepassing
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
org-02Pas vastgestelde beleidskaders toe
dat-01Controleer de datakwaliteit
dat-08Zorg dat je controle of eigenaarschap hebt over de data
ver-03Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleid
mon-04Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme.
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-06-technische-documentatie/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-06-technische-documentatie/index.html new file mode 100644 index 0000000000..530caf2069 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-06-technische-documentatie/index.html @@ -0,0 +1,1019 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+ +
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie

+ +

aia-06Dataverkenning en datapreparatieOntwikkelenVerificatie en validatieProjectleiderOntwikkelaarTransparantieTechnische robuustheid en veiligheid

+

Vereiste

+

De technische documentatie van een AI-systeem met een hoog risico wordt opgesteld voordat dit systeem in de handel wordt gebracht of in gebruik wordt gesteld, en wordt geactualiseerd. +De technische documentatie wordt op zodanige wijze opgesteld dat wordt aangetoond dat het AI-systeem met een hoog risico in overeenstemming is met de eisen van Afdeling 2 van de AI-verordening en dat nationale bevoegde autoriteiten en aangemelde instanties over de noodzakelijke, op heldere en begrijpelijke wijze gestelde informatie beschikken om de overeenstemming van het AI-systeem met deze voorschriften te kunnen beoordelen.

+

Toelichting

+

De technische documentatie van een AI-systeem met een hoog risico wordt voorafgaand aan het in de handel brengen of in gebruik nemen opgesteld en regelmatig bijgewerkt. +Deze documentatie moet duidelijk aantonen dat het systeem voldoet aan de vereisten van de verordening, zodat nationale autoriteiten en aangemelde instanties de naleving kunnen beoordelen.

+

De documentatie bevat ten minste de elementen zoals uiteengezet in bijlage IV:

+
    +
  1. Een algemene beschrijving van het AI-syseem.
  2. +
  3. Een gedetailleerde beschrijving van de elementen van het AI-systeem en het proces voor de ontwikkeling ervan.
  4. +
  5. Gedetailleerde informatie over de monitoring, werking en controle van het AI-systeem.
  6. +
  7. Een beschrijving van de geschiktheid van de prestatiestatistieken.
  8. +
  9. Een gedetailleerde beschrijving van het systeem voor risicobeheer overeenkomstig artikel 9 van de AI verordening.
  10. +
  11. Een beschrijving van de wijzigingen die tijdens de levensduur worden aangebracht.
  12. +
  13. Een lijst van normen die worden toegepast.
  14. +
  15. Een exemplaar van de EU-conformiteitsverklaring.
  16. +
  17. Een gedetailleerde beschrijving voor evaluatie van prestaties nadat het systeem in handel is gebracht, in overeenstemming met artikel 72 van de AI-verordening.
  18. +
+

De documentatie kan opgevraagd worden door een bevoegde autoriteit met een met redenen omkleed verzoek, zoals toegelicht in artikel 21 van de AI-verordening.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Het ontbreken van de benodigde informatie over de algoritmische toepassing of AI-systeem kan ertoe leiden dat de technische functionering onduidelijk is. +Dat kan tot problemen leiden bij de verantwoording, controle en het beheer. +Onvolledige of ontoereikende technische documentatie kan leiden tot onduidelijkheid over de conformiteit van het AI-systeem met de regelgeving, wat de veiligheid en naleving in gevaar kan brengen.

+

Voorbeeld

+ +

Maatregelen

+
idMaatregelen
owp-04Beschrijf welke techniek gebruikt wordt voor de beoogde toepassing
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-07-automatische-logregistratie/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-07-automatische-logregistratie/index.html new file mode 100644 index 0000000000..19f78e4848 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-07-automatische-logregistratie/index.html @@ -0,0 +1,1002 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens

+ + + +

aia-07OntwikkelenMonitoring en beheerOntwikkelaarProjectleiderTechnische robuustheid en veiligheid

+

Vereiste

+

Algoritmes en AI-systemen zijn dusdanig technisch vormgegeven dat gebeurtenissen gedurende hun levenscyclus automatisch worden geregistreerd (“logs”).

+

Toelichting

+

AI-systemen met een hoog risico zijn ontworpen met functionaliteiten die gebeurtenissen gedurende hun levenscyclus automatisch registreren. +Dit wordt vaak aangeduid als "logs". +Deze logs bieden een traceerbaarheidsmechanisme waarmee gebruiksverantwoordelijken en autoriteiten incidenten en fouten kunnen analyseren, naleving kunnen controleren en mogelijke risico's kunnen identificeren en aanpakken. +Het doel van deze registratie is om de transparantie en verantwoordingsplicht van AI-systemen te vergroten, waardoor het beheer van risico's en incidenten verbetert.

+

Voor AI-systemen met een hoog-risico voorziet de loggingcapaciteit ten minste in:

+
    +
  1. de registratie van de duur van elk gebruik van het systeem;
  2. +
  3. de referentiedatabank aan de hand waarvan de inputdata zijn gecontroleerd door het systeem;
  4. +
  5. de inputdata ten aanzien waarvan de zoekopdracht een match heeft opgeleverd;
  6. +
  7. de identificatie van natuurlijke personen die betrokken zijn bij de verificatie van de resultaten. Specifiek voor gebruiksverantwoordelijken
  8. +
+

Voor AI-systemen die door bestuursorganen worden gebruikt of AI-systmen die persoonsgegevens verwerken leveren de BIO en AVG vergelijkbare verplichingen op die ook van toepassing zijn op AI-systmen die niet gezien worden als een AI-systeem met hoog risico. Daarbij komen nog verplichtingen om de logs doorlopend of periodiek te monitoren op incidenten.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenhoog risico AI-systeemAanbieder

+

Risico

+

Ontbreken van automatische logregistratie kan leiden tot een gebrek aan transparantie en traceerbaarheid van het AI-systeem, wat het vermogen om verantwoordelijkheid te nemen en eventuele problemen aan te pakken belemmert en betrokkenen wiens persoonsgegevens worden verwerkt of geraakt worden door beslissingen van het AI-systeem in hun rechten kunnen worden beperkt.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owk-01Ontwerp en ontwikkel het algoritme volgens de principes van ‘security by design’
owk-04Maak logbestanden waarin staat wie wanneer toegang had tot de data en de code
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-08-transparantie-aan-gebruiksverantwoordelijken/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-08-transparantie-aan-gebruiksverantwoordelijken/index.html new file mode 100644 index 0000000000..5329f2f4ef --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-08-transparantie-aan-gebruiksverantwoordelijken/index.html @@ -0,0 +1,987 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen

+ +

aia-08OntwerpOntwikkelenMonitoring en beheerProjectleiderOntwikkelaarBeleid en adviesTransparantie

+

Vereiste

+

AI-systemen met een hoog risico worden op zodanige wijze ontworpen en ontwikkeld dat de werking ervan voldoende transparant is om gebruiksverantwoordelijken in staat te stellen de output van een systeem te interpreteren en op passende wijze te gebruiken. +Een passende soort en mate van transparantie wordt gewaarborgd met het oog op de naleving van de relevante verplichtingen van de aanbieder en de gebruiksverantwoordelijke zoals uiteengezet in afdeling 3 van Artikel 13 van de AI verordening.

+

Toelichting

+

AI-systemen met een hoog risico worden ontworpen en ontwikkeld met een hoge mate van transparantie, zodat gebruikers de output van het systeem kunnen begrijpen en correct kunnen gebruiken. +Dit zorgt ervoor dat de aanbieders en gebruikers kunnen voldoen aan de verplichtingen zoals uiteengezet in de relevante regelgeving, waardoor de betrouwbaarheid en verantwoordelijkheid van het gebruik van deze systemen worden verzekerd. +In artikel 13 lid 3 is een overzicht gegeven van de informatie die gebruikersinstructies tenminste moeten bevatten.

+

Bronnen

+

Artikel 13(1) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Onvoldoende transparantie kan leiden tot een gebrek aan begrip over hoe het AI-systeem functioneert, wat de effectiviteit van de inzet ervan kan belemmeren en de naleving van wettelijke verplichtingen in gevaar kan brengen.

+

Maatregelen

+
idMaatregelen
owp-05Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
owp-07Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.
ver-03Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleid
imp-04Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister
imp-01Maak een openbaar besluit over de inzet van het algoritme
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-09-menselijk-toezicht/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-09-menselijk-toezicht/index.html new file mode 100644 index 0000000000..80dddb3fcb --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-09-menselijk-toezicht/index.html @@ -0,0 +1,1001 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen staan onder menselijk toezicht - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen staan onder menselijk toezicht

+ +

aia-09OntwerpOntwikkelenMonitoring en beheerProjectleiderMenselijke controle

+

Vereiste

+

AI-systemen met een hoog risico worden zodanig ontworpen en ontwikkeld, met inbegrip van passende mens-machine-interface-hulpmiddelen, dat hierop tijdens de periode dat zij worden gebruikt, op doeltreffende wijze toezicht kan worden uitgeoefend door natuurlijke personen.

+

Toelichting

+

Het menselijk toezicht is gericht op het voorkomen of beperken van de risico’s voor de gezondheid, veiligheid of grondrechten die zich kunnen voordoen wanneer een AI-systeem met een hoog risico wordt gebruikt in overeenstemming met het beoogde doel ervan of in een situatie van redelijkerwijs te voorzien misbruik, met name wanneer dergelijke risico’s blijven bestaan ondanks de toepassing van andere eisen van deze afdeling.

+

De toezichtmaatregelen staan in verhouding met de risico's, de mate van autonomie en de gebruikscontext van het AI-systeem met een hoog risico. +Hierbij kan het gaan om:

+
    +
  1. door de aanbieder bepaalde maatregelen die waar technisch haalbaar in het AI-systeem met een hoog risico worden ingebouwd voordat dit systeem in de handel wordt gebracht of in gebruik wordt gesteld;
  2. +
  3. door de aanbieder bepaalde maatregelen voordat het AI-systeem met een hoog risico in de handel wordt gebracht of in gebruik wordt gesteld en die passend zijn om door de gebruiksverantwoordelijke te worden uitgevoerd.
  4. +
+

De natuurlijke personen die verantwoordelijk zijn voor het menselijk toezicht, moeten in staat worden gesteld om waar passend en in verhouding tot de omstandigheden het volgende te kunnen doen:

+
    +
  1. Goed kunnen begrijpen van de relevante capaciteiten en beperkingen van het AI-systeem met een hoog risico. +Met het oog op het opsporen en aanpakken van onregelmatigheden, storingen en onverwachte prestaties moet de werking van het AI-systeem goed kunnen worden begrepen;
  2. +
  3. Bewust blijven van de mogelijke neiging om automatisch of te veel te vertrouwen op de output van een AI-systeem met hoog risico (automation bias). +Dit geldt in het bijzonder voor het gebruik van een hoog risico AI-systeem dat wordt gebruikt om informatie of aanbevelingen te versterkken voor beslisisngen die door natuurlijke personen moeten worden genomen;
  4. +
  5. De output juist kunnen interpreteren, bijvoorbeeld met behulp van de juiste hulpmiddelen en methoden voor interpretatie;
  6. +
  7. In alle specifieke situaties kunnen besluiten om het hoog risico AI-systeem niet te gebruiken of de output op een andere wijze te negeren, door een andere beslissing te vervangen of terug te draaien;
  8. +
  9. ingrijpen in de werking van het hoog risico AI-systeem of het systeem onderbreken door middel van een stopknop of een vergelijkbare procedure waarmee het systeem op een veilige wijze kan worden stopgezet.
  10. +
+

In het geval van een hoog risico systeem als bedoeld in bijlage III, punt 1, a (systemen voor biometrische identificatie op afstand) geldt het vereiste dat twee natuurlijke personen met de nodige bekwaamheid, opleiding en bevoegdheid apart de indentificatie van het systeem verificiëren en bevestigen, tenzij het wordt gebruikt voor rechtshandhaving, migratie, grenstoezicht of asiel, in gevallen waarin het Unierecht of het nationale recht de toepassing van dit vereiste onevenredig acht.

+

Bronnen

+

Artikel 14 verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Ontbreken van betekenisvol menselijk toezicht kan leiden tot gebrek aan controle en begrip over het functioneren van het AI-systeem, wat kan resulteren in ongewenste of onvoorspelbare uitkomsten.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
org-02Pas vastgestelde beleidskaders toe
owk-02Maak een noodplan voor het stoppen van het algoritme
imp-01Stel een werkinstructie op voor gebruikers.
imp-03Richt de juiste menselijke controle in van het algoritme
imp-05Spreek af hoe medewerkers omgaan met het algoritme.
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-10-nauwkeurigheid-robuustheid-cyberbeveiliging/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-10-nauwkeurigheid-robuustheid-cyberbeveiliging/index.html new file mode 100644 index 0000000000..a91da310e9 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-10-nauwkeurigheid-robuustheid-cyberbeveiliging/index.html @@ -0,0 +1,994 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig

+ +

aia-10OntwerpOntwikkelenVerificatie en validatieMonitoring en beheerProjectleiderBeleid en adviesOntwikkelaarTechnische robuustheid en veiligheid

+

Vereiste

+

AI-systemen met een hoog risico worden op zodanige wijze ontworpen en ontwikkeld dat deze een passend niveau van nauwkeurigheid, robuustheid en cyberbeveiliging bieden, alsook consistente prestaties gedurende de levensduur met betrekking tot deze aspecten.

+

Toelichting

+

AI-systemen met een hoog risico worden zorgvuldig ontworpen en ontwikkeld om een hoog niveau van nauwkeurigheid, robuustheid en cyberbeveiliging te bieden. +Dit garandeert consistente prestaties gedurende hun levensduur en minimaliseert risico's met betrekking tot deze aspecten, waardoor de betrouwbaarheid en veiligheid van het systeem worden gewaarborgd.

+

Technische robuustheid is een essentiële eis voor AI-systemen met een hoog risico. +Deze systemen moeten bestand zijn tegen schadelijk of anderszins ongewenst gedrag dat kan voortvloeien uit de beperkingen binnen de systemen of de omgeving waarin de systemen opereren (bijvoorbeeld fouten, onregelmatigheden, onverwachte situaties). +Daarom moeten technische en organisatorische maatregelen worden getroffen om de robuustheid van AI-systemen met een hoog risico te waarborgen. +Een technische oplossing kan bijvoorbeeld bestaan uit mechanismen die het systeem in staat stellen zijn werking veilig te onderbreken (storingsbeveiligingsplannen) wanneer zich bepaalde anomalieën voordoen of wanneer de werking buiten bepaalde vooraf bepaalde grenzen plaatsvindt.

+

Cyberbeveiliging is cruciaal om te waarborgen dat AI-systemen bestand zijn tegen pogingen van kwaadwillige derden die gebruikmaken van de kwetsbaarheden van het systeem om het gebruik, het gedrag of de prestaties ervan te wijzigen of de veiligheidskenmerken ervan in gevaar te brengen. +Bij cyberaanvallen tegen AI-systemen kunnen AI-specifieke activa worden gebruikt, zoals trainingsdatasets (bv. +datavervuiling) of getrainde modellen (bv. +vijandige aanvallen of membership inference), of kwetsbaarheden in de digitale activa van het AI-systeem of de onderliggende ICT-infrastructuur worden benut. +Om te zorgen voor een niveau van cyberbeveiliging dat aansluit op de risico’s, moeten aanbieders van AI-systemen met een hoog risico passende maatregelen zoals veiligheidscontroles nemen, waarbij ook rekening wordt gehouden met de onderliggende ICT infrastructuur.

+

Bronnen

+

Artikel 15 Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Gebrek aan nauwkeurigheid, robuustheid of cyberbeveiliging kan leiden tot onbetrouwbare prestaties, kwetsbaarheid voor storingen en blootstelling aan beveiligingsrisico's, wat de effectiviteit en veiligheid van het AI-systeem in gevaar kan brengen.

+

Maatregelen

+
idMaatregelen
owp-04Beschrijf welke techniek gebruikt wordt voor de beoogde toepassing
owp-10Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
dat-07Gebruik bij machine learning technieken gescheiden train-, test- en validatiedata en houdt rekening met underfitting en overfitting.
ver-01Controleer regelmatig of het algoritme werkt zoals het bedoeld is
imp-02Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren
mon-02Beveilig de software
mon-03Maak een noodplan voor beveiligingsincidenten
mon-04Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme.
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-11-systeem-voor-kwaliteitsbeheer/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-11-systeem-voor-kwaliteitsbeheer/index.html new file mode 100644 index 0000000000..1a9bbc4fc5 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-11-systeem-voor-kwaliteitsbeheer/index.html @@ -0,0 +1,1000 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem

+ +

aia-11OrganisatieverantwoordelijkhedenProjectleiderBeleid en adviesGovernance

+

Vereiste

+

Aanbieders van AI-systemen met een hoog risico voorzien in een systeem voor kwaliteitsbeheer dat de naleving van deze verordening waarborgt. +Dit systeem wordt op systematische en ordelijke wijze gedocumenteerd in de vorm van schriftelijke beleidslijnen, procedures en instructies en omvat ten minste de aspecten vermeld in artikel 17 AI-verordening.

+

Toelichting

+

Aanbieders van AI-systemen met een hoog risico moeten een kwaliteitsbeheersysteem implementeren om te garanderen dat ze voldoen aan de AI-verordening. +Dit systeem omvat gedocumenteerde beleidslijnen, procedures en instructies, en behandelt beknopt de volgende aspecten:

+
    +
  1. een strategie voor de naleving van de regelgeving, inclusief de naleving van de conformiteitsbeoordelingsprocedures en de procedures voor het beheer van de wijzigingen van het AI-systeem met een hoog risico;
  2. +
  3. technieken, procedures en systematische maatregelen die moeten worden toegepast voor het ontwerp, de controle van het ontwerp en de verificatie van het ontwerp van het AI-systeem met een hoog risico;
  4. +
  5. technieken, procedures en systematische maatregelen die moeten worden toegepast voor de ontwikkeling, de kwaliteitscontrole en de kwaliteitsborging van het AI-systeem met een hoog risico;
  6. +
  7. procedures voor het inspecteren, testen en valideren die vóór, tijdens en na de ontwikkeling van het AI-systeem met een hoog risico moeten worden uitgevoerd en de regelmaat waarmee zij moeten worden uitgevoerd;
  8. +
  9. technische specificaties, met inbegrip van normen, die moeten worden toegepast en, wanneer de relevante geharmoniseerde normen niet volledig worden toegepast of geen betrekking hebben op alle relevante eisen van afdeling 2, de middelen die worden gebruikt om ervoor te zorgen dat het AI-systeem met een hoog risico in overeenstemming is met deze eisen;
  10. +
  11. systemen en procedures voor databeheer, met inbegrip van dataverwerving, - verzameling, -analyse, -labeling, -opslag, -zuivering, -aggregatie en -behoud en datamining en eventuele andere operaties met betrekking tot de data die worden uitgevoerd voorafgaand aan en met het oog op het in de handel brengen of in gebruik stellen van AI-systemen met een hoog risico;
  12. +
  13. het systeem voor risicobeheer zoals bedoeld in artikel 9 van de AI-verordening;
  14. +
  15. het opzetten, toepassen en onderhouden van een systeem voor monitoring na het in de handel brengen, overeenkomstig artikel 72 AI-verordening;
  16. +
  17. procedures in verband met het melden van een ernstig incident in overeenstemming met artikel 73 van de AI-verordening;
  18. +
+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Zonder toepassing van een kwaliteitsbeheersysteem kunnen risico's ontstaan voor de veiligheid, betrouwbaarheid en naleving van het AI-systeem en conformiteit met wet- en regelgeving.

+

Maatregelen

+
idMaatregelen
org-12Controleer en verbeter regelmatig de kwaliteit van het algoritme
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
org-02Pas vastgestelde beleidskaders toe
owk-02Maak een noodplan voor het stoppen van het algoritme
mon-04Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme.
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-12-bewaartermijn-voor-documentatie/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-12-bewaartermijn-voor-documentatie/index.html new file mode 100644 index 0000000000..ebfd6f462f --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-12-bewaartermijn-voor-documentatie/index.html @@ -0,0 +1,996 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder

+ +

aia-12OntwerpMonitoring en beheerUitfaserenProjectleiderTechnische robuustheid en veiligheid

+

Vereiste

+

De aanbieder houdt gedurende een periode van tien jaar nadat het AI-systeem met een hoog risico in de handel is gebracht of in gebruik is gesteld de volgende elementen ter beschikking van de nationale bevoegde autoriteiten:

+
    +
  1. de technische documentatie als bedoeld in artikel 11 van de AI-verordening;
  2. +
  3. de documentatie betreffende het in artikel 17 bedoelde systeem voor kwaliteitsbeheer;
  4. +
  5. in voorkomend geval de documentatie betreffende de door aangemelde instanties goedgekeurde wijzigingen;
  6. +
  7. in voorkomend geval de besluiten en andere documenten die door de aangemelde instanties zijn afgegeven;
  8. +
  9. de EU-conformiteitsverklaring als bedoeld in artikel 47.
  10. +
+

Toelichting

+

De aanbieder moet gedurende tien jaar na het op de markt brengen of in gebruik nemen van het AI-systeem met een hoog risico de vereiste documentatie beschikbaar houden voor de nationale autoriteiten. +Dit houdt in dat technische documentatie, documentatie over het kwaliteitsbeheersysteem, eventuele documentatie over besluiten en goedgekeurde wijzigingen door aangemelde instanties en de EU-conformiteitsverklaring beschikbaar moet zijn. +Dit waarborgt dat de autoriteiten toegang hebben tot relevante informatie voor controle en naleving van de voorschriften gedurende deze periode.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Niet voldoen aan de bewaartermijn kan leiden tot juridische consequenties en kan het vermogen van de autoriteiten om toezicht te houden op de naleving van de regelgeving belemmeren.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
dat-04Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-13-bewaartermijn-voor-gegenereerde-logs/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-13-bewaartermijn-voor-gegenereerde-logs/index.html new file mode 100644 index 0000000000..7116dd9fc1 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-13-bewaartermijn-voor-gegenereerde-logs/index.html @@ -0,0 +1,990 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder

+ +

aia-13OntwerpMonitoring en beheerUitfaserenProjectleiderTechnische robuustheid en veiligheid

+

Vereiste

+

Aanbieders van AI-systemen met een hoog risico bewaren de in artikel 12, lid 1, bedoelde logs die automatisch worden gegenereerd door hun AI-systemen met een hoog risico voor zover dergelijke logs onder hun controle vallen. +Onverminderd het toepasselijke Unie- of nationale recht worden deze logs bewaard gedurende een periode, die passend is voor het beoogde doel van het AI-systeem met een hoog risico, van ten minste zes maanden, tenzij anders is bepaald in het Unie- of nationaal recht, met name de Uniewetgeving inzake de bescherming van persoonsgegevens.

+

Toelichting

+

Aanbieders van AI-systemen met een hoog risico moeten de automatisch gegenereerde logs bewaren volgens de voorschriften van artikel 12, lid 1, zolang deze logs onder hun controle vallen. +Deze logs moeten ten minste zes maanden worden bewaard, tenzij anders bepaald door Unie- of nationale wetgeving met betrekking tot gegevensbescherming, om te voldoen aan de relevante voorschriften en verantwoordingsplicht.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Het niet of onvoldoende bewaren van logs kan het vermogen belemmeren om incidenten te analyseren, naleving te controleren en verantwoordelijkheid vast te stellen bij mogelijke problemen met het AI-systeem.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owk-04Maak logbestanden waarin staat wie wanneer toegang had tot de data en de code
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-14-conformiteitsbeoordeling/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-14-conformiteitsbeoordeling/index.html new file mode 100644 index 0000000000..27e2eae000 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-14-conformiteitsbeoordeling/index.html @@ -0,0 +1,997 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure

+ +

aia-14Verificatie en validatieImplementatieJuristProjectleiderGovernance

+

Vereiste

+

Aanbieders van AI-systemen met een hoog risico zorgen ervoor dat voor het AI-systeem met een hoog risico een conformiteitsbeoordelingsprocedure wordt uitgevoerd voordat dit systeem in de handel wordt gebracht of in gebruik wordt gesteld

+

Toelichting

+

Conformiteitsbeoordelingen dragen bij aan het kunnen vertrouwen op de kwaliteit van producten en diensten. Aanbieders van AI-systemen met een hoog risico moeten ervoor zorgen dat de conformiteitsbeoordelingsprocedure wordt uitgevoerd vóórdat het systeem op de markt wordt gebracht of in gebruik wordt genomen. Hiervoor moet worden beoordeeld of het ontwikkelde hoog risico AI-systeem voldoet aan de vereisten die gelden voor deze systemen. Denk hierbij aan de vereisten van risicobeheer, technische documentatie, data en datagovernance en transparantie en informatieverstrekking aan gebruiksverantwoordelijken (Afdeling 2, AI-Verordening).

+

Een conformiteitbeoordeling kan worden uitgevoerd door middel van +- een interne controle (als bedoeld in bijlage VI van de AI-verordening) +- of met betrokkenheid van een aangemelde instantie voor de beoordeling van het systeem voor kwaliteitsbeheer en de technische documentatie (als bedoeld in bijlage VII van de AI-verordening). Een conformiteitsbeoordeling door een aangemelde instatie wordt ookwel een conformiteitsbeoordeling door een derden genoemd.

+

Als overheidsorganisaties hoog risico AI-systemen gebruiken van aanbieders of deze zelf ontwikkelen, zullen deze systemen veelal de conformiteitsbeoordeling middels een interne controle moeten doorlopen (bijlage VI). Let op! In het geval dat een hoog risico AI-systeem door een rechtshandhavingsinstantie, immigratie- of asielautoriteit wordt ingezet, dan zal de markttoezichtautoriteit als aangemelde instantie optreden die de conformiteitsbeoordeling zal uitvoeren.

+

AI-systemen met een hoog risico die al aan een conformiteitsbeoordelingsprocedure zijn onderworpen, ondergaan een nieuwe conformiteitsbeoordelingsprocedure telkens wanneer zij substantieel zijn gewijzigd, ongeacht of het gewijzigde systeem bedoeld is om verder te worden gedistribueerd of door de huidige gebruiksverantwoordelijke gebruikt blijft worden.

+

ai_lifecycle_visual_7FC0D14E-A775-A92E-DE5A38FDB7C238EB_75759

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Niet naleven van deze verplichtingen kan leiden tot juridische en operationele problemen, en kan de veiligheid en betrouwbaarheid van het AI-systeem in gevaar brengen.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-15Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-15-eu-conformiteitsverklaring/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-15-eu-conformiteitsverklaring/index.html new file mode 100644 index 0000000000..721cb56428 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-15-eu-conformiteitsverklaring/index.html @@ -0,0 +1,991 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring

+ +

aia-15Verificatie en validatieImplementatieJuristProjectleiderGovernance

+

Vereiste

+

Aanbieders van AI-systemen met een hoog risico stellen een EU-conformiteitsverklaring op.

+

Toelichting

+

Een EU-conformiteitsverklaring is een verplicht document dat een fabrikant of gemachtigde vertegenwoordiger moet ondertekenen, waarmee wordt verklaard dat het product aan de EU-eisen voldoet. +De aanbieder stelt voor elk AI-systeem met een hoog risico een schriftelijke machineleesbare, fysieke of elektronisch ondertekende EU-conformiteitsverklaring op en houdt deze verklaring tot tien jaar na het in de handel brengen of het in gebruik stellen van het AI-systeem met een hoog risico ter beschikking van de nationale bevoegde autoriteiten. +De conformiteitsverklaring bevat de informatie zoals genoemd in bijlage V AI-verordening. +Voorbeelden hiervan zijn de naam en type van het AI-systeem, naam en adres van de aanbieder, dat de EU-conformiteitsverklaring wordt versterkt onder verantwoordelijkheid van de aanbieder en de vermelding van eventuele toegepaste relevante geharmoniseerde normen of van andere gemeenschappelijke specificaties waarop de conformiteitsverklaring betrekking heeft.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Niet naleven van deze verplichtingen kan leiden tot juridische en operationele problemen, en kan de veiligheid en betrouwbaarheid van het AI-systeem in gevaar brengen.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-15Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-16-ce-markering/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-16-ce-markering/index.html new file mode 100644 index 0000000000..2fe454e5a6 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-16-ce-markering/index.html @@ -0,0 +1,991 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen zijn voorzien van een CE-markering - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen zijn voorzien van een CE-markering

+ +

aia-16ImplementatieProjectleiderTransparantie

+

Vereiste

+

Aanbieders van AI-systemen met een hoog risico moeten een CE-markering toevoegen aan het AI-systeem met een hoog risico of, wanneer dit niet mogelijk is, op de verpakking of in de bij het product gevoegde documentatie, om aan te geven dat aan de AI-verordening is voldaan.

+

Toelichting

+

Op AI-systemen met een hoog risico moet de CE-markering worden aangebracht om aan te geven dat zij in overeenstemming zijn met de AI-verordening, zodat het vrije verkeer ervan op de interne markt mogelijk is. +Op AI-systemen met een hoog risico die in een product zijn geïntegreerd moet een fysieke CE-markering worden aangebracht, die kan worden +aangevuld met een digitale CE-markering. +Voor AI-systemen met een hoog risico die alleen digitaal worden verstrekt, moet een digitale CE-markering worden gebruikt. +De lidstaten mogen het in de handel brengen en het in gebruik stellen van AI-systemen met een hoog risico die aan de in de AI-verordening vastgelegde eisen voldoen en waarop de CE-markering is aangebracht, niet op ongerechtvaardigde wijze belemmeren.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Niet naleven van deze verplichtingen kan leiden tot juridische en operationele problemen, en kan de veiligheid en betrouwbaarheid van het AI-systeem in gevaar brengen.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-15Maak het leveren van bewijs voor het voldoen aan de vereisten voor algoritmes onderdeel van de beoordeling van een inschrijving.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-17-registratieverplichtingen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-17-registratieverplichtingen/index.html new file mode 100644 index 0000000000..a998a914f4 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-17-registratieverplichtingen/index.html @@ -0,0 +1,988 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank

+ +

aia-17ImplementatieProjectleiderGovernanceTransparantie

+

Vereiste

+

Aanbieders van AI-systemen met een hoog risico leven de registratieverplichtingen als bedoeld in artikel 49 na, wat betekent dat voor het in de handel brengen of in bedrijf te stellen van het hoog risico AI-systeem, de aanbieder of in voorkomende gevallen de gemachtigde het systeem registreert in de EU-databank.

+

Toelichting

+

Vóór de distributie of inbedrijfstelling van een AI-systeem met een hoog risico van bijlage III, met uitzondering van specifieke gevallen zoals beschreven in punt 2 van bijlage III, is het vereist dat de aanbieder of gemachtigde zichzelf en het systeem registreert in de EU-databank zoals genoemd in art. +71 AI-verordening.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Niet naleven van deze verplichtingen kan leiden tot juridische en operationele problemen, en kan de veiligheid en betrouwbaarheid van het AI-systeem in gevaar brengen.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-18-corrigerende-maatregelen-voor-non-conforme-ai/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-18-corrigerende-maatregelen-voor-non-conforme-ai/index.html new file mode 100644 index 0000000000..088a03a9ff --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-18-corrigerende-maatregelen-voor-non-conforme-ai/index.html @@ -0,0 +1,990 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in

+ +

aia-18OrganisatieverantwoordelijkhedenMonitoring en beheerProjectleiderMenselijke controleTechnische robuustheid en veiligheid

+

Vereiste

+

Aanbieders van AI-systemen met een hoog risico die van mening zijn of redenen hebben om aan te nemen dat een door hen in de handel gebracht of in gebruik gesteld AI systeem met een hoog risico niet in overeenstemming is met de AI-verordening, nemen onmiddellijk de nodige corrigerende maatregelen om dat systeem naargelang het geval in overeenstemming te brengen, uit de handel te nemen, te deactiveren of terug te roepen. +Zij stellen de distributeurs van het betrokken AI-systeem met een hoog risico en, indien van toepassing, de gebruiksverantwoordelijken, de gemachtigden en importeurs dienovereenkomstig in kennis.

+

Toelichting

+

Aanbieders van AI-systemen met een hoog risico die constateren dat hun systeem niet aan de verordening voldoet, moeten onmiddellijk corrigerende acties ondernemen, zoals het terugroepen of uit de handel nemen van het systeem. +Ze moeten ook alle relevante partijen, zoals distributeurs, gebruiksverantwoordelijken en importeurs, op de hoogte stellen van deze maatregelen.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Niet reageren op non-conformiteit kan leiden tot risico's voor gebruikers en derden. +Het kan leiden tot juridische procedures en reputatieschade voor organisaties.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owk-02Maak een noodplan voor het stoppen van het algoritme
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-19-toegankelijkheidseisen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-19-toegankelijkheidseisen/index.html new file mode 100644 index 0000000000..33561ab98a --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-19-toegankelijkheidseisen/index.html @@ -0,0 +1,991 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen

+ +

aia-19OntwerpProjectleiderOntwikkelaarMenselijke controleTechnische robuustheid en veiligheid

+

Vereiste

+

Aanbieders van AI-systemen met een hoog risico zorgen ervoor dat het AI-systeem met een hoog risico voldoet aan de toegankelijkheidseisen overeenkomstig de Richtlijnen (EU) 2016/2102 en (EU) 2019/882

+

Toelichting

+

Aanbieders van AI-systemen met een hoog risico moeten ervoor zorgen dat hun systeem toegankelijk is volgens de EU-richtlijnen 2016/2102 en 2019/882. +In het kader van Richtlijn 2016/2102 moet onder toegankelijkheid worden verstaan het geheel van principes en technieken die in acht moeten worden genomen bij het ontwerpen, bouwen, beheren en bijwerken van websites en mobiele applicaties om hen voor gebruikers toegankelijker te maken, met name voor personen met een beperking. +Bijlage 1 bevat de toegankelijkheidsvoorschriften voor producten en diensten die moeten worden toegepast op hoog-risico-AI-systemen.

+

Richtlijn 2019/882 strekt ertoe een bijdrage te leveren tot het goed functioneren van de interne markt middels onderlinge aanpassing van de wettelijke en bestuursrechtelijke bepalingen van de lidstaten inzake de toegankelijkheidsvoorschriften voor bepaalde producten en diensten, in het bijzonder door het wegwerken en voorkomen van belemmeringen voor het vrije verkeer van onder deze richtlijn vallende producten en diensten ten gevolge van uiteenlopende toegankelijkheidsvoorschriften in de lidstaten

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Niet naleven van deze verplichtingen kan leiden tot juridische en operationele problemen, en kan de veiligheid en betrouwbaarheid van het AI-systeem in gevaar brengen.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
org-02Pas vastgestelde beleidskaders toe
owk-02Maak een noodplan voor het stoppen van het algoritme
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-20-gebruiksverantwoordelijken-maatregelen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-20-gebruiksverantwoordelijken-maatregelen/index.html new file mode 100644 index 0000000000..065f5da8c6 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-20-gebruiksverantwoordelijken-maatregelen/index.html @@ -0,0 +1,985 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen worden gebruikt volgens de gebruiksaanwijzing - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen worden gebruikt volgens de gebruiksaanwijzing

+ +

aia-20OrganisatieverantwoordelijkhedenImplementatieProjectleiderOntwikkelaarGovernance

+

Vereiste

+

Gebruiksverantwoordelijken van AI-systemen met een hoog risico nemen passende technische en organisatorische maatregelen om te waarborgen dat zij dergelijke systemen gebruiken in overeenstemming met de gebruiksaanwijzingen die bij de systemen zijn gevoegd, in overeenstemming met de leden 3 en 6 van artikel 26 van de AI-verordening.

+

Toelichting

+

Gebruiksverantwoordelijken van AI-systemen met een hoog risico moeten geschikte maatregelen nemen om ervoor te zorgen dat zij deze systemen gebruiken volgens de bijgevoegde instructies. +De gebruiksverantwoordelijke zorgt ervoor dat de inputdata relevant en voldoende representatief zijn voor het beoogde doel van het AI-systeem met een hoog risico, voor zover hij daar controle over heeft.

+

Bronnen

+

Artikel 26(1) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

+

Risico

+

Het niet naleven van deze maatregelen kan leiden tot onjuist gebruik van de AI-systemen, wat de effectiviteit en veiligheid ervan kan verminderen, en kan resulteren in risico's voor gebruikers en derden.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-21-gebruiksverantwoordelijken-menselijk-toezicht/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-21-gebruiksverantwoordelijken-menselijk-toezicht/index.html new file mode 100644 index 0000000000..000cbfd149 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-21-gebruiksverantwoordelijken-menselijk-toezicht/index.html @@ -0,0 +1,987 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkheden - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkheden

+ +

aia-21OrganisatieverantwoordelijkhedenProjectleiderGovernanceMenselijke controle

+

Vereiste

+

Gebruiksverantwoordelijken dragen het menselijk toezicht over een hoog risico AI-systeem op aan natuurlijke personen die over de nodige bekwaamheid, opleiding en autoriteit beschikken en de nodige ondersteuning krijgen.

+

Toelichting

+

Het is van belang dat natuurlijke personen die het menselijk toezicht moeten uitvoeren over het AI-systeem met een hoog risico, daarvoor over de nodige bekwaamheid, opleiding en autoriteit beschikt. +Daarbij kan het van belang zijn dat deze natuurlijke personen ondersteuning krijgen bij het uitvoeren van deze taak.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

+

Risico

+

Als de natuurlijke toezichthouder geen effectief toezicht kan houden op het hoog risico AI-systeem, kunnen ongewenste, negatieve effecten onstaan voor betrokkenen en de organisatie.

+

Maatregelen

+
idMaatregelen
org-01Bepaal of er genoeg experts beschikbaar zijn
imp-03Richt de juiste menselijke controle in van het algoritme
imp-05Spreek af hoe medewerkers omgaan met het algoritme.
imp-01Maak een openbaar besluit over de inzet van het algoritme
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-22-gebruiksverantwoordelijken-monitoren-werking/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-22-gebruiksverantwoordelijken-monitoren-werking/index.html new file mode 100644 index 0000000000..f0bbc46aed --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-22-gebruiksverantwoordelijken-monitoren-werking/index.html @@ -0,0 +1,990 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + De werking van hoog-risico-AI-systemen wordt gemonitord - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

De werking van hoog-risico-AI-systemen wordt gemonitord

+ +

aia-22Monitoring en beheerProjectleiderMenselijke controle

+

Vereiste

+

Gebruiksverantwoordelijken monitoren de werking van het AI-systeem met een hoog risico op basis van de gebruiksaanwijzingen en stellen in voorkomend geval de aanbieders in kennis overeenkomstig artikel 72 AI Verordening

+

Toelichting

+

Gebruiksverantwoordelijken moeten de werking van hoog risico AI-systemen monitoren. +Dit is van belang om passende maatregelen te kunnen treffen als het systeem onbedoeld anders gaat functioneren.

+

Wanneer gebruiksverantwoordelijken redenen hebben om aan te nemen dat het gebruik overeenkomstig de gebruiksaanwijzingen ertoe kan leiden dat dat AI-systeem een risico vormt in de zin van artikel 79, lid 1, stellen zij de aanbieder of distributeur en de betreffende markttoezichtautoriteit hiervan zonder onnodige vertraging in kennis en onderbreken zij het gebruik van dat systeem. +Wanneer gebruiksverantwoordelijke een ernstig incident vaststellen, stellen zij ook onmiddellijk eerst de aanbieder hiervan in kennis, en vervolgens de importeur of distributeur en de betreffende markttoezichtautoriteiten van dat incident. +Wanneer de gebruiksverantwoordelijke de aanbieder niet kan bereiken, is artikel 73 mutatis mutandis van toepassing. +Deze verplichting geldt niet voor gevoelige operationele gegevens van gebruiksverantwoordelijke van AI-systemen die de hoedanigheid van rechtshandhavingsinstanties hebben.

+

Voor gebruiksverantwoordelijke die in de hoedanigheid van financiële instellingen onderworpen zijn aan eisen met betrekking tot hun interne governance, regelingen of processen uit hoofde van het Unierecht inzake financiële diensten, wordt de monitoringsverplichting overeenkomstig de eerste alinea geacht te zijn vervuld door te voldoen aan de regels inzake interne governance, regelingen of processen en -mechanismen uit hoofde van het desbetreffende recht inzake financiële diensten.

+

Bronnen

+

Artikel 26(5) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

+

Risico

+

Zonder monitoring door gebruiksverantwoordelijken en (waar nodig) het informeren van aanbieder, distributeur of markttoezichtautoriteit, kan de foutieve werking van een hoog risico AI-systeem niet worden gesignaleerd en hersteld.

+

Maatregelen

+
idMaatregelen
owk-02Maak een noodplan voor het stoppen van het algoritme
imp-03Richt de juiste menselijke controle in van het algoritme
imp-01Maak een openbaar besluit over de inzet van het algoritme
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-23-gebruiksverantwoordelijken-bewaren-logs/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-23-gebruiksverantwoordelijken-bewaren-logs/index.html new file mode 100644 index 0000000000..faa426bbc3 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-23-gebruiksverantwoordelijken-bewaren-logs/index.html @@ -0,0 +1,988 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Logs voor hoog-risico-AI-systemen worden bewaard door de gebruiksverantwoordelijke - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Logs voor hoog-risico-AI-systemen worden bewaard door de gebruiksverantwoordelijke

+ +

aia-23OntwikkelenMonitoring en beheerProjectleiderTechnische robuustheid en veiligheid

+

Vereiste

+

Gebruiksverantwoordelijken van AI-systemen met een hoog risico bewaren de logs die automatisch worden gegenereerd door dat AI-systeem met een hoog risico voor zover dergelijke logs onder hun controle vallen gedurende een periode die passend is voor het beoogde doel van het AI-systeem met een hoog risico, of ten minste zes maanden, tenzij anders is bepaald in het toepasselijke Unie- of nationaal recht, meer in het bijzonder het Unierecht over de bescherming van persoonsgegevens

+

Toelichting

+

Anders dan in artikel 16(e) AI-verordening, waar een vergelijkbare vereiste geldt voor aanbieders, gaat het hier om een vereiste specifiek voor de gebruiksverantwoordelijken. +Het is van belang dat de gebruiksverantwoordelijken een zelfstandige beoordeling maakt wat moet worden gelogd en voor welke periode gezien de doelstelling van de inzet van het AI-systeem. +Daarbij is het van belang om te beoordelen in hoeverre een gebruiksverantwoordelijke hier 'controle' over heeft. +De gebruiksverantwoordelijke zal, al dan niet samen met de aanbieder, (technische) maatregelen moeten treffen om dit te realiseren.

+

Gebruiksverantwoordelijken die in de hoedanigheid van financiële instellingen onderworpen zijn aan eisen met betrekking tot hun interne governance, regelingen of processen uit hoofde van het Unierecht inzake financiële diensten bewaren de logs als onderdeel van de documentatie die bewaard wordt krachtens het desbetreffende Unierecht inzake financiële diensten.

+

Bronnen

+

Artikel 26(6) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

+

Risico

+

Het niet of onvoldoende bewaren van logs kan het vermogen belemmeren om incidenten te analyseren, naleving te controleren en verantwoordelijkheid vast te stellen bij mogelijke problemen met het AI-systeem.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-24-informeren-werknemers/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-24-informeren-werknemers/index.html new file mode 100644 index 0000000000..da2f8f4910 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-24-informeren-werknemers/index.html @@ -0,0 +1,987 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Werknemers weten dat hun organisatie een hoog-risico AI-systeem gebruikt - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Werknemers weten dat hun organisatie een hoog-risico AI-systeem gebruikt

+ +

aia-24ImplementatieProjectleiderTransparantie

+

Vereiste

+

Voordat een AI-systeem met een hoog risico op de werkplek in gebruik wordt gesteld of wordt gebruikt, delen gebruiksverantwoordelijken die werkgever zijn werknemersvertegenwoordigers en de betrokken werknemers mee dat zij zullen worden onderworpen aan het gebruik van het AI-systeem met een hoog risico. +Deze informatie wordt, indien van toepassing, verstrekt in overeenstemming met de in het Unie- en nationaal recht vastgelegde regels en procedures en de praktijk inzake informatie van werknemers en hun vertegenwoordigers.

+

Toelichting

+

Dit vereiste benadrukt het belang van het informeren van werknemersvertegenwoordigers en betrokken werknemers over de inzet van een hoog risico AI-systeem op de werkplaats. +Dit dient voorafgaand aan de inzet van het systeem plaats te vinden. +De gebruiksverantwoordelijke als werknemer dient hier zorg voor te dragen.

+

Bronnen

+

Artikel 26(7) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

+

Risico

+

Als werknemersvertegenwoordigers en werknemers niet worden geïnformeerd over de inzet van een hoog risico AI-systeem, kunnen zij zich niet weren tegen mogelijk ongewenste en negatieve effecten van de inzet van het hoog risico AI-systeem.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-25-gebruiksverantwoordelijken-registratieverplichtingen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-25-gebruiksverantwoordelijken-registratieverplichtingen/index.html new file mode 100644 index 0000000000..b223193b3f --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-25-gebruiksverantwoordelijken-registratieverplichtingen/index.html @@ -0,0 +1,994 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gebruiksverantwoordelijken controleren de registratie van het hoog-risico AI-systeem in de EU-databank - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Gebruiksverantwoordelijken controleren de registratie van het hoog-risico AI-systeem in de EU-databank

+ +

aia-25OrganisatieverantwoordelijkhedenImplementatieMonitoring en beheerProjectleiderTransparantieGovernance

+

Vereiste

+

Gebruiksverantwoordelijken van AI-systemen met een hoog risico die de hoedanigheid van overheidsinstanties of instellingen, organen of instanties van de Unie hebben, leven de in artikel 49 bedoelde registratieverplichtingen na. +Wanneer deze gebruiksverantwoordelijke vaststellen dat het AI-systeem met een hoog risico dat zij voornemens zijn te gebruiken niet in de in artikel 71 bedoelde EU-databank is +geregistreerd, gebruiken zij dat systeem niet en stellen zij de aanbieder of de distributeur daarvan in kennis.

+

Toelichting

+

Het is van belang dat gebruiksverantwoordelijken nagaan of het betreffende hoog risico AI-systeem door aanbieder is geregistreerd in de EU-databank (zoals omschreven in artikel 71 AI-verordening). +Voordat het betreffende AI-systeem (bijlage III vermeld AI-systeem met een hoog risico) in gebruik te stellen of te gebruiken (met uitzondering van de in punt 2 van bijlage III vermelde AI-systemen met een hoog risico) registreren gebruiksverantwoordelijken die overheidsinstanties, instellingen, organen of instanties van de Unie, of personen die namens hen optreden, zichzelf en selecteren zij het systeem en registreren zij het gebruik ervan in de in artikel 71 bedoelde EU-databank.

+

Heeft de aanbieder het betreffende hoog risico AI-systeem niet geregistreerd in de EU-Databank, dan mag het hoog risico AI-systeem niet worden gebruikt. +De aanbieder of distributeur wordt door de gebruiksverantwoordelijke geïnformeerd dat het systeem niet is geregistreerd in de EU-databank.

+

AI-systemen met een hoog risico als bedoeld in punt 2 van bijlage III (kritieke infrastructuur) worden op nationaal niveau geregistreerd.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

+

Risico

+

Zonder registratie van het hoog risico AI-systeem en het registreren welke organisaties of personen hier gebruik van maken, is het negatieve negatieve van het mogelijk onjuist of ongewenst functioneren van het AI-systeem niet te overzien en onduidelijk welke betrokken dit raakt.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-26-recht-op-uitleg-ai-besluiten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-26-recht-op-uitleg-ai-besluiten/index.html new file mode 100644 index 0000000000..40e3aacf3d --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-26-recht-op-uitleg-ai-besluiten/index.html @@ -0,0 +1,991 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluiten - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluiten

+ +

aia-28OrganisatieverantwoordelijkhedenOntwerpMonitoring en beheerProjectleiderGovernanceFundamentele rechtenTransparantie

+

Vereiste

+

Elke getroffen persoon op wie een besluit van toepassing is dat door de gebruiksverantwoordelijke wordt genomen op basis van de output van een in bijlage III vermeld AI-systeem met een hoog risico, met uitzondering van systemen die in punt 2 van die bijlage zijn vermeld, en dat rechtsgevolgen heeft voor die persoon, of op deze op vergelijkbare wijze aanzienlijke invloed heeft die hij of zij als nadelige gevolgen voor zijn of haar gezondheid, veiligheid of grondrechten beschouwt, heeft het recht om van de gebruiksverantwoordelijke duidelijke, inhoudelijke toelichting te verkrijgen bij de rol van het AI-systeem in de besluitvormingsprocedure en de voornaamste elementen van het genomen besluit.

+

Toelichting

+

Getroffen personen moeten het recht hebben om uitleg te krijgen indien het besluit van een gebruiksverantwoordelijke voornamelijk is gebaseerd op de output van bepaalde AI-systemen met een hoog risico die binnen het toepassingsgebied van de AI-verordening vallen en indien dat besluit rechtsgevolgen of gelijkaardige aanzienlijke gevolgen heeft voor de gezondheid, veiligheid of grondrechten van die personen. +Die uitleg moet duidelijk en zinvol zijn en moet de grondslag zijn waarop de getroffen personen zich kunnen baseren om hun rechten uit te oefenen. +Het recht om uitleg te krijgen mag niet van toepassing zijn op het gebruik van AI-systemen waarvoor uitzonderingen of beperkingen voortvloeien uit het Unierecht of het nationale recht en moet alleen van toepassing zijn voor zover het Unierecht niet reeds in dit recht voorziet. +Dit vereiste geldt bijvoorbeeld niet als het gaat om AI-systemen die bedoeld zijn om te worden gebruikt als veiligheidscomponent bij het beheer of de exploitatie van kritieke digitale infrastructuur, wegverkeer of bij de levering van water, gas, verwerking en electriciteit (punt 2 bij Bijlage III van AI-verordening).

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

+

Risico

+

Als gebruiksverantwoordelijke geen duidelijke, inhoudelijke toelichting geeft over de rol van het AI-systeem in de besluitvormingsprocedure en de voornaamste elementen bij het genomen besluit, is het voor getroffen personen niet mogelijk zich te verdedigen tegen de rechtsgevolgen die hieruit voortkomen of de nadelige gevolgen voor gezondheid, veiligheid of diens grondrechten.

+

Maatregelen

+
idMaatregelen
owp-07Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-27-beoordelen-gevolgen-grondrechten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-27-beoordelen-gevolgen-grondrechten/index.html new file mode 100644 index 0000000000..f78484fb7e --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-27-beoordelen-gevolgen-grondrechten/index.html @@ -0,0 +1,1004 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+ +
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten

+ +

aia-29OntwerpVerificatie en validatieProjectleiderBeleid en adviesFundamentele rechten

+

Vereiste

+

Voordat een AI-systeem met een hoog risico als bedoeld in artikel 6, lid 2 AI-verordening, in gebruik wordt genomen, met uitzondering van AI-systemen met een hoog risico die bedoeld zijn om te worden gebruikt op het in punt 2 van bijlage III vermelde gebied, voeren operatoren die publiekrechtelijke instellingen zijn of particuliere entiteiten zijn die openbare diensten verlenen, en operatoren van AI-systemen met een hoog risico als bedoeld in bijlage III, punt 5, onder b) en c), een beoordeling uit van de gevolgen voor de grondrechten die het gebruik van een dergelijk systeem kan opleveren.

+

Toelichting

+

Voordat een AI-systeem met een hoog risico in gebruik wordt genomen, moeten publieke instellingen of particuliere entiteiten die openbare diensten leveren, en operators van bepaalde AI-systemen, een beoordeling uitvoeren van de impact op de grondrechten die het gebruik ervan kan hebben. +Deze evaluatie is bedoeld om potentiële risico's te identificeren die kunnen voortvloeien uit het gebruik van dergelijke systemen en om passende maatregelen te nemen om deze risico's te beheersen. +Het doel is om de bescherming van grondrechten te waarborgen bij het gebruik van AI-systemen met een hoog risico, met name in sectoren waar deze systemen cruciale diensten leveren aan het publiek.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenGebruiksverantwoordelijke

+

Risico

+

Het niet uitvoeren van deze beoordeling kan leiden tot schendingen van de grondrechten, juridische complicaties en verlies van vertrouwen van het publiek in het gebruik van AI-systemen door overheids- en openbare dienstverlenende entiteiten.

+

Maatregelen

+
idMaatregelen
org-12Controleer en verbeter regelmatig de kwaliteit van het algoritme
owp-06Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owk-02Maak een noodplan voor het stoppen van het algoritme
ver-01Toets het algoritme op bias
imp-02Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren
+ +

Hulpmiddelen

+
Hulpmiddelen
Impact Assessment Mensenrechten en Algoritmes
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-28-transparantieverplichtingen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-28-transparantieverplichtingen/index.html new file mode 100644 index 0000000000..07523644b1 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-28-transparantieverplichtingen/index.html @@ -0,0 +1,994 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AI-systemen worden zo ontworpen en gebruikt, dat mensen begrijpen wanneer zij met een AI-systeem communiceren en welke content gemaakt is door een AI-systeem - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

AI-systemen worden zo ontworpen en gebruikt, dat mensen begrijpen wanneer zij met een AI-systeem communiceren en welke content gemaakt is door een AI-systeem

+ +

aia-28OntwikkelenImplementatieProjectleiderOntwikkelaarTransparantie

+

Vereiste

+

Aanbieders van AI-systemen zorgen dat AI-sytemen zodanig worden ontworpen en ontwikkeld dat de betrokken natuurlijke personen worden geïnformeerd dat zij interacteren met een AI-systeem. +Gebruiksverantwoordelijken moeten betrokkenen informeren over de werking van het systeem en in het geval van een AI-systeem dat content gegenereert duidelijk kenbaar maken dat de content kunstmatig is gegenereerd of gemanipuleerd.

+

Toelichting

+

Dit geldt voor AI-systemen die:

+
    +
  • gebruikt worden voor directe interactie met natuurlijke personen (zoals chatbots).
  • +
  • synthetische afbeeldingen, audio, video of tekst genereert en/of manipuleert (bijvoorbeeld deepfake).
  • +
  • doen aan emotieherkenning of biometrische categorisatie.
  • +
+

Bronnen

+ +

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenhoog risico AI-systeemgeen hoog risico AI-systeemAanbieder

+

Risico

+

Bepaalde AI-systemen die bedoeld zijn om met natuurlijke personen te interageren of om content te genereren, kunnen specifieke risico’s op imitatie of misleiding met zich meebrengen, ongeacht of zij als systeem met een hoog risico gelden.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-29-ai-modellen-algemene-doeleinden/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-29-ai-modellen-algemene-doeleinden/index.html new file mode 100644 index 0000000000..04dc31ce0b --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-29-ai-modellen-algemene-doeleinden/index.html @@ -0,0 +1,991 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AI-modellen voor algemene doeleinden zijn voorzien van voldoende technische documentatie en informatie - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

AI-modellen voor algemene doeleinden zijn voorzien van voldoende technische documentatie en informatie

+ +

aia-29OntwerpOntwikkelenMonitoring en beheerProjectleiderTransparantie

+

Vereiste

+

Aanbieders van AI-modellen voor algemene doeleinden moeten (technische) informatie en documentatie opstellen, up-to-date houden en beschikbaar stellen voor aanbieders van AI-systemen die het AI-model voor algemene doeleinden in hun AI-systemen willen integreren.

+

Toelichting

+

Aanbieders van AI-modellen voor algemene doeleinden hebben een bijzondere rol en verantwoordelijkheid. +Zij leveren modellen die de basis kunnen vormen voor weer andere systemen en algoritmen, die vaak weer door andere partijen worden aangeboden dan de ontwikkelaar van het algemene systeem. +Dit vraagt om een goed inzicht in de modellen en hun capaciteiten, zowel qua integratie van de modellen in producten als qua naleving van verplichtingen.

+

Er zijn daarom evenredige transparantiemaatregelen nodig, zoals het opstellen en bijwerken van documentatie en verstrekken van informatie over het AI-model voor algemeen gebruik door de aanbieders van systemen die de algemene modellen gebruiken in hun product. +De aanbieder van het AI-model voor algemene doeleinden dient technische documentatie op te stellen en bij te werken om deze op verzoek te kunnen overleggen aan het AI-bureau en de nationale bevoegde autoriteiten. +De minimaal in de documentatie op te nemen elementen moeten worden vastgelegd volgens bijlage XII van de AI-Verordening. +Hierbij is het ook van belang dat de aanbieder van AI-modellen voor algemene doelstelling beleid opstellen voor naleving van auteursrechten en naburige rechten (artikel 4, lid 3 Richtlijn (EU) 2019/790).

+

In art. 53 lid 2 wordt een uitzondering gemaakt op deze vereisten.

+

Bronnen

+

Artikel 53 Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-model voor algemene doeleindenAanbieder

+

Risico

+

Het niet voldoen aan deze verplichtingen kan leiden tot juridische en ethische complicaties, inclusief schendingen van auteursrechten en gebrek aan transparantie in het gebruik van AI-modellen.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-30-ai-modellen-algemene-doeleinden-systeemrisico/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-30-ai-modellen-algemene-doeleinden-systeemrisico/index.html new file mode 100644 index 0000000000..4e698cf4c7 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-30-ai-modellen-algemene-doeleinden-systeemrisico/index.html @@ -0,0 +1,990 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico treffen extra maatregelen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico treffen extra maatregelen

+ +

aia-30OntwikkelenVerificatie en validatieMonitoring en beheerProjectleiderOntwikkelaarTransparantie

+

Vereiste

+

Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico moeten modelevaluatie uitvoeren overeenkomstig gestandaardiseerde protocollen en instrumenten die de stand van de techniek weerspiegelen, met inbegrip van het uitvoeren en documenteren van tests gericht op het ontdekken van kwetsbaarheden van het model om systeemrisico’s in kaart te brengen en te beperken.

+

Toelichting

+

De aanbieders van AI-modellen voor algemene doeleinden die systeemrisico’s inhouden, moeten, naast de verplichtingen voor aanbieders van AI-modellen voor algemene doeleinden, onderworpen worden aan verplichtingen die gericht zijn op het identificeren en beperken van die risico’s en op waarborging van een passend niveau van cyberbeveiliging, ongeacht of het model een op zichzelf staand model is of ingebed in een AI-systeem of in een product. +Aanbieders van AI-modellen voor algemene doeleinden met een potentieel systeemrisico moeten modelevaluaties uitvoeren. Dit omvat het testen en documenteren van het model volgens de stand van de techniek, met specifieke aandacht voor het identificeren en beperken van kwetsbaarheden. Deze maatregelen zijn bedoeld om systematische risico's te adresseren en te verminderen. Deze vereiste is een aanvulling op de genoemde verplichtingen in artikel 53 van de AI-verordening.

+

Systeemrisico betekent: een risico dat specifiek is voor de capaciteiten met een grote impact van AI-modellen voor algemene doeleienden, die aanzienlijke gevolgen hebben voor de markt van de Uniek vanwege hun bereik, of vanwege feitelijke of redelijkerwijs te voorziene negatieve gevolgen voor de gezondheid, de veiligheid, de openbare veiligheid, de grondrechten of de samenleving als geheel, en dat op grote schaal in de hele waardeketen kan worden verspreid.

+

Systeemrisico’s nemen logischerwijs toe naargelang de capaciteiten en het bereik van een model groter zijn, kunnen zich voordoen gedurende de gehele levenscyclus van het model en worden beïnvloed door elementen als misbruik van het model, de betrouwbaarheid, billijkheid, beveiliging en mate van autonomie ervan. Ook worden ze beïnvloed door de toegang van het model tot instrumenten, nieuwe of gecombineerde modaliteiten, introductie- en distributiestrategieën, en door het potentieel om waarborgen te omzeilen en andere factoren.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-model voor algemene doeleindenAanbieder

+

Risico

+

Niet voldoen aan deze verplichtingen kan leiden tot negatieve gevolgen voor de gezondheid, veiligheid, de openbare veiligheid, de grondrechten of de samenleving als geheel.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-31-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-31-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten/index.html new file mode 100644 index 0000000000..6927281416 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-31-ai-modellen-algemene-doeleinden-systeemrisico-ernstige-incidenten/index.html @@ -0,0 +1,987 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Als AI-modellen voor algemene doeleinden met systeemrisico’s ernstige incidenten veroorzaken, wordt dit gedocumenteerd en gerapporteerd - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Als AI-modellen voor algemene doeleinden met systeemrisico’s ernstige incidenten veroorzaken, wordt dit gedocumenteerd en gerapporteerd

+ +

aia-31Monitoring en beheerProjectleiderGovernanceTransparantie

+

Vereiste

+

Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico moeten relevante informatie over ernstige incidenten en mogelijke corrigerende maatregelen bijhouden, documenteren en onverwijld rapporteren aan het AI bureau en, in voorkomend geval, aan de nationale bevoegde autoriteiten.

+

Toelichting

+

Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico moeten ernstige incidenten documenteren en rapporteren. +Deze informatie moet onmiddellijk worden gemeld aan het AI-bureau en eventueel aan nationale autoriteiten. +Dit proces is cruciaal voor het waarborgen van de veiligheid en het nemen van passende corrigerende maatregelen. +Dit vereiste is een aanvulling op de in artikel 53 AI-verordening genoemde verplichtingen.

+

Bronnen

+

Artikel 55(1c) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-model voor algemene doeleindenAanbieder

+

Risico

+

Niet voldoen aan deze verplichtingen kan leiden tot risico's op veiligheidsincidenten, datalekken en schade aan de betrokken partijen en het publiek.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-32-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-32-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging/index.html new file mode 100644 index 0000000000..9f315b1f6d --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-32-ai-modellen-algemene-doeleinden-systeemrisico-cyberbeveiliging/index.html @@ -0,0 +1,987 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AI-modellen voor algemene doeleinden met systeemrisico’s zijn voldoende beveiligd tegen cyberaanvallen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

AI-modellen voor algemene doeleinden met systeemrisico’s zijn voldoende beveiligd tegen cyberaanvallen

+ +

aia-32OntwikkelenMonitoring en beheerOntwikkelaarGovernanceTechnische robuustheid en veiligheid

+

Vereiste

+

Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico zorgen voor een passend niveau van cyberbeveiligingsbescherming voor het AI-model voor algemene doeleinden met een systeemrisico en de fysieke infrastructuur van het model.

+

Toelichting

+

Aanbieders van AI-modellen met systeemrisico moeten zorgen voor passende cyberbeveiligingsmaatregelen. +Dit omvat het beschermen van zowel het AI-model als de fysieke infrastructuur tegen potentiële cyberdreigingen. +Het doel is om de integriteit en veiligheid van het model en de infrastructuur te waarborgen. +Dit vereiste is een aanvulling op de in artikel 53 AI-verordening genoemde verplichtingen.

+

Bronnen

+

Artikel 55(1d) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-model voor algemene doeleindenAanbieder

+

Risico

+

Niet voldoen aan deze verplichtingen kan leiden tot risico's op veiligheidsincidenten, datalekken en schade aan de betrokken partijen en het publiek.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-33-verwerking-in-testomgeving/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-33-verwerking-in-testomgeving/index.html new file mode 100644 index 0000000000..cc7c9ec5be --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-33-verwerking-in-testomgeving/index.html @@ -0,0 +1,988 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AI-testomgevingen die persoonsgegevens verwerken, voldoen aan strenge voorwaarden - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

AI-testomgevingen die persoonsgegevens verwerken, voldoen aan strenge voorwaarden

+ +

aia-33OrganisatieverantwoordelijkhedenOntwikkelenDataverkenning en datapreparatieJuristOntwikkelaarProjectleiderPrivacy en gegevensbeschermingData

+

Vereiste

+

Rechtmatig voor andere doeleinden verzamelde persoonsgegevens mogen uitsluitend in de AI-testomgeving voor regelgeving worden verwerkt ten behoeve van het ontwikkelen, trainen en testen van bepaalde AI-systemen en indien aan alle voorwaarden van art. 57 is voldaan.

+

Toelichting

+

De verwerking van persoonsgegevens voor AI-testdoeleinden is mogelijk maar het moet voldoen aan strikte voorwaarden die zijn opgenomen in artikel 57 AI-Verordening. +Hierbij kan worden gedacht aan voorwaarden als het beschermen van persoonsgevens met passende technische en organisatorische maatregelen, persoonsgegevens die in de testomgeving worden aangemaakt mogen niet buiten de testomgeving worden gedeeld en logbestanden worden bijgehouden voor de duur van de deelname aan de testomgeving. +Voor toepassingen voor het verder verwerken van gegevens kan worden gedacht aan het ontwikkelen van een AI-systeem zodat een overheidsinstantie of een andere natuurlijke of rechtspersoon een aanzienlijk openbaar belang kan waarborgen, bijvoorbeeld op het gebied van kwaliteit van milieu, duurzaamheid, openbare veiligheid en gezondheid.

+

Bronnen

+ +

Wanneer van toepassing?

+

AI-model voor algemene doeleindenAI-systeemAI-systeem voor algemene doeleindenAanbiederGebruiksverantwoordelijke

+

Risico

+

Verdere verwerking van persoonsgegevens buiten een AI-testomgeving vergroot de kans op bijvoorbeeld het lekken van de persoonsgegevens, wat kan leiden tot een inbreuk op de privacyrechten van betrokken.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-34-monitoring-na-het-in-de-handel-brengen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-34-monitoring-na-het-in-de-handel-brengen/index.html new file mode 100644 index 0000000000..4a113dfa90 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-34-monitoring-na-het-in-de-handel-brengen/index.html @@ -0,0 +1,993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hoog-risico-AI-systemen zijn voorzien van een monitoringsysteem - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Hoog-risico-AI-systemen zijn voorzien van een monitoringsysteem

+ +

aia-34Monitoring en beheerProjectleiderTechnische robuustheid en veiligheid

+

Vereiste

+

Aanbieders moeten een systeem voor monitoring na het in de handel brengen vaststellen en documenteren op een manier die evenredig is aan de aard van de AI-technologieën en de risico’s van het AI-systeem met een hoog risico.

+

Toelichting

+

Aanbieders moeten een monitoringssysteem opzetten voor het monitoren na het in de handel brengen. +Dit systeem moet documenteren op een wijze die passend is bij de aard van de AI-technologieën en de risico's van het betreffende AI-systeem met een hoog risico. +Dit monitoringssysteem moet proportioneel zijn aan de complexiteit en potentiële impact van het AI-systeem.

+

Het systeem voor monitoring na het in de handel brengen verzamelt, documenteert en analyseert actief en systematisch relevante data die door gebruiksverantwoordelijken kunnen zijn verstrekt of via andere bronnen kunnen zijn verzameld, over de prestaties van AI-systemen met een hoog risico gedurende hun hele levensduur. +Dit stelt de aanbieder in staat na te gaan of AI-systemen blijvend voldoen aan de in hoofdstuk III, afdeling 2, van de AI-verordening vermelde voorschriften. +In voorkomend geval omvat de monitoring na het in de handel brengen een analyse van de interactie met andere AI-systemen. +Deze verplichting geldt niet voor gevoelige operationele gegevens van gebruiksverantwoordelijken die rechtshandhavingsinstanties zijn.

+

Het systeem voor monitoring na het in de handel brengen is gebaseerd op een plan voor monitoring na het in de handel brengen. +Het plan voor monitoring na het in de handel brengen maakt deel uit van de in bijlage IV bedoelde technische documentatie.

+

Bronnen

+

Artikel 72(1) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Zonder monitoringssysteem voor na het in handel brengen is er een risico dat verminderde pestaties van een AI-systeem met hoog risico ongedeteceerd blijven. +Een aanbieder kan niet nagaan of een AI-systeem blijvend voldoet aan voorschriften.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-35-melding-ernstige-incidenten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-35-melding-ernstige-incidenten/index.html new file mode 100644 index 0000000000..b90d231a1a --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-35-melding-ernstige-incidenten/index.html @@ -0,0 +1,993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ernstige incidenten door hoog-risico-AI-systemen worden gemeld aan de toezichthouder - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Ernstige incidenten door hoog-risico-AI-systemen worden gemeld aan de toezichthouder

+ +

aia-35OrganisatieverantwoordelijkhedenMonitoring en beheerProjectleiderGovernance

+

Vereiste

+

Aanbieders van in de Europese Unie in de handel gebrachte AI-systemen met een hoog risico melden ernstige incidenten bij de markttoezichtautoriteiten van de lidstaten waarin dat incident heeft plaatsgevonden.

+

Toelichting

+

Aanbieders van AI-systemen met een hoog risico die binnen de EU worden verhandeld, moeten ernstige incidenten melden bij de markttoezichtautoriteiten van de lidstaten waar het incident heeft plaatsgevonden. +Een 'ernstig incident' wordt in artikel 3 van de AI-verordening gedefinieerd als: een incident of gebrekkig functioneren van een AI-systeem dat direct of indirect leidt tot:

+
    +
  1. het overlijden van een persoon of ernstige schade voor de gezondheid van een persoon;
  2. +
  3. een ernstige en onomkeerbare verstoring van het beheer of de exploitatie van kritieke infrastructuur;
  4. +
  5. een schending van de uit het recht van de Unie voortvloeiende verplichtingen ter bescherming van de grondrechten;
  6. +
  7. ernstige schade aan eigendommen of het milieu.
  8. +
+

Dit meldingsproces is bedoeld om snel en adequaat te reageren op ernstige incidenten die zich voordoen bij het gebruik van deze AI-systemen, en om passende maatregelen te nemen ter bescherming van de consumenten en het publiek. +Het doel is om de veiligheid en betrouwbaarheid van AI-systemen te waarborgen en mogelijke risico's voor gebruikers te minimaliseren.

+

Bronnen

+

Artikel 73(1) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAanbieder

+

Risico

+

Het niet melden van ernstige incidenten kan leiden tot vertraagde reactie op potentiële gevaren voor gebruikers en kan het vertrouwen in AI-systemen ondermijnen.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-36-melding-inbreuk-op-ai-verordening/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-36-melding-inbreuk-op-ai-verordening/index.html new file mode 100644 index 0000000000..bb3cfbac59 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-36-melding-inbreuk-op-ai-verordening/index.html @@ -0,0 +1,988 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Klokkenluiders kunnen veilig melden dat een organisatie zich niet houdt aan de AI-verordening - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Klokkenluiders kunnen veilig melden dat een organisatie zich niet houdt aan de AI-verordening

+ +

aia-36OrganisatieverantwoordelijkhedenMonitoring en beheerProjectleiderGovernanceMenselijke controle

+

Vereiste

+

Inbreuken op de AI verordening moeten gemeld kunnen worden en melders moeten dit op een veilige en vertrouwelijke manier kunnen doen, zoals beschreven in Richtlijn (EU) 2019/1937.

+

Toelichting

+

Personen die optreden als klokkenluiders bij inbreuken op de AI-verordening, moeten worden beschermd uit hoofde van het Unierecht. +Richtlijn (EU) 2019/1937 (https://eur-lex.europa.eu/legal-content/NL/LSU/?uri=CELEX:32019L1937) van het Europees Parlement en de Raad moet daarom van toepassing zijn. +De richtlijn biedt een kader voor het veilig en vertrouwelijk melden van schendingen van de verordening, terwijl het de melders ("klokkenluiders") beschermt tegen represailles of vervolging. +Deze richtlijn bevordert transparantie en verantwoording binnen organisaties en draagt bij aan een cultuur van naleving en integriteit.

+

Bronnen

+

Artikel 87 Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

AI-systeemAI-systeem voor algemene doeleindenAI-model voor algemene doeleindenAanbiederGebruiksverantwoordelijke

+

Risico

+

Gebrek aan een veilige omgeving kan ertoe leiden dat klokkenluiders geen melding maken van inbreuk op de AI-verordening. + Dit schaadt het rapportagesysteem en heeft negatief effect op het maatschappelijk welzijn.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-37-recht-klacht-indienen-bij-ai-bureau/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-37-recht-klacht-indienen-bij-ai-bureau/index.html new file mode 100644 index 0000000000..3ada0c6514 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aia-37-recht-klacht-indienen-bij-ai-bureau/index.html @@ -0,0 +1,985 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Klachtrecht aanbieders verder in AI-waardeketen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Klachtrecht aanbieders verder in AI-waardeketen

+ +

aia-37OrganisatieverantwoordelijkhedenProjectleiderFundamentele rechten

+

Vereiste

+

Aanbieders verder in de AI-waardeketen hebben het recht een klacht in te dienen wegens inbreuk op de AI verordening bij het AI-bureau.

+

Toelichting

+

Aanbieders verder in de AI-waardeketen hebben het recht om een klacht in te dienen bij het AI-bureau in het geval van een inbreuk op de AI-verordening. +Dit biedt hen een mechanisme om actie te ondernemen bij schendingen van de regels met betrekking tot AI-modellen voor algemene doeleinden die zij geïntrigeerd hebben in AI-systemen. +Het AI-bureau kan dan passende maatregelen nemen om de naleving van de verordening te handhaven en eventuele geschillen tussen aanbieders op te lossen.

+

Bronnen

+

Artikel 89(2) Verordening Artificiële Intelligentie

+

Wanneer van toepassing?

+

Risico

+

Gebrek aan klachtrecht verhindert het AI-bureau om tijdig en zorgvuldig te kunnen ingrijpen bij overtreding van de AI-verordening.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/arc-01-archiefwet/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/arc-01-archiefwet/index.html new file mode 100644 index 0000000000..d03d79f2fa --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/arc-01-archiefwet/index.html @@ -0,0 +1,991 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet

+ +

arc-01UitfaserenMonitoring en beheerOntwikkelenProjectleiderOntwikkelaarTransparantieData

+

Vereiste

+

Overheidsorganen zijn verplicht de onder hen berustende archiefbescheiden in goede, geordende en toegankelijke staat te brengen en te bewaren, alsmede zorg te dragen voor de vernietiging van de daarvoor in aanmerking komende archiefbescheiden.

+

Toelichting

+

Volgens de Archiefwet moeten overheden informatie bewaren. +Op basis van deze informatie moet gereconstrueerd kunnen worden hoe besluiten, ook in de context van algoritmes, tot stand zijn gekomen. +Informatie over en van algoritmes moet daarom op basis van de selectielijst bewaard en vernietigd worden.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Zonder goede toepassing van de Archiefwet is het voor betrokkene(n) of derden niet mogelijk om achteraf te reconstrueren en te controleren hoe besluiten, waar algoritmes aan hebben bijgedragen, tot stand zijn gekomen. +Het nalaten om archiefbescheiden na verloop van tijd te verwijderen brengt risico's met zich mee op het gebied van privacy en informatiebeveiliging.

+

Maatregelen

+
idMaatregelen
owp-08Bepaal welke documenten voor hoe lang gearchiveerd moeten worden
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
dat-04Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aut-01-auteursrechten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aut-01-auteursrechten/index.html new file mode 100644 index 0000000000..6d662f0b73 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/aut-01-auteursrechten/index.html @@ -0,0 +1,994 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Auteursrechten zijn beschermd - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Auteursrechten zijn beschermd

+ +

aut-01Dataverkenning en datapreparatieOntwerpJuristDataGovernance

+

Vereiste

+

Auteursrechten mogen niet geschonden worden bij het ontwikkelen en gebruiken van algoritmes.

+

Toelichting

+

Bepaalde type algoritmes worden ontwikkeld op basis van grote hoeveelheden data. +Deze data wordt gebruikt voor het trainen en testen van algoritmes. +Het gebruiken van deze data mag geen inbreuk maken op auteursrechten van diegene die deze rechten heeft. +Ook de gegenereerde output van algoritmes mag geen inbreuk maken op deze rechten.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Het niet voldoen aan het auteursrecht kan leiden tot onrechtmatig gebruik van auteursrechtelijk beschermde inhoud, wat kan resulteren in mogelijke juridische geschillen, boetes en schadevergoedingen voor inbreuk op het auteursrecht. +Bovendien kan het niet naleven van het auteursrecht het vertrouwen van gebruikers en belanghebbenden ondermijnen, wat kan leiden tot reputatieschade en gebrek aan vertrouwen.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-16Laat aanbieder(s) bewijs leveren dat de door hen ontwikkelde algoritmes geen inbreuk maken op de auteursrechten van derden met de trainingsdata en de output.
owp-17Aansprakelijkheidsvoorwaarden van een aanbieder worden beoordeeld in de aanbesteding
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-27Maak (contractuele) afspraken over data en artefacten met een aanbieder
imp-10Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.
dat-06Controleer de auteursrechten van eigen data
dat-08Zorg dat je controle of eigenaarschap hebt over de data
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-01-persoonsgegevens-worden-rechtmatig-verwerkt/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-01-persoonsgegevens-worden-rechtmatig-verwerkt/index.html new file mode 100644 index 0000000000..9f760cbd4c --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-01-persoonsgegevens-worden-rechtmatig-verwerkt/index.html @@ -0,0 +1,995 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Persoonsgegevens worden op een rechtmatige manier verwerkt - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Persoonsgegevens worden op een rechtmatige manier verwerkt

+ +

avg-01ProbleemanalyseOntwerpDataverkenning en datapreparatieProjectleiderJuristPrivacy en gegevensbescherming

+

Vereiste

+

De verwerking van persoonsgegevens moet rechtmatig plaatsvinden.

+

Toelichting

+

De verwerking van persoonsgegevens moet rechtmatig plaatsvinden, wat betekent dat de verwerking gebaseerd moet zijn op één van de wettelijke grondslagen die zijn geformuleerd in artikel 6 Algemene Verordening Gegevensbescherming. +Persoonsgegevens mogen alleen worden verzameld voor specifieke, duidelijk omschreven en gerechtvaardigde doeleinden. +Het is niet toegestaan om deze gegevens verder te verwerken op een manier die niet verenigbaar is met deze oorspronkelijke doeleinden.

+

Bij het verwerken van persoonsgegevens ten behoeve van de ontwikkeling en gebruik van algoritmes moet worden onderzocht of dit kan worden gebaseerd op één van de verwerkingsgrondslagen. +Het is van belang dat wordt uitgewerkt welke persoonsgegevens waarvoor worden verwerkt en op basis van welke grondslag. +Hierbij kan worden gedacht aan persoonsgegevens ten behoeve van trainingsdata, voor het genereren van output of, indien (juridisch) mogelijk, voor het uitvoeren van een onderzoek naar onbewuste vooringenomenheid.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Het risico wanneer persoonsgegevens niet op een rechtmatige manier worden verwerkt (verzamelen van gegevens valt hier ook onder), is dat er niet aan de AVG wordt voldaan. +Er worden dan onrechtmatig persoonsgegevens verwerkt, waarmee privacy van personen in het geding komt. +Ook kan het leiden tot hoge boetes voor organisaties, en kan een datalek plaatsvinden.

+

Maatregelen

+
idMaatregelen
pba-05Beschrijf de wettelijke grondslag voor de inzet van het algoritme
owp-03Beschrijf voor welk doel het algoritme persoonsgegevens gebruikt en waarom dit mag
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-02-beperkte-bewaartermijn-van-persoonsgegevens/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-02-beperkte-bewaartermijn-van-persoonsgegevens/index.html new file mode 100644 index 0000000000..863fb8ed87 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-02-beperkte-bewaartermijn-van-persoonsgegevens/index.html @@ -0,0 +1,989 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Persoonsgegevens worden zo kort mogelijk bewaard - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Persoonsgegevens worden zo kort mogelijk bewaard

+ +

avg-02OntwerpDataverkenning en datapreparatieOntwikkelenUitfaserenOntwikkelaarBeleid en adviesPrivacy en gegevensbescherming

+

Vereiste

+

Persoonsgegevens moeten worden bewaard in een vorm die het mogelijk maakt om de betrokkenen niet langer te identificeren dan nodig is voor de realisering van de doeleinden waarvoor de persoonsgegevens initieel worden verwerkt.

+

Toelichting

+

Persoonsgegevens dienen toereikend en ter zake dienend te zijn en beperkt te blijven tot wat noodzakelijk is voor de doeleinden waarvoor zij worden verwerkt. +Dit vereist dat ervoor wordt gezorgd dat de opslagperiode van de persoonsgegevens tot een strikt minimum wordt beperkt. +Het beginsel van opslagbeperking betekent dat persoonsgegevens moeten worden bewaard in een vorm die het mogelijk maakt om de betrokkenen niet langer te identificeren dan voor de realisering van de doeleinden waarvoor de persoonsgegevens worden verwerkt.

+

In de context van algoritmes is het belangrijk dat, wanneer persoonsgegevens worden verwerkt, er onderzocht wordt op welke manieren identificatie van betrokkenen tegen kan worden gegaan. +Hierbij kan worden gedacht aan maatregelen als pseudonomisering en anonimisering.

+

Bronnen

+

Artikel 5 lid 1 onder de AVG

+

Wanneer van toepassing?

+

Risico

+

Het onnodig lang bewaren van persoonsgegevens levert een onrechtmatige situatie op. +De privacyrechten van betrokken worden hierdoor aangetast. +Er ontstaan aanvullende risico's bij bijvoorbeeld een datalek.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
dat-04Geef data zoals persoonsgegevens een bewaartermijn met een vernietigingsprocedure
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-03-minimale-verwerking-van-persoonsgegevens/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-03-minimale-verwerking-van-persoonsgegevens/index.html new file mode 100644 index 0000000000..de3380f26a --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-03-minimale-verwerking-van-persoonsgegevens/index.html @@ -0,0 +1,985 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Persoonsgegevens worden zo min mogelijk verwerkt - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Persoonsgegevens worden zo min mogelijk verwerkt

+ +

avg-03OntwerpDataverkenning en datapreparatieOntwikkelenJuristOntwikkelaarPrivacy en gegevensbescherming

+

Vereiste

+

De verwerking van persoonsgegevens moet minimaal worden gehouden, dat wil zeggen dat die verwerking toereikend moet zijn, ter zake dienend en beperkt tot wat noodzakelijk is voor de doeleinden waarvoor zij worden verwerkt.

+

Toelichting

+

Het is van belang dat énkel persoonsgegevens worden verwerkt die noodzakelijk zijn gezien de doeleinden van die vewerking. +Er moet een beoordeling worden gemaakt welke persoonsgegevens dit wel en eventueel niet zijn. +Voor het ontwikkelen en gebruiken van algoritmes is het van belang om te beoordelen welke persoonsgegevens noodzakelijk zijn om het beoogde doel te bereiken. Afhankelijk van de toepassing vraagt dit om een intensieve toets. Er moet voor worden gezorgd dat persoonsgegevens die niet als noodzakelijk worden beschouwd, buiten de verwerking blijven.

+

Bronnen

+

Artikel 5 lid 1 onder c Algemene Verordening Gegevensbescherming

+

Wanneer van toepassing?

+

Risico

+

Het onnodig verwerken van persoonsgegevens kan een inbreuk maken op rechten van betrokkenen, en zou kunnen leiden tot een datalek.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
dat-05Bescherm persoonsgegevens door data te anonimiseren, pseudonimiseren of te aggregeren
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-04-proportionaliteit-en-subsidiariteit/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-04-proportionaliteit-en-subsidiariteit/index.html new file mode 100644 index 0000000000..47e7742cd9 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-04-proportionaliteit-en-subsidiariteit/index.html @@ -0,0 +1,993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair

+ +

avg-04OntwerpDataverkenning en datapreparatieJuristOntwikkelaarFundamentele rechtenPrivacy en gegevensbescherming

+

Vereiste

+

Gegevensverwerking moet in verhouding staan tot het beoogde doel en persoonsgegevens mogen alleen verwerkt worden als er geen minder ingrijpende manier is om het doel te bereiken. Voor zover het gaat om de verwerking van persoonsgegevens moet dit vereiste aantoonbaar zijn.

+

Toelichting

+

Proportionaliteit vereist dat de impact van gegevensverwerking op de persoonlijke levenssfeer voor de toepassing van een algoritme en voor het genereren van de benodigde output in balans is met het beoogde doel. +Subsidiariteit vereist dat persoonsgegevens alleen moeten worden verwerkt als dit de minst inbreukmakende manier is om het doel te bereiken. +Deze principes waarborgen dat de privacy van individuen wordt gerespecteerd en dat gegevensverwerking niet verder gaat dan noodzakelijk is voor legitieme doeleinden. +Het is van belang om deze principes te hanteren om te bepalen of en in welke vorm een algoritmes moet worden toegepast en om tot een passende mate van gegevensverwerking te komen om het doel te bereiken.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Zonder toetsing aan het proportinaliteits- en subsidiariteitsbeginsel ontstaat het risico dat er een onnodig zware en daardoor onrechtmatige inbreuk wordt gemaakt op de privacyrechten van betrokkenen.

+

Maatregelen

+
idMaatregelen
owp-05Bepaal het soort algoritme en de risicogroep en vereisten die hierbij horen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owk-02Maak een noodplan voor het stoppen van het algoritme
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-05-juistheid-en-actualiteit-van-persoonsgegevens/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-05-juistheid-en-actualiteit-van-persoonsgegevens/index.html new file mode 100644 index 0000000000..2f9c92bc63 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-05-juistheid-en-actualiteit-van-persoonsgegevens/index.html @@ -0,0 +1,986 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Persoonsgegevens zijn juist en actueel - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Persoonsgegevens zijn juist en actueel

+ +

avg-05Dataverkenning en datapreparatieOntwikkelaarProjectleiderPrivacy en gegevensbescherming

+

Vereiste

+

De te verwerken persoonsgegevens zijn juist, nauwkeurig en worden zo nodig geactualiseerd of gewist.

+

Toelichting

+

De te verwerken persoonsgegevens moeten nauwkeurig, juist en zo nodig actueel zijn. +Dit betekent dat alle maatregelen moeten worden genomen om ervoor te zorgen dat onjuiste persoonsgegevens worden gerectificeerd of gewist. +Dat kan betekenen dat persoonsgegevens moeten worden geactualiseerd of verbeterd. +In de context van algoritmes is het van belang dat ook daar wordt onderzocht welke maatregelen nodig zijn om die juistheid toe te passen.

+

Bronnen

+

Artikel 5 lid 1 sub d Algemene Verordening Gegevensbescherming

+

Wanneer van toepassing?

+

Risico

+

Als er geen rekening wordt gehouden met de juistheid, nauwkeurigheid en volledigheid van persoonsgegevens, kunnen kwaliteit en integriteit van data niet voldoende worden gewaarborgd.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
dat-01Controleer de datakwaliteit
mon-04Monitor regelmatig op veranderingen in de data. Bij veranderingen evalueer je de prestaties en output van het algoritme.
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-06-verantwoordingsplicht-rechtmatigheid/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-06-verantwoordingsplicht-rechtmatigheid/index.html new file mode 100644 index 0000000000..adb57afccc --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-06-verantwoordingsplicht-rechtmatigheid/index.html @@ -0,0 +1,998 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + +
+ + + + + + + + +

Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken

+ +

avg-06OntwerpDataverkenning en datapreparatieJuristGovernancePrivacy en gegevensbescherming

+

Vereiste

+

De verantwoordelijken moeten bij de verwerking van persoonsgegevens door algoritmes kunnen aantonen dat de verwerkingen rechtmatig plaatsvinden. +Dit betekent concreet dat de volgende punten aangetoond kunnen worden:

+
    +
  • Rechtmatigheid, behoorlijkheid en transparantie
  • +
  • Doelbinding
  • +
  • Minimale gegevensverwerking
  • +
  • Juistheid
  • +
  • Opslagbeperking
  • +
  • Integriteit en vertrouwelijkheid
  • +
+

Een aandachtpunt daarbij is dat de rechtmatigheid van de verwerking ten opzichte van andere gerelateerde wetgeving zoals de AI Act en de Algemene wet gelijke behandeling ook moeten kunnen worden aangetoond voor zover de rechtmatigheid van de verwerking onder de AVG daarvan afhankelijk is.

+

Toelichting

+

Bij het verwerken van persoonsgegevens voor algoritmes moeten de verantwoordelijkheden duidelijk beschreven en toegewezen zijn. +De verwerkingsverantwoordelijke is degene die ervoor zorgt dat deze verantwoordelijkheden worden nageleefd en kan dit aantonen, wat bekend staat als de verantwoordingsplicht. +Deze maatregelen zijn essentieel om de naleving van regelgeving met betrekking tot gegevensbescherming te waarborgen en het vertrouwen van gebruikers in de verwerking van hun gegevens te vergroten.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Het niet naleven van deze norm moet worden gekwalificeerd als een onrechtmatigheid, niet als een risico voor de rechten en vrijheden van betrokkenen onder de AVG. Maar het niet voldoen aan artikel 5 betekent in de praktijk vaak wel dat er onvoldoende zicht is op risico's voor de rechten en vrijheden van betrokkenen of dat er te grote risico's worden genomen. Deze gevolgen zijn echter indirect een gevolg van het niet naleven van artikel 5 AVG. Het moeten voldoen aan het aantoonbaarheidsvereiste kan wel risico's hebben voor de organisatie die een algortime inzet. Enkele risico's zijn:

+
    +
  • Aantoonbaarheidsvereisten vragen in de praktijk veel documentatie. Deze documentatie kan via de Woo opgevraagd worden. Het ontbreken van documentatie kan door externen vaak relatief makkelijk in verband worden gebracht met een overtreding van deze vereisten.
  • +
  • Algoritmes die van nature slecht inzichtelijk en uitlegbaar zijn (zoals deep-learning) hebben een zeer hoge drempel om aan deze vereiste te voldoen. Aantonen van rechtmatigheid is voor een belangrijk deel afhankelijk van inzicht in de werking van het algoritme. De inzet van een algortime kan dus mogelijk tegengehouden worden door deze vereisten.
  • +
  • Bij leveranciers die niet of gedeeltelijke transparant zijn over hun product of dienstverlening ontstaat een vergelijkbaar risico. Waar de Woo uitzonderingen heeft voor bedrijfsgeheimen heeft de AVG daar maar beperkte ruimte voor. Het is dus mogelijk dat leveranciers terughoudend zullen zijn met het delen van informatie die onder de AVG ook aan betrokkenen gecommuniceerd moeten worden.
  • +
  • Samenwerkingsverbanden en externe leveranciers kunnen niet als argumenten worden gebruikt om de aantoonbaarheidsvereisten op af te schuiven. Onafhankelijk van de onderlinge afspraken daarover hebben alle verwerkingsverantwoordelijken de verplichting om aan deze vereisten te kunnen voldoen.
  • +
+

Maatregelen

+
idMaatregelen
owp-01Beschrijf de rollen en verantwoordelijkheden voor het ontwikkelen en gebruiken van algoritmes
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-07-transparantie-bij-verwerken-persoonsgegevens/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-07-transparantie-bij-verwerken-persoonsgegevens/index.html new file mode 100644 index 0000000000..82902c4460 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-07-transparantie-bij-verwerken-persoonsgegevens/index.html @@ -0,0 +1,992 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Organisaties zijn transparant over het verwerken van persoonsgegevens - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Organisaties zijn transparant over het verwerken van persoonsgegevens

+ +

avg-07ImplementatieMonitoring en beheerOntwikkelaarProjectleiderPrivacy en gegevensbeschermingTransparantie

+

Vereiste

+

De verwerking van persoonsgegevens moet transparant zijn.

+

Toelichting

+

Een betrokkene moet op de hoogte worden gesteld van het feit dat er verwerking plaatsvindt van diens persoonsgegevens en van de doeleinden daarvan (zoals ook is verwoord in het beginsel van transparante verwerking, artikel 5 AVG). +Hierbij moeten de specifieke omstandigheden en de context waarin de persoonsgegevens worden verwerkt, worden meegenomen. +In artikel 13 en 14 AVG wordt toegelicht welke informatie in welke gevallen moet worden verstrekt door de verwerkersverantwoordelijke. +Als persoonsgegevens worden verwerkt ten behoeve van het ontwikkelen of gebruiken van algoritmes, zal deze informatie moeten worden verstrekt.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Rechten van betrokken worden geschonden als er geen sprake is van transparantie over de verwerkingen van de persoonsgegevens.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
imp-04Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister
imp-07Vermeld het gebruik van persoonsgegevens in een privacyverklaring
imp-08Vermeld het gebruik van persoonsgegevens in het verwerkingsregister
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-08-wettelijke-verwerking-van-gevoelige-gegevens/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-08-wettelijke-verwerking-van-gevoelige-gegevens/index.html new file mode 100644 index 0000000000..814f98a5eb --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-08-wettelijke-verwerking-van-gevoelige-gegevens/index.html @@ -0,0 +1,992 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt

+ +

avg-08OntwerpDataverkenning en datapreparatieProjectleiderJuristBeleid en adviesPrivacy en gegevensbeschermingBias en non discriminatie

+

Vereiste

+

Bijzondere categorieën van persoonsgegevens mogen alleen worden verwerkt op basis van een wettelijke uitzondering.

+

Toelichting

+

Persoonsgegevens die door hun aard bijzonder gevoelig zijn wat betreft de grondrechten en fundamentele vrijheden, verdienen specifieke bescherming. +Dit komt doordat de context van de verwerking ervan significante risico's kan meebrengen voor de grondrechten en de fundamentele vrijheden. +Denk hierbij aan persoonsgegevens als ras, ethnische afkomst, politieke opvattingen of religieuze of levenschouwelijke overtuigingen.

+

Bijzondere categorieën persoonsgegevens mogen alleen worden verwerkt als er hier een wettelijke uitzondering voor is (artikel +9 AVG en artikel 30 UAVG). +Deze vereiste is ook van toepassing bij het ontwikkelen en gebruiken van algoritmes en stelt daarmee beperkingen aan het mogen verwerken van deze categorieën persoonsgegevens, bv. ten behoeve van trainingsdata of het genereren van de beoogde output.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Het (onrechtmatige) verwerken van bijzondere categorieën persoonsgegevens brengt risico's met zich mee op het gebied van respecteren van de persoonlijke levenssfeer en discriminatie.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-09-inroepen-privacyrecht-bij-verwerking-persoonsgegevens/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-09-inroepen-privacyrecht-bij-verwerking-persoonsgegevens/index.html new file mode 100644 index 0000000000..0946d5639a --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-09-inroepen-privacyrecht-bij-verwerking-persoonsgegevens/index.html @@ -0,0 +1,986 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Betrokkenen kunnen een beroep doen op hun privacyrechten - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Betrokkenen kunnen een beroep doen op hun privacyrechten

+ +

avg-09OrganisatieverantwoordelijkhedenOntwikkelenOntwikkelaarPrivacy en gegevensbeschermingData

+

Vereiste

+

Betrokkenen kunnen een beroep doen op hun privacyrechten.

+

Toelichting

+

Mensen hebben het recht om hun privacyrechten uit te oefenen door een beroep te doen op verschillende wettelijke bepalingen, zoals het recht op inzage, correctie, verwijdering en bezwaar tegen de verwerking van hun persoonsgegevens. +Dit betekent dat individuen controle hebben over hoe hun gegevens worden gebruikt en kunnen verzoeken om toegang te krijgen tot hun gegevens of om wijzigingen aan te brengen indien nodig.

+

Het kunnen uitoefenen van privacyrechten is essentieel voor het beschermen van de privacy van individuen, het waarborgen van transparantie en controle uitvoeren over persoonsgegevens. +Als persoonsgegevens worden verwerkt voor het ontwikkelen en gebruiken van algoritmes, is het van belang dat maatregelen worden getroffen om deze rechten te eerbiedigen.

+

Bronnen

+

Artikel 15 - 21 Algemene Verordening Gegevensbescherming

+

Wanneer van toepassing?

+

Risico

+

Betrokkenen hebben geen controle over hun persoonsgegevens wanneer ze geen beroep kunnen doen op hun privacyrechten.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
imp-06Spreek af hoe de organisatie omgaat met privacy-verzoeken
imp-09Richt een proces in zodat burgers of andere belanghebbenden een klacht, bezwaar of beroep kunnen indienen over het gebruik van het algoritme en monitor dit proces.
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/index.html new file mode 100644 index 0000000000..79794d8fbb --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-10-recht-op-niet-geautomatiseerde-besluitvorming/index.html @@ -0,0 +1,1039 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd

+ +

avg-10OntwerpImplementatieProjectleiderBeleid en adviesPrivacy en gegevensbescherming

+

Vereiste

+

Betrokkenen hebben het recht om niet onderworpen te worden aan een enkel op geautomatiseerde verwerking, waaronder proflering, gebaseerd besluit, wanneer dit rechtsgevolgen heeft voor hen of het hen anderszins in aanzienlijke mate treft. Dit verbod geldt niet indien de geautomatiseerde individuele besluitvorming, anders dan op basis van profilering, noodzakelijk is om te voldoen aan een wettelijke verplichting die op de verwerkingsverantwoordelijke rust of noodzakelijk is voor de vervulling van een taak van algemeen belang.

+

Toelichting

+

Overheidsorganisaties zijn vaak belast met de uitvoering van wettelijke taken waarbij zij 'besluiten' moeten nemen, bijvoorbeeld als een burger vraagt om een uitkering, toeslag of een subsidie. +Hiervoor moeten gegevens worden verwerkt om te kunnen bepalen of een burger hier ook recht op heeft. Om deze gegevens snel en accuraat te verwerken, zetten overheidsorganisaties vaak algoritmes in. Deze gegevens worden dan vaak 'geautomatiseerd' door deze algoritmes verwerkt, zonder dat een ambtenaar dit werk controleert. +Soms wordt het proces voor het nemen van een besluit volledig geautomatiseerd ingericht. Denk hierbij aan het opleggen van een boete voor een snelheidsovertreding. Hierdoor kan in korte tijd en op een efficiënte wijze, een grote hoeveelheid besluiten worden genomen.

+

Het geautomatiseerd verwerken van gegevens voor de totstandkoming van een besluit brengt risico's met zich mee. Zeker als hierbij persoonsgegevens van individuen worden verwerkt en er sprake is van profilering. Hierdoor ontstaat bijvoorbeeld het risico op discriminatie. Daarom is in art. 22 AVG het recht voor betrokkenen gecreëerd om niet te worden onderworpen aan een uitsluitend op geautomatiseerde verwerking, waaronder profilering, gebaseerd besluit.

+

Dit verbod geldt voor besluiten die 'rechtsgevolgen' hebben voor een betrokkene, bijvoorbeeld een burger die een boete ontvangt voor de snelheidsovertreding, of hem anderzijds in aanmerkelijke mate treft. Het besluit mag in die gevallen niet geautomatiseerd worden genomen. Een individu moet namelijk kunnen rekenen op voldoende 'menselijke tussenkomst' bij de beoordeling van belangrijke beslissingen die deze persoon treffen.

+

Bij het geautomatiseerd uitvoeren van processen dient altijd te worden voldaan aan de voorwaarden uit wetgeving, waaronder in het bijzonder de Algemene Verordening Gegevensbescherming (AVG) en de Algemene wet bestuursrecht(Awb). Bestuursorganen dienen dan ook te handelen conform de algemene beginselen van behoorlijk bestuur. Dit samenstel van regels moet de rechten van betrokkenen borgen.

+

Algemene eisen aan geautomatiseerde besluitvorming door overheden

+

De Nederlandse wetgever heeft in artikel 40 lid 1 UAVG gebruik gemaakt van de mogelijkheid een uitzondering te maken op het verbod van art. 22 lid 1 AVG. In Nederland is geautomatiseerde besluitvorming toegestaan, als het gaat om besluitvorming waarbij menselijke tussenkomst geen toegevoegde waarde heeft. Dit is het geval als er sprake is van een gebonden karakter waarbij weinig of geen beoordelingsruimte is waarin tot een andere conclusie kan worden gekomen. Hierbij kan worden gedacht aan het toekennen van kinderbijslag of de hoogte van het recht op studiefinanciering. Deze uitzondering geldt niet voor 'profilering', tenzij er specifieke (sectorale) wetgeving het verbod opheft.

+

Om deze uitzondering toe te kunnen passen, moet er op grond van artikel 22 AVG een 'passende maatregel' in de vorm van wetgeving zijn die personen voldoende bescherming biedt. In Nederland moet de Algemene wet bestuursrecht deze bescherming aan burgers bieden als bestuursorganen besluiten nemen. De Awb bevat vereisten en algemene beginselen waaraan besluitvorming moet voldoen.

+

Bij het toepassen van geautomatiseerde besluitvorming, moet aan de hand van een DPIA wordt vastgesteld of er bij toepassing van de Awb daadwerkelijk voldoende bescherming wordt geboden. Een verwerkersverantwoordelijke zal dus, naast het toepassen van vereisten uit de AVG en specifieke (sectorale) wetgeving, beginselen uit de Awb moeten vertalen naar concrete maatregelen om geautomatiseerde besluitvorming op een rechtmatige wijze toe te passen. Hierbij kan worden gedacht aan het toepassen van motiveringsbeginsel of het zorgvuldigheidsbeginsel.

+

Begrippen

+

Profilering

+

Profilering is bijzonder gevoelig. Bij profilering gaat het om elke vorm van een geautomatiseerde verwerking van persoonsgegevens, waarbij aan de hand van persoonsgegevens bepaalde persoonlijke aspecten van een natuurlijke persoon worden geëvalueerd. Daarbij gaat het voornamelijk om het analyseren of verspellen van zaken als beroepsprestaties, economische situatie, gezondheid, persoonlijke voorkeuren, interesses, betrouwbaarheid, gedrag, locatie of een verplaatsingen.

+

Volgens deze definitie gaat het om een verwerking door een computersysteem waarbij het systeem algemene aanname(s) toegepast in een concreet geval. Dit doet het door een individu, met gebruikmaking van diens persoonsgegevens, in te delen in een categorie(profiel). Een dergelijk categorie(profiel) wordt vaak in verband gebracht met bepaalde risico's, bijvoorbeeld het risico op het misbruiken van bepaalde publieke voorzieningen. De gevoeligheid is dat nog niet is vastgesteld dat, in dit voorbeeld, de betreffende natuurlijke persoon ook daadwerkelijk misbruik heeft gemaakt van bepaalde voorzieningen. Als daar wel automatisch gevolgen aan worden verbonden, ontstaat het risico op een onrechtmatige behandeling van een natuurlijk persoon.

+

Besluit

+

In deze context moet het begrip 'besluit' worden gehanteerd zoals dit is bedoeld in artikel 22 AVG. Het begrip 'besluit' krijgt in de AVG een ruimere betekenis dan het geval is in artikel 1:3 Algemene wet bestuursrecht (Awb). In de Algemene wet bestuursrecht moet er sprake zijn van een 'rechtsgevolg', maar onder het besluitbegrip van de AVG kunnen ook situaties vallen waarin een individu ‘slechts’ feitelijke gevolgen ervaart als een besluit wordt genomen. Daarmee biedt de AVG dus bescherming voor meerdere situaties.

+

Rechtsgevolgen

+

Het begrip 'rechtsgevolg' duidt op wijziging in de rechtspositie van betrokkene. Het betekent, juridisch uitgedrukt, een verandering in het geheel van de rechten, aanspraken, bevoegdheden en verplichtingen van één of meer natuurlijke personen of rechtspersonen. In deze context wijzigt de rechtspositie van een individu door een keuze van het systeem, bijvoorbeeld doordat deze een boete ontvangt. Rechtsgevolgen kwalificeren altijd als relevant.

+

Aanmerkelijke mate treffen

+

De Europese wetgever heeft weinig richting gegeven aan hoe dit begrip moet worden geïnterpreteerd. Er zijn wel aanknopingspunten om te duiden wanneer hier sprake van is. De EDPB spreekt van ernstige, aanzienlijke effecten, groot of belangrijk genoeg zijn om aandacht te verdienen. Dat is in ieder geval zo als het besluit het potentieel heeft om de omstandigheden, het gedrag of de keuze van de betrokken personen in aanmerkelijke mate te treffen; een langdurig of blijvend effect op de betrokkene te hebben; of in het uiterste geval, tot uitsluiting of discriminatie te leiden. Dit vraagt per geval om een analyse welke 'keuzes' van het systeem welke gevolgen hebben voor een individu en of die gevolgen rechtsgevolgen zijn of alleen een feitelijk gevolg. Zie voor een nadere toelichting hiervoor het advies van de Autoriteit Persoonsgegevens inzake geautomatiseerde selectietechnieken.

+

Toepassing

+

Volledig geautomatiseerde vaststelling van een publiekrechtelijk besluit zoals een aanslag, een boete of een vergunning heeft rechtsgevolgen. Een beslissing dat een bepaalde aanvraag in aanmerking komt voor handmatige controle heeft op zichzelf geen rechtsgevolg - de rechtspositie van de betrokkene wijzigt (nog) niet. Wel moet beoordeeld worden of de betrokkene door dat besluit anderszins (dus feitelijk) in aanmerkelijke mate wordt getroffen.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Bij geautomatiseerde besluitvorming kan het risico ontstaan dat kenmerken van een bepaalde groep ten onrechte worden tegengeworpen aan een individu die deze kenmerken niet hoeft te bezitten.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-22Bepaal in een aanbesteding of algoritmes van een aanbieder bepalende invloed hebben in een besluit richting personen
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
imp-03Richt de juiste menselijke controle in van het algoritme
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-11-privacy-bij-ontwerp-bij-verwerking-van-persoonsgegevens/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-11-privacy-bij-ontwerp-bij-verwerking-van-persoonsgegevens/index.html new file mode 100644 index 0000000000..3cb2fdbf4d --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-11-privacy-bij-ontwerp-bij-verwerking-van-persoonsgegevens/index.html @@ -0,0 +1,989 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen

+ +

avg-11OntwerpDataverkenning en datapreparatieBeleid en adviesProjectleiderJuristOntwikkelaarPrivacy en gegevensbescherming

+

Vereiste

+

Privacy en gegevensbescherming door goed ontwerp en door standaardinstellingen

+

Toelichting

+

Gegevensbescherming door ontwerp en standaardinstellingen houdt in dat privacy- en gegevensbescherming vanaf het begin worden geïntegreerd in de ontwikkeling van systemen en processen (ook wel privacy-by-design genoemd). +Door al bij het ontwerp rekening te houden met privacyaspecten en door standaardinstellingen die privacy bevorderen, wordt de bescherming van persoonsgegevens versterkt. +Hierbij kan worden gedacht een het pseudonimiseren van persoonsgegevens of dataminimalisatie.

+

Deze aanpak zorgt ervoor dat privacy-overwegingen een integraal onderdeel zijn van alle aspecten van gegevensverwerking en draagt bij aan het vertrouwen van individuen in de veilige omgang met hun gegevens. +Dit is eveneens van toepassing als persoonsgegevens worden verwerkt bij het ontwikkelen en gebruiken van algoritmes.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Door privacy en gegevensbescherming door ontwerp en standaardinstellingen niet toe te passen, kan een inbreuk op rechten van betrokkenen ontstaan.

+

Maatregelen

+
idMaatregelen
owp-10Maak een Project Startarchitectuur (PSA) voor de ontwikkeling of inkoop van algoritmes
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-12-beveiliging-van-verwerking/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-12-beveiliging-van-verwerking/index.html new file mode 100644 index 0000000000..188fccd378 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-12-beveiliging-van-verwerking/index.html @@ -0,0 +1,988 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen

+ +

avg-12OrganisatieverantwoordelijkhedenJuristOntwikkelaarPrivacy en gegevensbeschermingTechnische robuustheid en veiligheid

+

Vereiste

+

Rekening houdend met de stand van de techniek, de uitvoeringskosten, alsook met de aard, de omvang, de context en de verwerkingsdoeleinden en de qua waarschijnlijkheid en ernst uiteenlopende risico's voor de rechten en vrijheden van personen, treffen de verwerkingsverantwoordelijke en de verwerker passende technische en organisatorische maatregelen om een op het risico afgestemd beveiligingsniveau te waarborgen.

+

Toelichting

+

Voor de ontwikkeling en gebruik van algoritmes is data nodig. +Deze data kan persoonsgegevens bevatten die moeten worden beschermd. +De organisatie zal technische en organisatorische maatregelen moeten treffen om de data en het algoritme voldoende te beschermen. +Hierbij kan worden gedacht aan dataminimalisatie, het pseudonimiseren of aggregeren van persoonsgegevens. +Per toepassing moet worden onderzocht welke maatregelen hiervoor geschikt zijn.

+

Bronnen

+

Artikel 32 Algemene Verordening Gegevensbescherming|

+

Wanneer van toepassing?

+

Risico

+

Er kunnen risico's ontstaan zoals potentiële cyberaanvallen en datalekken. +Dit kan leiden bijvoorbeeld tot verlies of diefstal van gevoelige gegevens, verstoring van organisatieprocessen,ongeautoriseerde toegang, vernietiging en onrechtmatige verwerking.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
dat-05Bescherm persoonsgegevens door data te anonimiseren, pseudonimiseren of te aggregeren
owk-01Ontwerp en ontwikkel het algoritme volgens de principes van ‘security by design’
mon-02Beveilig de software
mon-03Maak een noodplan voor beveiligingsincidenten
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-13-dpia-verplicht/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-13-dpia-verplicht/index.html new file mode 100644 index 0000000000..e42b90c350 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/avg-13-dpia-verplicht/index.html @@ -0,0 +1,1019 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+ +
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen

+ +

avg-13OntwerpDataverkenning en datapreparatieVerificatie en validatieJuristProjectleiderPrivacy en gegevensbescherming

+

Vereiste

+

Een gegevensbeschermingseffectbeoordeling (DPIA) is verplicht, indien een verwerking van persoonsgegevens waarschijnlijk een hoog risico inhoudt voor de rechten en vrijheden van natuurlijke personen.

+

Toelichting

+

Een Gegevensbeschermingseffectbeoordeling (GEB) of Data Protection Impact Assessment (DPIA) is verplicht wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen. +Deze beoordeling identificeert en beperkt potentiële risico's en zorgt ervoor dat passende maatregelen worden genomen om de privacy van individuen te beschermen. +Deze verplichting draagt bij aan een zorgvuldige en verantwoorde omgang met persoonsgegevens in algoritmes, waardoor de privacy van individuen wordt gewaarborgd.

+

Let op: de DPIA verplichting is niet gebaseerd op de hoog-risico criteria uit de AI-act. Volgens Besluit lijst verwerkingen persoonsgegevens waarvoor een gegevensbeschermingseffectbeoordeling (DPIA) verplicht is, Autoriteit Persoonsgegevens moet voor het uitvoeren van een DPIA in ieder geval uitgegaan worden van een hoog risico als er sprake is van één van de volgende voorwaarden:

+
    +
  1. Evaluatie of scoretoekenning
  2. +
  3. Geautomatiseerde besluitvorming met rechtsgevolg of vergelijkbaar wezenlijk gevolg
  4. +
  5. Stelselmatige monitoring
  6. +
  7. Gevoelige gegevens of gegevens van zeer persoonlijke aard
  8. +
  9. Op grote schaal verwerkte gegevens
  10. +
  11. Matching of samenvoeging van datasets
  12. +
  13. Gegevens met betrekking tot kwetsbare betrokkenen
  14. +
  15. Innovatief gebruik of innovatieve toepassing van nieuwe technologische of organisatorische oplossingen
  16. +
  17. de situatie waarin als gevolg van de verwerking zelf "betrokkenen [...] een recht niet kunnen uitoefenen of geen beroep kunnen doen op een dienst of een overeenkomst";
  18. +
+

Het is mogelijk dat algoritmes die niet aan één of meer van deze eigenschappen voldoen toch voor een potentieel hoog risico zorgen.

+

Gebruiksverantwoordelijken van AI-systemen met een hoog risico gebruiken die informatie op grond van artikel 13 AI Verordening om hun verplichting na te komen om een gegevensbeschermingseffectbeoordeling uit te voeren.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Het niet evalueren van de impact van het verwerking van persoonsgegevens in algoritmes kan resulteren in het niet onderkennen van de bijbehorende risico's en het niet op tijd te mitigieren van deze risico's. +Dit kan leiden tot potentiële schendingen van de rechten en vrijheden van betrokkenen en een onrechtmatige verwerking.

+

Maatregelen

+
idMaatregelen
owp-09Een model-verwerkersovereenkomst is onderdeel van de aanbesteding als persoonsgegevens worden verwerkt
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-14Maak het opstellen van een verwerkersovereenkomst onderdeel van de aanbesteding als persoonsgegevens worden verwerkt.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owk-03Analyseer de privacy-risico’s en neem maatregelen om deze risico’s laag te houden
+ +

Hulpmiddelen

+
Hulpmiddelen
Data Protection Impact Assessment
Toetsingskader Algoritmes Algemene Rekenkamer
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/awb-01-zorgvuldigheidsbeginsel/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/awb-01-zorgvuldigheidsbeginsel/index.html new file mode 100644 index 0000000000..f0200bc20e --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/awb-01-zorgvuldigheidsbeginsel/index.html @@ -0,0 +1,993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig. - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.

+ +

awb-01OntwerpOntwikkelenVerificatie en validatieProjectleiderBeleid en adviesFundamentele rechten

+

Vereiste

+

Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig.

+

Toelichting

+

Het zorgvuldigheidsvereiste eist dat een besluit met de nodige zorgvuldigheid wordt voorbereid en juist wordt genomen. +Dit vraagt onder meer om een zorgvuldig onderzoek naar informatie, feiten, een zorgvuldige beslissingsprocedure en een deugdelijke besluitvorming.

+

Dit betekent dat bij de ontwikkeling en gebruik van algoritmes informatie moet worden vastgelegd over het algoritme. Hierbij kan worden gedacht aan: +- Dat het doel en eventuele subdoelen van het algoritme of AI-systeem helder zijn gedefinieerd, ook in relatie tot het maatschappelijke resultaat (outcome). +- Een bewuste afweging afmaken en vaststellen of het algoritme het juiste middel is om het probleem op doelmatige en doeltreffende wijze op te lossen. +- Dat de werking van het algoritme is onderzocht en is vastgesteld dat dit passend is om te gebruiken in een besluitvormingsproces.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

De werking van het algoritmes sluit niet of onvoldoende aan bij de juridische en ethische grenzen van de te ondersteunen wettelijke taak. +Hierdoor kunnen ongewenste gevolgen ontstaan zoals een onjuist of onzorgvuldig genomen besluit.

+

Maatregelen

+
idMaatregelen
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/awb-02-motiveringsbeginsel/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/awb-02-motiveringsbeginsel/index.html new file mode 100644 index 0000000000..3c2545018c --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/awb-02-motiveringsbeginsel/index.html @@ -0,0 +1,1019 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit

+ +

awb-02OntwerpImplementatieMonitoring en beheerProjectleiderOntwikkelaarTransparantie

+

Vereiste

+

Een besluit berust op een deugdelijke en kenbare motivering.

+

Toelichting

+

De Awb eist dat een besluit een deugdelijke en kenbare motivering heeft. Dit geldt ook als algoritmes worden ingezet. Een betrokkene moet in staat zijn om te controleren of de overheid een besluit correct heeft genomen. Het motiveringsbeginsel draagt bij aan doelen als verantwoording kunnen afleggen en het bieden van rechtsbescherming. Het kan in samenhang worden gezien met transparantieverplichtingen die voortkomen uit de AVG.

+

Het is van belang dat inzichtelijk wordt gemaakt in het besluit welke gegevens zijn verwerkt en welke 'aannames' een algoritme bevat. Dit speelt in het bijzonder als gebruik wordt gemaakt van geautomatiseerde besluitvormingsprocessen. Hierbij kan worden gedacht aan:

+
    +
  • +

    Dat een besluit tot stand is gekomen met behulp van een algoritme.

    +
  • +
  • +

    Van welke feiten het bestuursorgaan is uitgegaan.

    +
  • +
  • +

    Welke gegevens zijn verwerkt.

    +
  • +
  • +

    Welke relevante belangen tegen elkaar zijn afgewogen en hoe die afweging is verlopen.

    +
  • +
  • +

    Welke regels zijn gebruikt.

    +
  • +
  • +

    Wat de hierachter is (kenbaarheid).

    +
  • +
  • +

    Welke analytische technieken zijn gebruikt.

    +
  • +
  • +

    Waarom deze regels en logica relevant zijn (uitleg)?

    +
  • +
  • +

    Op welke wijze de regels en logica tot stand zijn gekomen en hoe deze regels worden gevalideerd.

    +
  • +
+

Een besluit moet informatie hierover bevatten om als om als voldoende draagkrachtig gemotiveerd te gelden. +Het motiveringsbeginsel op grond van de Awb is beperkt tot besluiten in de zin van de Awb.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Het is onduidelijk op wat voor manier het algoritmes heeft bijgedragen aan de totstandkoming van een besluit.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-07Pas uitlegbaarheidstechnieken toe en evalueer en valideer deze.
imp-10Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.
ver-03Controleer regelmatig of het algoritme voldoet aan alle wetten en regels en het eigen beleid
imp-01Maak een openbaar besluit over de inzet van het algoritme
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/bio-01-beveiliging-informatie-en-informatiesystemen/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/bio-01-beveiliging-informatie-en-informatiesystemen/index.html new file mode 100644 index 0000000000..c886a9ce23 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/bio-01-beveiliging-informatie-en-informatiesystemen/index.html @@ -0,0 +1,990 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen

+ +

bio-01OrganisatieverantwoordelijkhedenBeleid en adviesOntwikkelaarTechnische robuustheid en veiligheid

+

Vereiste

+

Informatie en informatiesystemen moeten op de juiste manier worden beveiligd.

+

Toelichting

+

Informatiebeveiliging is het proces van vaststellen van de vereiste beveiliging van informatiesystemen in termen van vertrouwelijkheid, beschikbaarheid en integriteit alsmede het treffen, onderhouden en controleren van een samenhangend pakket van bijbehorende maatregelen. +In Nederland is besloten dat overheidsinstellingen de Baseline Informatiebeveiliging Overheid (BIO) dienen toe te passen over hun informatie en informatiesystemen. +De BIO beoogt de beveiliging van informatie(systemen) bij alle bestuurslagen en bestuursorganen van de overheid te bevorderen, zodat alle onderdelen erop kunnen vertrouwen dat onderling uitgewisselde gegevens, in lijn met wet- en regelgeving, passend beveiligd zijn.

+

Algoritmes en hun output kunnen onderdeel worden van de informatie en informatiesystemen waar de BIO op van toepassing is. +Het is van belang om algoritmische toepassingen en AI-systemen op de juiste manier te beveiligen.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Er kunnen risico's ontstaan zoals ongeautoriseerde toegang, vernietiging, verlies, wijziging of niet-toegestane verwerking van gegevens als de informatie en informatiesystemen onvoldoende zijn beveiligd.

+

Maatregelen

+
idMaatregelen
org-11Maak afspraken over het beheer van gebruikers
org-13Maak afspraken over het beheer van wachtwoorden
org-14Maak afspraken over het wijzigen van de code
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-24Voer een risico-analyse met de aanbieder uit op het gebied van informatiebeveiliging bij een uitbestedingstraject
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
org-02Pas vastgestelde beleidskaders toe
owk-01Ontwerp en ontwikkel het algoritme volgens de principes van ‘security by design’
owk-04Maak logbestanden waarin staat wie wanneer toegang had tot de data en de code
mon-01Maak back-ups van algoritmes
mon-02Beveilig de software
mon-03Maak een noodplan voor beveiligingsincidenten
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/bzk-01-algoritmeregister/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/bzk-01-algoritmeregister/index.html new file mode 100644 index 0000000000..2552ac2b7b --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/bzk-01-algoritmeregister/index.html @@ -0,0 +1,1004 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister

+ +

bzk-01ImplementatieMonitoring en beheerProjectleiderTransparantie

+

Vereiste

+

Bestuursorganen publiceren algoritmes met impact en hoog-risico-AI-systemen in het Nederlandse Algoritmeregister.

+

Toelichting

+

Het publiceren van algoritmes draagt bij aan transparantie voor belanghebbenden en derden over welke algoritmes worden gebruikt door de overheid. +Het is vastgesteld beleid dat overheidsinstellingen, tenzij er uitsluitingsgronden zijn, de door hen gebruikte impactvolle algoritmes en hoogrisico AI-systemen publiceren in het algoritmeregister. +Er wordt gewerkt aan wetgeving om het bij wet verplicht te stellen.

+

Bronnen (bestaand beleid)

+ +

Wanneer van toepassing?

+

Risico

+

Door het niet publiceren van impactvolle algoritmes of hoog risico AI -systemen in het Algoritmeregister, is het voor betrokkenen of belanghebbenden minder goed mogelijk om de overheid kritisch te volgen, te bevragen en te controleren op de inzet van deze technologieën die hen kunnen raken. +Bij het onjuist of onvolledig publiceren in het Algortimeregister ontstaat er een risico dat betrokkenen en belanghebbenden onjuiste inschattingen maken over het gebruik van het algoritmes en daardoor in hun rechten worden beperkt.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
imp-04Publiceer impactvolle algoritmes en hoog-risico-AI-systemen in het Algoritmeregister
+ +

hulpmiddelen

+
Hulpmiddelen
Algoritmeregister
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/dat-01-databankenwet/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/dat-01-databankenwet/index.html new file mode 100644 index 0000000000..371ae3d3a2 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/dat-01-databankenwet/index.html @@ -0,0 +1,994 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Databanken worden alleen gebruikt met toestemming van de databank-producent - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Databanken worden alleen gebruikt met toestemming van de databank-producent

+ +

dat-01Dataverkenning en datapreparatieJuristData

+

Vereiste

+

Het is verboden om zonder goedkeuring van de producent een databank op te vragen en/of te hergebruiken.

+

Toelichting

+

De Databankrichtlijn en Databankenwet beschermt de producten/fabrikanten van databanken tegen onrechtmatige toe-eigening van een databank. +Degene die een substantiële financiële en professionele investering heeft verricht om de inhoud van de databank te verkijgen en te verzamelen, krijgt een verbodsrecht en kan zo anderen verbieden de databank te gebruiken. +Bij verkrijgen gaat het om "het verzamelen van de werken, gegevens of andere zelfstandige elementen die tezamen de inhoud van de databank vormen". +Dit recht bestaat naast het recht op bescherming van de originele keuze of rangschikking van de inhoud van databanken (auteurswet).

+

Voor het ontwikkelen van algoritme is data nodig. +De data die hiervoor wordt gebruikt mag niet ongeoorloofd zijn verkregen uit een databank.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Als een ontwikkelaar onbevoegd gebruik heeft gemaakt van data uit een databank bij de ontwikkeling van algoritmes, wordt het databankenrecht geschonden van de eigenaar. + De eigenaar van de databank kan bijvoorbeeld ontrekking van de data uit het handelsverkeer, vernietiging en onbruikbaarmaking eisen, wat vergaande gevolgen kan hebben voor het gebruik kunnen maken van de algoritmische toepassing of AI-systeem.

+

Maatregelen

+
idMaatregelen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-27Maak (contractuele) afspraken over data en artefacten met een aanbieder
imp-10Maak gebruik van een algoritme dat bronvermelding kan genereren bij de output.
dat-08Zorg dat je controle of eigenaarschap hebt over de data
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/grw-01-fundamentele-rechten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/grw-01-fundamentele-rechten/index.html new file mode 100644 index 0000000000..6f8b1dcd86 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/grw-01-fundamentele-rechten/index.html @@ -0,0 +1,1017 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Algoritmes schenden geen grondrechten of mensenrechten - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+ +
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Algoritmes schenden geen grondrechten of mensenrechten

+ +

grw-01ProbleemanalyseOntwerpVerificatie en validatieMonitoring en beheerProjectleiderJuristFundamentele rechten

+

Vereiste

+

Fundamentele vrijheden, mensenrechten en grondrechten worden beschermd bij de inzet van algoritmes.

+

Toelichting

+

Mensenrechten gelden voor alle mensen op de wereld. +De mensenrechten in Nederland zijn beschermd door nationale wetten en internationale verdragen. +In Nederland staan veel mensenrechten in hoofdstuk 1 van de Grondwet. +Deze rechten heten ook wel ’grondrechten’. +Een bekend voorbeeld is artikel 1 van de Grondwet. +Om mensenrechten te beschermen zijn ze op Europees en internationaal niveau in verschillende verklaringen en verdragen vastgelegd.

+

Mensenrechten kunnen soms onder druk komen te staan. +De inzet van algoritmes kan bijvoorbeeld een bedreiging vormen voor de privacy van burgers, voor het recht op gelijke behandeling en voor het recht op behoorlijk bestuur. +Het is daarom belangrijk om tijdig te onderzoeken of er sprake is of kan zijn van een eventuele inbreuk op fundamentele rechten en vrijheden van burgers. Het is van belang dat maatregelen worden getroffen om een eventuele inbreuk te voorkomen.

+

Bronnen

+
    +
  • Grondwet
  • +
  • Europees Verdragvoor de Rechten van de Mens (EVRM)
  • +
  • Handvest van de grondrechten van de Europese Unie
  • +
  • Universele Verklaring van de Rechten van de Mens (UVRM)
  • +
  • Internationaal Statuut van de Rechten van de Mens
  • +
  • Internationale Verdrag inzake burgerrechten en politieke rechten (IVBPR)
  • +
  • Internationale Verdrag inzake economische, sociale en culturele rechten (IVESCR)
  • +
  • Internationaal Verdrag inzake de uitbanning van alle vormen van rassendiscriminatie (CERD)
  • +
  • Internationaal Verdrag voor de rechten van het kind (CRC)
  • +
  • Internationaal Verdrag voor de Rechten van Mensen met een Handicap (VN-verdrag Handicap)
  • +
  • Artikel 27 Verordening Artificiële Intelligentie
  • +
+

Wanneer van toepassing?

+

Risico

+

Grondrechten kunnen worden geraakt door de inzet van algoritmes met eventuele schadelijke gevolgen voor betrokkenen.

+

Maatregelen

+
idMaatregelen
owp-06Inventariseer welke grondrechten het algoritme kan schenden en maak een belangenafweging
owp-07Maak een lijst van de meest kwetsbare groepen en bescherm hen extra
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
owk-02Maak een noodplan voor het stoppen van het algoritme
ver-01Toets het algoritme op bias
imp-03Richt de juiste menselijke controle in van het algoritme
+ +

hulpmiddelen

+
Hulpmiddelen
Impact Assessment Mensenrechten en Algoritmes
The Fairness Handbook
Handreiking non-discriminatie by design
Discriminatie door risicoprofielen - Een mensenrechtelijk toetsingskader
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/grw-02-non-discriminatie/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/grw-02-non-discriminatie/index.html new file mode 100644 index 0000000000..51f36109f8 --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/grw-02-non-discriminatie/index.html @@ -0,0 +1,995 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Algoritmes discrimineren niet - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Algoritmes discrimineren niet

+ +

grw-02Dataverkenning en datapreparatieVerificatie en validatieMonitoring en beheerProjectleiderBias en non discriminatie

+

Vereiste

+

Allen die zich in Nederland bevinden, worden in gelijke gevallen gelijk behandeld. +Directe en indirecte discriminatie wegens godsdienst, levensovertuiging, politieke gezindheid, ras, geslacht, handicap, seksuele gerichtheid of op welke grond dan ook, is niet toegestaan.

+

Toelichting

+

Overheidsinstanties moeten zich bij het uitvoeren van hun taken onthouden van discriminatie, ook wanneer er gebruik wordt gemaakt van algoritmes. +Wanneer er algoritmes worden gebruikt om selecties te maken van burgers, dienen we te streven naar een gelijke behandeling van personen of groepen ten opzichte van andere personen in een vergelijkbare situatie. +Hierbij is het belangrijk te beseffen dat discriminatie ook op indirecte wijze kan ontstaan. +Hiervan is sprake wanneer een ogenschijnlijk neutrale bepaling, maatstaf of handelwijze personen met een beschermd persoonskenmerk in vergelijking met andere personen in het bijzonder benadeelt, tenzij hiervoor een objectieve rechtvaardiging bestaat.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Het risico bestaat dat het model onwenselijke systematische afwijkingen creëert voor specifieke personen, groepen of andere eenheden, wat kan duiden op directe of indirecte discriminerende effecten van het algoritme.

+

Maatregelen

+
idMaatregelen
imp-10Stel een protocol vast voor de situatie dat er (een vermoeden van) discriminatie door een algoritme is geconstateerd en pas dit wanneer nodig toe.
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders.
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst.
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding.
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding
owp-28Pas vastgestelde interne beleidskaders toe en maak aantoonbaar dat deze zijn nageleefd bij het ontwikkelen, inkopen en gebruiken van algoritmes.
owk-02Maak een noodplan voor het stoppen van het algoritme
ver-01Toets het algoritme op bias
imp-02Doe aselecte steekproeven om algoritmes met 'risicogestuurde selectie’ te controleren
imp-05Spreek af hoe medewerkers omgaan met het algoritme.
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/index.html new file mode 100644 index 0000000000..86abad364e --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/index.html @@ -0,0 +1,3964 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vereisten - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +

Vereisten

+

Overzicht van de belangrijkste vereisten voor overheden die algoritmes of AI-systemen ontwikkelen of gebruiken.

+

Wetten en regels

+

De vereisten zijn gebaseerd op de wetten en regels voor het uitvoeren van wettelijke taken, zoals de:

+
    +
  • AI-verordening
  • +
  • Algemene verordening gegevensbescherming (AVG)
  • +
  • Algemene wet bestuursrecht (Awb)
  • +
  • Algemene wet gelijke behandeling (Awgb)
  • +
  • Auteurswet
  • +
  • Baseline Informatiebeveiliging Overheid (BIO)
  • +
  • Grondwet
  • +
+

Bij elke vereiste staat de bron er duidelijk bij.

+
+

Let op!

+

Het Algoritmekader biedt een overzicht van de belangrijkste vereisten. Dit is niet volledig. Sectorspecifieke wetgeving is bijvoorbeeld niet meegenomen. Hierdoor kan het zijn dat er meer regelgeving van geldt voor jouw toepassing.

+
+

Aantal vereisten verschilt per situatie

+

Welke vereisten gelden voor jouw organisatie, hangt af van:

+
    +
  • de technologie die je gebruikt: rekenregels, machinelearning of generatieve AI
  • +
  • de risicoclassificatie van het algoritme dat je gebruikt
  • +
  • je rol: ben je ontwikkelaar of alleen gebruiker van het algoritme?
  • +
+

Voorbeeld

+
+

Impactvolle algoritmes en AI-systemen worden gepubliceerd in het Nederlandse algoritmeregister.

+
+

Deze vereiste geldt alleen voor impactvolle algoritmes en hoog-risico-AI-systemen. Een niet-impactvolle rekenregel hoef je niet te registreren.

+

Overzicht vereisten

+
idVereistenRollenLevenscyclusOnderwerpen
aia-01Personeel en gebruikers zijn voldoende AI-geletterd + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + menselijke-controle + + + + + + + + + governance + + +
aia-01Verboden AI-systemen mogen niet worden gebruikt. + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + probleemanalyse + + + + + + + + + governance + + +
aia-02Beoordeling als niet 'hoog-risico-AI-systeem' is gedocumenteerd + + + + + + projectleider + + + + + + + + + ontwerp + + + + + + + + + governance + + + + + + + + + transparantie + + +
aia-03Hoog-risico-AI-systemen zijn voorzien van een risicobeheersysteem + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + +
aia-04Hoog-risico-AI-systemen vormen geen risico voor kwetsbare groepen zoals kinderen + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + monitoring-en-beheer + + + + + + + + + fundamentele-rechten + + + + + + + + + bias-en-non-discriminatie + + +
aia-05Datasets voor hoog-risico-AI-systemen voldoen aan kwaliteitscriteria + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + verificatie-en-validatie + + + + + + + + + data + + +
aia-06Hoog-risico-AI-systemen zijn voorzien van voldoende technische documentatie + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + ontwikkelen + + + + + + + + + verificatie-en-validatie + + + + + + + + + transparantie + + + + + + + + + technische-robuustheid-en-veiligheid + + +
aia-07Hoog-risico-AI-systemen loggen automatisch bepaalde gegevens + + + + + + ontwikkelaar + + + + + + + + + projectleider + + + + + + + + + ontwikkelen + + + + + + + + + monitoring-en-beheer + + + + + + + + + technische-robuustheid-en-veiligheid + + +
aia-08Hoog-risico-AI-systemen zijn op een transparante manier ontwikkeld en ontworpen + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + monitoring-en-beheer + + + + + + + + + transparantie + + +
aia-09Hoog-risico-AI-systemen staan onder menselijk toezicht + + + + + + projectleider + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + monitoring-en-beheer + + + + + + + + + menselijke-controle + + +
aia-10Hoog-risico-AI-systemen zijn voldoende nauwkeurig, robuust en cyberveilig + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + verificatie-en-validatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + technische-robuustheid-en-veiligheid + + +
aia-11Hoog-risico-AI-systemen zijn voorzien van een kwaliteitsbeheersysteem + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + +
aia-12Documentatie over hoog-risico-AI-systemen wordt 10 jaar bewaard door de aanbieder + + + + + + projectleider + + + + + + + + + ontwerp + + + + + + + + + monitoring-en-beheer + + + + + + + + + uitfaseren + + + + + + + + + technische-robuustheid-en-veiligheid + + +
aia-13Logs van hoog-risico-AI-systemen worden zes maanden bewaard door de aanbieder + + + + + + projectleider + + + + + + + + + ontwerp + + + + + + + + + monitoring-en-beheer + + + + + + + + + uitfaseren + + + + + + + + + technische-robuustheid-en-veiligheid + + +
aia-14Hoog-risico-AI-systemen worden pas geleverd of gebruikt na een conformiteitsbeoordelingsprocedure + + + + + + jurist + + + + + + + + + projectleider + + + + + + + + + verificatie-en-validatie + + + + + + + + + implementatie + + + + + + + + + governance + + +
aia-15Hoog-risico-AI-systemen zijn voorzien van een EU-conformiteitsverklaring + + + + + + jurist + + + + + + + + + projectleider + + + + + + + + + verificatie-en-validatie + + + + + + + + + implementatie + + + + + + + + + governance + + +
aia-16Hoog-risico-AI-systemen zijn voorzien van een CE-markering + + + + + + projectleider + + + + + + + + + implementatie + + + + + + + + + transparantie + + +
aia-17Hoog-risico-AI-systemen zijn geregistreerd in de EU-databank + + + + + + projectleider + + + + + + + + + implementatie + + + + + + + + + governance + + + + + + + + + transparantie + + +
aia-18Als een hoog-risico-AI-systeem niet voldoet aan de AI-verordening, grijpt de aanbieder in + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + monitoring-en-beheer + + + + + + + + + menselijke-controle + + + + + + + + + technische-robuustheid-en-veiligheid + + +
aia-19Hoog-risico-AI-systemen voldoen aan de toegankelijkheidseisen + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + menselijke-controle + + + + + + + + + technische-robuustheid-en-veiligheid + + +
aia-20Hoog-risico-AI-systemen worden gebruikt volgens de gebruiksaanwijzing + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + implementatie + + + + + + + + + governance + + +
aia-21Menselijke controle van hoog-risico-AI-systemen wordt uitgevoerd door mensen met voldoende kennis en mogelijkheden + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + governance + + + + + + + + + menselijke-controle + + +
aia-22De werking van hoog-risico-AI-systemen wordt gemonitord + + + + + + projectleider + + + + + + + + + monitoring-en-beheer + + + + + + + + + menselijke-controle + + +
aia-23Logs voor hoog-risico-AI-systemen worden bewaard door de gebruiksverantwoordelijke + + + + + + projectleider + + + + + + + + + ontwikkelen + + + + + + + + + monitoring-en-beheer + + + + + + + + + technische-robuustheid-en-veiligheid + + +
aia-24Werknemers weten dat hun organisatie een hoog-risico AI-systeem gebruikt + + + + + + projectleider + + + + + + + + + implementatie + + + + + + + + + transparantie + + +
aia-25Gebruiksverantwoordelijken controleren de registratie van het hoog-risico AI-systeem in de EU-databank + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + implementatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + transparantie + + + + + + + + + governance + + +
aia-28Mensen over wie besluiten worden genomen door een hoog-risico-AI-systemen, krijgen op verzoek informatie over deze besluiten + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + ontwerp + + + + + + + + + monitoring-en-beheer + + + + + + + + + governance + + + + + + + + + fundamentele-rechten + + + + + + + + + transparantie + + +
aia-29Hoog-risico-AI-systemen voor publieke taken worden beoordeeld op gevolgen voor grondrechten + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + verificatie-en-validatie + + + + + + + + + fundamentele-rechten + + +
aia-28AI-systemen worden zo ontworpen en gebruikt, dat mensen begrijpen wanneer zij met een AI-systeem communiceren en welke content gemaakt is door een AI-systeem + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + ontwikkelen + + + + + + + + + implementatie + + + + + + + + + transparantie + + +
aia-29AI-modellen voor algemene doeleinden zijn voorzien van voldoende technische documentatie en informatie + + + + + + projectleider + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + monitoring-en-beheer + + + + + + + + + transparantie + + +
aia-30Aanbieders van AI-modellen voor algemene doeleinden met een systeemrisico treffen extra maatregelen + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + ontwikkelen + + + + + + + + + verificatie-en-validatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + transparantie + + +
aia-31Als AI-modellen voor algemene doeleinden met systeemrisico’s ernstige incidenten veroorzaken, wordt dit gedocumenteerd en gerapporteerd + + + + + + projectleider + + + + + + + + + monitoring-en-beheer + + + + + + + + + governance + + + + + + + + + transparantie + + +
aia-32AI-modellen voor algemene doeleinden met systeemrisico’s zijn voldoende beveiligd tegen cyberaanvallen + + + + + + ontwikkelaar + + + + + + + + + ontwikkelen + + + + + + + + + monitoring-en-beheer + + + + + + + + + governance + + + + + + + + + technische-robuustheid-en-veiligheid + + +
aia-33AI-testomgevingen die persoonsgegevens verwerken, voldoen aan strenge voorwaarden + + + + + + jurist + + + + + + + + + ontwikkelaar + + + + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + ontwikkelen + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + privacy-en-gegevensbescherming + + + + + + + + + data + + +
aia-34Hoog-risico-AI-systemen zijn voorzien van een monitoringsysteem + + + + + + projectleider + + + + + + + + + monitoring-en-beheer + + + + + + + + + technische-robuustheid-en-veiligheid + + +
aia-35Ernstige incidenten door hoog-risico-AI-systemen worden gemeld aan de toezichthouder + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + monitoring-en-beheer + + + + + + + + + governance + + +
aia-36Klokkenluiders kunnen veilig melden dat een organisatie zich niet houdt aan de AI-verordening + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + monitoring-en-beheer + + + + + + + + + governance + + + + + + + + + menselijke-controle + + +
aia-37Klachtrecht aanbieders verder in AI-waardeketen + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + fundamentele-rechten + + +
arc-01Informatie over algoritmes wordt gedocumenteerd volgens de Archiefwet + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + uitfaseren + + + + + + + + + monitoring-en-beheer + + + + + + + + + ontwikkelen + + + + + + + + + transparantie + + + + + + + + + data + + +
aut-01Auteursrechten zijn beschermd + + + + + + jurist + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + ontwerp + + + + + + + + + data + + + + + + + + + governance + + +
avg-01Persoonsgegevens worden op een rechtmatige manier verwerkt + + + + + + projectleider + + + + + + + + + jurist + + + + + + + + + probleemanalyse + + + + + + + + + ontwerp + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + privacy-en-gegevensbescherming + + +
avg-02Persoonsgegevens worden zo kort mogelijk bewaard + + + + + + ontwikkelaar + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + ontwikkelen + + + + + + + + + uitfaseren + + + + + + + + + privacy-en-gegevensbescherming + + +
avg-03Persoonsgegevens worden zo min mogelijk verwerkt + + + + + + jurist + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + ontwikkelen + + + + + + + + + privacy-en-gegevensbescherming + + +
avg-04Persoonsgegevens en andere data verwerken gebeurt proportioneel en subsidiair + + + + + + jurist + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + fundamentele-rechten + + + + + + + + + privacy-en-gegevensbescherming + + +
avg-05Persoonsgegevens zijn juist en actueel + + + + + + ontwikkelaar + + + + + + + + + projectleider + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + privacy-en-gegevensbescherming + + +
avg-06Organisaties kunnen bewijzen dat zij persoonsgegevens op de juiste manier verwerken + + + + + + jurist + + + + + + + + + ontwerp + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + governance + + + + + + + + + privacy-en-gegevensbescherming + + +
avg-07Organisaties zijn transparant over het verwerken van persoonsgegevens + + + + + + ontwikkelaar + + + + + + + + + projectleider + + + + + + + + + implementatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + privacy-en-gegevensbescherming + + + + + + + + + transparantie + + +
avg-08Gevoelige persoonsgegevens worden alleen gebruikt als hiervoor een wettelijke uitzondering geldt + + + + + + projectleider + + + + + + + + + jurist + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + privacy-en-gegevensbescherming + + + + + + + + + bias-en-non-discriminatie + + +
avg-09Betrokkenen kunnen een beroep doen op hun privacyrechten + + + + + + ontwikkelaar + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + ontwikkelen + + + + + + + + + privacy-en-gegevensbescherming + + + + + + + + + data + + +
avg-10Besluiten die levens kunnen beïnvloeden, zijn niet volledig geautomatiseerd + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + implementatie + + + + + + + + + privacy-en-gegevensbescherming + + +
avg-11Ontwerp en standaardinstellingen (defaults) zijn zo gunstig mogelijk voor de privacy van betrokkenen + + + + + + beleid-en-advies + + + + + + + + + projectleider + + + + + + + + + jurist + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + privacy-en-gegevensbescherming + + +
avg-12Data zoals persoonsgegevens zijn voldoende beveiligd tegen ongelukken en cyberaanvallen + + + + + + jurist + + + + + + + + + ontwikkelaar + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + privacy-en-gegevensbescherming + + + + + + + + + technische-robuustheid-en-veiligheid + + +
avg-13Een Data Protection Impact Assessment (DPIA) wordt uitgevoerd wanneer de verwerking van persoonsgegevens waarschijnlijk een hoog risico met zich meebrengt voor de rechten en vrijheden van natuurlijke personen + + + + + + jurist + + + + + + + + + projectleider + + + + + + + + + ontwerp + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + verificatie-en-validatie + + + + + + + + + privacy-en-gegevensbescherming + + +
awb-01Organisaties die algoritmes gebruiken voor publieke taken nemen besluiten zorgvuldig. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + verificatie-en-validatie + + + + + + + + + fundamentele-rechten + + +
awb-02Organisaties kunnen duidelijk uitleggen waarom en hoe algoritmes leiden tot een besluit + + + + + + projectleider + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + implementatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + transparantie + + +
bio-01Computersystemen zijn voldoende beveiligd tegen ongelukken en cyberaanvallen + + + + + + beleid-en-advies + + + + + + + + + ontwikkelaar + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + technische-robuustheid-en-veiligheid + + +
bzk-01Impactvolle algoritmes en hoog-risico-AI-systemen staan in het Nederlandse Algoritmeregister + + + + + + projectleider + + + + + + + + + implementatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + transparantie + + +
dat-01Databanken worden alleen gebruikt met toestemming van de databank-producent + + + + + + jurist + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + data + + +
grw-01Algoritmes schenden geen grondrechten of mensenrechten + + + + + + projectleider + + + + + + + + + jurist + + + + + + + + + probleemanalyse + + + + + + + + + ontwerp + + + + + + + + + verificatie-en-validatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + fundamentele-rechten + + +
grw-02Algoritmes discrimineren niet + + + + + + projectleider + + + + + + + + + dataverkenning-en-datapreparatie + + + + + + + + + verificatie-en-validatie + + + + + + + + + monitoring-en-beheer + + + + + + + + + bias-en-non-discriminatie + + +
woo-01Iedereen kan openbare informatie over algoritmes vinden of aanvragen + + + + + + jurist + + + + + + + + + projectleider + + + + + + + + + organisatieverantwoordelijkheden + + + + + + + + + transparantie + + +
+ +

Help ons deze pagina te verbeteren

+

Deel je idee, suggestie of opmerking via GitHub of mail ons via algoritmes@minbzk.nl.

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/woo-01-recht-op-toegang-tot-publieke-informatie/index.html b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/woo-01-recht-op-toegang-tot-publieke-informatie/index.html new file mode 100644 index 0000000000..8f002d831b --- /dev/null +++ b/pr-preview/pr-478/voldoen-aan-wetten-en-regels/vereisten/woo-01-recht-op-toegang-tot-publieke-informatie/index.html @@ -0,0 +1,1265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Iedereen kan openbare informatie over algoritmes vinden of aanvragen - Algoritmekader (bèta) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +

Iedereen kan openbare informatie over algoritmes vinden of aanvragen

+ +

woo-01OrganisatieverantwoordelijkhedenJuristProjectleiderTransparantie

+

Vereiste

+

Een bestuursorgaan draagt er zorg voor dat de documenten die het ontvangt, vervaardigt of anderszins onder zich heeft, zich in goede, geordende en toegankelijke staat bevinden. +Een bestuursorgaan draagt er zoveel mogelijk zorg voor dat de informatie die het overeenkomstig deze wet verstrekt, actueel, nauwkeurig en vergelijkbaar is.

+

Toelichting

+

Bij het ontwikkelen en gebruiken van algoritmes kunnen documenten en publieke informatie ontstaan die (op verzoek) in aanmerking komen voor openbaarmaking. +Het kunnen openbaren van publieke informatie is in het belang van een democratische rechtstaat. +De Wet open overheid gaat uit van een recht op openbaarheid van publieke informatie. +Iedereenkan een verzoek tot openbaarmaking van publieke informatie doen bij een bestuursorgaan zonder daarbij een belang te stellen (artikel 4.1 Woo). +De aan een verzoeker verstrekte informatie wordt openbaar voor iedereen. +De Woo is niet van toepassing op informatie die al openbaar is (uitspraken van de Afdeling bestuursrechtspraak van de Raad van State van 1 december 2010 (ECLI:NL:RVS:2010:BNS6990) en 20 oktober 2010 (ECLI:NL:RVS:2010:BO1165)). +Er kunnen uitsluitingsgronden bestaan voor het openbaarmaken van documenten (artikel 5.1 Woo).

+

In de context van het ontwikkelen en gebruiken van algoritmes is het van belang dat tijdig wordt vastgesteld welke documenten in aanmerking komen voor openbaarmaking. +Dit moet worden bekeken in het licht van wat 'actief' moet worden geopenbaard, dus proactief vanuit overheidsinstanties zelf, of wat op 'verzoek' van iemand moet worden geopenbaard.

+

Bronnen

+ +

Wanneer van toepassing?

+

Risico

+

Zonder het openbaren van overheidsinformatie kan de overheid niet effectief worden gecontroleerd bij het uitvoeren van wettelijke taken.

+

Maatregelen

+
idMaatregelenRollenLevenscyclusOnderwerpen
owp-12Bespreek de vereisten die gelden voor een verantwoorde inzet van algoritmes met aanbieders. + + + + + + projectleider + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + publieke-inkoop + + +
owp-13Maak vereisten voor algoritmes onderdeel van algemene inkoopvoorwaarden en de contractovereenkomst. + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + + + + + + + + transparantie + + +
owp-18Maak vereisten onderdeel van (sub)gunningscriteria bij een aanbesteding. + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + +
owp-19Creëer ruimte om met een aanbieder samen te gaan werken om specifieke vereisten te realiseren + + + + + + projectleider + + + + + + + + + ontwerp + + + + + + + + + ontwikkelen + + + + + + + + + publieke-inkoop + + +
owp-21Neem het kunnen uitvoeren van een audit over de vereiste op in contractvoorwaarden en de contractovereenkomst + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + +
owp-25Maak vereisten onderdeel van het programma van eisen bij een aanbesteding + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + +
owp-26Maak vereisten voor algoritmes onderdeel van de Service Level Agreement + + + + + + projectleider + + + + + + + + + beleid-en-advies + + + + + + + + + ontwikkelaar + + + + + + + + + ontwerp + + + + + + + + + publieke-inkoop + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file