PageSourceSearch

https://smartbooks.ai/assets/app-BMgCO4O1.js

js smartbooks.ai collected 2026-10-05 12:39:16 UTC 2,539,085 bytes, 13,666 lines download raw bytes

vendor: 6,024 bytes, lines 1-9
1function x0(e,n){for(var t=0;t<n.length;t++){const i=n[t];if(typeof i!="string"&&!Array.isArray(i)){for(const a in i)if(a!=="default"&&!(a in e)){const o=Object.getOwnPropertyDescriptor(i,a);o&&Object.defineProperty(e,a,o.get?o:{enumerable:!0,get:()=>i[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))i(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&i(s)}).observe(document,{childList:!0,subtree:!0});function t(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function i(a){if(a.ep)return;a.ep=!0;const o=t(a);fetch(a.href,o)}})();function NE(e){try{const t=new URL(e,window.location.origin).pathname;return t.includes("/static-loader-data/")||t.includes("static-loader-data-manifest-")}catch{return e.includes("/static-loader-data/")||e.includes("static-loader-data-manifest-")}}function IE(){if(typeof window>"u")return;const e=window.fetch.bind(window);window.fetch=async(n,t)=>{const i=typeof n=="string"?n:n instanceof Request?n.url:String(n.href);if(!NE(i))return e(n,t);const a=await e(n,t),o=a.headers.get("content-type")?.toLowerCase()??"",s=o.includes("application/json")||o.includes("text/json");if(a.ok&&s)return a;const l=await a.clone().text();return/^\s*</.test(l)||l.includes("<!DOCTYPE")||!s||!a.ok?new Response("null",{status:200,headers:{"Content-Type":"application/json; charset=utf-8"}}):a}}IE();function ga(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var y0={exports:{}},bu={},j0={exports:{}},Ae={};/**
2 * @license React
3 * react.production.min.js
4 *
5 * Copyright (c) Facebook, Inc. and its affiliates.
6 *
7 * This source code is licensed under the MIT license found in the
8 * LICENSE file in the root directory of this source tree.
9 */var yl=Symbol.for("react.element"),PE=Symbol.for("react.portal"),TE=Symbol.for("react.fragment"),DE=Symbol.for("react.strict_mode"),BE=Symbol.for("react.profiler"),ME=Symbol.for("react.provider"),FE=Symbol.for("react.context"),RE=Symbol.for("react.forward_ref"),OE=Symbol.for("react.suspense"),_E=Symbol.for("react.memo"),LE=Symbol.for("react.lazy"),xv=Symbol.iterator;function WE(e){return e===null||typeof e!="object"?null:(e=xv&&e[xv]||e["@@iterator"],typeof e=="function"?e:null)}var S0={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},z0=Object.assign,A0={};function Co(e,n,t){this.props=e,this.context=n,this.refs=A0,this.updater=t||S0}Co.prototype.isReactComponent={};Co.prototype.setState=function(e,n){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,n,"setState")};Co.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function C0(){}C0.prototype=Co.prototype;function Gp(e,n,t){this.props=e,this.context=n,this.refs=A0,this.updater=t||S0}var $p=Gp.prototype=new C0;$p.constructor=Gp;z0($p,Co.prototype);$p.isPureReactComponent=!0;var yv=Array.isArray,E0=Object.prototype.hasOwnProperty,Zp={current:null},N0={key:!0,ref:!0,__self:!0,__source:!0};function I0(e,n,t){var i,a={},o=null,s=null;if(n!=null)for(i in n.ref!==void 0&&(s=n.ref),n.key!==void 0&&(o=""+n.key),n)E0.call(n,i)&&!N0.hasOwnProperty(i)&&(a[i]=n[i]);var l=arguments.length-2;if(l===1)a.children=t;else if(1<l){for(var d=Array(l),c=0;c<l;c++)d[c]=arguments[c+2];a.children=d}if(e&&e.defaultProps)for(i in l=e.defaultProps,l)a[i]===void 0&&(a[i]=l[i]);return{$$typeof:yl,type:e,key:o,ref:s,props:a,_owner:Zp.current}}function VE(e,n){return{$$typeof:yl,type:e.type,key:n,ref:e.ref,props:e.props,_owner:e._owner}}function Yp(e){return typeof e=="object"&&e!==null&&e.$$typeof===yl}function KE(e){var n={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(t){return n[t]})}var jv=/\/+/g;function bh(e,n){return typeof e=="object"&&e!==null&&e.key!=null?KE(""+e.key):n.toString(36)}function Ld(e,n,t,i,a){var o=typeof e;(o==="undefined"||o==="boolean")&&(e=null);var s=!1;if(e===null)s=!0;else switch(o){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case yl:case PE:s=!0}}if(s)return s=e,a=a(s),e=i===""?"."+bh(s,0):i,yv(a)?(t="",e!=null&&(t=e.replace(jv,"$&/")+"/"),Ld(a,n,t,"",function(c){return c})):a!=null&&(Yp(a)&&(a=VE(a,t+(!a.key||s&&s.key===a.key?"":(""+a.key).replace(jv,"$&/")+"/")+e)),n.push(a)),1;if(s=0,i=i===""?".":i+":",yv(e))for(var l=0;l<e.length;l++){o=e[l];var d=i+bh(o,l);s+=Ld(o,n,t,d,a)}else if(d=WE(e),typeof d=="function")for(e=d.call(e),l=0;!(o=e.next()).done;)o=o.value,d=i+bh(o,l++),s+=Ld(o,n,t,d,a);else if(o==="object")throw n=String(e),Error("Objects are not valid as a React child (found: "+(n==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":n)+"). If you meant to render a collection of children, use an array instead.");return s}function Ql(e,n,t){if(e==null)return e;var i=[],a=0;return Ld(e,i,"","",function(o){return n.call(t,o,a++)}),i}function qE(e){if(e._status===-1){var n=e._result;n=n(),n.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=n)}if(e._status===1)return e._result.default;throw e._result}var Qn={current:null},Wd={transition:null},HE={ReactCurrentDispatcher:Qn,ReactCurrentBatchConfig:Wd,ReactCurrentOwner:Zp};function P0(){throw Error("act(...) is not supported in production builds of React.")}
vendor: 4,244 bytes, lines 9-17
9Ae.Children={map:Ql,forEach:function(e,n,t){Ql(e,function(){n.apply(this,arguments)},t)},count:function(e){var n=0;return Ql(e,function(){n++}),n},toArray:function(e){return Ql(e,function(n){return n})||[]},only:function(e){if(!Yp(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};Ae.Component=Co;Ae.Fragment=TE;Ae.Profiler=BE;Ae.PureComponent=Gp;Ae.StrictMode=DE;Ae.Suspense=OE;Ae.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=HE;Ae.act=P0;Ae.cloneElement=function(e,n,t){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var i=z0({},e.props),a=e.key,o=e.ref,s=e._owner;if(n!=null){if(n.ref!==void 0&&(o=n.ref,s=Zp.current),n.key!==void 0&&(a=""+n.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(d in n)E0.call(n,d)&&!N0.hasOwnProperty(d)&&(i[d]=n[d]===void 0&&l!==void 0?l[d]:n[d])}var d=arguments.length-2;if(d===1)i.children=t;else if(1<d){l=Array(d);for(var c=0;c<d;c++)l[c]=arguments[c+2];i.children=l}return{$$typeof:yl,type:e.type,key:a,ref:o,props:i,_owner:s}};Ae.createContext=function(e){return e={$$typeof:FE,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:ME,_context:e},e.Consumer=e};Ae.createElement=I0;Ae.createFactory=function(e){var n=I0.bind(null,e);return n.type=e,n};Ae.createRef=function(){return{current:null}};Ae.forwardRef=function(e){return{$$typeof:RE,render:e}};Ae.isValidElement=Yp;Ae.lazy=function(e){return{$$typeof:LE,_payload:{_status:-1,_result:e},_init:qE}};Ae.memo=function(e,n){return{$$typeof:_E,type:e,compare:n===void 0?null:n}};Ae.startTransition=function(e){var n=Wd.transition;Wd.transition={};try{e()}finally{Wd.transition=n}};Ae.unstable_act=P0;Ae.useCallback=function(e,n){return Qn.current.useCallback(e,n)};Ae.useContext=function(e){return Qn.current.useContext(e)};Ae.useDebugValue=function(){};Ae.useDeferredValue=function(e){return Qn.current.useDeferredValue(e)};Ae.useEffect=function(e,n){return Qn.current.useEffect(e,n)};Ae.useId=function(){return Qn.current.useId()};Ae.useImperativeHandle=function(e,n,t){return Qn.current.useImperativeHandle(e,n,t)};Ae.useInsertionEffect=function(e,n){return Qn.current.useInsertionEffect(e,n)};Ae.useLayoutEffect=function(e,n){return Qn.current.useLayoutEffect(e,n)};Ae.useMemo=function(e,n){return Qn.current.useMemo(e,n)};Ae.useReducer=function(e,n,t){return Qn.current.useReducer(e,n,t)};Ae.useRef=function(e){return Qn.current.useRef(e)};Ae.useState=function(e){return Qn.current.useState(e)};Ae.useSyncExternalStore=function(e,n,t){return Qn.current.useSyncExternalStore(e,n,t)};Ae.useTransition=function(){return Qn.current.useTransition()};Ae.version="18.3.1";j0.exports=Ae;var b=j0.exports;const V=ga(b),Qp=x0({__proto__:null,default:V},[b]);/**
10 * @license React
11 * react-jsx-runtime.production.min.js
12 *
13 * Copyright (c) Facebook, Inc. and its affiliates.
14 *
15 * This source code is licensed under the MIT license found in the
16 * LICENSE file in the root directory of this source tree.
17 */var UE=b,GE=Symbol.for("react.element"),$E=Symbol.for("react.fragment"),ZE=Object.prototype.hasOwnProperty,YE=UE.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,QE={key:!0,ref:!0,__self:!0,__source:!0};function T0(e,n,t){var i,a={},o=null,s=null;t!==void 0&&(o=""+t),n.key!==void 0&&(o=""+n.key),n.ref!==void 0&&(s=n.ref);for(i in n)ZE.call(n,i)&&!QE.hasOwnProperty(i)&&(a[i]=n[i]);if(e&&e.defaultProps)for(i in n=e.defaultProps,n)a[i]===void 0&&(a[i]=n[i]);return{$$typeof:GE,type:e,key:o,ref:s,props:a,_owner:YE.current}}bu.Fragment=$E;bu.jsx=T0;bu.jsxs=T0;y0.exports=bu;var r=y0.exports,D0={exports:{}},JE="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",XE=JE,eN=XE;function B0(){}function M0(){}M0.resetWarningCache=B0;var nN=function(){function e(i,a,o,s,l,d){if(d!==eN){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}e.isRequired=e;function n(){return e}var t={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol
17:e,any:e,arrayOf:n,element:e,elementType:e,instanceOf:n,node:e,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:M0,resetWarningCache:B0};return t.PropTypes=t,t};D0.exports=nN();var tN=D0.exports;const Ce=ga(tN);var iN=typeof Element<"u",rN=typeof Map=="function",aN=typeof Set=="function",oN=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function Vd(e,n){if(e===n)return!0;if(e&&n&&typeof e=="object"&&typeof n=="object"){if(e.constructor!==n.constructor)return!1;var t,i,a;if(Array.isArray(e)){if(t=e.length,t!=n.length)return!1;for(i=t;i--!==0;)if(!Vd(e[i],n[i]))return!1;return!0}var o;if(rN&&e instanceof Map&&n instanceof Map){if(e.size!==n.size)return!1;for(o=e.entries();!(i=o.next()).done;)if(!n.has(i.value[0]))return!1;for(o=e.entries();!(i=o.next()).done;)if(!Vd(i.value[1],n.get(i.value[0])))return!1;return!0}if(aN&&e instanceof Set&&n instanceof Set){if(e.size!==n.size)return!1;for(o=e.entries();!(i=o.next()).done;)if(!n.has(i.value[0]))return!1;return!0}if(oN&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(n)){if(t=e.length,t!=n.length)return!1;for(i=t;i--!==0;)if(e[i]!==n[i])return!1;return!0}if(e.constructor===RegExp)return e.source===n.source&&e.flags===n.flags;if(e.valueOf!==Object.prototype.valueOf&&typeof e.valueOf=="function"&&typeof n.valueOf=="function")return e.valueOf()===n.valueOf();if(e.toString!==Object.prototype.toString&&typeof e.toString=="function"&&typeof n.toString=="function")return e.toString()===n.toString();if(a=Object.keys(e),t=a.length,t!==Object.keys(n).length)return!1;for(i=t;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;if(iN&&e instanceof Element)return!1;for(i=t;i--!==0;)if(!((a[i]==="_owner"||a[i]==="__v"||a[i]==="__o")&&e.$$typeof)&&!Vd(e[a[i]],n[a[i]]))return!1;return!0}return e!==e&&n!==n}var sN=function(n,t){try{return Vd(n,t)}catch(i){if((i.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw i}};const lN=ga(sN);var dN=function(e,n,t,i,a,o,s,l){if(!e){var d;if(n===void 0)d=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[t,i,a,o,s,l],u=0;d=new Error(n.replace(/%s/g,function(){return c[u++]})),d.name="Invariant Violation"}throw d.framesToPop=1,d}},cN=dN;const Sv=ga(cN);var uN=function(n,t,i,a){var o=i?i.call(a,n,t):void 0;if(o!==void 0)return!!o;if(n===t)return!0;if(typeof n!="object"||!n||typeof t!="object"||!t)return!1;var s=Object.keys(n),l=Object.keys(t);if(s.length!==l.length)return!1;for(var d=Object.prototype.hasOwnProperty.bind(t),c=0;c<s.length;c++){var u=s[c];if(!d(u))return!1;var h=n[u],g=t[u];if(o=i?i.call(a,h,g,u):void 0,o===!1||o===void 0&&h!==g)return!1}return!0};const hN=ga(uN);function gn(){return gn=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},gn.apply(this,arguments)}function Jp(e,n){e.prototype=Object.create(n.prototype),e.prototype.constructor=e,Jg(e,n)}function Jg(e,n){return Jg=Object.setPrototypeOf||function(t,i){return t.__proto__=i,t},Jg(e,n)}function zv(e,n){if(e==null)return{};var t,i,a={},o=Object.keys(e);for(i=0;i<o.length;i++)n.indexOf(t=o[i])>=0||(a[t]=e[t]);return a}var ge={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},gN={rel:["amphtml","canonical","alternate"]},mN={type:["application/ld+json"]},pN={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},Av=Object.keys(ge).map(function(e){return ge[e]}),wc={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},fN=Object.keys(wc).reduce(function(e,n){return e[wc[n]]=n,e},{}),$a=function(e,n){for(var t=e.length-1;t>=0;t-=1){var i=e[t];if(Object.prototype.hasOwnProperty.call(i,n))return i[n]}return null},bN=function(e){var n=$a(e,ge.TITLE),t=$a(e,"titleTemplate");if(Array.isArray(n)&&(n=n.join("")),t&&n)return t.replace(/%s/g,function(){return n});var i=$a(e,"defaultTitle");return n||i||void 0},vN=function(e){return $a(e,"onChangeClientState")||function(){}},vh=function(e,n){return n.filter(function(t){return t[e]!==void 0}).map(function(t){return t[e]}).reduce(function(t,i){return gn({},t,i)},{})},kN=function(e,n){return n.filter(function(t){return t[ge.BASE]!==void 0}).map(function(t){return t[ge.BASE]}).reverse().reduce(function(t,i){if(!t.length)for(var a=Object.keys(i),o=0;o<a.length;o+=1){var s=a[o].toLowerCase();if(e.indexOf(s)!==-1&&i[s])return t.concat(i)}return t},[])},Jo=function(e,n,t){var i={};return t.filter(function(a){return!!Array.isArray(a[e])||(a[e]!==void 0&&console&&typeof console.warn=="function"&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof a[e]+'"'),!1)}).map(function(a){return a[e]}).reverse().reduce(function(a,o){var s={};o.filter(function(h){for(var g,m=Object.keys(h),p=0;p<m.length;p+=1){var f=m[p],w=f.toLowerCase();n.indexOf(w)===-1||g==="rel"&&h[g].toLowerCase()==="canonical"||w==="rel"&&h[w].toLowerCase()==="stylesheet"||(g=w),n.indexOf(f)===-1||f!=="innerHTML"&&f!=="cssText"&&f!=="itemprop"||(g=f)}if(!g||!h[g])return!1;var k=h[g].toLowerCase();return i[g]||(i[g]={}),s[g]||(s[g]={}),!i[g][k]&&(s[g][k]=!0,!0)}
17).reverse().forEach(function(h){return a.push(h)});for(var l=Object.keys(s),d=0;d<l.length;d+=1){var c=l[d],u=gn({},i[c],s[c]);i[c]=u}return a},[]).reverse()},wN=function(e,n){if(Array.isArray(e)&&e.length){for(var t=0;t<e.length;t+=1)if(e[t][n])return!0}return!1},F0=function(e){return Array.isArray(e)?e.join(""):e},kh=function(e,n){return Array.isArray(e)?e.reduce(function(t,i){return function(a,o){for(var s=Object.keys(a),l=0;l<s.length;l+=1)if(o[s[l]]&&o[s[l]].includes(a[s[l]]))return!0;return!1}(i,n)?t.priority.push(i):t.default.push(i),t},{priority:[],default:[]}):{default:e}},Cv=function(e,n){var t;return gn({},e,((t={})[n]=void 0,t))},xN=[ge.NOSCRIPT,ge.SCRIPT,ge.STYLE],wh=function(e,n){return n===void 0&&(n=!0),n===!1?String(e):String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")},Ev=function(e){return Object.keys(e).reduce(function(n,t){var i=e[t]!==void 0?t+'="'+e[t]+'"':""+t;return n?n+" "+i:i},"")},Nv=function(e,n){return n===void 0&&(n={}),Object.keys(e).reduce(function(t,i){return t[wc[i]||i]=e[i],t},n)},Kd=function(e,n){return n.map(function(t,i){var a,o=((a={key:i})["data-rh"]=!0,a);return Object.keys(t).forEach(function(s){var l=wc[s]||s;l==="innerHTML"||l==="cssText"?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[l]=t[s]}),V.createElement(e,o)})},St=function(e,n,t){switch(e){case ge.TITLE:return{toComponent:function(){return a=n.titleAttributes,(o={key:i=n.title})["data-rh"]=!0,s=Nv(a,o),[V.createElement(ge.TITLE,s,i)];var i,a,o,s},toString:function(){return function(i,a,o,s){var l=Ev(o),d=F0(a);return l?"<"+i+' data-rh="true" '+l+">"+wh(d,s)+"</"+i+">":"<"+i+' data-rh="true">'+wh(d,s)+"</"+i+">"}(e,n.title,n.titleAttributes,t)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return Nv(n)},toString:function(){return Ev(n)}};default:return{toComponent:function(){return Kd(e,n)},toString:function(){return function(i,a,o){return a.reduce(function(s,l){var d=Object.keys(l).filter(function(h){return!(h==="innerHTML"||h==="cssText")}).reduce(function(h,g){var m=l[g]===void 0?g:g+'="'+wh(l[g],o)+'"';return h?h+" "+m:m},""),c=l.innerHTML||l.cssText||"",u=xN.indexOf(i)===-1;return s+"<"+i+' data-rh="true" '+d+(u?"/>":">"+c+"</"+i+">")},"")}(e,n,t)}}}},Xg=function(e){var n=e.baseTag,t=e.bodyAttributes,i=e.encode,a=e.htmlAttributes,o=e.noscriptTags,s=e.styleTags,l=e.title,d=l===void 0?"":l,c=e.titleAttributes,u=e.linkTags,h=e.metaTags,g=e.scriptTags,m={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var p=function(f){var w=f.linkTags,k=f.scriptTags,v=f.encode,x=kh(f.metaTags,pN),y=kh(w,gN),j=kh(k,mN);return{priorityMethods:{toComponent:function(){return[].concat(Kd(ge.META,x.priority),Kd(ge.LINK,y.priority),Kd(ge.SCRIPT,j.priority))},toString:function(){return St(ge.META,x.priority,v)+" "+St(ge.LINK,y.priority,v)+" "+St(ge.SCRIPT,j.priority,v)}},metaTags:x.default,linkTags:y.default,scriptTags:j.default}}(e);m=p.priorityMethods,u=p.linkTags,h=p.metaTags,g=p.scriptTags}return{priority:m,base:St(ge.BASE,n,i),bodyAttributes:St("bodyAttributes",t,i),htmlAttributes:St("htmlAttributes",a,i),link:St(ge.LINK,u,i),meta:St(ge.META,h,i),noscript:St(ge.NOSCRIPT,o,i),script:St(ge.SCRIPT,g,i),style:St(ge.STYLE,s,i),title:St(ge.TITLE,{title:d,titleAttributes:c},i)}},Jl=[],em=function(e,n){var t=this;n===void 0&&(n=typeof document<"u"),this.instances=[],this.value={setHelmet:function(i){t.context.helmet=i},helmetInstances:{get:function(){return t.canUseDOM?Jl:t.instances},add:function(i){(t.canUseDOM?Jl:t.instances).push(i)},remove:function(i){var a=(t.canUseDOM?Jl:t.instances).indexOf(i);(t.canUseDOM?Jl:t.instances).splice(a,1)}}},this.context=e,this.canUseDOM=n,n||(e.helmet=Xg({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},R0=V.createContext({}),yN=Ce.shape({setHelmet:Ce.func,helmetInstances:Ce.shape({get:Ce.func,add:Ce.func,remove:Ce.func})}),jN=typeof document<"u",Pa=function(e){function n(t){var i;return(i=e.call(this,t)||this).helmetData=new em(i.props.context,n.canUseDOM),i}return Jp(n,e),n.prototype.render=function(){return V.createElement(R0.Provider,{value:this.helmetData.value},this.props.children)},n}(b.Component);Pa.canUseDOM=jN,Pa.propTypes={context:Ce.shape({helmet:Ce.shape()}),children:Ce.node.isRequired},Pa.defaultProps={context:{}},Pa.displayName="HelmetProvider";var ja=function(e,n){var t,i=document.head||document.querySelector(ge.HEAD),a=i.querySelectorAll(e+"[data-rh]"),o=[].slice.call(a),s=[];
17return n&&n.length&&n.forEach(function(l){var d=document.createElement(e);for(var c in l)Object.prototype.hasOwnProperty.call(l,c)&&(c==="innerHTML"?d.innerHTML=l.innerHTML:c==="cssText"?d.styleSheet?d.styleSheet.cssText=l.cssText:d.appendChild(document.createTextNode(l.cssText)):d.setAttribute(c,l[c]===void 0?"":l[c]));d.setAttribute("data-rh","true"),o.some(function(u,h){return t=h,d.isEqualNode(u)})?o.splice(t,1):s.push(d)}),o.forEach(function(l){return l.parentNode.removeChild(l)}),s.forEach(function(l){return i.appendChild(l)}),{oldTags:o,newTags:s}},xh=function(e,n){var t=document.getElementsByTagName(e)[0];if(t){for(var i=t.getAttribute("data-rh"),a=i?i.split(","):[],o=[].concat(a),s=Object.keys(n),l=0;l<s.length;l+=1){var d=s[l],c=n[d]||"";t.getAttribute(d)!==c&&t.setAttribute(d,c),a.indexOf(d)===-1&&a.push(d);var u=o.indexOf(d);u!==-1&&o.splice(u,1)}for(var h=o.length-1;h>=0;h-=1)t.removeAttribute(o[h]);a.length===o.length?t.removeAttribute("data-rh"):t.getAttribute("data-rh")!==s.join(",")&&t.setAttribute("data-rh",s.join(","))}},Iv=function(e,n){var t=e.baseTag,i=e.htmlAttributes,a=e.linkTags,o=e.metaTags,s=e.noscriptTags,l=e.onChangeClientState,d=e.scriptTags,c=e.styleTags,u=e.title,h=e.titleAttributes;xh(ge.BODY,e.bodyAttributes),xh(ge.HTML,i),function(f,w){f!==void 0&&document.title!==f&&(document.title=F0(f)),xh(ge.TITLE,w)}(u,h);var g={baseTag:ja(ge.BASE,t),linkTags:ja(ge.LINK,a),metaTags:ja(ge.META,o),noscriptTags:ja(ge.NOSCRIPT,s),scriptTags:ja(ge.SCRIPT,d),styleTags:ja(ge.STYLE,c)},m={},p={};Object.keys(g).forEach(function(f){var w=g[f],k=w.newTags,v=w.oldTags;k.length&&(m[f]=k),v.length&&(p[f]=g[f].oldTags)}),n&&n(),l(e,m,p)},Xo=null,xc=function(e){function n(){for(var i,a=arguments.length,o=new Array(a),s=0;s<a;s++)o[s]=arguments[s];return(i=e.call.apply(e,[this].concat(o))||this).rendered=!1,i}Jp(n,e);var t=n.prototype;return t.shouldComponentUpdate=function(i){return!hN(i,this.props)},t.componentDidUpdate=function(){this.emitChange()},t.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},t.emitChange=function(){var i,a,o=this.props.context,s=o.setHelmet,l=null,d=(i=o.helmetInstances.get().map(function(c){var u=gn({},c.props);return delete u.context,u}),{baseTag:kN(["href"],i),bodyAttributes:vh("bodyAttributes",i),defer:$a(i,"defer"),encode:$a(i,"encodeSpecialCharacters"),htmlAttributes:vh("htmlAttributes",i),linkTags:Jo(ge.LINK,["rel","href"],i),metaTags:Jo(ge.META,["name","charset","http-equiv","property","itemprop"],i),noscriptTags:Jo(ge.NOSCRIPT,["innerHTML"],i),onChangeClientState:vN(i),scriptTags:Jo(ge.SCRIPT,["src","innerHTML"],i),styleTags:Jo(ge.STYLE,["cssText"],i),title:bN(i),titleAttributes:vh("titleAttributes",i),prioritizeSeoTags:wN(i,"prioritizeSeoTags")});Pa.canUseDOM?(a=d,Xo&&cancelAnimationFrame(Xo),a.defer?Xo=requestAnimationFrame(function(){Iv(a,function(){Xo=null})}):(Iv(a),Xo=null)):Xg&&(l=Xg(d)),s(l)},t.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},t.render=function(){return this.init(),null},n}(b.Component);xc.propTypes={context:yN.isRequired},xc.displayName="HelmetDispatcher";var SN=["children"],zN=["children"],qd=function(e){function n(){return e.apply(this,arguments)||this}Jp(n,e);var t=n.prototype;return t.shouldComponentUpdate=function(i){return!lN(Cv(this.props,"helmetData"),Cv(i,"helmetData"))},t.mapNestedChildrenToProps=function(i,a){if(!a)return null;switch(i.type){case ge.SCRIPT:case ge.NOSCRIPT:return{innerHTML:a};case ge.STYLE:return{cssText:a};default:throw new Error("<"+i.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},t.flattenArrayTypeChildren=function(i){var a,o=i.child,s=i.arrayTypeChildren;return gn({},s,((a={})[o.type]=[].concat(s[o.type]||[],[gn({},i.newChildProps,this.mapNestedChildrenToProps(o,i.nestedChildren))]),a))},t.mapObjectTypeChildren=function(i){var a,o,s=i.child,l=i.newProps,d=i.newChildProps,c=i.nestedChildren;switch(s.type){case ge.TITLE:return gn({},l,((a={})[s.type]=c,a.titleAttributes=gn({},d),a));case ge.BODY:return gn({},l,{bodyAttributes:gn({},d)});case ge.HTML:return gn({},l,{htmlAttributes:gn({},d)});default:return gn({},l,((o={})[s.type]=gn({},d),o))}},t.mapArrayTypeChildrenToProps=function(i,a){var o=gn({},a);
vendor: 10,701 bytes, lines 17-33
17return Object.keys(i).forEach(function(s){var l;o=gn({},o,((l={})[s]=i[s],l))}),o},t.warnOnInvalidChildren=function(i,a){return Sv(Av.some(function(o){return i.type===o}),typeof i.type=="function"?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+Av.join(", ")+" are allowed. Helmet does not support rendering <"+i.type+"> elements. Refer to our API for more information."),Sv(!a||typeof a=="string"||Array.isArray(a)&&!a.some(function(o){return typeof o!="string"}),"Helmet expects a string as a child of <"+i.type+">. Did you forget to wrap your children in braces? ( <"+i.type+">{``}</"+i.type+"> ) Refer to our API for more information."),!0},t.mapChildrenToProps=function(i,a){var o=this,s={};return V.Children.forEach(i,function(l){if(l&&l.props){var d=l.props,c=d.children,u=zv(d,SN),h=Object.keys(u).reduce(function(m,p){return m[fN[p]||p]=u[p],m},{}),g=l.type;switch(typeof g=="symbol"?g=g.toString():o.warnOnInvalidChildren(l,c),g){case ge.FRAGMENT:a=o.mapChildrenToProps(c,a);break;case ge.LINK:case ge.META:case ge.NOSCRIPT:case ge.SCRIPT:case ge.STYLE:s=o.flattenArrayTypeChildren({child:l,arrayTypeChildren:s,newChildProps:h,nestedChildren:c});break;default:a=o.mapObjectTypeChildren({child:l,newProps:a,newChildProps:h,nestedChildren:c})}}}),this.mapArrayTypeChildrenToProps(s,a)},t.render=function(){var i=this.props,a=i.children,o=zv(i,zN),s=gn({},o),l=o.helmetData;return a&&(s=this.mapChildrenToProps(a,s)),!l||l instanceof em||(l=new em(l.context,l.instances)),l?V.createElement(xc,gn({},s,{context:l.value,helmetData:void 0})):V.createElement(R0.Consumer,null,function(d){return V.createElement(xc,gn({},s,{context:d}))})},n}(b.Component);qd.propTypes={base:Ce.object,bodyAttributes:Ce.object,children:Ce.oneOfType([Ce.arrayOf(Ce.node),Ce.node]),defaultTitle:Ce.string,defer:Ce.bool,encodeSpecialCharacters:Ce.bool,htmlAttributes:Ce.object,link:Ce.arrayOf(Ce.object),meta:Ce.arrayOf(Ce.object),noscript:Ce.arrayOf(Ce.object),onChangeClientState:Ce.func,script:Ce.arrayOf(Ce.object),style:Ce.arrayOf(Ce.object),title:Ce.string,titleAttributes:Ce.object,titleTemplate:Ce.string,prioritizeSeoTags:Ce.bool,helmetData:Ce.object},qd.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},qd.displayName="Helmet";var O0={exports:{}},vt={},_0={exports:{}},L0={};/**
18 * @license React
19 * scheduler.production.min.js
20 *
21 * Copyright (c) Facebook, Inc. and its affiliates.
22 *
23 * This source code is licensed under the MIT license found in the
24 * LICENSE file in the root directory of this source tree.
25 */(function(e){function n(D,M){var K=D.length;D.push(M);e:for(;0<K;){var Q=K-1>>>1,$=D[Q];if(0<a($,M))D[Q]=M,D[K]=$,K=Q;else break e}}function t(D){return D.length===0?null:D[0]}function i(D){if(D.length===0)return null;var M=D[0],K=D.pop();if(K!==M){D[0]=K;e:for(var Q=0,$=D.length,se=$>>>1;Q<se;){var le=2*(Q+1)-1,we=D[le],Re=le+1,I=D[Re];if(0>a(we,K))Re<$&&0>a(I,we)?(D[Q]=I,D[Re]=K,Q=Re):(D[Q]=we,D[le]=K,Q=le);else if(Re<$&&0>a(I,K))D[Q]=I,D[Re]=K,Q=Re;else break e}}return M}function a(D,M){var K=D.sortIndex-M.sortIndex;return K!==0?K:D.id-M.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,l=s.now();e.unstable_now=function(){return s.now()-l}}var d=[],c=[],u=1,h=null,g=3,m=!1,p=!1,f=!1,w=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,v=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function x(D){for(var M=t(c);M!==null;){if(M.callback===null)i(c);else if(M.startTime<=D)i(c),M.sortIndex=M.expirationTime,n(d,M);else break;M=t(c)}}function y(D){if(f=!1,x(D),!p)if(t(d)!==null)p=!0,G(j);else{var M=t(c);M!==null&&X(y,M.startTime-D)}}function j(D,M){p=!1,f&&(f=!1,k(A),A=-1),m=!0;var K=g;try{for(x(M),h=t(d);h!==null&&(!(h.expirationTime>M)||D&&!O());){var Q=h.callback;if(typeof Q=="function"){h.callback=null,g=h.priorityLevel;var $=Q(h.expirationTime<=M);M=e.unstable_now(),typeof $=="function"?h.callback=$:h===t(d)&&i(d),x(M)}else i(d);h=t(d)}if(h!==null)var se=!0;else{var le=t(c);le!==null&&X(y,le.startTime-M),se=!1}return se}finally{h=null,g=K,m=!1}}var z=!1,S=null,A=-1,E=5,C=-1;function O(){return!(e.unstable_now()-C<E)}function T(){if(S!==null){var D=e.unstable_now();C=D;var M=!0;try{M=S(!0,D)}finally{M?W():(z=!1,S=null)}}else z=!1}var W;if(typeof v=="function")W=function(){v(T)};else if(typeof MessageChannel<"u"){var F=new MessageChannel,L=F.port2;F.port1.onmessage=T,W=function(){L.postMessage(null)}}else W=function(){w(T,0)};function G(D){S=D,z||(z=!0,W())}function X(D,M){A=w(function(){D(e.unstable_now())},M)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(D){D.callback=null},e.unstable_continueExecution=function(){p||m||(p=!0,G(j))},e.unstable_forceFrameRate=function(D){0>D||125<D?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):E=0<D?Math.floor(1e3/D):5},e.unstable_getCurrentPriorityLevel=function(){return g},e.unstable_getFirstCallbackNode=function(){return t(d)},e.unstable_next=function(D){switch(g){case 1:case 2:case 3:var M=3;break;default:M=g}var K=g;g=M;try{return D()}finally{g=K}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function(D,M){switch(D){case 1:case 2:case 3:case 4:case 5:break;default:D=3}var K=g;g=D;try{return M()}finally{g=K}},e.unstable_scheduleCallback=function(D,M,K){var Q=e.unstable_now();switch(typeof K=="object"&&K!==null?(K=K.delay,K=typeof K=="number"&&0<K?Q+K:Q):K=Q,D){case 1:var $=-1;break;case 2:$=250;break;case 5:$=1073741823;break;case 4:$=1e4;break;default:$=5e3}return $=K+$,D={id:u++,callback:M,priorityLevel:D,startTime:K,expirationTime:$,sortIndex:-1},K>Q?(D.sortIndex=K,n(c,D),t(d)===null&&D===t(c)&&(f?(k(A),A=-1):f=!0,X(y,K-Q))):(D.sortIndex=$,n(d,D),p||m||(p=!0,G(j))),D},e.unstable_shouldYield=O,e.unstable_wrapCallback=function(D){var M=g;return function(){var K=g;g=M;try{return D.apply(this,arguments)}finally{g=K}}}})(L0);_0.exports=L0;var AN=_0.exports;/**
26 * @license React
27 * react-dom.production.min.js
28 *
29 * Copyright (c) Facebook, Inc. and its affiliates.
30 *
31 * This source code is licensed under the MIT license found in the
32 * LICENSE file in the root directory of this source tree.
33 */var CN=b,bt=AN;function H(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t<arguments.length;t++)n+="&args[]="+encodeURIComponent(arguments[t]);return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var W0=new Set,Vs={};function ma(e,n){ao(e,n),ao(e+"Capture",n)}function ao(e,n){for(Vs[e]=n,e=0;e<n.length;e++)W0.add(n[e])}var Wi=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),nm=Object.prototype.hasOwnProperty,EN=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Pv={},Tv={};function NN(e){return nm.call(Tv,e)?!0:nm.call(Pv,e)?!1:EN.test(e)?Tv[e]=!0:(Pv[e]=!0,!1)}function IN(e,n,t,i){if(t!==null&&t.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return i?!1:t!==null?!t.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function PN(e,n,t,i){if(n===null||typeof n>"u"||IN(e,n,t,i))return!0;if(i)return!1;if(t!==null)switch(t.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function Jn(e,n,t,i,a,o,s){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=i,this.attributeNamespace=a,this.mustUseProperty=t,this.propertyName=e,this.type=n,this.sanitizeURL=o,this.removeEmptyString=s}var Fn={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Fn[e]=new Jn(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];Fn[n]=new Jn(n,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Fn[e]=new Jn(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Fn[e]=new Jn(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Fn[e]=new Jn(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Fn[e]=new Jn(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Fn[e]=new Jn(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Fn[e]=new Jn(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Fn[e]=new Jn(e,5,!1,e.toLowerCase(),null,!1,!1)});var Xp=/[\-:]([a-z])/g;function ef(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode
33-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(Xp,ef);Fn[n]=new Jn(n,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(Xp,ef);Fn[n]=new Jn(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(Xp,ef);Fn[n]=new Jn(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Fn[e]=new Jn(e,1,!1,e.toLowerCase(),null,!1,!1)});Fn.xlinkHref=new Jn("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Fn[e]=new Jn(e,1,!1,e.toLowerCase(),null,!0,!0)});function nf(e,n,t,i){var a=Fn.hasOwnProperty(n)?Fn[n]:null;(a!==null?a.type!==0:i||!(2<n.length)||n[0]!=="o"&&n[0]!=="O"||n[1]!=="n"&&n[1]!=="N")&&(PN(n,t,a,i)&&(t=null),i||a===null?NN(n)&&(t===null?e.removeAttribute(n):e.setAttribute(n,""+t)):a.mustUseProperty?e[a.propertyName]=t===null?a.type===3?!1:"":t:(n=a.attributeName,i=a.attributeNamespace,t===null?e.removeAttribute(n):(a=a.type,t=a===3||a===4&&t===!0?"":""+t,i?e.setAttributeNS(i,n,t):e.setAttribute(n,t))))}var Gi=CN.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,Xl=Symbol.for("react.element"),Ta=Symbol.for("react.portal"),Da=Symbol.for("react.fragment"),tf=Symbol.for("react.strict_mode"),tm=Symbol.for("react.profiler"),V0=Symbol.for("react.provider"),K0=Symbol.for("react.context"),rf=Symbol.for("react.forward_ref"),im=Symbol.for("react.suspense"),rm=Symbol.for("react.suspense_list"),af=Symbol.for("react.memo"),tr=Symbol.for("react.lazy"),q0=Symbol.for("react.offscreen"),Dv=Symbol.iterator;function es(e){return e===null||typeof e!="object"?null:(e=Dv&&e[Dv]||e["@@iterator"],typeof e=="function"?e:null)}var sn=Object.assign,yh;function ks(e){if(yh===void 0)try{throw Error()}catch(t){var n=t.stack.trim().match(/\n( *(at )?)/);yh=n&&n[1]||""}return`
34`+yh+e}var jh=!1;function Sh(e,n){if(!e||jh)return"";jh=!0;var t=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(n)if(n=function(){throw Error()},Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(n,[])}catch(c){var i=c}Reflect.construct(e,[],n)}
vendor: 4,637 bytes, lines 34-37
34else{try{n.call()}catch(c){i=c}e.call(n.prototype)}else{try{throw Error()}catch(c){i=c}e()}}catch(c){if(c&&i&&typeof c.stack=="string"){for(var a=c.stack.split(`
35`),o=i.stack.split(`
36`),s=a.length-1,l=o.length-1;1<=s&&0<=l&&a[s]!==o[l];)l--;for(;1<=s&&0<=l;s--,l--)if(a[s]!==o[l]){if(s!==1||l!==1)do if(s--,l--,0>l||a[s]!==o[l]){var d=`
37`+a[s].replace(" at new "," at ");return e.displayName&&d.includes("<anonymous>")&&(d=d.replace("<anonymous>",e.displayName)),d}while(1<=s&&0<=l);break}}}finally{jh=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:"")?ks(e):""}function TN(e){switch(e.tag){case 5:return ks(e.type);case 16:return ks("Lazy");case 13:return ks("Suspense");case 19:return ks("SuspenseList");case 0:case 2:case 15:return e=Sh(e.type,!1),e;case 11:return e=Sh(e.type.render,!1),e;case 1:return e=Sh(e.type,!0),e;default:return""}}function am(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Da:return"Fragment";case Ta:return"Portal";case tm:return"Profiler";case tf:return"StrictMode";case im:return"Suspense";case rm:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case K0:return(e.displayName||"Context")+".Consumer";case V0:return(e._context.displayName||"Context")+".Provider";case rf:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case af:return n=e.displayName||null,n!==null?n:am(e.type)||"Memo";case tr:n=e._payload,e=e._init;try{return am(e(n))}catch{}}return null}function DN(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return am(n);case 8:return n===tf?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function wr(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function H0(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function BN(e){var n=H0(e)?"checked":"value",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),i=""+e[n];if(!e.hasOwnProperty(n)&&typeof t<"u"&&typeof t.get=="function"&&typeof t.set=="function"){var a=t.get,o=t.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return a.call(this)},set:function(s){i=""+s,o.call(this,s)}}),Object.defineProperty(e,n,{enumerable:t.enumerable}),{getValue:function(){return i},setValue:function(s){i=""+s},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function ed(e){e._valueTracker||(e._valueTracker=BN(e))}function U0(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),i="";return e&&(i=H0(e)?e.checked?"true":"false":e.value),e=i,e!==t?(n.setValue(e),!0):!1}function yc(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function om(e,n){var t=n.checked;return sn({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:t??e._wrapperState.initialChecked})}function Bv(e,n){var t=n.defaultValue==null?"":n.defaultValue,i=n.checked!=null?n.checked:n.defaultChecked;t=wr(n.value!=null?n.value:t),e._wrapperState={initialChecked:i,initialValue:t,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function G0(e,n){n=n.checked,n!=null&&nf(e,"checked",n,!1)}function sm(e,n){G0(e,n);var t=wr(n.value),i=n.type;if(t!=null)i==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if(i==="submit"||i==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?lm(e,n.type,t):n.hasOwnProperty("defaultValue")&&lm(e,n.type,wr(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function Mv(e,n,t){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var i=n.type;if(!(i!=="submit"&&i!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,t||n===e.value||(e.value=n),e.defaultValue=n}
vendor: 13,632 bytes, line 37
37t=e.name,t!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,t!==""&&(e.name=t)}function lm(e,n,t){(n!=="number"||yc(e.ownerDocument)!==e)&&(t==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}var ws=Array.isArray;function Za(e,n,t,i){if(e=e.options,n){n={};for(var a=0;a<t.length;a++)n["$"+t[a]]=!0;for(t=0;t<e.length;t++)a=n.hasOwnProperty("$"+e[t].value),e[t].selected!==a&&(e[t].selected=a),a&&i&&(e[t].defaultSelected=!0)}else{for(t=""+wr(t),n=null,a=0;a<e.length;a++){if(e[a].value===t){e[a].selected=!0,i&&(e[a].defaultSelected=!0);return}n!==null||e[a].disabled||(n=e[a])}n!==null&&(n.selected=!0)}}function dm(e,n){if(n.dangerouslySetInnerHTML!=null)throw Error(H(91));return sn({},n,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function Fv(e,n){var t=n.value;if(t==null){if(t=n.children,n=n.defaultValue,t!=null){if(n!=null)throw Error(H(92));if(ws(t)){if(1<t.length)throw Error(H(93));t=t[0]}n=t}n==null&&(n=""),t=n}e._wrapperState={initialValue:wr(t)}}function $0(e,n){var t=wr(n.value),i=wr(n.defaultValue);t!=null&&(t=""+t,t!==e.value&&(e.value=t),n.defaultValue==null&&e.defaultValue!==t&&(e.defaultValue=t)),i!=null&&(e.defaultValue=""+i)}function Rv(e){var n=e.textContent;n===e._wrapperState.initialValue&&n!==""&&n!==null&&(e.value=n)}function Z0(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function cm(e,n){return e==null||e==="http://www.w3.org/1999/xhtml"?Z0(n):e==="http://www.w3.org/2000/svg"&&n==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var nd,Y0=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(n,t,i,a){MSApp.execUnsafeLocalFunction(function(){return e(n,t,i,a)})}:e}(function(e,n){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=n;else{for(nd=nd||document.createElement("div"),nd.innerHTML="<svg>"+n.valueOf().toString()+"</svg>",n=nd.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Ks(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&t.nodeType===3){t.nodeValue=n;return}}e.textContent=n}var As={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},MN=["Webkit","ms","Moz","O"];Object.keys(As).forEach(function(e){MN.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),As[n]=As[e]})});function Q0(e,n,t){return n==null||typeof n=="boolean"||n===""?"":t||typeof n!="number"||n===0||As.hasOwnProperty(e)&&As[e]?(""+n).trim():n+"px"}function J0(e,n){e=e.style;for(var t in n)if(n.hasOwnProperty(t)){var i=t.indexOf("--")===0,a=Q0(t,n[t],i);t==="float"&&(t="cssFloat"),i?e.setProperty(t,a):e[t]=a}}var FN=sn({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function um(e,n){if(n){if(FN[e]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(H(137,e));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(H(60));if(typeof n.dangerouslySetInnerHTML!="object"||!("__html"in n.dangerouslySetInnerHTML))throw Error(H(61))}if(n.style!=null&&typeof n.style!="object")throw Error(H(62))}}function hm(e,n){if(e.indexOf("-")===-1)return typeof n.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var gm=null;function of(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var mm=null,Ya=null,Qa=null;function Ov(e){if(e=zl(e)){if(typeof mm!="function")throw Error(H(280));var n=e.stateNode;n&&(n=yu(n),mm(e.stateNode,e.type,n))}}function X0(e){Ya?Qa?Qa.push(e):Qa=[e]:Ya=e}function ej(){if(Ya){var e=Ya,n=Qa;if(Qa=Ya=null,Ov(e),n)for(e=0;e<n.length;e++)Ov(n[e])}}function nj(e,n){return e(n)}function tj(){}var zh=!1;function ij(e,n,t){if(zh)return e(n,t);zh=!0;try{return nj(e,n,t)}finally{zh=!1,(Ya!==null||Qa!==null)&&(tj(),ej())}}function qs(e,n){var t=e.stateNode;if(t===null)return null;var i=yu(t);if(i===null)return null;t=i[n];e:switch(n){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(i=!i.disabled)||(e=e.type,i=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!i;break e;default:e=!1}if(e)return null;if(t&&typeof t!="function")throw Error(H(231,n,typeof t));return t}var pm=!1;if(Wi)try{var ns={};Object.defineProperty(ns,"passive",{get:function(){pm=!0}}),window.addEventListener("test",ns,ns),window.removeEventListener("test",ns,ns)}catch{pm=!1}function RN(e,n,t,i,a,o,s,l,d){var c=Array.prototype.slice.call(arguments,3);try{n.apply(t,c)}catch(u){this.onError(u)}}var Cs=!1,jc=null,Sc=!1,fm=null,ON={onError:function(e){Cs=!0,jc=e}};function _N(e,n,t,i,a,o,s,l,d){Cs=!1,jc=null,RN.apply(ON,arguments)}function LN(e,n,t,i,a,o,s,l,d){if(_N.apply(this,arguments),Cs){if(Cs){var c=jc;Cs=!1,jc=null}else throw Error(H(198));Sc||(Sc=!0,fm=c)}}function pa(e){var n=e,t=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do n=e,n.flags&4098&&(t=n.return),e=n.return;while(e)}return n.tag===3?t:null}function rj(e){if(e.tag===13){var n=e.memoizedState;if(n===null&&(e=e.alternate,e!==null&&(n=e.memoizedState)),n!==null)return n.dehydrated}return null}function _v(e){if(pa(e)!==e)throw Error(H(188))}function WN(e){var n=e.alternate;if(!n){if(n=pa(e),n===null)throw Error(H(188));return n!==e?null:e}for(var t=e,i=n;;){var a=t.return;if(a===null)break;var o=a.alternate;if(o===null){if(i=a.return,i!==null){t=i;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===t)return _v(a),e;if(o===i)return _v(a),n;o=o.sibling}throw Error(H(188))}if(t.return!==i.return)t=a,i=o;else{for(var s=!1,l=a.child;l;){if(l===t){s=!0,t=a,i=o;break}if(l===i){s=!0,i=a,t=o;break}l=l.sibling}if(!s){for(l=o.child;l;){if(l===t){s=!0,t=o,i=a;break}if(l===i){s=!0,i=o,t=a;break}l=l.sibling}if(!s)throw Error(H(189))}}if(t.alternate!==i)throw Error(H(190))}if(t.tag!==3)throw Error(H(188));return t.stateNode.current===t?e:n}function aj(e){return e=WN(e),e!==null?oj(e):null}function oj(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var n=oj(e);if(n!==null)return n;e=e.sibling}return null}var sj=bt.unstable_scheduleCallback,Lv=bt.unstable_cancelCallback,VN=bt.unstable_shouldYield,KN=bt.unstable_requestPaint,mn=bt.unstable_now,qN=bt.unstable_getCurrentPriorityLevel,sf=bt.unstable_ImmediatePriority,lj=bt.unstable_UserBlockingPriority,zc=bt.unstable_NormalPriority,HN=bt.unstable_LowPriority,dj=bt.unstable_IdlePriority,vu=null,mi=null;function UN(e){if(mi&&typeof mi.onCommitFiberRoot=="function")try{mi.onCommitFiberRoot(vu,e,void 0,(e.current.flags&128)===128)}catch{}}var $t=Math.clz32?Math.clz32:ZN,GN=Math.log,$N=Math.LN2;function ZN(e){return e>>>=0,e===0?32:31-(GN(e)/$N|0)|0}var td=64,id=4194304;function xs(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Ac(e,n){var t=e.pendingLanes;if(t===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes,s=t&268435455;if(s!==0){var l=s&~a;l!==0?i=xs(l):(o&=s,o!==0&&(i=xs(o)))}else s=t&~a,s!==0?i=xs(s):o!==0&&(i=xs(o));if(i===0)return 0;if(n!==0&&n!==i&&!(n&a)&&(a=i&-i,o=n&-n,a>=o||a===16&&(o&4194240)!==0))return n;if(i&4&&(i|=t&16),n=e.entangledLanes,n!==0)for(e=e.entanglements,n&=i;0<n;)t=31-$t(n),a=1<<t,i|=e[t],n&=~a;return i}function YN(e,n){switch(e){case 1:case 2:case 4:return n+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return n+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function QN(e,n){for(var t=e.suspendedLanes,i=e.pingedLanes,a=e.expirationTimes,o=e.pendingLanes;0<o;){var s=31-$t(o),l=1<<s,d=a[s];d===-1?(!(l&t)||l&i)&&(a[s]=YN(l,n)):d<=n&&(e.expiredLanes|=l),o&=~l}}function bm(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function cj(){var e=td;return td<<=1,!(td&4194240)&&(td=64),e}function Ah(e){for(var n=[],t=0;31>t;t++)n.push(e);return n}function jl(e,n,t){e.pendingLanes|=n,n!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,n=31-$t(n),e[n]=t}function JN(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var i=e.eventTimes;for(e=e.expirationTimes;0<t;){var a=31-$t(t),o=1<<a;n[a]=0,i[a]=-1,e[a]=-1,t&=~o}}function lf(e,n){var t=e.entangledLanes|=n;for(e=e.entanglements;t;){var i=31-$t(t),a=1<<i;a&n|e[i]&n&&(e[i]|=n),t&=~a}}var Ve=0;function uj(e){return e&=-e,1<e?4<e?e&268435455?16:536870912:4:1}var hj,df,gj,mj,pj,vm=!1,rd=[],hr=null,gr=null,mr=null,Hs=new Map,Us=new Map,rr=[],XN="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Wv(e,n){switch(e){case"focusin":case"focusout":hr=null;break;case"dragenter":case"dragleave":gr=null;break;case"mouseover":case"mouseout":mr=null;break;case"pointerover":case"pointerout":Hs.delete(n.pointerId);break;case"gotpointercapture":case"lostpointercapture":Us.delete(n.pointerId)}}function ts(e,n,t,i,a,o){return e===null||e.nativeEvent!==o?(e={blockedOn:n,domEventName:t,eventSystemFlags:i,nativeEvent:o,targetContainers:[a]},n!==null&&(n=zl(n),n!==null&&df(n)),e):(e.eventSystemFlags|=i,n=e.targetContainers,a!==null&&n.indexOf(a)===-1&&n.push(a),e)}function eI(e,n,t,i,a){switch(n){case"focusin":return hr=ts(hr,e,n,t,i,a),!0;case"dragenter":return gr=ts(gr,e,n,t,i,a),!0;case"mouseover":return mr=ts(mr,e,n,t,i,a),!0;case"pointerover":var o=a.pointerId;return Hs.set(o,ts(Hs.get(o)||null,e,n,t,i,a)),!0;case"gotpointercapture":return o=a.pointerId,Us.set(o,ts(Us.get(o)||null,e,n,t,i,a)),!0}return!1}function fj(e){var n=Hr(e.target);if(n!==null){var t=pa(n);if(t!==null){if(n=t.tag,n===13){if(n=rj(t),n!==null){e.blockedOn=n,pj(e.priority,function(){gj(t)});return}}else if(n===3&&t.stateNode.current.memoizedState.isDehydrated){e.blockedOn=t.tag===3?t.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Hd(e){if(e.blockedOn!==null)return!1;for(var n=e.targetContainers;0<n.length;){var t=km(e.domEventName,e.eventSystemFlags,n[0],e.nativeEvent);if(t===null){t=e.nativeEvent;var i=new t.constructor(t.type,t);gm=i,t.target.dispatchEvent(i),gm=null}else return n=zl(t),n!==null&&df(n),e.blockedOn=t,!1;n.shift()}return!0}function Vv(e,n,t){Hd(e)&&t.delete(n)}function nI(){vm=!1,hr!==null&&Hd(hr)&&(hr=null),gr!==null&&Hd(gr)&&(gr=null),mr!==null&&Hd(mr)&&(mr=null),Hs.forEach(Vv),Us.forEach(Vv)}function is(e,n){e.blockedOn===n&&(e.blockedOn=null,vm||(vm=!0,bt.unstable_scheduleCallback(bt.unstable_NormalPriority,nI)))}function Gs(e){function n(a){return is(a,e)}if(0<rd.length){is(rd[0],e);for(var t=1;t<rd.length;t++){var i=rd[t];i.blockedOn===e&&(i.blockedOn=null)}}for(hr!==null&&is(hr,e),gr!==null&&is(gr,e),mr!==null&&is(mr,e),Hs.forEach(n),Us.forEach(n),t=0;t<rr.length;t++)i=rr[t],i.blockedOn===e&&(i.blockedOn=null);for(;0<rr.length&&(t=rr[0],t.blockedOn===null);)fj(t),t.blockedOn===null&&rr.shift()}var Ja=Gi.ReactCurrentBatchConfig,Cc=!0;function tI(e,n,t,i){var a=Ve,o=Ja.transition;Ja.transition=null;try{Ve=1,cf(e,n,t,i)}finally{Ve=a,Ja.transition=o}}function iI(e,n,t,i){var a=Ve,o=Ja.transition;Ja.transition=null;try{Ve=4,cf(e,n,t,i)}finally{Ve=a,Ja.transition=o}}function cf(e,n,t,i){if(Cc){var a=km(e,n,t,i);if(a===null)Fh(e,n,i,Ec,t),Wv(e,i);else if(eI(a,e,n,t,i))i.stopPropagation();else if(Wv(e,i),n&4&&-1<XN.indexOf(e)){for(;a!==null;){var o=zl(a);if(o!==null&&hj(o),o=km(e,n,t,i),o===null&&Fh(e,n,i,Ec,t),o===a)break;a=o}a!==null&&i.stopPropagation()}else Fh(e,n,i,null,t)}}var Ec=null;function km(e,n,t,i){if(Ec=null,e=of(i),e=Hr(e),e!==null)if(n=pa(e),n===null)e=null;else if(t=n.tag,t===13){if(e=rj(n),e!==null)return e;e=null}else if(t===3){if(n.stateNode.current.memoizedState.isDehydrated)return n.tag===3?n.stateNode.containerInfo:null;e=null}else n!==e&&(e=null);return Ec=e,null}
vendor: 10,401 bytes, line 37
37function bj(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(qN()){case sf:return 1;case lj:return 4;case zc:case HN:return 16;case dj:return 536870912;default:return 16}default:return 16}}var lr=null,uf=null,Ud=null;function vj(){if(Ud)return Ud;var e,n=uf,t=n.length,i,a="value"in lr?lr.value:lr.textContent,o=a.length;for(e=0;e<t&&n[e]===a[e];e++);var s=t-e;for(i=1;i<=s&&n[t-i]===a[o-i];i++);return Ud=a.slice(e,1<i?1-i:void 0)}function Gd(e){var n=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&n===13&&(e=13)):e=n,e===10&&(e=13),32<=e||e===13?e:0}function ad(){return!0}function Kv(){return!1}function kt(e){function n(t,i,a,o,s){this._reactName=t,this._targetInst=a,this.type=i,this.nativeEvent=o,this.target=s,this.currentTarget=null;for(var l in e)e.hasOwnProperty(l)&&(t=e[l],this[l]=t?t(o):o[l]);return this.isDefaultPrevented=(o.defaultPrevented!=null?o.defaultPrevented:o.returnValue===!1)?ad:Kv,this.isPropagationStopped=Kv,this}return sn(n.prototype,{preventDefault:function(){this.defaultPrevented=!0;var t=this.nativeEvent;t&&(t.preventDefault?t.preventDefault():typeof t.returnValue!="unknown"&&(t.returnValue=!1),this.isDefaultPrevented=ad)},stopPropagation:function(){var t=this.nativeEvent;t&&(t.stopPropagation?t.stopPropagation():typeof t.cancelBubble!="unknown"&&(t.cancelBubble=!0),this.isPropagationStopped=ad)},persist:function(){},isPersistent:ad}),n}var Eo={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},hf=kt(Eo),Sl=sn({},Eo,{view:0,detail:0}),rI=kt(Sl),Ch,Eh,rs,ku=sn({},Sl,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:gf,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==rs&&(rs&&e.type==="mousemove"?(Ch=e.screenX-rs.screenX,Eh=e.screenY-rs.screenY):Eh=Ch=0,rs=e),Ch)},movementY:function(e){return"movementY"in e?e.movementY:Eh}}),qv=kt(ku),aI=sn({},ku,{dataTransfer:0}),oI=kt(aI),sI=sn({},Sl,{relatedTarget:0}),Nh=kt(sI),lI=sn({},Eo,{animationName:0,elapsedTime:0,pseudoElement:0}),dI=kt(lI),cI=sn({},Eo,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),uI=kt(cI),hI=sn({},Eo,{data:0}),Hv=kt(hI),gI={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},mI={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},pI={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function fI(e){var n=this.nativeEvent;return n.getModifierState?n.getModifierState(e):(e=pI[e])?!!n[e]:!1}function gf(){return fI}var bI=sn({},Sl,{key:function(e){if(e.key){var n=gI[e.key]||e.key;if(n!=="Unidentified")return n}return e.type==="keypress"?(e=Gd(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?mI[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:gf,charCode:function(e){return e.type==="keypress"?Gd(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?Gd(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),vI=kt(bI),kI=sn({},ku,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Uv=kt(kI),wI=sn({},Sl,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:gf}),xI=kt(wI),yI=sn({},Eo,{propertyName:0,elapsedTime:0,pseudoElement:0}),jI=kt(yI),SI=sn({},ku,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),zI=kt(SI),AI=[9,13,27,32],mf=Wi&&"CompositionEvent"in window,Es=null;Wi&&"documentMode"in document&&(Es=document.documentMode);var CI=Wi&&"TextEvent"in window&&!Es,kj=Wi&&(!mf||Es&&8<Es&&11>=Es),Gv=" ",$v=!1;function wj(e,n){switch(e){case"keyup":return AI.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function xj(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ba=!1;function EI(e,n){switch(e){case"compositionend":return xj(n);case"keypress":return n.which!==32?null:($v=!0,Gv);case"textInput":return e=n.data,e===Gv&&$v?null:e;default:return null}}function NI(e,n){if(Ba)return e==="compositionend"||!mf&&wj(e,n)?(e=vj(),Ud=uf=lr=null,Ba=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1<n.char.length)return n.char;if(n.which)return String.fromCharCode(n.which)}return null;case"compositionend":return kj&&n.locale!=="ko"?null:n.data;default:return null}}var II={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Zv(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n==="input"?!!II[e.type]:n==="textarea"}function yj(e,n,t,i){X0(i),n=Nc(n,"onChange"),0<n.length&&(t=new hf("onChange","change",null,t,i),e.push({event:t,listeners:n}))}var Ns=null,$s=null;function PI(e){Dj(e,0)}function wu(e){var n=Ra(e);if(U0(n))return e}function TI(e,n){if(e==="change")return n}var jj=!1;if(Wi){var Ih;if(Wi){var Ph="oninput"in document;if(!Ph){var Yv=document.createElement("div");Yv.setAttribute("oninput","return;"),Ph=typeof Yv.oninput=="function"}Ih=Ph}else Ih=!1;jj=Ih&&(!document.documentMode||9<document.documentMode)}function Qv(){Ns&&(Ns.detachEvent("onpropertychange",Sj),$s=Ns=null)}function Sj(e){if(e.propertyName==="value"&&wu($s)){var n=[];yj(n,$s,e,of(e)),ij(PI,n)}}function DI(e,n,t){e==="focusin"?(Qv(),Ns=n,$s=t,Ns.attachEvent("onpropertychange",Sj)):e==="focusout"&&Qv()}function BI(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return wu($s)}function MI(e,n){if(e==="click")return wu(n)}function FI(e,n){if(e==="input"||e==="change")return wu(n)}function RI(e,n){return e===n&&(e!==0||1/e===1/n)||e!==e&&n!==n}var Qt=typeof Object.is=="function"?Object.is:RI;function Zs(e,n){if(Qt(e,n))return!0;if(typeof e!="object"||e===null||typeof n!="object"||n===null)return!1;var t=Object.keys(e),i=Object.keys(n);if(t.length!==i.length)return!1;for(i=0;i<t.length;i++){var a=t[i];if(!nm.call(n,a)||!Qt(e[a],n[a]))return!1}return!0}function Jv(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Xv(e,n){var t=Jv(e);e=0;for(var i;t;){if(t.nodeType===3){if(i=e+t.textContent.length,e<=n&&i>=n)return{node:t,offset:n-e};e=i}e:{for(;t;){if(t.nextSibling){t=t.nextSibling;break e}t=t.parentNode}t=void 0}t=Jv(t)}}function zj(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?zj(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function Aj(){for(var e=window,n=yc();n instanceof e.HTMLIFrameElement;){try{var t=typeof n.contentWindow.location.href=="string"}catch{t=!1}if(t)e=n.contentWindow;else break;n=yc(e.document)}return n}function pf(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}function OI(e){var n=Aj(),t=e.focusedElem,i=e.selectionRange;if(n!==t&&t&&t.ownerDocument&&zj(t.ownerDocument.documentElement,t)){if(i!==null&&pf(t)){if(n=i.start,e=i.end,e===void 0&&(e=n),"selectionStart"in t)t.selectionStart=n,t.selectionEnd=Math.min(e,t.value.length);else if(e=(n=t.ownerDocument||document)&&n.defaultView||window,e.getSelection){e=e.getSelection();var a=t.textContent.length,o=Math.min(i.start,a);i=i.end===void 0?o:Math.min(i.end,a),!e.extend&&o>i&&(a=i,i=o,o=a),a=Xv(t,o);var s=Xv(t,i);a&&s&&(e.rangeCount!==1||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(n=n.createRange(),n.setStart(a.node,a.offset),e.removeAllRanges(),o>i?(e.addRange(n),e.extend(s.node,s.offset)):(n.setEnd(s.node,s.offset),e.addRange(n)))}}for(n=[],e=t;e=e.parentNode;)e.nodeType===1&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof t.focus=="function"&&t.focus(),t=0;t<n.length;t++)e=n[t],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var _I=Wi&&"documentMode"in document&&11>=document.documentMode,Ma=null,wm=null,Is=null,xm=!1;function ek(e,n,t){var i=t.window===t?t.document:t.nodeType===9?t:t.ownerDocument;xm||Ma==null||Ma!==yc(i)||(i=Ma,"selectionStart"in i&&pf(i)?i={start:i.selectionStart,end:i.selectionEnd}:(i=(i.ownerDocument&&i.ownerDocument.defaultView||window).getSelection(),i={anchorNode:i.anchorNode,anchorOffset:i.anchorOffset,focu
vendor: 4,501 bytes, line 37
37sNode:i.focusNode,focusOffset:i.focusOffset}),Is&&Zs(Is,i)||(Is=i,i=Nc(wm,"onSelect"),0<i.length&&(n=new hf("onSelect","select",null,n,t),e.push({event:n,listeners:i}),n.target=Ma)))}function od(e,n){var t={};return t[e.toLowerCase()]=n.toLowerCase(),t["Webkit"+e]="webkit"+n,t["Moz"+e]="moz"+n,t}var Fa={animationend:od("Animation","AnimationEnd"),animationiteration:od("Animation","AnimationIteration"),animationstart:od("Animation","AnimationStart"),transitionend:od("Transition","TransitionEnd")},Th={},Cj={};Wi&&(Cj=document.createElement("div").style,"AnimationEvent"in window||(delete Fa.animationend.animation,delete Fa.animationiteration.animation,delete Fa.animationstart.animation),"TransitionEvent"in window||delete Fa.transitionend.transition);function xu(e){if(Th[e])return Th[e];if(!Fa[e])return e;var n=Fa[e],t;for(t in n)if(n.hasOwnProperty(t)&&t in Cj)return Th[e]=n[t];return e}var Ej=xu("animationend"),Nj=xu("animationiteration"),Ij=xu("animationstart"),Pj=xu("transitionend"),Tj=new Map,nk="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Cr(e,n){Tj.set(e,n),ma(n,[e])}for(var Dh=0;Dh<nk.length;Dh++){var Bh=nk[Dh],LI=Bh.toLowerCase(),WI=Bh[0].toUpperCase()+Bh.slice(1);Cr(LI,"on"+WI)}Cr(Ej,"onAnimationEnd");Cr(Nj,"onAnimationIteration");Cr(Ij,"onAnimationStart");Cr("dblclick","onDoubleClick");Cr("focusin","onFocus");Cr("focusout","onBlur");Cr(Pj,"onTransitionEnd");ao("onMouseEnter",["mouseout","mouseover"]);ao("onMouseLeave",["mouseout","mouseover"]);ao("onPointerEnter",["pointerout","pointerover"]);ao("onPointerLeave",["pointerout","pointerover"]);ma("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));ma("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));ma("onBeforeInput",["compositionend","keypress","textInput","paste"]);ma("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));ma("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));ma("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var ys="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),VI=new Set("cancel close invalid load scroll toggle".split(" ").concat(ys));function tk(e,n,t){var i=e.type||"unknown-event";e.currentTarget=t,LN(i,n,void 0,e),e.currentTarget=null}function Dj(e,n){n=(n&4)!==0;for(var t=0;t<e.length;t++){var i=e[t],a=i.event;i=i.listeners;e:{var o=void 0;if(n)for(var s=i.length-1;0<=s;s--){var l=i[s],d=l.instance,c=l.currentTarget;if(l=l.listener,d!==o&&a.isPropagationStopped())break e;tk(a,l,c),o=d}else for(s=0;s<i.length;s++){if(l=i[s],d=l.instance,c=l.currentTarget,l=l.listener,d!==o&&a.isPropagationStopped())break e;tk(a,l,c),o=d}}}if(Sc)throw e=fm,Sc=!1,fm=null,e}function Qe(e,n){var t=n[Am];t===void 0&&(t=n[Am]=new Set);var i=e+"__bubble";t.has(i)||(Bj(n,e,2,!1),t.add(i))}function Mh(e,n,t){var i=0;n&&(i|=4),Bj(t,e,i,n)}var sd="_reactListening"+Math.random().toString(36).slice(2);function Ys(e){if(!e[sd]){e[sd]=!0,W0.forEach(function(t){t!=="selectionchange"&&(VI.has(t)||Mh(t,!1,e),Mh(t,!0,e))});var n=e.nodeType===9?e:e.ownerDocument;n===null||n[sd]||(n[sd]=!0,Mh("selectionchange",!1,n))}}function Bj(e,n,t,i){switch(bj(n)){case 1:var a=tI;break;case 4:a=iI;break;default:a=cf}t=a.bind(null,n,t,e),a=void 0,!pm||n!=="touchstart"&&n!=="touchmove"&&n!=="wheel"||(a=!0),i?a!==void 0?e.addEventListener(n,t,{capture:!0,passive:a}):e.addEventListener(n,t,!0):a!==void 0?e.addEventListener(n,t,{passive:a}):e.addEventListener(n,t,!1)}function Fh(e,n,t,i,a){var o=i;if(!(n&1)&&!(n&2)&&i!==null)e:for(;;){if(i===null)return;var s=i.tag;if(s===3||s===4){var l=i.stateNode.containerInfo;
vendor: 2,527 bytes, line 37
37if(l===a||l.nodeType===8&&l.parentNode===a)break;if(s===4)for(s=i.return;s!==null;){var d=s.tag;if((d===3||d===4)&&(d=s.stateNode.containerInfo,d===a||d.nodeType===8&&d.parentNode===a))return;s=s.return}for(;l!==null;){if(s=Hr(l),s===null)return;if(d=s.tag,d===5||d===6){i=o=s;continue e}l=l.parentNode}}i=i.return}ij(function(){var c=o,u=of(t),h=[];e:{var g=Tj.get(e);if(g!==void 0){var m=hf,p=e;switch(e){case"keypress":if(Gd(t)===0)break e;case"keydown":case"keyup":m=vI;break;case"focusin":p="focus",m=Nh;break;case"focusout":p="blur",m=Nh;break;case"beforeblur":case"afterblur":m=Nh;break;case"click":if(t.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":m=qv;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":m=oI;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":m=xI;break;case Ej:case Nj:case Ij:m=dI;break;case Pj:m=jI;break;case"scroll":m=rI;break;case"wheel":m=zI;break;case"copy":case"cut":case"paste":m=uI;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":m=Uv}var f=(n&4)!==0,w=!f&&e==="scroll",k=f?g!==null?g+"Capture":null:g;f=[];for(var v=c,x;v!==null;){x=v;var y=x.stateNode;if(x.tag===5&&y!==null&&(x=y,k!==null&&(y=qs(v,k),y!=null&&f.push(Qs(v,y,x)))),w)break;v=v.return}0<f.length&&(g=new m(g,p,null,t,u),h.push({event:g,listeners:f}))}}if(!(n&7)){e:{if(g=e==="mouseover"||e==="pointerover",m=e==="mouseout"||e==="pointerout",g&&t!==gm&&(p=t.relatedTarget||t.fromElement)&&(Hr(p)||p[Vi]))break e;if((m||g)&&(g=u.window===u?u:(g=u.ownerDocument)?g.defaultView||g.parentWindow:window,m?(p=t.relatedTarget||t.toElement,m=c,p=p?Hr(p):null,p!==null&&(w=pa(p),p!==w||p.tag!==5&&p.tag!==6)&&(p=null)):(m=null,p=c),m!==p)){if(f=qv,y="onMouseLeave",k="onMouseEnter",v="mouse",(e==="pointerout"||e==="pointerover")&&(f=Uv,y="onPointerLeave",k="onPointerEnter",v="pointer"),w=m==null?g:Ra(m),x=p==null?g:Ra(p),g=new f(y,v+"leave",m,t,u),g.target=w,g.relatedTarget=x,y=null,Hr(u)===c&&(f=new f(k,v+"enter",p,t,u),f.target=x,f.relatedTarget=w,y=f),w=y,m&&p)n:{for(f=m,k=p,v=0,x=f;x;x=Sa(x))v++;for(x=0,y=k;y;y=Sa(y))x++;for(;0<v-x;)f=Sa(f),v--;for(;0<x-v;)k=Sa(k),x--;for(;v--;){if(f===k||k!==null&&f===k.alternate)break n;f=Sa(f),k=Sa(k)}f=null}else f=null;m!==null&&ik(h,g,m,f,!1),p!==null&&w!==null&&ik(h,w,p,f,!0)}}
vendor: 4,240 bytes, lines 37-38
37e:{if(g=c?Ra(c):window,m=g.nodeName&&g.nodeName.toLowerCase(),m==="select"||m==="input"&&g.type==="file")var j=TI;else if(Zv(g))if(jj)j=FI;else{j=BI;var z=DI}else(m=g.nodeName)&&m.toLowerCase()==="input"&&(g.type==="checkbox"||g.type==="radio")&&(j=MI);if(j&&(j=j(e,c))){yj(h,j,t,u);break e}z&&z(e,g,c),e==="focusout"&&(z=g._wrapperState)&&z.controlled&&g.type==="number"&&lm(g,"number",g.value)}switch(z=c?Ra(c):window,e){case"focusin":(Zv(z)||z.contentEditable==="true")&&(Ma=z,wm=c,Is=null);break;case"focusout":Is=wm=Ma=null;break;case"mousedown":xm=!0;break;case"contextmenu":case"mouseup":case"dragend":xm=!1,ek(h,t,u);break;case"selectionchange":if(_I)break;case"keydown":case"keyup":ek(h,t,u)}var S;if(mf)e:{switch(e){case"compositionstart":var A="onCompositionStart";break e;case"compositionend":A="onCompositionEnd";break e;case"compositionupdate":A="onCompositionUpdate";break e}A=void 0}else Ba?wj(e,t)&&(A="onCompositionEnd"):e==="keydown"&&t.keyCode===229&&(A="onCompositionStart");A&&(kj&&t.locale!=="ko"&&(Ba||A!=="onCompositionStart"?A==="onCompositionEnd"&&Ba&&(S=vj()):(lr=u,uf="value"in lr?lr.value:lr.textContent,Ba=!0)),z=Nc(c,A),0<z.length&&(A=new Hv(A,e,null,t,u),h.push({event:A,listeners:z}),S?A.data=S:(S=xj(t),S!==null&&(A.data=S)))),(S=CI?EI(e,t):NI(e,t))&&(c=Nc(c,"onBeforeInput"),0<c.length&&(u=new Hv("onBeforeInput","beforeinput",null,t,u),h.push({event:u,listeners:c}),u.data=S))}Dj(h,n)})}function Qs(e,n,t){return{instance:e,listener:n,currentTarget:t}}function Nc(e,n){for(var t=n+"Capture",i=[];e!==null;){var a=e,o=a.stateNode;a.tag===5&&o!==null&&(a=o,o=qs(e,t),o!=null&&i.unshift(Qs(e,o,a)),o=qs(e,n),o!=null&&i.push(Qs(e,o,a))),e=e.return}return i}function Sa(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function ik(e,n,t,i,a){for(var o=n._reactName,s=[];t!==null&&t!==i;){var l=t,d=l.alternate,c=l.stateNode;if(d!==null&&d===i)break;l.tag===5&&c!==null&&(l=c,a?(d=qs(t,o),d!=null&&s.unshift(Qs(t,d,l))):a||(d=qs(t,o),d!=null&&s.push(Qs(t,d,l)))),t=t.return}s.length!==0&&e.push({event:n,listeners:s})}var KI=/\r\n?/g,qI=/\u0000|\uFFFD/g;function rk(e){return(typeof e=="string"?e:""+e).replace(KI,`
38`).replace(qI,"")}function ld(e,n,t){if(n=rk(n),rk(e)!==n&&t)throw Error(H(425))}function Ic(){}var ym=null,jm=null;function Sm(e,n){return e==="textarea"||e==="noscript"||typeof n.children=="string"||typeof n.children=="number"||typeof n.dangerouslySetInnerHTML=="object"&&n.dangerouslySetInnerHTML!==null&&n.dangerouslySetInnerHTML.__html!=null}var zm=typeof setTimeout=="function"?setTimeout:void 0,HI=typeof clearTimeout=="function"?clearTimeout:void 0,ak=typeof Promise=="function"?Promise:void 0,UI=typeof queueMicrotask=="function"?queueMicrotask:typeof ak<"u"?function(e){return ak.resolve(null).then(e).catch(GI)}:zm;function GI(e){setTimeout(function(){throw e})}function Rh(e,n){var t=n,i=0;do{var a=t.nextSibling;if(e.removeChild(t),a&&a.nodeType===8)if(t=a.data,t==="/$"){if(i===0){e.removeChild(a),Gs(n);return}i--}else t!=="$"&&t!=="$?"&&t!=="$!"||i++;t=a}while(t);Gs(n)}function pr(e){for(;e!=null;e=e.nextSibling){var n=e.nodeType;if(n===1||n===3)break;if(n===8){if(n=e.data,n==="$"||n==="$!"||n==="$?")break;if(n==="/$")return null}}return e}function ok(e){e=e.previousSibling;for(var n=0;e;){if(e.nodeType===8){var t=e.data;if(t==="$"||t==="$!"||t==="$?"){if(n===0)return e;n--}else t==="/$"&&n++}e=e.previousSibling}return null}var No=Math.random().toString(36).slice(2),ci="__reactFiber$"+No,Js="__reactProps$"+No,Vi="__reactContainer$"+No,Am="__reactEvents$"+No,$I="__reactListeners$"+No,ZI="__reactHandles$"+No;function Hr(e){var n=e[ci];if(n)return n;for(var t=e.parentNode;t;){if(n=t[Vi]||t[ci]){if(t=n.alternate,n.child!==null||t!==null&&t.child!==null)for(e=ok(e);e!==null;){if(t=e[ci])return t;e=ok(e)}return n}e=t,t=e.parentNode}return null}function zl(e){return e=e[ci]||e[Vi],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function Ra(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(H(33))}function yu(e){return e[Js]||null}var Cm=[],Oa=-1;function Er(e){return{current:e}}function Xe(e){0>Oa||(e.current=Cm[Oa],Cm[Oa]=null,Oa--)}function Ze(e,n){Oa++,Cm[Oa]=e.current,e.current=n}var xr={},Kn=Er(xr),it=Er(!1),aa=xr;
vendor: 17,529 bytes, line 38
38function oo(e,n){var t=e.type.contextTypes;if(!t)return xr;var i=e.stateNode;if(i&&i.__reactInternalMemoizedUnmaskedChildContext===n)return i.__reactInternalMemoizedMaskedChildContext;var a={},o;for(o in t)a[o]=n[o];return i&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=a),a}function rt(e){return e=e.childContextTypes,e!=null}function Pc(){Xe(it),Xe(Kn)}function sk(e,n,t){if(Kn.current!==xr)throw Error(H(168));Ze(Kn,n),Ze(it,t)}function Mj(e,n,t){var i=e.stateNode;if(n=n.childContextTypes,typeof i.getChildContext!="function")return t;i=i.getChildContext();for(var a in i)if(!(a in n))throw Error(H(108,DN(e)||"Unknown",a));return sn({},t,i)}function Tc(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||xr,aa=Kn.current,Ze(Kn,e),Ze(it,it.current),!0}function lk(e,n,t){var i=e.stateNode;if(!i)throw Error(H(169));t?(e=Mj(e,n,aa),i.__reactInternalMemoizedMergedChildContext=e,Xe(it),Xe(Kn),Ze(Kn,e)):Xe(it),Ze(it,t)}var Di=null,ju=!1,Oh=!1;function Fj(e){Di===null?Di=[e]:Di.push(e)}function YI(e){ju=!0,Fj(e)}function Nr(){if(!Oh&&Di!==null){Oh=!0;var e=0,n=Ve;try{var t=Di;for(Ve=1;e<t.length;e++){var i=t[e];do i=i(!0);while(i!==null)}Di=null,ju=!1}catch(a){throw Di!==null&&(Di=Di.slice(e+1)),sj(sf,Nr),a}finally{Ve=n,Oh=!1}}return null}var _a=[],La=0,Dc=null,Bc=0,At=[],Ct=0,oa=null,Bi=1,Mi="";function Wr(e,n){_a[La++]=Bc,_a[La++]=Dc,Dc=e,Bc=n}function Rj(e,n,t){At[Ct++]=Bi,At[Ct++]=Mi,At[Ct++]=oa,oa=e;var i=Bi;e=Mi;var a=32-$t(i)-1;i&=~(1<<a),t+=1;var o=32-$t(n)+a;if(30<o){var s=a-a%5;o=(i&(1<<s)-1).toString(32),i>>=s,a-=s,Bi=1<<32-$t(n)+a|t<<a|i,Mi=o+e}else Bi=1<<o|t<<a|i,Mi=e}function ff(e){e.return!==null&&(Wr(e,1),Rj(e,1,0))}function bf(e){for(;e===Dc;)Dc=_a[--La],_a[La]=null,Bc=_a[--La],_a[La]=null;for(;e===oa;)oa=At[--Ct],At[Ct]=null,Mi=At[--Ct],At[Ct]=null,Bi=At[--Ct],At[Ct]=null}var pt=null,mt=null,tn=!1,Gt=null;function Oj(e,n){var t=Et(5,null,null,0);t.elementType="DELETED",t.stateNode=n,t.return=e,n=e.deletions,n===null?(e.deletions=[t],e.flags|=16):n.push(t)}function dk(e,n){switch(e.tag){case 5:var t=e.type;return n=n.nodeType!==1||t.toLowerCase()!==n.nodeName.toLowerCase()?null:n,n!==null?(e.stateNode=n,pt=e,mt=pr(n.firstChild),!0):!1;case 6:return n=e.pendingProps===""||n.nodeType!==3?null:n,n!==null?(e.stateNode=n,pt=e,mt=null,!0):!1;case 13:return n=n.nodeType!==8?null:n,n!==null?(t=oa!==null?{id:Bi,overflow:Mi}:null,e.memoizedState={dehydrated:n,treeContext:t,retryLane:1073741824},t=Et(18,null,null,0),t.stateNode=n,t.return=e,e.child=t,pt=e,mt=null,!0):!1;default:return!1}}function Em(e){return(e.mode&1)!==0&&(e.flags&128)===0}function Nm(e){if(tn){var n=mt;if(n){var t=n;if(!dk(e,n)){if(Em(e))throw Error(H(418));n=pr(t.nextSibling);var i=pt;n&&dk(e,n)?Oj(i,t):(e.flags=e.flags&-4097|2,tn=!1,pt=e)}}else{if(Em(e))throw Error(H(418));e.flags=e.flags&-4097|2,tn=!1,pt=e}}}function ck(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;pt=e}function dd(e){if(e!==pt)return!1;if(!tn)return ck(e),tn=!0,!1;var n;if((n=e.tag!==3)&&!(n=e.tag!==5)&&(n=e.type,n=n!=="head"&&n!=="body"&&!Sm(e.type,e.memoizedProps)),n&&(n=mt)){if(Em(e))throw _j(),Error(H(418));for(;n;)Oj(e,n),n=pr(n.nextSibling)}if(ck(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(H(317));e:{for(e=e.nextSibling,n=0;e;){if(e.nodeType===8){var t=e.data;if(t==="/$"){if(n===0){mt=pr(e.nextSibling);break e}n--}else t!=="$"&&t!=="$!"&&t!=="$?"||n++}e=e.nextSibling}mt=null}}else mt=pt?pr(e.stateNode.nextSibling):null;return!0}function _j(){for(var e=mt;e;)e=pr(e.nextSibling)}function so(){mt=pt=null,tn=!1}function vf(e){Gt===null?Gt=[e]:Gt.push(e)}var QI=Gi.ReactCurrentBatchConfig;function as(e,n,t){if(e=t.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(t._owner){if(t=t._owner,t){if(t.tag!==1)throw Error(H(309));var i=t.stateNode}if(!i)throw Error(H(147,e));var a=i,o=""+e;return n!==null&&n.ref!==null&&typeof n.ref=="function"&&n.ref._stringRef===o?n.ref:(n=function(s){var l=a.refs;s===null?delete l[o]:l[o]=s},n._stringRef=o,n)}if(typeof e!="string")throw Error(H(284));if(!t._owner)throw Error(H(290,e))}return e}function cd(e,n){throw e=Object.prototype.toString.call(n),Error(H(31,e==="[object Object]"?"object with keys {"+Object.keys(n).join(", ")+"}":e))}function uk(e){var n=e._init;return n(e._payload)}function Lj(e){function n(k,v){if(e){var x=k.deletions;x===null?(k.deletions=[v],k.flags|=16):x.push(v)}}function t(k,v){if(!e)return null;for(;v!==null;)n(k,v),v=v.sibling;return null}function i(k,v){for(k=new Map;v!==null;)v.key!==null?k.set(v.key,v):k.set(v.index,v),v=v.sibling;return k}function a(k,v){return k=kr(k,v),k.index=0,k.sibling=null,k}function o(k,v,x){return k.index=x,e?(x=k.alternate,x!==null?(x=x.index,x<v?(k.flags|=2,v):x):(k.flags|=2,v)):(k.flags|=1048576,v)}function s(k){return e&&k.alternate===null&&(k.flags|=2),k}function l(k,v,x,y){return v===null||v.tag!==6?(v=Hh(x,k.mode,y),v.return=k,v):(v=a(v,x),v.return=k,v)}function d(k,v,x,y){var j=x.type;return j===Da?u(k,v,x.props.children,y,x.key):v!==null&&(v.elementType===j||typeof j=="object"&&j!==null&&j.$$typeof===tr&&uk(j)===v.type)?(y=a(v,x.props),y.ref=as(k,v,x),y.return=k,y):(y=ec(x.type,x.key,x.props,null,k.mode,y),y.ref=as(k,v,x),y.return=k,y)}function c(k,v,x,y){return v===null||v.tag!==4||v.stateNode.containerInfo!==x.containerInfo||v.stateNode.implementation!==x.implementation?(v=Uh(x,k.mode,y),v.return=k,v):(v=a(v,x.children||[]),v.return=k,v)}function u(k,v,x,y,j){return v===null||v.tag!==7?(v=Xr(x,k.mode,y,j),v.return=k,v):(v=a(v,x),v.return=k,v)}function h(k,v,x){if(typeof v=="string"&&v!==""||typeof v=="number")return v=Hh(""+v,k.mode,x),v.return=k,v;if(typeof v=="object"&&v!==null){switch(v.$$typeof){case Xl:return x=ec(v.type,v.key,v.props,null,k.mode,x),x.ref=as(k,null,v),x.return=k,x;case Ta:return v=Uh(v,k.mode,x),v.return=k,v;case tr:var y=v._init;return h(k,y(v._payload),x)}if(ws(v)||es(v))return v=Xr(v,k.mode,x,null),v.return=k,v;cd(k,v)}return null}function g(k,v,x,y){var j=v!==null?v.key:null;if(typeof x=="string"&&x!==""||typeof x=="number")return j!==null?null:l(k,v,""+x,y);if(typeof x=="object"&&x!==null){switch(x.$$typeof){case Xl:return x.key===j?d(k,v,x,y):null;case Ta:return x.key===j?c(k,v,x,y):null;case tr:return j=x._init,g(k,v,j(x._payload),y)}if(ws(x)||es(x))return j!==null?null:u(k,v,x,y,null);cd(k,x)}return null}function m(k,v,x,y,j){if(typeof y=="string"&&y!==""||typeof y=="number")return k=k.get(x)||null,l(v,k,""+y,j);if(typeof y=="object"&&y!==null){switch(y.$$typeof){case Xl:return k=k.get(y.key===null?x:y.key)||null,d(v,k,y,j);case Ta:return k=k.get(y.key===null?x:y.key)||null,c(v,k,y,j);case tr:var z=y._init;return m(k,v,x,z(y._payload),j)}if(ws(y)||es(y))return k=k.get(x)||null,u(v,k,y,j,null);cd(v,y)}return null}function p(k,v,x,y){for(var j=null,z=null,S=v,A=v=0,E=null;S!==null&&A<x.length;A++){S.index>A?(E=S,S=null):E=S.sibling;var C=g(k,S,x[A],y);if(C===null){S===null&&(S=E);break}e&&S&&C.alternate===null&&n(k,S),v=o(C,v,A),z===null?j=C:z.sibling=C,z=C,S=E}if(A===x.length)return t(k,S),tn&&Wr(k,A),j;if(S===null){for(;A<x.length;A++)S=h(k,x[A],y),S!==null&&(v=o(S,v,A),z===null?j=S:z.sibling=S,z=S);return tn&&Wr(k,A),j}for(S=i(k,S);A<x.length;A++)E=m(S,k,A,x[A],y),E!==null&&(e&&E.alternate!==null&&S.delete(E.key===null?A:E.key),v=o(E,v,A),z===null?j=E:z.sibling=E,z=E);return e&&S.forEach(function(O){return n(k,O)}),tn&&Wr(k,A),j}function f(k,v,x,y){var j=es(x);if(typeof j!="function")throw Error(H(150));if(x=j.call(x),x==null)throw Error(H(151));for(var z=j=null,S=v,A=v=0,E=null,C=x.next();S!==null&&!C.done;A++,C=x.next()){S.index>A?(E=S,S=null):E=S.sibling;var O=g(k,S,C.value,y);if(O===null){S===null&&(S=E);break}e&&S&&O.alternate===null&&n(k,S),v=o(O,v,A),z===null?j=O:z.sibling=O,z=O,S=E}if(C.done)return t(k,S),tn&&Wr(k,A),j;if(S===null){for(;!C.done;A++,C=x.next())C=h(k,C.value,y),C!==null&&(v=o(C,v,A),z===null?j=C:z.sibling=C,z=C);return tn&&Wr(k,A),j}for(S=i(k,S);!C.done;A++,C=x.next())C=m(S,k,A,C.value,y),C!==null&&(e&&C.alternate!==null&&S.delete(C.key===null?A:C.key),v=o(C,v,A),z===null?j=C:z.sibling=C,z=C);return e&&S.forEach(function(T){return n(k,T)}),tn&&Wr(k,A),j}function w(k,v,x,y){if(typeof x=="object"&&x!==null&&x.type===Da&&x.key===null&&(x=x.props.children),typeof x=="object"&&x!==null){switch(x.$$typeof){case Xl:e:{for(var j=x.key,z=v;z!==null;){if(z.key===j){if(j=x.type,j===Da){if(z.tag===7){t(k,z.sibling),v=a(z,x.props.children),v.return=k,k=v;break e}}else if(z.elementType===j||typeof j=="object"&&j!==null&&j.$$typeof===tr&&uk(j)===z.type){t(k,z.sibling),v=a(z,x.props),v.ref=as(k,z,x),v.return=k,k=v;break e}t(k,z);break}else n(k,z);z=z.sibling}x.type===Da?(v=Xr(x.props.children,k.mode,y,x.key),v.return=k,k=v):(y=ec(x.type,x.key,x.props,null,k.mode,y),y.ref=as(k,v,x),y.return=k,k=y)}return s(k);case Ta:e:{for(z=x.key;v!==null;){if(v.key===z)if(v.tag===4&&v.stateNode.containerInfo===x.containerInfo&&v.stateNode.implementation===x.implementation){t(k,v.sibling),v=a(v,x.children||[]),v.return=k,k=v;break e}else{t(k,v);break}else n(k,v);v=v.sibling}v=Uh(x,k.mode,y),v.return=k,k=v}return s(k);case tr:return z=x._init,w(k,v,z(x._payload),y)}if(ws(x))return p(k,v,x,y);if(es(x))return f(k,v,x,y);cd(k,x)}return typeof x=="string"&&x!==""||typeof x=="number"?(x=""+x,v!==null&&v.tag===6?(t(k,v.sibling),v=a(v,x),v.return=k,k=v):(t(k,v),v=Hh(x,k.mode,y),v.return=k,k=v),s(k)):t(k,v)}return w}var lo=Lj(!0),Wj=Lj(!1),Mc=Er(null),Fc=null,Wa=null,kf=null;function wf(){kf=Wa=Fc=null}function xf(e){var n=Mc.current;Xe(Mc),e._currentValue=n}function Im(e,n,t){for(;e!==null;){var i=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,i!==null&&(i.childLanes|=n)):i!==null&&(i.childLanes&n)!==n&&(i.childLanes|=n),e===t)break;e=e.return}}function Xa(e,n){Fc=e,kf=Wa=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&n&&(tt=!0),e.firstContext=null)}function Bt(e){var n=e._currentValue;if(kf!==e)if(e={context:e,memoizedValue:n,next:null},Wa===null){if(Fc===null)throw Error(H(308));Wa=e,Fc.dependencies={lanes:0,firstContext:e}}else Wa=Wa.next=e;return n}var Ur=null;function yf(e){Ur===null?Ur=[e]:Ur.push(e)}function Vj(e,n,t,i){var a=n.interleaved;return a===null?(t.next=t,yf(n)):(t.next=a.next,a.next=t),n.interleaved=t,Ki(e,i)}function Ki(e,n){e.lanes|=n;var t=e.alternate;for(t!==null&&(t.lanes|=n),t=e,e=e.return;e!==null;)e.childLanes|=n,t=e.alternate,t!==null&&(t.childLanes|=n),t=e,e=e.return;return t.tag===3?t.stateNode:null}var ir=!1;function jf(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Kj(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Oi(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function fr(e,n,t){var i=e.updateQueue;if(i===null)return null;if(i=i.shared,Te&2){var a=i.pending;return a===null?n.next=n:(n.next=a.next,a.next=n),i.pending=n,Ki(e,t)}return a=i.interleaved,a===null?(n.next=n,yf(i)):(n.next=a.next,a.next=n),i.interleaved=n,Ki(e,t)}function $d(e,n,t){if(n=n.updateQueue,n!==null&&(n=n.shared,(t&4194240)!==0)){var i=n.lanes;i&=e.pendingLanes,t|=i,n.lanes=t,lf(e,t)}}function hk(e,n){var t=e.updateQueue,i=e.alternate;if(i!==null&&(i=i.updateQueue,t===i)){var a=null,o=null;if(t=t.firstBaseUpdate,t!==null){do{var s={eventTime:t.eventTime,lane:t.lane,tag:t.tag,payload:t.payload,callback:t.callback,next:null};o===null?a=o=s:o=o.next=s,t=t.next}while(t!==null);o===null?a=o=n:o=o.next=n}else a=o=n;t={baseState:i.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:i.shared,effects:i.effects},e.updateQueue=t;return}e=t.lastBaseUpdate,e===null?t.firstBaseUpdate=n:e.next=n,t.lastBaseUpdate=n}function Rc(e,n,t,i){var a=e.updateQueue;ir=!1;var o=a.firstBaseUpdate,s=a.lastBaseUpdate,l=a.shared.pending;if(l!==null){a.shared.pending=null;var d=l,c=d.next;d.next=null,s===null?o=c:s.next=c,s=d;var u=e.alternate;u!==null&&(u=u.updateQueue,l=u.lastBaseUpdate,l!==s&&(l===null?u.firstBaseUpdate=c:l.next=c,u.lastBaseUpdate=d))}if(o!==null){var h=a.baseState;s=0,u=c=d=null,l=o;do{var g=l.lane,m=l.eventTime;if((i&g)===g){u!==null&&(u=u.next={eventTime:m,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var p=e,f=l;switch(g=n,m=t,f.tag){case 1:if(p=f.payload,typeof p=="function"){h=p.call(m,h,g);break e}h=p;break e;case 3:p.flags=p.flags&-65537|128;case 0:if(p=f.payload,g=typeof p=="function"?p.call(m,h,g):p,g==null)break e;h=sn({},h,g);break e;case 2:ir=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,g=a.effects,g===null?a.effects=[l]:g.push(l))}else m={eventTime:m,lane:g,tag:l.tag,payload:l.payload,callback:l.callback,next:null},u===null?(c=u=m,d=h):u=u.next=m,s|=g;if(l=l.next,l===null){if(l=a.shared.pending,l===null)break;g=l,l=g.next,g.next=null,a.lastBaseUpdate=g,a.shared.pending=null}}while(!0);if(u===null&&(d=h),a.baseState=d,a.firstBaseUpdate=c,a.lastBaseUpdate=u,n=a.shared.interleaved,n!==null){a=n;do s|=a.lane,a=a.next;while(a!==n)}else o===null&&(a.shared.lanes=0);la|=s,e.lanes=s,e.memoizedState=h}}function gk(e,n,t){if(e=n.effects,n.effects=null,e!==null)for(n=0;n<e.length;n++){var i=e[n],a=i.callback;if(a!==null){if(i.callback=null,i=t,typeof a!="function")throw Error(H(191,a));a.call(i)}}}var Al={},pi=Er(Al),Xs=Er(Al),el=Er(Al);function Gr(e){if(e===Al)throw Error(H(174));return e}function Sf(e,n){switch(Ze(el,n),Ze(Xs,e),Ze(pi,Al),e=n.nodeType,e){case 9:case 11:n=(n=n.documentElement)?n.namespaceURI:cm(null,"");break;default:e=e===8?n.parentNode:n,n=e.namespaceURI||null,e=e.tagName,n=cm(n,e)}Xe(pi),Ze(pi,n)}function co(){Xe(pi),Xe(Xs),Xe(el)}function qj(e){Gr(el.current);var n=Gr(pi.current),t=cm(n,e.type);n!==t&&(Ze(Xs,e),Ze(pi,t))}function zf(e){Xs.current===e&&(Xe(pi),Xe(Xs))}var an=Er(0);function Oc(e){for(var n=e;n!==null;){if(n.tag===13){var t=n.memoizedState;if(t!==null&&(t=t.dehydrated,t===null||t.data==="$?"||t.data==="$!"))return n}else if(n.tag===19&&n.memoizedProps.revealOrder!==void 0){if(n.flags&128)return n}else if(n.child!==null){n.child.return=n,n=n.child;continue}if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var _h=[];function Af(){for(var e=0;e<_h.length;e++)_h[e]._workInProgressVersionPrimary=null;_h.length=0}var Zd=Gi.ReactCurrentDispatcher,Lh=Gi.ReactCurrentBatchConfig,sa=0,on=null,yn=null,Nn=null,_c=!1,Ps=!1,nl=0,JI=0;function Ln(){throw Error(H(321))}function Cf(e,n){if(n===null)return!1;for(var t=0;t<n.length&&t<e.length;t++)if(!Qt(e[t],n[t]))return!1;return!0}function Ef(e,n,t,i,a,o){if(sa=o,on=n,n.memoizedState=null,n.updateQueue=null,n.lanes=0,Zd.current=e===null||e.memoizedState===null?tP:iP,e=t(i,a),Ps){o=0;do{if(Ps=!1,nl=0,25<=o)throw Error(H(301));o+=1,Nn=yn=null,n.updateQueue=null,Zd.current=rP,e=t(i,a)}while(Ps)}if(Zd.current=Lc,n=yn!==null&&yn.next!==null,sa=0,Nn=yn=on=null,_c=!1,n)throw Error(H(300));return e}function Nf(){var e=nl!==0;return nl=0,e}function si(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Nn===null?on.memoizedState=Nn=e:Nn=Nn.next=e,Nn}function Mt(){if(yn===null){var e=on.alternate;e=e!==null?e.memoizedState:null}else e=yn.next;var n=Nn===null?on.memoizedState:Nn.next;if(n!==null)Nn=n,yn=e;else{if(e===null)throw Error(H(310));yn=e,e={memoizedState:yn.memoizedState,baseState:yn.baseState,baseQueue:yn.baseQueue,queue:yn.queue,next:null},Nn===null?on.memoizedState=Nn=e:Nn=Nn.next=e}return Nn}function tl(e,n){return typeof n=="function"?n(e):n}function Wh(e){var n=Mt(),t=n.queue;if(t===null)throw Error(H(311));t.lastRenderedReducer=e;var i=yn,a=i.baseQueue,o=t.pending;if(o!==null){if(a!==null){var s=a.next;a.next=o.next,o.next=s}i.baseQueue=a=o,t.pending=null}if(a!==null){o=a.next,i=i.baseState;var l=s=null,d=null,c=o;do{var u=c.lane;if((sa&u)===u)d!==null&&(d=d.next={lane:0,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null}),i=c.hasEagerState?c.eagerState:e(i,c.action);else{var h={lane:u,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null};d===null?(l=d=h,s=i):d=d.next=h,on.lanes|=u,la|=u}c=c.next}while(c!==null&&c!==o);d===null?s=i:d.next=l,Qt(i,n.memoizedState)||(tt=!0),n.memoizedState=i,n.baseState=s,n.baseQueue=d,t.lastRenderedState=i}if(e=t.interleaved,e!==null){a=e;do o=a.lane,on.lanes|=o,la|=o,a=a.next;while(a!==e)}else a===null&&(t.lanes=0);return[n.memoizedState,t.dispatch]}function Vh(e){var n=Mt(),t=n.queue;if(t===null)throw Error(H(311));t.lastRenderedReducer=e;var i=t.dispatch,a=t.pending,o=n.memoizedState;if(a!==null){t.pending=null;var s=a=a.next;do o=e(o,s.action),s=s.next;while(s!==a);Qt(o,n.memoizedState)||(tt=!0),n.memoizedState=o,n.baseQueue===null&&(n.baseState=o),t.lastRenderedState=o}return[o,i]}function Hj(){}function Uj(e,n){var t=on,i=Mt(),a=n(),o=!Qt(i.memoizedState,a);if(o&&(i.memoizedState=a,tt=!0),i=i.queue,If(Zj.bind(null,t,i,e),[e]),i.getSnapshot!==n||o||Nn!==null&&Nn.memoizedState.tag&1){if(t.flags|=2048,il(9,$j.bind(null,t,i,a,n),void 0,null),In===null)throw Error(H(349));sa&30||Gj(t,n,a)}return a}function Gj(e,n,t){e.flags|=16384,e={getSnapshot:n,value:t},n=on.updateQueue,n===null?(n={lastEffect:null,stores:null},on.updateQueue=n,n.stores=[e]):(t=n.stores,t===null?n.stores=[e]:t.push(e))}
vendor: 4,351 bytes, line 38
38function $j(e,n,t,i){n.value=t,n.getSnapshot=i,Yj(n)&&Qj(e)}function Zj(e,n,t){return t(function(){Yj(n)&&Qj(e)})}function Yj(e){var n=e.getSnapshot;e=e.value;try{var t=n();return!Qt(e,t)}catch{return!0}}function Qj(e){var n=Ki(e,1);n!==null&&Zt(n,e,1,-1)}function mk(e){var n=si();return typeof e=="function"&&(e=e()),n.memoizedState=n.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:tl,lastRenderedState:e},n.queue=e,e=e.dispatch=nP.bind(null,on,e),[n.memoizedState,e]}function il(e,n,t,i){return e={tag:e,create:n,destroy:t,deps:i,next:null},n=on.updateQueue,n===null?(n={lastEffect:null,stores:null},on.updateQueue=n,n.lastEffect=e.next=e):(t=n.lastEffect,t===null?n.lastEffect=e.next=e:(i=t.next,t.next=e,e.next=i,n.lastEffect=e)),e}function Jj(){return Mt().memoizedState}function Yd(e,n,t,i){var a=si();on.flags|=e,a.memoizedState=il(1|n,t,void 0,i===void 0?null:i)}function Su(e,n,t,i){var a=Mt();i=i===void 0?null:i;var o=void 0;if(yn!==null){var s=yn.memoizedState;if(o=s.destroy,i!==null&&Cf(i,s.deps)){a.memoizedState=il(n,t,o,i);return}}on.flags|=e,a.memoizedState=il(1|n,t,o,i)}function pk(e,n){return Yd(8390656,8,e,n)}function If(e,n){return Su(2048,8,e,n)}function Xj(e,n){return Su(4,2,e,n)}function e1(e,n){return Su(4,4,e,n)}function n1(e,n){if(typeof n=="function")return e=e(),n(e),function(){n(null)};if(n!=null)return e=e(),n.current=e,function(){n.current=null}}function t1(e,n,t){return t=t!=null?t.concat([e]):null,Su(4,4,n1.bind(null,n,e),t)}function Pf(){}function i1(e,n){var t=Mt();n=n===void 0?null:n;var i=t.memoizedState;return i!==null&&n!==null&&Cf(n,i[1])?i[0]:(t.memoizedState=[e,n],e)}function r1(e,n){var t=Mt();n=n===void 0?null:n;var i=t.memoizedState;return i!==null&&n!==null&&Cf(n,i[1])?i[0]:(e=e(),t.memoizedState=[e,n],e)}function a1(e,n,t){return sa&21?(Qt(t,n)||(t=cj(),on.lanes|=t,la|=t,e.baseState=!0),n):(e.baseState&&(e.baseState=!1,tt=!0),e.memoizedState=t)}function XI(e,n){var t=Ve;Ve=t!==0&&4>t?t:4,e(!0);var i=Lh.transition;Lh.transition={};try{e(!1),n()}finally{Ve=t,Lh.transition=i}}function o1(){return Mt().memoizedState}function eP(e,n,t){var i=vr(e);if(t={lane:i,action:t,hasEagerState:!1,eagerState:null,next:null},s1(e))l1(n,t);else if(t=Vj(e,n,t,i),t!==null){var a=Zn();Zt(t,e,i,a),d1(t,n,i)}}function nP(e,n,t){var i=vr(e),a={lane:i,action:t,hasEagerState:!1,eagerState:null,next:null};if(s1(e))l1(n,a);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=n.lastRenderedReducer,o!==null))try{var s=n.lastRenderedState,l=o(s,t);if(a.hasEagerState=!0,a.eagerState=l,Qt(l,s)){var d=n.interleaved;d===null?(a.next=a,yf(n)):(a.next=d.next,d.next=a),n.interleaved=a;return}}catch{}finally{}t=Vj(e,n,a,i),t!==null&&(a=Zn(),Zt(t,e,i,a),d1(t,n,i))}}function s1(e){var n=e.alternate;return e===on||n!==null&&n===on}function l1(e,n){Ps=_c=!0;var t=e.pending;t===null?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function d1(e,n,t){if(t&4194240){var i=n.lanes;i&=e.pendingLanes,t|=i,n.lanes=t,lf(e,t)}}var Lc={readContext:Bt,useCallback:Ln,useContext:Ln,useEffect:Ln,useImperativeHandle:Ln,useInsertionEffect:Ln,useLayoutEffect:Ln,useMemo:Ln,useReducer:Ln,useRef:Ln,useState:Ln,useDebugValue:Ln,useDeferredValue:Ln,useTransition:Ln,useMutableSource:Ln,useSyncExternalStore:Ln,useId:Ln,unstable_isNewReconciler:!1},tP={readContext:Bt,useCallback:function(e,n){return si().memoizedState=[e,n===void 0?null:n],e},useContext:Bt,useEffect:pk,useImperativeHandle:function(e,n,t){return t=t!=null?t.concat([e]):null,Yd(4194308,4,n1.bind(null,n,e),t)},useLayoutEffect:function(e,n){return Yd(4194308,4,e,n)},useInsertionEffect:function(e,n){return Yd(4,2,e,n)},useMemo:function(e,n){var t=si();return n=n===void 0?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var i=si();return n=t!==void 0?t(n):n,i.memoizedState=i.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},i.queue=e,e=e.dispatch=eP.bind(null,on,e),[i.memoizedState,e]},useRef:function(e){var n=si();return e={current:e},n.memoizedState=e},useState:mk,useDebugValue:Pf,useDeferredValue:function(e){return si().memoizedState=e},useTransition:function(){var e=mk(!1),n=e[0];return e=XI.bind(null,e[1]),si().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,t){var i=on,a=si();
vendor: 5,463 bytes, lines 38-40
38if(tn){if(t===void 0)throw Error(H(407));t=t()}else{if(t=n(),In===null)throw Error(H(349));sa&30||Gj(i,n,t)}a.memoizedState=t;var o={value:t,getSnapshot:n};return a.queue=o,pk(Zj.bind(null,i,o,e),[e]),i.flags|=2048,il(9,$j.bind(null,i,o,t,n),void 0,null),t},useId:function(){var e=si(),n=In.identifierPrefix;if(tn){var t=Mi,i=Bi;t=(i&~(1<<32-$t(i)-1)).toString(32)+t,n=":"+n+"R"+t,t=nl++,0<t&&(n+="H"+t.toString(32)),n+=":"}else t=JI++,n=":"+n+"r"+t.toString(32)+":";return e.memoizedState=n},unstable_isNewReconciler:!1},iP={readContext:Bt,useCallback:i1,useContext:Bt,useEffect:If,useImperativeHandle:t1,useInsertionEffect:Xj,useLayoutEffect:e1,useMemo:r1,useReducer:Wh,useRef:Jj,useState:function(){return Wh(tl)},useDebugValue:Pf,useDeferredValue:function(e){var n=Mt();return a1(n,yn.memoizedState,e)},useTransition:function(){var e=Wh(tl)[0],n=Mt().memoizedState;return[e,n]},useMutableSource:Hj,useSyncExternalStore:Uj,useId:o1,unstable_isNewReconciler:!1},rP={readContext:Bt,useCallback:i1,useContext:Bt,useEffect:If,useImperativeHandle:t1,useInsertionEffect:Xj,useLayoutEffect:e1,useMemo:r1,useReducer:Vh,useRef:Jj,useState:function(){return Vh(tl)},useDebugValue:Pf,useDeferredValue:function(e){var n=Mt();return yn===null?n.memoizedState=e:a1(n,yn.memoizedState,e)},useTransition:function(){var e=Vh(tl)[0],n=Mt().memoizedState;return[e,n]},useMutableSource:Hj,useSyncExternalStore:Uj,useId:o1,unstable_isNewReconciler:!1};function Vt(e,n){if(e&&e.defaultProps){n=sn({},n),e=e.defaultProps;for(var t in e)n[t]===void 0&&(n[t]=e[t]);return n}return n}function Pm(e,n,t,i){n=e.memoizedState,t=t(i,n),t=t==null?n:sn({},n,t),e.memoizedState=t,e.lanes===0&&(e.updateQueue.baseState=t)}var zu={isMounted:function(e){return(e=e._reactInternals)?pa(e)===e:!1},enqueueSetState:function(e,n,t){e=e._reactInternals;var i=Zn(),a=vr(e),o=Oi(i,a);o.payload=n,t!=null&&(o.callback=t),n=fr(e,o,a),n!==null&&(Zt(n,e,a,i),$d(n,e,a))},enqueueReplaceState:function(e,n,t){e=e._reactInternals;var i=Zn(),a=vr(e),o=Oi(i,a);o.tag=1,o.payload=n,t!=null&&(o.callback=t),n=fr(e,o,a),n!==null&&(Zt(n,e,a,i),$d(n,e,a))},enqueueForceUpdate:function(e,n){e=e._reactInternals;var t=Zn(),i=vr(e),a=Oi(t,i);a.tag=2,n!=null&&(a.callback=n),n=fr(e,a,i),n!==null&&(Zt(n,e,i,t),$d(n,e,i))}};function fk(e,n,t,i,a,o,s){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(i,o,s):n.prototype&&n.prototype.isPureReactComponent?!Zs(t,i)||!Zs(a,o):!0}function c1(e,n,t){var i=!1,a=xr,o=n.contextType;return typeof o=="object"&&o!==null?o=Bt(o):(a=rt(n)?aa:Kn.current,i=n.contextTypes,o=(i=i!=null)?oo(e,a):xr),n=new n(t,o),e.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,n.updater=zu,e.stateNode=n,n._reactInternals=e,i&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),n}function bk(e,n,t,i){e=n.state,typeof n.componentWillReceiveProps=="function"&&n.componentWillReceiveProps(t,i),typeof n.UNSAFE_componentWillReceiveProps=="function"&&n.UNSAFE_componentWillReceiveProps(t,i),n.state!==e&&zu.enqueueReplaceState(n,n.state,null)}function Tm(e,n,t,i){var a=e.stateNode;a.props=t,a.state=e.memoizedState,a.refs={},jf(e);var o=n.contextType;typeof o=="object"&&o!==null?a.context=Bt(o):(o=rt(n)?aa:Kn.current,a.context=oo(e,o)),a.state=e.memoizedState,o=n.getDerivedStateFromProps,typeof o=="function"&&(Pm(e,n,o,t),a.state=e.memoizedState),typeof n.getDerivedStateFromProps=="function"||typeof a.getSnapshotBeforeUpdate=="function"||typeof a.UNSAFE_componentWillMount!="function"&&typeof a.componentWillMount!="function"||(n=a.state,typeof a.componentWillMount=="function"&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount=="function"&&a.UNSAFE_componentWillMount(),n!==a.state&&zu.enqueueReplaceState(a,a.state,null),Rc(e,t,a,i),a.state=e.memoizedState),typeof a.componentDidMount=="function"&&(e.flags|=4194308)}function uo(e,n){try{var t="",i=n;do t+=TN(i),i=i.return;while(i);var a=t}catch(o){a=`
39Error generating stack: `+o.message+`
40`+o.stack}return{value:e,source:n,stack:a,digest:null}}function Kh(e,n,t){return{value:e,source:null,stack:t??null,digest:n??null}}function Dm(e,n){try{console.error(n.value)}catch(t){setTimeout(function(){throw t})}}var aP=typeof WeakMap=="function"?WeakMap:Map;function u1(e,n,t){t=Oi(-1,t),t.tag=3,t.payload={element:null};var i=n.value;return t.callback=function(){Vc||(Vc=!0,Km=i),Dm(e,n)},t}function h1(e,n,t){t=Oi(-1,t),t.tag=3;var i=e.type.getDerivedStateFromError;if(typeof i=="function"){var a=n.value;t.payload=function(){return i(a)},t.callback=function(){Dm(e,n)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(t.callback=function(){Dm(e,n),typeof i!="function"&&(br===null?br=new Set([this]):br.add(this));var s=n.stack;this.componentDidCatch(n.value,{componentStack:s!==null?s:""})}),t}function vk(e,n,t){var i=e.pingCache;if(i===null){i=e.pingCache=new aP;var a=new Set;i.set(n,a)}else a=i.get(n),a===void 0&&(a=new Set,i.set(n,a));a.has(t)||(a.add(t),e=kP.bind(null,e,n,t),n.then(e,e))}function kk(e){do{var n;if((n=e.tag===13)&&(n=e.memoizedState,n=n!==null?n.dehydrated!==null:!0),n)return e;e=e.return}while(e!==null);return null}function wk(e,n,t,i,a){return e.mode&1?(e.flags|=65536,e.lanes=a,e):(e===n?e.flags|=65536:(e.flags|=128,t.flags|=131072,t.flags&=-52805,t.tag===1&&(t.alternate===null?t.tag=17:(n=Oi(-1,1),n.tag=2,fr(t,n,1))),t.lanes|=1),e)}var oP=Gi.ReactCurrentOwner,tt=!1;
vendor: 10,313 bytes, line 40
40function Hn(e,n,t,i){n.child=e===null?Wj(n,null,t,i):lo(n,e.child,t,i)}function xk(e,n,t,i,a){t=t.render;var o=n.ref;return Xa(n,a),i=Ef(e,n,t,i,o,a),t=Nf(),e!==null&&!tt?(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~a,qi(e,n,a)):(tn&&t&&ff(n),n.flags|=1,Hn(e,n,i,a),n.child)}function yk(e,n,t,i,a){if(e===null){var o=t.type;return typeof o=="function"&&!_f(o)&&o.defaultProps===void 0&&t.compare===null&&t.defaultProps===void 0?(n.tag=15,n.type=o,g1(e,n,o,i,a)):(e=ec(t.type,null,i,n,n.mode,a),e.ref=n.ref,e.return=n,n.child=e)}if(o=e.child,!(e.lanes&a)){var s=o.memoizedProps;if(t=t.compare,t=t!==null?t:Zs,t(s,i)&&e.ref===n.ref)return qi(e,n,a)}return n.flags|=1,e=kr(o,i),e.ref=n.ref,e.return=n,n.child=e}function g1(e,n,t,i,a){if(e!==null){var o=e.memoizedProps;if(Zs(o,i)&&e.ref===n.ref)if(tt=!1,n.pendingProps=i=o,(e.lanes&a)!==0)e.flags&131072&&(tt=!0);else return n.lanes=e.lanes,qi(e,n,a)}return Bm(e,n,t,i,a)}function m1(e,n,t){var i=n.pendingProps,a=i.children,o=e!==null?e.memoizedState:null;if(i.mode==="hidden")if(!(n.mode&1))n.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ze(Ka,ut),ut|=t;else{if(!(t&1073741824))return e=o!==null?o.baseLanes|t:t,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null,transitions:null},n.updateQueue=null,Ze(Ka,ut),ut|=e,null;n.memoizedState={baseLanes:0,cachePool:null,transitions:null},i=o!==null?o.baseLanes:t,Ze(Ka,ut),ut|=i}else o!==null?(i=o.baseLanes|t,n.memoizedState=null):i=t,Ze(Ka,ut),ut|=i;return Hn(e,n,a,t),n.child}function p1(e,n){var t=n.ref;(e===null&&t!==null||e!==null&&e.ref!==t)&&(n.flags|=512,n.flags|=2097152)}function Bm(e,n,t,i,a){var o=rt(t)?aa:Kn.current;return o=oo(n,o),Xa(n,a),t=Ef(e,n,t,i,o,a),i=Nf(),e!==null&&!tt?(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~a,qi(e,n,a)):(tn&&i&&ff(n),n.flags|=1,Hn(e,n,t,a),n.child)}function jk(e,n,t,i,a){if(rt(t)){var o=!0;Tc(n)}else o=!1;if(Xa(n,a),n.stateNode===null)Qd(e,n),c1(n,t,i),Tm(n,t,i,a),i=!0;else if(e===null){var s=n.stateNode,l=n.memoizedProps;s.props=l;var d=s.context,c=t.contextType;typeof c=="object"&&c!==null?c=Bt(c):(c=rt(t)?aa:Kn.current,c=oo(n,c));var u=t.getDerivedStateFromProps,h=typeof u=="function"||typeof s.getSnapshotBeforeUpdate=="function";h||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(l!==i||d!==c)&&bk(n,s,i,c),ir=!1;var g=n.memoizedState;s.state=g,Rc(n,i,s,a),d=n.memoizedState,l!==i||g!==d||it.current||ir?(typeof u=="function"&&(Pm(n,t,u,i),d=n.memoizedState),(l=ir||fk(n,t,l,i,g,d,c))?(h||typeof s.UNSAFE_componentWillMount!="function"&&typeof s.componentWillMount!="function"||(typeof s.componentWillMount=="function"&&s.componentWillMount(),typeof s.UNSAFE_componentWillMount=="function"&&s.UNSAFE_componentWillMount()),typeof s.componentDidMount=="function"&&(n.flags|=4194308)):(typeof s.componentDidMount=="function"&&(n.flags|=4194308),n.memoizedProps=i,n.memoizedState=d),s.props=i,s.state=d,s.context=c,i=l):(typeof s.componentDidMount=="function"&&(n.flags|=4194308),i=!1)}else{s=n.stateNode,Kj(e,n),l=n.memoizedProps,c=n.type===n.elementType?l:Vt(n.type,l),s.props=c,h=n.pendingProps,g=s.context,d=t.contextType,typeof d=="object"&&d!==null?d=Bt(d):(d=rt(t)?aa:Kn.current,d=oo(n,d));var m=t.getDerivedStateFromProps;(u=typeof m=="function"||typeof s.getSnapshotBeforeUpdate=="function")||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(l!==h||g!==d)&&bk(n,s,i,d),ir=!1,g=n.memoizedState,s.state=g,Rc(n,i,s,a);var p=n.memoizedState;l!==h||g!==p||it.current||ir?(typeof m=="function"&&(Pm(n,t,m,i),p=n.memoizedState),(c=ir||fk(n,t,c,i,g,p,d)||!1)?(u||typeof s.UNSAFE_componentWillUpdate!="function"&&typeof s.componentWillUpdate!="function"||(typeof s.componentWillUpdate=="function"&&s.componentWillUpdate(i,p,d),typeof s.UNSAFE_componentWillUpdate=="function"&&s.UNSAFE_componentWillUpdate(i,p,d)),typeof s.componentDidUpdate=="function"&&(n.flags|=4),typeof s.getSnapshotBeforeUpdate=="function"&&(n.flags|=1024)):(typeof s.componentDidUpdate!="function"||l===e.memoizedProps&&g===e.memoizedState||(n.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||l===e.memoizedProps&&g===e.memoizedState||(n.flags|=1024),n.memoizedProps=i,n.memoizedState=p),s.props=i,s.state=p,s.context=d,i=c):(typeof s.componentDidUpdate!="function"||l===e.memoizedProps&&g===e.memoizedState||(n.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||l===e.memoizedProps&&g===e.memoizedState||(n.flags|=1024),i=!1)}return Mm(e,n,t,i,o,a)}function Mm(e,n,t,i,a,o){p1(e,n);var s=(n.flags&128)!==0;if(!i&&!s)return a&&lk(n,t,!1),qi(e,n,o);i=n.stateNode,oP.current=n;var l=s&&typeof t.getDerivedStateFromError!="function"?null:i.render();return n.flags|=1,e!==null&&s?(n.child=lo(n,e.child,null,o),n.child=lo(n,null,l,o)):Hn(e,n,l,o),n.memoizedState=i.state,a&&lk(n,t,!0),n.child}function f1(e){var n=e.stateNode;n.pendingContext?sk(e,n.pendingContext,n.pendingContext!==n.context):n.context&&sk(e,n.context,!1),Sf(e,n.containerInfo)}function Sk(e,n,t,i,a){return so(),vf(a),n.flags|=256,Hn(e,n,t,i),n.child}var Fm={dehydrated:null,treeContext:null,retryLane:0};function Rm(e){return{baseLanes:e,cachePool:null,transitions:null}}function b1(e,n,t){var i=n.pendingProps,a=an.current,o=!1,s=(n.flags&128)!==0,l;if((l=s)||(l=e!==null&&e.memoizedState===null?!1:(a&2)!==0),l?(o=!0,n.flags&=-129):(e===null||e.memoizedState!==null)&&(a|=1),Ze(an,a&1),e===null)return Nm(n),e=n.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(n.mode&1?e.data==="$!"?n.lanes=8:n.lanes=1073741824:n.lanes=1,null):(s=i.children,e=i.fallback,o?(i=n.mode,o=n.child,s={mode:"hidden",children:s},!(i&1)&&o!==null?(o.childLanes=0,o.pendingProps=s):o=Eu(s,i,0,null),e=Xr(e,i,t,null),o.return=n,e.return=n,o.sibling=e,n.child=o,n.child.memoizedState=Rm(t),n.memoizedState=Fm,e):Tf(n,s));if(a=e.memoizedState,a!==null&&(l=a.dehydrated,l!==null))return sP(e,n,s,i,l,a,t);if(o){o=i.fallback,s=n.mode,a=e.child,l=a.sibling;var d={mode:"hidden",children:i.children};return!(s&1)&&n.child!==a?(i=n.child,i.childLanes=0,i.pendingProps=d,n.deletions=null):(i=kr(a,d),i.subtreeFlags=a.subtreeFlags&14680064),l!==null?o=kr(l,o):(o=Xr(o,s,t,null),o.flags|=2),o.return=n,i.return=n,i.sibling=o,n.child=i,i=o,o=n.child,s=e.child.memoizedState,s=s===null?Rm(t):{baseLanes:s.baseLanes|t,cachePool:null,transitions:s.transitions},o.memoizedState=s,o.childLanes=e.childLanes&~t,n.memoizedState=Fm,i}return o=e.child,e=o.sibling,i=kr(o,{mode:"visible",children:i.children}),!(n.mode&1)&&(i.lanes=t),i.return=n,i.sibling=null,e!==null&&(t=n.deletions,t===null?(n.deletions=[e],n.flags|=16):t.push(e)),n.child=i,n.memoizedState=null,i}function Tf(e,n){return n=Eu({mode:"visible",children:n},e.mode,0,null),n.return=e,e.child=n}function ud(e,n,t,i){return i!==null&&vf(i),lo(n,e.child,null,t),e=Tf(n,n.pendingProps.children),e.flags|=2,n.memoizedState=null,e}function sP(e,n,t,i,a,o,s){if(t)return n.flags&256?(n.flags&=-257,i=Kh(Error(H(422))),ud(e,n,s,i)):n.memoizedState!==null?(n.child=e.child,n.flags|=128,null):(o=i.fallback,a=n.mode,i=Eu({mode:"visible",children:i.children},a,0,null),o=Xr(o,a,s,null),o.flags|=2,i.return=n,o.return=n,i.sibling=o,n.child=i,n.mode&1&&lo(n,e.child,null,s),n.child.memoizedState=Rm(s),n.memoizedState=Fm,o);if(!(n.mode&1))return ud(e,n,s,null);if(a.data==="$!"){if(i=a.nextSibling&&a.nextSibling.dataset,i)var l=i.dgst;return i=l,o=Error(H(419)),i=Kh(o,i,void 0),ud(e,n,s,i)}if(l=(s&e.childLanes)!==0,tt||l){if(i=In,i!==null){switch(s&-s){case 4:a=2;break;case 16:a=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}a=a&(i.suspendedLanes|s)?0:a,a!==0&&a!==o.retryLane&&(o.retryLane=a,Ki(e,a),Zt(i,e,a,-1))}return Of(),i=Kh(Error(H(421))),ud(e,n,s,i)}return a.data==="$?"?(n.flags|=128,n.child=e.child,n=wP.bind(null,e),a._reactRetry=n,null):(e=o.treeContext,mt=pr(a.nextSibling),pt=n,tn=!0,Gt=null,e!==null&&(At[Ct++]=Bi,At[Ct++]=Mi,At[Ct++]=oa,Bi=e.id,Mi=e.overflow,oa=n),n=Tf(n,i.children),n.flags|=4096,n)}function zk(e,n,t){e.lanes|=n;var i=e.alternate;i!==null&&(i.lanes|=n),Im(e.return,n,t)}function qh(e,n,t,i,a){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:i,tail:t,tailMode:a}:(o.isBackwards=n,o.rendering=null,o.renderingStartTime=0,o.last=i,o.tail=t,o.tailMode=a)}function v1(e,n,t){var i=n.pendingProps,a=i.revealOrder,o=i.tail;if(Hn(e,n,i.children,t),i=an.current,i&2)i=i&1|2,n.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=n.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&zk(e,t,n);else if(e.tag===19)zk(e,t,n);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===n)break e;for(;e.sibling===null;){if(e.return===null||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}i&=1}if(Ze(an,i),!(n.mode&1))n.memoizedState=null;else switch(a){case"forwards":for(t=n.child,a=null;t!==null;)e=t.alternate,e!==null&&Oc(e)===null&&(a=t),t=t.sibling;t=a,t===null?(a=n.child,n.child=null):(a=t.sibling,t.sibling=null),qh(n,!1,a,t,o);break;case"backwards":for(t=null,a=n.child,n.child=null;a!==null;){if(e=a.alternate,e!==null&&Oc(e)===null){n.child=a;break}e=a.sibling,a.sibling=t,t=a,a=e}qh(n,!0,t,null,o);break;case"together":qh(n,!1,null,null,void 0);break;default:n.memoizedState=null}return n.child}function Qd(e,n){!(n.mode&1)&&e!==null&&(e.alternate=null,n.alternate=null,n.flags|=2)}function qi(e,n,t){if(e!==null&&(n.dependencies=e.dependencies),la|=n.lanes,!(t&n.childLanes))return null;if(e!==null&&n.child!==e.child)throw Error(H(153));if(n.child!==null){for(e=n.child,t=kr(e,e.pendingProps),n.child=t,t.return=n;e.sibling!==null;)e=e.sibling,t=t.sibling=kr(e,e.pendingProps),t.return=n;t.sibling=null}return n.child}function lP(e,n,t){switch(n.tag){case 3:f1(n),so();break;case 5:qj(n);break;case 1:rt(n.type)&&Tc(n);break;case 4:Sf(n,n.stateNode.containerInfo);break;case 10:var i=n.type._context,a=n.memoizedProps.value;Ze(Mc,i._currentValue),i._currentValue=a;break;case 13:if(i=n.memoizedState,i!==null)return i.dehydrated!==null?(Ze(an,an.
vendor: 4,929 bytes, line 40
40current&1),n.flags|=128,null):t&n.child.childLanes?b1(e,n,t):(Ze(an,an.current&1),e=qi(e,n,t),e!==null?e.sibling:null);Ze(an,an.current&1);break;case 19:if(i=(t&n.childLanes)!==0,e.flags&128){if(i)return v1(e,n,t);n.flags|=128}if(a=n.memoizedState,a!==null&&(a.rendering=null,a.tail=null,a.lastEffect=null),Ze(an,an.current),i)break;return null;case 22:case 23:return n.lanes=0,m1(e,n,t)}return qi(e,n,t)}var k1,Om,w1,x1;k1=function(e,n){for(var t=n.child;t!==null;){if(t.tag===5||t.tag===6)e.appendChild(t.stateNode);else if(t.tag!==4&&t.child!==null){t.child.return=t,t=t.child;continue}if(t===n)break;for(;t.sibling===null;){if(t.return===null||t.return===n)return;t=t.return}t.sibling.return=t.return,t=t.sibling}};Om=function(){};w1=function(e,n,t,i){var a=e.memoizedProps;if(a!==i){e=n.stateNode,Gr(pi.current);var o=null;switch(t){case"input":a=om(e,a),i=om(e,i),o=[];break;case"select":a=sn({},a,{value:void 0}),i=sn({},i,{value:void 0}),o=[];break;case"textarea":a=dm(e,a),i=dm(e,i),o=[];break;default:typeof a.onClick!="function"&&typeof i.onClick=="function"&&(e.onclick=Ic)}um(t,i);var s;t=null;for(c in a)if(!i.hasOwnProperty(c)&&a.hasOwnProperty(c)&&a[c]!=null)if(c==="style"){var l=a[c];for(s in l)l.hasOwnProperty(s)&&(t||(t={}),t[s]="")}else c!=="dangerouslySetInnerHTML"&&c!=="children"&&c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&c!=="autoFocus"&&(Vs.hasOwnProperty(c)?o||(o=[]):(o=o||[]).push(c,null));for(c in i){var d=i[c];if(l=a?.[c],i.hasOwnProperty(c)&&d!==l&&(d!=null||l!=null))if(c==="style")if(l){for(s in l)!l.hasOwnProperty(s)||d&&d.hasOwnProperty(s)||(t||(t={}),t[s]="");for(s in d)d.hasOwnProperty(s)&&l[s]!==d[s]&&(t||(t={}),t[s]=d[s])}else t||(o||(o=[]),o.push(c,t)),t=d;else c==="dangerouslySetInnerHTML"?(d=d?d.__html:void 0,l=l?l.__html:void 0,d!=null&&l!==d&&(o=o||[]).push(c,d)):c==="children"?typeof d!="string"&&typeof d!="number"||(o=o||[]).push(c,""+d):c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&(Vs.hasOwnProperty(c)?(d!=null&&c==="onScroll"&&Qe("scroll",e),o||l===d||(o=[])):(o=o||[]).push(c,d))}t&&(o=o||[]).push("style",t);var c=o;(n.updateQueue=c)&&(n.flags|=4)}};x1=function(e,n,t,i){t!==i&&(n.flags|=4)};function os(e,n){if(!tn)switch(e.tailMode){case"hidden":n=e.tail;for(var t=null;n!==null;)n.alternate!==null&&(t=n),n=n.sibling;t===null?e.tail=null:t.sibling=null;break;case"collapsed":t=e.tail;for(var i=null;t!==null;)t.alternate!==null&&(i=t),t=t.sibling;i===null?n||e.tail===null?e.tail=null:e.tail.sibling=null:i.sibling=null}}function Wn(e){var n=e.alternate!==null&&e.alternate.child===e.child,t=0,i=0;if(n)for(var a=e.child;a!==null;)t|=a.lanes|a.childLanes,i|=a.subtreeFlags&14680064,i|=a.flags&14680064,a.return=e,a=a.sibling;else for(a=e.child;a!==null;)t|=a.lanes|a.childLanes,i|=a.subtreeFlags,i|=a.flags,a.return=e,a=a.sibling;return e.subtreeFlags|=i,e.childLanes=t,n}function dP(e,n,t){var i=n.pendingProps;switch(bf(n),n.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Wn(n),null;case 1:return rt(n.type)&&Pc(),Wn(n),null;case 3:return i=n.stateNode,co(),Xe(it),Xe(Kn),Af(),i.pendingContext&&(i.context=i.pendingContext,i.pendingContext=null),(e===null||e.child===null)&&(dd(n)?n.flags|=4:e===null||e.memoizedState.isDehydrated&&!(n.flags&256)||(n.flags|=1024,Gt!==null&&(Um(Gt),Gt=null))),Om(e,n),Wn(n),null;case 5:zf(n);var a=Gr(el.current);if(t=n.type,e!==null&&n.stateNode!=null)w1(e,n,t,i,a),e.ref!==n.ref&&(n.flags|=512,n.flags|=2097152);else{if(!i){if(n.stateNode===null)throw Error(H(166));return Wn(n),null}if(e=Gr(pi.current),dd(n)){i=n.stateNode,t=n.type;var o=n.memoizedProps;switch(i[ci]=n,i[Js]=o,e=(n.mode&1)!==0,t){case"dialog":Qe("cancel",i),Qe("close",i);break;case"iframe":case"object":case"embed":Qe("load",i);break;case"video":case"audio":for(a=0;a<ys.length;a++)Qe(ys[a],i);break;case"source":Qe("error",i);break;case"img":case"image":case"link":Qe("error",i),Qe("load",i);break;case"details":Qe("toggle",i);break;case"input":Bv(i,o),Qe("invalid",i);break;case"select":i._wrapperState={wasMultiple:!!o.multiple},Qe("invalid",i);break;case"textarea":Fv(i,o),Qe("invalid",i)}um(t,o),a=null;for(var s in o)if(o.hasOwnProperty(s)){var l=o[s];s==="children"?typeof l=="string"?i.textContent!==l&&(o.suppressHydrationWarning!==!0&&ld(i.textContent,l,e),a=["children",l]):typeof l=="number"&&i.textContent!==""+l&&(o.suppressHydrationWarning!==!0&&ld(i.textContent,l,e),a=["children",""+l]):Vs.hasOwnProperty(s)&&l!=null&&s==="onScroll"&&Qe("scroll",i)}switch(t){case"input":ed(i),Mv(i,o,!0);break;case"textarea":ed(i),Rv(i);break;case"select":case"option":break;default:typeof o.onClick=="function"&&(i.onclick=Ic)}i=a,n.updateQueue=i,i!==null&&(n.flags|=4)}else{s=a.nodeType===9?a:a.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=Z0(t)),e==="http://www.w3.org/1999/xhtml"?t==="script"?(e=s.createElement("div"),e.innerHTML="<script><\/script>
40",e=e.removeChild(e.firstChild)):typeof i.is=="string"?e=s.createElement(t,{is:i.is}):(e=s.createElement(t),t==="select"&&(s=e,i.multiple?s.multiple=!0:i.size&&(s.size=i.size))):e=s.createElementNS(e,t),e[ci]=n,e[Js]=i,k1(e,n,!1,!1),n.stateNode=e;e:{switch(s=hm(t,i),t){case"dialog":Qe("cancel",e),Qe("close",e),a=i;break;case"iframe":case"object":case"embed":Qe("load",e),a=i;break;case"video":case"audio":for(a=0;a<ys.length;a++)Qe(ys[a],e);a=i;break;case"source":Qe("error",e),a=i;break;case"img":case"image":case"link":Qe("error",e),Qe("load",e),a=i;break;case"details":Qe("toggle",e),a=i;break;case"input":Bv(e,i),a=om(e,i),Qe("invalid",e);break;case"option":a=i;break;case"select":e._wrapperState={wasMultiple:!!i.multiple},a=sn({},i,{value:void 0}),Qe("invalid",e);break;case"textarea":Fv(e,i),a=dm(e,i),Qe("invalid",e);break;default:a=i}um(t,a),l=a;for(o in l)if(l.hasOwnProperty(o)){var d=l[o];o==="style"?J0(e,d):o==="dangerouslySetInnerHTML"?(d=d?d.__html:void 0,d!=null&&Y0(e,d)):o==="children"?typeof d=="string"?(t!=="textarea"||d!=="")&&Ks(e,d):typeof d=="number"&&Ks(e,""+d):o!=="suppressContentEditableWarning"&&o!=="suppressHydrationWarning"&&o!=="autoFocus"&&(Vs.hasOwnProperty(o)?d!=null&&o==="onScroll"&&Qe("scroll",e):d!=null&&nf(e,o,d,s))}switch(t){case"input":ed(e),Mv(e,i,!1);break;case"textarea":ed(e),Rv(e);break;case"option":i.value!=null&&e.setAttribute("value",""+wr(i.value));break;case"select":e.multiple=!!i.multiple,o=i.value,o!=null?Za(e,!!i.multiple,o,!1):i.defaultValue!=null&&Za(e,!!i.multiple,i.defaultValue,!0);break;default:typeof a.onClick=="function"&&(e.onclick=Ic)}switch(t){case"button":case"input":case"select":case"textarea":i=!!i.autoFocus;break e;case"img":i=!0;break e;default:i=!1}}i&&(n.flags|=4)}n.ref!==null&&(n.flags|=512,n.flags|=2097152)}return Wn(n),null;case 6:if(e&&n.stateNode!=null)x1(e,n,e.memoizedProps,i);else{if(typeof i!="string"&&n.stateNode===null)throw Error(H(166));if(t=Gr(el.current),Gr(pi.current),dd(n)){if(i=n.stateNode,t=n.memoizedProps,i[ci]=n,(o=i.nodeValue!==t)&&(e=pt,e!==null))switch(e.tag){case 3:ld(i.nodeValue,t,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&ld(i.nodeValue,t,(e.mode&1)!==0)}o&&(n.flags|=4)}else i=(t.nodeType===9?t:t.ownerDocument).createTextNode(i),i[ci]=n,n.stateNode=i}return Wn(n),null;case 13:if(Xe(an),i=n.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(tn&&mt!==null&&n.mode&1&&!(n.flags&128))_j(),so(),n.flags|=98560,o=!1;else if(o=dd(n),i!==null&&i.dehydrated!==null){if(e===null){if(!o)throw Error(H(318));if(o=n.memoizedState,o=o!==null?o.dehydrated:null,!o)throw Error(H(317));o[ci]=n}else so(),!(n.flags&128)&&(n.memoizedState=null),n.flags|=4;Wn(n),o=!1}else Gt!==null&&(Um(Gt),Gt=null),o=!0;if(!o)return n.flags&65536?n:null}return n.flags&128?(n.lanes=t,n):(i=i!==null,i!==(e!==null&&e.memoizedState!==null)&&i&&(n.child.flags|=8192,n.mode&1&&(e===null||an.current&1?Sn===0&&(Sn=3):Of())),n.updateQueue!==null&&(n.flags|=4),Wn(n),null);case 4:return co(),Om(e,n),e===null&&Ys(n.stateNode.containerInfo),Wn(n),null;case 10:return xf(n.type._context),Wn(n),null;case 17:return rt(n.type)&&Pc(),Wn(n),null;case 19:if(Xe(an),o=n.memoizedState,o===null)return Wn(n),null;if(i=(n.flags&128)!==0,s=o.rendering,s===null)if(i)os(o,!1);else{if(Sn!==0||e!==null&&e.flags&128)for(e=n.child;e!==null;){if(s=Oc(e),s!==null){for(n.flags|=128,os(o,!1),i=s.updateQueue,i!==null&&(n.updateQueue=i,n.flags|=4),n.subtreeFlags=0,i=t,t=n.child;t!==null;)o=t,e=i,o.flags&=14680066,s=o.alternate,s===null?(o.childLanes=0,o.lanes=e,o.child=null,o.subtreeFlags=0,o.memoizedProps=null,o.memoizedState=null,o.updateQueue=null,o.dependencies=null,o.stateNode=null):(o.childLanes=s.childLanes,o.lanes=s.lanes,o.child=s.child,o.subtreeFlags=0,o.deletions=null,o.memoizedProps=s.memoizedProps,o.memoizedState=s.memoizedState,o.updateQueue=s.updateQueue,o.type=s.type,e=s.dependencies,o.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),t=t.sibling;return Ze(an,an.current&1|2),n.child}e=e.sibling}o.tail!==null&&mn()>ho&&(n.flags|=128,i=!0,os(o,!1),n.lanes=4194304)}else{if(!i)if(e=Oc(s),e!==null){if(n.flags|=128,i=!0,t=e.updateQueue,t!==null&&(n.updateQueue=t,n.flags|=4),os(o,!0),o.tail===null&&o.tailMode==="hidden"&&!s.alternate&&!tn)return Wn(n),null}else 2*mn()-o.renderingStartTime>ho&&t!==1073741824&&(n.flags|=128,i=!0,os(o,!1),n.lanes=4194304);o.isBackwards?(s.sibling=n.child,n.child=s):(t=o.last,t!==null?t.sibling=s:n.child=s,o.last=s)}return o.tail!==null?(n=o.tail,o.rendering=n,o.tail=n.sibling,o.renderingStartTime=mn(),n.sibling=null,t=an.current,Ze(an,i?t&1|2:t&1),n):(Wn(n),null);case 22:case 23:return Rf(),i=n.memoizedState!==null,e!==null&&e.memoizedState!==null!==i&&(n.flags|=8192),i&&n.mode&1?ut&1073741824&&(Wn(n),n.subtreeFlags&6&&(n.flags|=8192)):Wn(n),null;case 24:return null;case 25:return null}throw Error(H(156,n.tag))}function cP(e,n){switch(bf(n),n.tag){case 1:return rt(n.type)&&Pc(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;
vendor: 24,774 bytes, line 40
40case 3:return co(),Xe(it),Xe(Kn),Af(),e=n.flags,e&65536&&!(e&128)?(n.flags=e&-65537|128,n):null;case 5:return zf(n),null;case 13:if(Xe(an),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(H(340));so()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return Xe(an),null;case 4:return co(),null;case 10:return xf(n.type._context),null;case 22:case 23:return Rf(),null;case 24:return null;default:return null}}var hd=!1,Vn=!1,uP=typeof WeakSet=="function"?WeakSet:Set,ee=null;function Va(e,n){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(i){un(e,n,i)}else t.current=null}function _m(e,n,t){try{t()}catch(i){un(e,n,i)}}var Ak=!1;function hP(e,n){if(ym=Cc,e=Aj(),pf(e)){if("selectionStart"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{t=(t=e.ownerDocument)&&t.defaultView||window;var i=t.getSelection&&t.getSelection();if(i&&i.rangeCount!==0){t=i.anchorNode;var a=i.anchorOffset,o=i.focusNode;i=i.focusOffset;try{t.nodeType,o.nodeType}catch{t=null;break e}var s=0,l=-1,d=-1,c=0,u=0,h=e,g=null;n:for(;;){for(var m;h!==t||a!==0&&h.nodeType!==3||(l=s+a),h!==o||i!==0&&h.nodeType!==3||(d=s+i),h.nodeType===3&&(s+=h.nodeValue.length),(m=h.firstChild)!==null;)g=h,h=m;for(;;){if(h===e)break n;if(g===t&&++c===a&&(l=s),g===o&&++u===i&&(d=s),(m=h.nextSibling)!==null)break;h=g,g=h.parentNode}h=m}t=l===-1||d===-1?null:{start:l,end:d}}else t=null}t=t||{start:0,end:0}}else t=null;for(jm={focusedElem:e,selectionRange:t},Cc=!1,ee=n;ee!==null;)if(n=ee,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,ee=e;else for(;ee!==null;){n=ee;try{var p=n.alternate;if(n.flags&1024)switch(n.tag){case 0:case 11:case 15:break;case 1:if(p!==null){var f=p.memoizedProps,w=p.memoizedState,k=n.stateNode,v=k.getSnapshotBeforeUpdate(n.elementType===n.type?f:Vt(n.type,f),w);k.__reactInternalSnapshotBeforeUpdate=v}break;case 3:var x=n.stateNode.containerInfo;x.nodeType===1?x.textContent="":x.nodeType===9&&x.documentElement&&x.removeChild(x.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(H(163))}}catch(y){un(n,n.return,y)}if(e=n.sibling,e!==null){e.return=n.return,ee=e;break}ee=n.return}return p=Ak,Ak=!1,p}function Ts(e,n,t){var i=n.updateQueue;if(i=i!==null?i.lastEffect:null,i!==null){var a=i=i.next;do{if((a.tag&e)===e){var o=a.destroy;a.destroy=void 0,o!==void 0&&_m(n,t,o)}a=a.next}while(a!==i)}}function Au(e,n){if(n=n.updateQueue,n=n!==null?n.lastEffect:null,n!==null){var t=n=n.next;do{if((t.tag&e)===e){var i=t.create;t.destroy=i()}t=t.next}while(t!==n)}}function Lm(e){var n=e.ref;if(n!==null){var t=e.stateNode;switch(e.tag){case 5:e=t;break;default:e=t}typeof n=="function"?n(e):n.current=e}}function y1(e){var n=e.alternate;n!==null&&(e.alternate=null,y1(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[ci],delete n[Js],delete n[Am],delete n[$I],delete n[ZI])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function j1(e){return e.tag===5||e.tag===3||e.tag===4}function Ck(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||j1(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Wm(e,n,t){var i=e.tag;if(i===5||i===6)e=e.stateNode,n?t.nodeType===8?t.parentNode.insertBefore(e,n):t.insertBefore(e,n):(t.nodeType===8?(n=t.parentNode,n.insertBefore(e,t)):(n=t,n.appendChild(e)),t=t._reactRootContainer,t!=null||n.onclick!==null||(n.onclick=Ic));else if(i!==4&&(e=e.child,e!==null))for(Wm(e,n,t),e=e.sibling;e!==null;)Wm(e,n,t),e=e.sibling}function Vm(e,n,t){var i=e.tag;if(i===5||i===6)e=e.stateNode,n?t.insertBefore(e,n):t.appendChild(e);else if(i!==4&&(e=e.child,e!==null))for(Vm(e,n,t),e=e.sibling;e!==null;)Vm(e,n,t),e=e.sibling}var Tn=null,qt=!1;function Yi(e,n,t){for(t=t.child;t!==null;)S1(e,n,t),t=t.sibling}function S1(e,n,t){if(mi&&typeof mi.onCommitFiberUnmount=="function")try{mi.onCommitFiberUnmount(vu,t)}catch{}switch(t.tag){case 5:Vn||Va(t,n);case 6:var i=Tn,a=qt;Tn=null,Yi(e,n,t),Tn=i,qt=a,Tn!==null&&(qt?(e=Tn,t=t.stateNode,e.nodeType===8?e.parentNode.removeChild(t):e.removeChild(t)):Tn.removeChild(t.stateNode));break;case 18:Tn!==null&&(qt?(e=Tn,t=t.stateNode,e.nodeType===8?Rh(e.parentNode,t):e.nodeType===1&&Rh(e,t),Gs(e)):Rh(Tn,t.stateNode));break;case 4:i=Tn,a=qt,Tn=t.stateNode.containerInfo,qt=!0,Yi(e,n,t),Tn=i,qt=a;break;case 0:case 11:case 14:case 15:if(!Vn&&(i=t.updateQueue,i!==null&&(i=i.lastEffect,i!==null))){a=i=i.next;do{var o=a,s=o.destroy;o=o.tag,s!==void 0&&(o&2||o&4)&&_m(t,n,s),a=a.next}while(a!==i)}Yi(e,n,t);break;case 1:if(!Vn&&(Va(t,n),i=t.stateNode,typeof i.componentWillUnmount=="function"))try{i.props=t.memoizedProps,i.state=t.memoizedState,i.componentWillUnmount()}catch(l){un(t,n,l)}Yi(e,n,t);break;case 21:Yi(e,n,t);break;case 22:t.mode&1?(Vn=(i=Vn)||t.memoizedState!==null,Yi(e,n,t),Vn=i):Yi(e,n,t);break;default:Yi(e,n,t)}}function Ek(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var t=e.stateNode;t===null&&(t=e.stateNode=new uP),n.forEach(function(i){var a=xP.bind(null,e,i);t.has(i)||(t.add(i),i.then(a,a))})}}function Ot(e,n){var t=n.deletions;if(t!==null)for(var i=0;i<t.length;i++){var a=t[i];try{var o=e,s=n,l=s;e:for(;l!==null;){switch(l.tag){case 5:Tn=l.stateNode,qt=!1;break e;case 3:Tn=l.stateNode.containerInfo,qt=!0;break e;case 4:Tn=l.stateNode.containerInfo,qt=!0;break e}l=l.return}if(Tn===null)throw Error(H(160));S1(o,s,a),Tn=null,qt=!1;var d=a.alternate;d!==null&&(d.return=null),a.return=null}catch(c){un(a,n,c)}}if(n.subtreeFlags&12854)for(n=n.child;n!==null;)z1(n,e),n=n.sibling}function z1(e,n){var t=e.alternate,i=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(Ot(n,e),oi(e),i&4){try{Ts(3,e,e.return),Au(3,e)}catch(f){un(e,e.return,f)}try{Ts(5,e,e.return)}catch(f){un(e,e.return,f)}}break;case 1:Ot(n,e),oi(e),i&512&&t!==null&&Va(t,t.return);break;case 5:if(Ot(n,e),oi(e),i&512&&t!==null&&Va(t,t.return),e.flags&32){var a=e.stateNode;try{Ks(a,"")}catch(f){un(e,e.return,f)}}if(i&4&&(a=e.stateNode,a!=null)){var o=e.memoizedProps,s=t!==null?t.memoizedProps:o,l=e.type,d=e.updateQueue;if(e.updateQueue=null,d!==null)try{l==="input"&&o.type==="radio"&&o.name!=null&&G0(a,o),hm(l,s);var c=hm(l,o);for(s=0;s<d.length;s+=2){var u=d[s],h=d[s+1];u==="style"?J0(a,h):u==="dangerouslySetInnerHTML"?Y0(a,h):u==="children"?Ks(a,h):nf(a,u,h,c)}switch(l){case"input":sm(a,o);break;case"textarea":$0(a,o);break;case"select":var g=a._wrapperState.wasMultiple;a._wrapperState.wasMultiple=!!o.multiple;var m=o.value;m!=null?Za(a,!!o.multiple,m,!1):g!==!!o.multiple&&(o.defaultValue!=null?Za(a,!!o.multiple,o.defaultValue,!0):Za(a,!!o.multiple,o.multiple?[]:"",!1))}a[Js]=o}catch(f){un(e,e.return,f)}}break;case 6:if(Ot(n,e),oi(e),i&4){if(e.stateNode===null)throw Error(H(162));a=e.stateNode,o=e.memoizedProps;try{a.nodeValue=o}catch(f){un(e,e.return,f)}}break;case 3:if(Ot(n,e),oi(e),i&4&&t!==null&&t.memoizedState.isDehydrated)try{Gs(n.containerInfo)}catch(f){un(e,e.return,f)}break;case 4:Ot(n,e),oi(e);break;case 13:Ot(n,e),oi(e),a=e.child,a.flags&8192&&(o=a.memoizedState!==null,a.stateNode.isHidden=o,!o||a.alternate!==null&&a.alternate.memoizedState!==null||(Mf=mn())),i&4&&Ek(e);break;case 22:if(u=t!==null&&t.memoizedState!==null,e.mode&1?(Vn=(c=Vn)||u,Ot(n,e),Vn=c):Ot(n,e),oi(e),i&8192){if(c=e.memoizedState!==null,(e.stateNode.isHidden=c)&&!u&&e.mode&1)for(ee=e,u=e.child;u!==null;){for(h=ee=u;ee!==null;){switch(g=ee,m=g.child,g.tag){case 0:case 11:case 14:case 15:Ts(4,g,g.return);break;case 1:Va(g,g.return);var p=g.stateNode;if(typeof p.componentWillUnmount=="function"){i=g,t=g.return;try{n=i,p.props=n.memoizedProps,p.state=n.memoizedState,p.componentWillUnmount()}catch(f){un(i,t,f)}}break;case 5:Va(g,g.return);break;case 22:if(g.memoizedState!==null){Ik(h);continue}}m!==null?(m.return=g,ee=m):Ik(h)}u=u.sibling}e:for(u=null,h=e;;){if(h.tag===5){if(u===null){u=h;try{a=h.stateNode,c?(o=a.style,typeof o.setProperty=="function"?o.setProperty("display","none","important"):o.display="none"):(l=h.stateNode,d=h.memoizedProps.style,s=d!=null&&d.hasOwnProperty("display")?d.display:null,l.style.display=Q0("display",s))}catch(f){un(e,e.return,f)}}}else if(h.tag===6){if(u===null)try{h.stateNode.nodeValue=c?"":h.memoizedProps}catch(f){un(e,e.return,f)}}else if((h.tag!==22&&h.tag!==23||h.memoizedState===null||h===e)&&h.child!==null){h.child.return=h,h=h.child;continue}if(h===e)break e;for(;h.sibling===null;){if(h.return===null||h.return===e)break e;u===h&&(u=null),h=h.return}u===h&&(u=null),h.sibling.return=h.return,h=h.sibling}}break;case 19:Ot(n,e),oi(e),i&4&&Ek(e);break;case 21:break;default:Ot(n,e),oi(e)}}function oi(e){var n=e.flags;if(n&2){try{e:{for(var t=e.return;t!==null;){if(j1(t)){var i=t;break e}t=t.return}throw Error(H(160))}switch(i.tag){case 5:var a=i.stateNode;i.flags&32&&(Ks(a,""),i.flags&=-33);var o=Ck(e);Vm(e,o,a);break;case 3:case 4:var s=i.stateNode.containerInfo,l=Ck(e);Wm(e,l,s);break;default:throw Error(H(161))}}catch(d){un(e,e.return,d)}e.flags&=-3}n&4096&&(e.flags&=-4097)}function gP(e,n,t){ee=e,A1(e)}function A1(e,n,t){for(var i=(e.mode&1)!==0;ee!==null;){var a=ee,o=a.child;if(a.tag===22&&i){var s=a.memoizedState!==null||hd;if(!s){var l=a.alternate,d=l!==null&&l.memoizedState!==null||Vn;l=hd;var c=Vn;if(hd=s,(Vn=d)&&!c)for(ee=a;ee!==null;)s=ee,d=s.child,s.tag===22&&s.memoizedState!==null?Pk(a):d!==null?(d.return=s,ee=d):Pk(a);for(;o!==null;)ee=o,A1(o),o=o.sibling;ee=a,hd=l,Vn=c}Nk(e)}else a.subtreeFlags&8772&&o!==null?(o.return=a,ee=o):Nk(e)}}function Nk(e){for(;ee!==null;){var n=ee;if(n.flags&8772){var t=n.alternate;try{if(n.flags&8772)switch(n.tag){case 0:case 11:case 15:Vn||Au(5,n);break;case 1:var i=n.stateNode;if(n.flags&4&&!Vn)if(t===null)i.componentDidMount();else{var a=n.elementType===n.type?t.memoizedProps:Vt(n.type,t.memoizedProps);i.componentDidUpdate(a,t.memoizedState,i.__reactInternalSnapshotBeforeUpdate)}var o=n.updateQueue;o!==null&&gk(n,o,i);break;case 3:var s=n.updateQueue;if(s!==null){if(t=null,n.child!==null)switch(n.child.tag){case 5:t=n.child.stateNode;break;case 1:t=n.child.stateNode}gk(n,s,t)}break;case 5:var l=n.stateNode;if(t===null&&n.flags&4){t=l;var d=n.memoizedProps;switch(n.type){case"button":case"input":case"select":case"textarea":d.autoFocus&&t.focus();break;case"img":d.src&&(t.src=d.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(n.memoizedState===null){var c=n.alternate;if(c!==null){var u=c.memoizedState;if(u!==null){var h=u.dehydrated;h!==null&&Gs(h)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(H(163))}Vn||n.flags&512&&Lm(n)}catch(g){un(n,n.return,g)}}if(n===e){ee=null;break}if(t=n.sibling,t!==null){t.return=n.return,ee=t;break}ee=n.return}}function Ik(e){for(;ee!==null;){var n=ee;if(n===e){ee=null;break}var t=n.sibling;if(t!==null){t.return=n.return,ee=t;break}ee=n.return}}function Pk(e){for(;ee!==null;){var n=ee;try{switch(n.tag){case 0:case 11:case 15:var t=n.return;try{Au(4,n)}catch(d){un(n,t,d)}break;case 1:var i=n.stateNode;if(typeof i.componentDidMount=="function"){var a=n.return;try{i.componentDidMount()}catch(d){un(n,a,d)}}var o=n.return;try{Lm(n)}catch(d){un(n,o,d)}break;case 5:var s=n.return;try{Lm(n)}catch(d){un(n,s,d)}}}catch(d){un(n,n.return,d)}if(n===e){ee=null;break}var l=n.sibling;if(l!==null){l.return=n.return,ee=l;break}ee=n.return}}var mP=Math.ceil,Wc=Gi.ReactCurrentDispatcher,Df=Gi.ReactCurrentOwner,It=Gi.ReactCurrentBatchConfig,Te=0,In=null,vn=null,Mn=0,ut=0,Ka=Er(0),Sn=0,rl=null,la=0,Cu=0,Bf=0,Ds=null,nt=null,Mf=0,ho=1/0,Ti=null,Vc=!1,Km=null,br=null,gd=!1,dr=null,Kc=0,Bs=0,qm=null,Jd=-1,Xd=0;function Zn(){return Te&6?mn():Jd!==-1?Jd:Jd=mn()}function vr(e){return e.mode&1?Te&2&&Mn!==0?Mn&-Mn:QI.transition!==null?(Xd===0&&(Xd=cj()),Xd):(e=Ve,e!==0||(e=window.event,e=e===void 0?16:bj(e.type)),e):1}function Zt(e,n,t,i){if(50<Bs)throw Bs=0,qm=null,Error(H(185));jl(e,t,i),(!(Te&2)||e!==In)&&(e===In&&(!(Te&2)&&(Cu|=t),Sn===4&&ar(e,Mn)),at(e,i),t===1&&Te===0&&!(n.mode&1)&&(ho=mn()+500,ju&&Nr()))}function at(e,n){var t=e.callbackNode;QN(e,n);var i=Ac(e,e===In?Mn:0);if(i===0)t!==null&&Lv(t),e.callbackNode=null,e.callbackPriority=0;else if(n=i&-i,e.callbackPriority!==n){if(t!=null&&Lv(t),n===1)e.tag===0?YI(Tk.bind(null,e)):Fj(Tk.bind(null,e)),UI(function(){!(Te&6)&&Nr()}),t=null;else{switch(uj(i)){case 1:t=sf;break;case 4:t=lj;break;case 16:t=zc;break;case 536870912:t=dj;break;default:t=zc}t=B1(t,C1.bind(null,e))}e.callbackPriority=n,e.callbackNode=t}}function C1(e,n){if(Jd=-1,Xd=0,Te&6)throw Error(H(327));var t=e.callbackNode;if(eo()&&e.callbackNode!==t)return null;var i=Ac(e,e===In?Mn:0);if(i===0)return null;if(i&30||i&e.expiredLanes||n)n=qc(e,i);else{n=i;var a=Te;Te|=2;var o=N1();(In!==e||Mn!==n)&&(Ti=null,ho=mn()+500,Jr(e,n));do try{bP();break}catch(l){E1(e,l)}while(!0);wf(),Wc.current=o,Te=a,vn!==null?n=0:(In=null,Mn=0,n=Sn)}if(n!==0){if(n===2&&(a=bm(e),a!==0&&(i=a,n=Hm(e,a))),n===1)throw t=rl,Jr(e,0),ar(e,i),at(e,mn()),t;if(n===6)ar(e,i);else{if(a=e.current.alternate,!(i&30)&&!pP(a)&&(n=qc(e,i),n===2&&(o=bm(e),o!==0&&(i=o,n=Hm(e,o))),n===1))throw t=rl,Jr(e,0),ar(e,i),at(e,mn()),t;switch(e.finishedWork=a,e.finishedLanes=i,n){case 0:case 1:throw Error(H(345));case 2:Vr(e,nt,Ti);break;case 3:if(ar(e,i),(i&130023424)===i&&(n=Mf+500-mn(),10<n)){if(Ac(e,0)!==0)break;if(a=e.suspendedLanes,(a&i)!==i){Zn(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=zm(Vr.bind(null,e,nt,Ti),n);break}Vr(e,nt,Ti);break;case 4:if(ar(e,i),(i&4194240)===i)break;for(n=e.eventTimes,a=-1;0<i;){var s=31-$t(i);o=1<<s,s=n[s],s>a&&(a=s),i&=~o}if(i=a,i=mn()-i,i=(120>i?120:480>i?480:1080>i?1080:1920>i?1920:3e3>i?3e3:4320>i?4320:1960*mP(i/1960))-i,10<i){e.timeoutHandle=zm(Vr.bind(null,e,nt,Ti),i);break}Vr(e,nt,Ti);break;case 5:Vr(e,nt,Ti);break;default:throw Error(H(329))}}}return at(e,mn()),e.callbackNode===t?C1.bind(null,e):null}function Hm(e,n){var t=Ds;return e.current.memoizedState.isDehydrated&&(Jr(e,n).flags|=256),e=qc(e,n),e!==2&&(n=nt,nt=t,n!==null&&Um(n)),e}function Um(e){nt===null?nt=e:nt.push.apply(nt,e)}function pP(e){for(var n=e;;){if(n.flags&16384){var t=n.updateQueue;if(t!==null&&(t=t.stores,t!==null))for(var i=0;i<t.length;i++){var a=t[i],o=a.getSnapshot;a=a.value;try{if(!Qt(o(),a))return!1}catch{return!1}}}if(t=n.child,n.subtreeFlags&16384&&t!==null)t.return=n,n=t;else{if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return!0;n=n.return}n.sibling.return=n.return,n=n.sibling}}return!0}function ar(e,n){for(n&=~Bf,n&=~Cu,e.suspendedLanes|=n,e.pingedLanes&=~n,e=e.expirationTimes;0<n;){var t=31-$t(n),i=1<<t;e[t]=-1,n&=~i}}function Tk(e){if(Te&6)throw Error(H(327));eo();var n=Ac(e,0);if(!(n&1))return at(e,mn()),null;var t=qc(e,n);if(e.tag!==0&&t===2){var i=bm(e);i!==0&&(n=i,t=Hm(e,i))}if(t===1)throw t=rl,Jr(e,0),ar(e,n),at(e,mn()),t;if(t===6)throw Error(H(345));return e.finishedWork=e.current.alternate,e.finishedLanes=n,Vr(e,nt,Ti),at(e,mn()),null}function Ff(e,n){var t=Te;Te|=1;try{return e(n)}finally{Te=t,Te===0&&(ho=mn()+500,ju&&Nr())}}function da(e){dr!==null&&dr.tag===0&&!(Te&6)&&eo();var n=Te;Te|=1;var t=It.transition,i=Ve;try{if(It.transition=null,Ve=1,e)return e()}finally{Ve=i,It.transition=t,Te=n,!(Te&6)&&Nr()}}function Rf(){ut=Ka.current,Xe(Ka)}function Jr(e,n){e.finishedWork=null,e.finishedLanes=0;var t=e.timeoutHandle;if(t!==-1&&(e.timeoutHandle=-1,HI(t)),vn!==null)for(t=vn.return;t!==null;){var i=t;switch(bf(i),i.tag){case 1:i=i.type.childContextTypes,i!=null&&Pc();break;case 3:co(),Xe(it),Xe(Kn),Af();break;case 5:zf(i);break;case 4:co();break;case 13:Xe(an);break;case 19:Xe(an);break;case 10:xf(i.type._context);break;case 22:case 23:Rf()}t=t.return}if(In=e,vn=e=kr(e.current,null),Mn=ut=n,Sn=0,rl=null,Bf=Cu=la=0,nt=Ds=null,Ur!==null){for(n=0;n<Ur.length;n++)if(t=Ur[n],i=t.interleaved,i!==null){t.interleaved=null;var a=i.next,o=t.pending;if(o!==null){var s=o.next;o.next=a,i.next=s}t.pending=i}Ur=null}return e}function E1(e,n){do{var t=vn;try{if(wf(),Zd.current=Lc,_c){for(var i=on.memoizedState;i!==null;){var a=i.queue;a!==null&&(a.pending=null),i=i.next}_c=!1}if(sa=0,Nn=yn=on=null,Ps=!1,nl=0,Df.current=null,t===null||t.return===null){Sn=1,rl=n,vn=null;break}e:{var o=e,s=t.return,l=t,d=n;if(n=Mn,l.flags|=32768,d!==null&&typeof d=="object"&&typeof d.then=="function"){var c=d,u=l,h=u.tag;if(!(u.mode&1)&&(h===0||h===11||h===15)){var g=u.alternate;g?(u.updateQueue=g.updateQueue,u.memoizedState=g.memoizedState,u.lanes=g.lanes):(u.updateQueue=null,u.memoizedState=null)}var m=kk(s);if(m!==null){m.flags&=-257,wk(m,s,l,o,n),m.mode&1&&vk(o,c,n),n=m,d=c;var p=n.updateQueue;if(p===null){var f=new Set;f.add(d),n.updateQueue=f}else p.add(d);break e}else{if(!(n&1)){vk(o,c,n),Of();break e}d=Error(H(426))}}else if(tn&&l.mode&1){var w=kk(s);if(w!==null){!(w.flags&65536)&&(w.flags|=256),wk(w,s,l,o,n),vf(uo(d,l));break e}}o=d=uo(d,l),Sn!==4&&(Sn=2),Ds===null?Ds=[o]:Ds.push(o),o=s;do{switch(o.tag){case 3:o.flags|=65536,n&=-n,o.lanes|=n;var k=u1(o,d,n);hk(o,k);break e;case 1:l=d;var v=o.type,x=o.stateNode;if(!(o.flags&128)&&(typeof v.getDerivedStateFromError=="function"||x!==null&&typeof x.componentDidCatch=="function"&&(br===null||!br.has(x)))){o.flags|=65536,n&=-n,o.lanes|=n;var y=h1(o,l,n);hk(o,y);break e}}o=o.return}while(o!==null)}P1(t)}catch(j){n=j,vn===t&&t!==null&&(vn=t=t.return);continue}break}while(!0)}function N1(){var e=Wc.current;return Wc.current=Lc,e===null?Lc:e}function Of(){(Sn===0||Sn===3||Sn===2)&&(Sn=4),In===null||!(la&268435455)&&!(Cu&268435455)||ar(In,Mn)}function qc(e,n){var t=Te;Te|=2;var i=N1();(In!==e||Mn!==n)&&(Ti=null,Jr(e,n));do try{fP();break}catch(a){E1(e,a)}while(!0);if(wf(),Te=t,Wc.current=i,vn!==null)throw Error(H(261));return In=null,Mn=0,Sn}function fP(){for(;vn!==null;)I1(vn)}function bP(){for(;vn!==null&&!VN();)I1(vn)}function I1(e){var n=D1(e.alternate,e,ut);e.memoizedProps=e.pendingProps,n===null?P1(e):vn=n,Df.current=null}function P1(e){var n=e;do{var t=n.alternate;if(e=n.return,n.flags&32768){if(t=cP(t,n),t!==null){t.flags&=32767,vn=t;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{Sn=6,vn=null;return}}else if(t=dP(t,n,ut),t!==null){vn=t;return}if(n=n.sibling,n!==null){vn=n;return}vn=n=e}while(n!==null);Sn===0&&(Sn=5)}function Vr(e,n,t){var i=Ve,a=It.transition;try{It.transition=null,Ve=1,vP(e,n,t,i)}finally{It.transition=a,Ve=i}return null}function vP(e,n,t,i){do eo();while(dr!==null);if(Te&6)throw Error(H(327));t=e.finishedWork;var a=e.finishedLanes;if(t===null)return null;if(e.finishedWork=null,e.finishedLanes=0,t===e.current)throw Error(H(177));e.callbackNode=null,e.callbackPriority=0;var o=t.lanes|t.childLanes;if(JN(e,o),e===In&&(vn=In=null,Mn=0),!(t.subtreeFlags&2064)&&!(t.flags&2064)||gd||(gd=!0,B1(zc,function(){return eo(),null})),o=(t.flags&15990)!==0,t.subtreeFlags&15990||o){o=It.transition,It.transition=null;var s=Ve;Ve=1;var l=Te;Te|=4,Df.current=null,hP(e,t),z1(t,e),OI(jm),Cc=!!ym,jm=ym=null,e.current=t,gP(t),KN(),Te=l,Ve=s,It.transition=o}else e.current=t;if(gd&&(gd=!1,dr=e,Kc=a),o=e.pendingLanes,o===0&&(br=null),UN(t.stateNode),at(e,mn()),n!==null)for(i=e.onRecoverableError,t=0;t<n.length;t++)a=n[t],i(a.value,{componentStack:a.stack,digest:a.digest});if(Vc)throw Vc=!1,e=Km,Km=null,e;return Kc&1&&e.tag!==0&&eo(),o=e.pendingLanes,o&1?e===qm?Bs++:(Bs=0,qm=e):Bs=0,Nr(),null}function eo(){if(dr!==null){var e=uj(Kc),n=It.transition,t=Ve;try{if(It.transition=null,Ve=16>e?16:e,dr===null)var i=!1;else{if(e=dr,dr=null,Kc=0,Te&6)throw Error(H(331));var a=Te;for(Te|=4,ee=e.current;ee!==null;){var o=ee,s=o.child;if(ee.flags&16){var l=o.deletions;if(l!==null){for(var d=0;d<l.length;d++){var c=l[d];for(ee=c;ee!==null;){var u=ee;switch(u.tag){case 0:case 11:case 15:Ts(8,u,o)}var h=u.child;if(h!==null)h.return=u,ee=h;else for(;ee!==null;){u=ee;var g=u.sibling,m=u.return;if(y1(u),u===c){ee=null;break}if(g!==null){g.return=m,ee=g;break}ee=m}}}var p=o.alternate;if(p!==null){var f=p.child;if(f!==null){p.child=null;do{var w=f.sibling;f.sibling=null,f=w}while(f!==null)}}ee=o}}if(o.subtreeFlags&2064&&s!==null)s.return=o,ee=s;else e:for(;ee!==null;){if(o=ee,o.flags&2048)switch(o.tag){case 0:case 11:case 15:Ts(9,o,o.return)}var k=o.sibling;if(k!==null){k.return=o.return,ee=k;break e}ee=o.return}}var v=e.current;for(ee=v;ee!==null;){s=ee;var x=s.child;if(s.subtreeFlags&2064&&x!==null)x.return=s,ee=x;else e:for(s=v;ee!==null;){if(l=ee,l.flags&2048)try{switch(l.tag){case 0:case 11:case 15:Au(9,l)}}catch(j){un(l,l.return,j)}if(l===s){ee=null;break e}var y=l.sibling;if(y!==null){y.return=l.return,ee=y;break e}ee=l.return}}if(Te=a,Nr(),mi&&typeof mi.onPostCommitFiberRoot=="function")try{mi.onPostCommitFiberRoot(vu,e)}catch{}i=!0}return i}finally{Ve=t,It.transition=n}}return!1}function Dk(e,n,t){n=uo(t,n),n=u1(e,n,1),e=fr(e,n,1),n=Zn(),e!==null&&(jl(e,1,n),at(e,n))}function un(e,n,t){if(e.tag===3)Dk(e,e,t);else for(;n!==null;){if(n.tag===3){Dk(n,e,t);break}else if(n.tag===1){var i=n.stateNode;if(typeof n.type.getDerivedStateFromError=="function"||typeof i.componentDidCatch=="function"&&(br===null||!br.has(i))){e=uo(t,e),e=h1(n,e,1),n=fr(n,e,1),e=Zn(),n!==null&&(jl(n,1,e),at(n,e));break}}n=n.return}}function kP(e,n,t){var i=e.pingCache;i!==null&&i.delete(n),n=Zn(),e.pingedLanes|=e.suspendedLanes&t,In===e&&(Mn&t)===t&&(Sn===4||Sn===3&&(Mn&130023424)===Mn&&500>mn()-Mf?Jr(e,0):Bf|=t),at(e,n)}function T1(e,n){n===0&&(e.mode&1?(n=id,id<<=1,!(id&130023424)&&(id=4194304)):n=1);var t=Zn();e=Ki(e,n),e!==null&&(jl(e,n,t),at(e,t))}function wP(e){var n=e.memoizedState,t=0;n!==null&&(t=n.retryLane),T1(e,t)}function xP(e,n){var t=0;switch(e.tag){case 13:var i=e.stateNode,a=e.memoizedState;a!==null&&(t=a.retryLane);break;case 19:i=e.stateNode;break;default:throw Error(H(314))}i!==null&&i.delete(n),T1(e,t)}var D1;D1=function(e,n,t){if(e!==null)if(e.memoizedProps!==n.pendingProps||it.current)tt=!0;else{if(!(e.lanes&t)&&!(n.flags&128))return tt=!1,lP(e,n,t);tt=!!(e.flags&131072)}else tt=!1,tn&&n.flags&1048576&&Rj(n,Bc,n.index);switch(n.lanes=0,n.tag){case 2:var i=n.type;Qd(e,n),e=n.pendingProps;var a=oo(n,Kn.current);Xa(n,t),a=Ef(null,n,i,e,a,t);var o=Nf();return n.flags|=1,typeof a=="object"&&a!==null&&typeof a.render=="function"&&a.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,rt(i)?(o=!0,Tc(n)):o=!1,n.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,jf(n),a.updater=zu,n.stateNode=a,a._reactInternals=n,Tm(n,i,e,t),n=Mm(null,n,i,!0,o,t)):(n.tag=0,tn&&o&&ff(n),Hn(null,n,a,t),n=n.child),n;case 16:i=n.elementType;e:{switch(Qd(e,n),e=n.pendingProps,a=i._init,i=a(i._payload),n.type=i,a=n.tag=jP(i),e=Vt(i,e),a){case 0:n=Bm(null,n,i,e,t);break e;case 1:n=jk(null,n,i,e,t);break e;case 11:n=xk(null,n,i,e,t);break e;case 14:n=yk(null,n,i,Vt(i.type,e),t);break e}throw Error(H(306,i,""))}return n;case 0:return i=n.type,a=n.pendingProps,a=n.elementType===i?a:Vt(i,a),Bm(e,n,i,a,t);case 1:return i=n.type,a=n.pendingProps,a=n.elementType===i?a:Vt(i,a),jk(e,n,i,a,t);case 3:e:{if(f1(n),e===null)throw Error(H(387));i=n.pendingProps,o=n.memoizedState,a=o.element,Kj(e,n),Rc(n,i,null,t);var s=n.memoizedState;if(i=s.element,o.isDehydrated)if(o={element:i,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},n.updateQueue.baseState=o,n.memoizedState=o,n.flags&256){a=uo(Error(H(423)),n),n=Sk(e,n,i,t,a);break e}else if(i!==a){a=uo(Error(H(424)),n),n=Sk(e,n,i,t,a);break e}else for(mt=pr(n.stateNode.containerInfo.firstChild),pt=n,tn=!0,Gt=null,t=Wj(n,null,i,t),n.child=t;t;)t.flags=t.flags&-3|4096,t=t.sibling;else{if(so(),i===a){n=qi(e,n,t);break e}Hn(e,n,i,t)}n=n.child}return n;case 5:return qj(n),e===null&&Nm(n),i=n.type,a=n.pendingProps,o=e!==null?e.memoizedProps:null,s=a.children,Sm(i,a)?s=null:o!==null&&Sm(i,o)&&(n.flags|=32),p1(e,n),Hn(e,n,s,t),n.child;case 6:return e===null&&Nm(n),null;case 13:return b1(e,n,t);case 4:return Sf(n,n.stateNode.containerInfo),i=n.pendingProps,e===null?n.child=lo(n,null,i,t):Hn(e,n,i,t),n.child;case 11:return i=n.type,a=n.pendingProps,a=n.elementType===i?a:Vt(i,a),xk(e,n,i,a,t);case 7:return Hn(e,n,n.pendingProps,t),n.child;case 8:return Hn(e,n,n.pendingProps.children,t),n.child;case 12:return Hn(e,n,n.pendingProps.children,t),n.child;case 10:e:{if(i=n.type._context,a=n.pendingProps,o=n.memoizedProps,s=a.value,Ze(Mc,i._currentValue),i._currentValue=s,o!==null)if(Qt(o.value,s)){if(o.children===a.children&&!it.current){n=qi(e,n,t);break e}}else for(o=n.child,o!==null&&(o.return=n);o!==null;){var l=o.dependencies;if(l!==null){s=o.child;for(var d=l.firstContext;d!==null;
vendor: 4,891 bytes, line 40
40){if(d.context===i){if(o.tag===1){d=Oi(-1,t&-t),d.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var u=c.pending;u===null?d.next=d:(d.next=u.next,u.next=d),c.pending=d}}o.lanes|=t,d=o.alternate,d!==null&&(d.lanes|=t),Im(o.return,t,n),l.lanes|=t;break}d=d.next}}else if(o.tag===10)s=o.type===n.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(H(341));s.lanes|=t,l=s.alternate,l!==null&&(l.lanes|=t),Im(s,t,n),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===n){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}Hn(e,n,a.children,t),n=n.child}return n;case 9:return a=n.type,i=n.pendingProps.children,Xa(n,t),a=Bt(a),i=i(a),n.flags|=1,Hn(e,n,i,t),n.child;case 14:return i=n.type,a=Vt(i,n.pendingProps),a=Vt(i.type,a),yk(e,n,i,a,t);case 15:return g1(e,n,n.type,n.pendingProps,t);case 17:return i=n.type,a=n.pendingProps,a=n.elementType===i?a:Vt(i,a),Qd(e,n),n.tag=1,rt(i)?(e=!0,Tc(n)):e=!1,Xa(n,t),c1(n,i,a),Tm(n,i,a,t),Mm(null,n,i,!0,e,t);case 19:return v1(e,n,t);case 22:return m1(e,n,t)}throw Error(H(156,n.tag))};function B1(e,n){return sj(e,n)}function yP(e,n,t,i){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=i,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Et(e,n,t,i){return new yP(e,n,t,i)}function _f(e){return e=e.prototype,!(!e||!e.isReactComponent)}function jP(e){if(typeof e=="function")return _f(e)?1:0;if(e!=null){if(e=e.$$typeof,e===rf)return 11;if(e===af)return 14}return 2}function kr(e,n){var t=e.alternate;return t===null?(t=Et(e.tag,n,e.key,e.mode),t.elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=e.flags&14680064,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function ec(e,n,t,i,a,o){var s=2;if(i=e,typeof e=="function")_f(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Da:return Xr(t.children,a,o,n);case tf:s=8,a|=8;break;case tm:return e=Et(12,t,n,a|2),e.elementType=tm,e.lanes=o,e;case im:return e=Et(13,t,n,a),e.elementType=im,e.lanes=o,e;case rm:return e=Et(19,t,n,a),e.elementType=rm,e.lanes=o,e;case q0:return Eu(t,a,o,n);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case V0:s=10;break e;case K0:s=9;break e;case rf:s=11;break e;case af:s=14;break e;case tr:s=16,i=null;break e}throw Error(H(130,e==null?e:typeof e,""))}return n=Et(s,t,n,a),n.elementType=e,n.type=i,n.lanes=o,n}function Xr(e,n,t,i){return e=Et(7,e,i,n),e.lanes=t,e}function Eu(e,n,t,i){return e=Et(22,e,i,n),e.elementType=q0,e.lanes=t,e.stateNode={isHidden:!1},e}function Hh(e,n,t){return e=Et(6,e,null,n),e.lanes=t,e}function Uh(e,n,t){return n=Et(4,e.children!==null?e.children:[],e.key,n),n.lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function SP(e,n,t,i,a){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Ah(0),this.expirationTimes=Ah(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ah(0),this.identifierPrefix=i,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function Lf(e,n,t,i,a,o,s,l,d){return e=new SP(e,n,t,l,d),n===1?(n=1,o===!0&&(n|=8)):n=0,o=Et(3,null,null,n),e.current=o,o.stateNode=e,o.memoizedState={element:i,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},jf(o),e}function zP(e,n,t){var i=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:Ta,key:i==null?null:""+i,children:e,containerInfo:n,implementation:t}}function M1(e){if(!e)return xr;e=e._reactInternals;e:{if(pa(e)!==e||e.tag!==1)throw Error(H(170));var n=e;do{switch(n.tag){case 3:n=n.stateNode.context;break e;case 1:if(rt(n.type)){n=n.stateNode.__reactInternalMemoizedMergedChildContext;break e}}n=n.return}while(n!==null);throw Error(H(171))}if(e.tag===1){var t=e.type;if(rt(t))return Mj(e,t,n)}return n}function F1(e,n,t,i,a,o,s,l,d){return e=Lf(t,i,!0,e,a,o,s,l,d),e.context=M1(null),t=e.current,i=Zn(),a=vr(t),o=Oi(i,a),o.callback=n??null,fr(t,o,a),e.current.lanes=a,jl(e,a,i),at(e,i),e}function Nu(e,n,t,i){var a=n.current,o=Zn(),s=vr(a);
vendor: 5,094 bytes, line 40
40return t=M1(t),n.context===null?n.context=t:n.pendingContext=t,n=Oi(o,s),n.payload={element:e},i=i===void 0?null:i,i!==null&&(n.callback=i),e=fr(a,n,s),e!==null&&(Zt(e,a,s,o),$d(e,a,s)),s}function Hc(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function Bk(e,n){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var t=e.retryLane;e.retryLane=t!==0&&t<n?t:n}}function Wf(e,n){Bk(e,n),(e=e.alternate)&&Bk(e,n)}function AP(){return null}var R1=typeof reportError=="function"?reportError:function(e){console.error(e)};function Vf(e){this._internalRoot=e}Iu.prototype.render=Vf.prototype.render=function(e){var n=this._internalRoot;if(n===null)throw Error(H(409));Nu(e,n,null,null)};Iu.prototype.unmount=Vf.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var n=e.containerInfo;da(function(){Nu(null,e,null,null)}),n[Vi]=null}};function Iu(e){this._internalRoot=e}Iu.prototype.unstable_scheduleHydration=function(e){if(e){var n=mj();e={blockedOn:null,target:e,priority:n};for(var t=0;t<rr.length&&n!==0&&n<rr[t].priority;t++);rr.splice(t,0,e),t===0&&fj(e)}};function Kf(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function Pu(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function Mk(){}function CP(e,n,t,i,a){if(a){if(typeof i=="function"){var o=i;i=function(){var c=Hc(s);o.call(c)}}var s=F1(n,i,e,0,null,!1,!1,"",Mk);return e._reactRootContainer=s,e[Vi]=s.current,Ys(e.nodeType===8?e.parentNode:e),da(),s}for(;a=e.lastChild;)e.removeChild(a);if(typeof i=="function"){var l=i;i=function(){var c=Hc(d);l.call(c)}}var d=Lf(e,0,!1,null,null,!1,!1,"",Mk);return e._reactRootContainer=d,e[Vi]=d.current,Ys(e.nodeType===8?e.parentNode:e),da(function(){Nu(n,d,t,i)}),d}function Tu(e,n,t,i,a){var o=t._reactRootContainer;if(o){var s=o;if(typeof a=="function"){var l=a;a=function(){var d=Hc(s);l.call(d)}}Nu(n,s,e,a)}else s=CP(t,n,e,a,i);return Hc(s)}hj=function(e){switch(e.tag){case 3:var n=e.stateNode;if(n.current.memoizedState.isDehydrated){var t=xs(n.pendingLanes);t!==0&&(lf(n,t|1),at(n,mn()),!(Te&6)&&(ho=mn()+500,Nr()))}break;case 13:da(function(){var i=Ki(e,1);if(i!==null){var a=Zn();Zt(i,e,1,a)}}),Wf(e,1)}};df=function(e){if(e.tag===13){var n=Ki(e,134217728);if(n!==null){var t=Zn();Zt(n,e,134217728,t)}Wf(e,134217728)}};gj=function(e){if(e.tag===13){var n=vr(e),t=Ki(e,n);if(t!==null){var i=Zn();Zt(t,e,n,i)}Wf(e,n)}};mj=function(){return Ve};pj=function(e,n){var t=Ve;try{return Ve=e,n()}finally{Ve=t}};mm=function(e,n,t){switch(n){case"input":if(sm(e,t),n=t.name,t.type==="radio"&&n!=null){for(t=e;t.parentNode;)t=t.parentNode;for(t=t.querySelectorAll("input[name="+JSON.stringify(""+n)+'][type="radio"]'),n=0;n<t.length;n++){var i=t[n];if(i!==e&&i.form===e.form){var a=yu(i);if(!a)throw Error(H(90));U0(i),sm(i,a)}}}break;case"textarea":$0(e,t);break;case"select":n=t.value,n!=null&&Za(e,!!t.multiple,n,!1)}};nj=Ff;tj=da;var EP={usingClientEntryPoint:!1,Events:[zl,Ra,yu,X0,ej,Ff]},ss={findFiberByHostInstance:Hr,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},NP={bundleType:ss.bundleType,version:ss.version,rendererPackageName:ss.rendererPackageName,rendererConfig:ss.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Gi.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=aj(e),e===null?null:e.stateNode},findFiberByHostInstance:ss.findFiberByHostInstance||AP,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var md=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!md.isDisabled&&md.supportsFiber)try{vu=md.inject(NP),mi=md}catch{}}vt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=EP;vt.createPortal=function(e,n){var t=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!Kf(n))throw Error(H(200));return zP(e,n,null,t)};vt.createRoot=function(e,n){if(!Kf(e))throw Error(H(299));var t=!1,i="",a=R1;return n!=null&&(n.unstable_strictMode===!0&&(t=!0),n.identifierPrefix!==void 0&&(i=n.identifierPrefix),n.onRecoverableError!==void 0&&(a=n.onRecoverableError)),n=Lf(e,1,!1,null,null,t,!1,i,a),e[Vi]=n.current,Ys(e.nodeType===8?e.parentNode:e),new Vf(n)};vt.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var n=e._reactInternals;if(n===void 0)throw typeof e.render=="function"?Error(H(188)):(e=Object.keys(e).join(","),Error(H(268,e)));return e=aj(n),e=e===null?null:e.stateNode,e};vt.flushSync=function(e){return da(e)};vt.hydrate=function(e,n,t){if(!Pu(n))throw Error(H(200));return Tu(null,e,n,!0,t)};vt.hydrateRoot=function(e,n,t){if(!Kf(e))throw Error(H(405));var i=t!=null&&t.hydratedSources||null,a=!1,o="",s=R1;
40if(t!=null&&(t.unstable_strictMode===!0&&(a=!0),t.identifierPrefix!==void 0&&(o=t.identifierPrefix),t.onRecoverableError!==void 0&&(s=t.onRecoverableError)),n=F1(n,null,e,1,t??null,a,!1,o,s),e[Vi]=n.current,Ys(e),i)for(e=0;e<i.length;e++)t=i[e],a=t._getVersion,a=a(t._source),n.mutableSourceEagerHydrationData==null?n.mutableSourceEagerHydrationData=[t,a]:n.mutableSourceEagerHydrationData.push(t,a);return new Iu(n)};vt.render=function(e,n,t){if(!Pu(n))throw Error(H(200));return Tu(null,e,n,!1,t)};vt.unmountComponentAtNode=function(e){if(!Pu(e))throw Error(H(40));return e._reactRootContainer?(da(function(){Tu(null,null,e,!1,function(){e._reactRootContainer=null,e[Vi]=null})}),!0):!1};vt.unstable_batchedUpdates=Ff;vt.unstable_renderSubtreeIntoContainer=function(e,n,t,i){if(!Pu(t))throw Error(H(200));if(e==null||e._reactInternals===void 0)throw Error(H(38));return Tu(e,n,t,!1,i)};vt.version="18.3.1-next-f1338f8080-20240426";function O1(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(O1)}catch(e){console.error(e)}}O1(),O0.exports=vt;var Cl=O0.exports;const qf=ga(Cl),_1=x0({__proto__:null,default:qf},[Cl]);/**
41 * @remix-run/router v1.23.0
42 *
43 * Copyright (c) Remix Software Inc.
44 *
45 * This source code is licensed under the MIT license found in the
46 * LICENSE.md file in the root directory of this source tree.
47 *
48 * @license MIT
49 */function nn(){return nn=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},nn.apply(this,arguments)}var fn;(function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"})(fn||(fn={}));const Fk="popstate";function IP(e){e===void 0&&(e={});function n(i,a){let{pathname:o,search:s,hash:l}=i.location;return al("",{pathname:o,search:s,hash:l},a.state&&a.state.usr||null,a.state&&a.state.key||"default")}function t(i,a){return typeof a=="string"?a:ca(a)}return TP(n,t,null,e)}function ze(e,n){if(e===!1||e===null||typeof e>"u")throw new Error(n)}function go(e,n){if(!e){typeof console<"u"&&console.warn(n);try{throw new Error(n)}catch{}}}function PP(){return Math.random().toString(36).substr(2,8)}function Rk(e,n){return{usr:e.state,key:e.key,idx:n}}function al(e,n,t,i){return t===void 0&&(t=null),nn({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof n=="string"?Ir(n):n,{state:t,key:n&&n.key||i||PP()})}function ca(e){let{pathname:n="/",search:t="",hash:i=""}=e;return t&&t!=="?"&&(n+=t.charAt(0)==="?"?t:"?"+t),i&&i!=="#"&&(n+=i.charAt(0)==="#"?i:"#"+i),n}function Ir(e){let n={};if(e){let t=e.indexOf("#");t>=0&&(n.hash=e.substr(t),e=e.substr(0,t));let i=e.indexOf("?");i>=0&&(n.search=e.substr(i),e=e.substr(0,i)),e&&(n.pathname=e)}return n}function TP(e,n,t,i){i===void 0&&(i={});let{window:a=document.defaultView,v5Compat:o=!1}=i,s=a.history,l=fn.Pop,d=null,c=u();c==null&&(c=0,s.replaceState(nn({},s.state,{idx:c}),""));function u(){return(s.state||{idx:null}).idx}function h(){l=fn.Pop;let w=u(),k=w==null?null:w-c;c=w,d&&d({action:l,location:f.location,delta:k})}function g(w,k){l=fn.Push;let v=al(f.location,w,k);c=u()+1;let x=Rk(v,c),y=f.createHref(v);try{s.pushState(x,"",y)}catch(j){if(j instanceof DOMException&&j.name==="DataCloneError")throw j;a.location.assign(y)}o&&d&&d({action:l,location:f.location,delta:1})}function m(w,k){l=fn.Replace;let v=al(f.location,w,k);c=u();let x=Rk(v,c),y=f.createHref(v);s.replaceState(x,"",y),o&&d&&d({action:l,location:f.location,delta:0})}function p(w){let k=a.location.origin!=="null"?a.location.origin:a.location.href,v=typeof w=="string"?w:ca(w);return v=v.replace(/ $/,"%20"),ze(k,"No window.location.(origin|href) available to create URL for href: "+v),new URL(v,k)}let f={get action(){return l},get location(){return e(a,s)},listen(w){if(d)throw new Error("A history only accepts one active listener");return a.addEventListener(Fk,h),d=w,()=>{a.removeEventListener(Fk,h),d=null}},createHref(w){return n(a,w)},createURL:p,encodeLocation(w){let k=p(w);return{pathname:k.pathname,search:k.search,hash:k.hash}},push:g,replace:m,go(w){return s.go(w)}};return f}var We;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(We||(We={}));
vendor: 48,041 bytes, lines 49-59
49const DP=new Set(["lazy","caseSensitive","path","id","index","children"]);function BP(e){return e.index===!0}function Uc(e,n,t,i){return t===void 0&&(t=[]),i===void 0&&(i={}),e.map((a,o)=>{let s=[...t,String(o)],l=typeof a.id=="string"?a.id:s.join("-");if(ze(a.index!==!0||!a.children,"Cannot specify children on an index route"),ze(!i[l],'Found a route id collision on id "'+l+`".  Route id's must be globally unique within Data Router usages`),BP(a)){let d=nn({},a,n(a),{id:l});return i[l]=d,d}else{let d=nn({},a,n(a),{id:l,children:void 0});return i[l]=d,a.children&&(d.children=Uc(a.children,n,s,i)),d}})}function or(e,n,t){return t===void 0&&(t="/"),nc(e,n,t,!1)}function nc(e,n,t,i){let a=typeof n=="string"?Ir(n):n,o=Io(a.pathname||"/",t);if(o==null)return null;let s=L1(e);FP(s);let l=null;for(let d=0;l==null&&d<s.length;++d){let c=GP(o);l=HP(s[d],c,i)}return l}function MP(e,n){let{route:t,pathname:i,params:a}=e;return{id:t.id,pathname:i,params:a,data:n[t.id],handle:t.handle}}function L1(e,n,t,i){n===void 0&&(n=[]),t===void 0&&(t=[]),i===void 0&&(i="");let a=(o,s,l)=>{let d={relativePath:l===void 0?o.path||"":l,caseSensitive:o.caseSensitive===!0,childrenIndex:s,route:o};d.relativePath.startsWith("/")&&(ze(d.relativePath.startsWith(i),'Absolute route path "'+d.relativePath+'" nested under path '+('"'+i+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),d.relativePath=d.relativePath.slice(i.length));let c=_i([i,d.relativePath]),u=t.concat(d);o.children&&o.children.length>0&&(ze(o.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+c+'".')),L1(o.children,n,u,c)),!(o.path==null&&!o.index)&&n.push({path:c,score:KP(c,o.index),routesMeta:u})};return e.forEach((o,s)=>{var l;if(o.path===""||!((l=o.path)!=null&&l.includes("?")))a(o,s);else for(let d of W1(o.path))a(o,s,d)}),n}function W1(e){let n=e.split("/");if(n.length===0)return[];let[t,...i]=n,a=t.endsWith("?"),o=t.replace(/\?$/,"");if(i.length===0)return a?[o,""]:[o];let s=W1(i.join("/")),l=[];return l.push(...s.map(d=>d===""?o:[o,d].join("/"))),a&&l.push(...s),l.map(d=>e.startsWith("/")&&d===""?"/":d)}function FP(e){e.sort((n,t)=>n.score!==t.score?t.score-n.score:qP(n.routesMeta.map(i=>i.childrenIndex),t.routesMeta.map(i=>i.childrenIndex)))}const RP=/^:[\w-]+$/,OP=3,_P=2,LP=1,WP=10,VP=-2,Ok=e=>e==="*";function KP(e,n){let t=e.split("/"),i=t.length;return t.some(Ok)&&(i+=VP),n&&(i+=_P),t.filter(a=>!Ok(a)).reduce((a,o)=>a+(RP.test(o)?OP:o===""?LP:WP),i)}function qP(e,n){return e.length===n.length&&e.slice(0,-1).every((i,a)=>i===n[a])?e[e.length-1]-n[n.length-1]:0}function HP(e,n,t){t===void 0&&(t=!1);let{routesMeta:i}=e,a={},o="/",s=[];for(let l=0;l<i.length;++l){let d=i[l],c=l===i.length-1,u=o==="/"?n:n.slice(o.length)||"/",h=_k({path:d.relativePath,caseSensitive:d.caseSensitive,end:c},u),g=d.route;if(!h&&c&&t&&!i[i.length-1].route.index&&(h=_k({path:d.relativePath,caseSensitive:d.caseSensitive,end:!1},u)),!h)return null;Object.assign(a,h.params),s.push({params:a,pathname:_i([o,h.pathname]),pathnameBase:YP(_i([o,h.pathnameBase])),route:g}),h.pathnameBase!=="/"&&(o=_i([o,h.pathnameBase]))}return s}function _k(e,n){typeof e=="string"&&(e={path:e,caseSensitive:!1,end:!0});let[t,i]=UP(e.path,e.caseSensitive,e.end),a=n.match(t);if(!a)return null;let o=a[0],s=o.replace(/(.)\/+$/,"$1"),l=a.slice(1);return{params:i.reduce((c,u,h)=>{let{paramName:g,isOptional:m}=u;if(g==="*"){let f=l[h]||"";s=o.slice(0,o.length-f.length).replace(/(.)\/+$/,"$1")}const p=l[h];return m&&!p?c[g]=void 0:c[g]=(p||"").replace(/%2F/g,"/"),c},{}),pathname:o,pathnameBase:s,pattern:e}}function UP(e,n,t){n===void 0&&(n=!1),t===void 0&&(t=!0),go(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let i=[],a="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,l,d)=>(i.push({paramName:l,isOptional:d!=null}),d?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(i.push({paramName:"*"}),a+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):t?a+="\\/*$":e!==""&&e!=="/"&&(a+="(?:(?=\\/|$))"),[new RegExp(a,n?void 0:"i"),i]}function GP(e){try{return e.split("/").map(n=>decodeURIComponent(n).replace(/\//g,"%2F")).join("/")}catch(n){return go(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+n+").")),e}}function Io(e,n){if(n==="/")return e;if(!e.toLowerCase().startsWith(n.toLowerCase()))return null;let t=n.endsWith("/")?n.length-1:n.length,i=e.charAt(t);return i&&i!=="/"?null:e.slice(t)||"/"}function $P(e,n){n===void 0&&(n="/");let{pathname:t,search:i="",hash:a=""}=typeof e=="string"?Ir(e):e;return{pathname:t?t.startsWith("/")?t:ZP(t,n):n,search:QP(i),hash:JP(a)}}function ZP(e,n){let t=n.replace(/\/+$/,"").split("/");return e.split("/").forEach(a=>{a===".."?t.length>1&&t.pop():a!=="."&&t.push(a)}),t.length>1?t.join("/"):"/"}function Gh(e,n,t,i){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+n+"` field ["+JSON.stringify(i)+"].  Please separate it out to the ")+("`to."+t+"` field. Alternatively you may provide the full path as ")+'a string in <Link to="..."> and the router will parse it for you.'}function V1(e){return e.filter((n,t)=>t===0||n.route.path&&n.route.path.length>0)}function Du(e,n){let t=V1(e);return n?t.map((i,a)=>a===t.length-1?i.pathname:i.pathnameBase):t.map(i=>i.pathnameBase)}function Bu(e,n,t,i){i===void 0&&(i=!1);let a;typeof e=="string"?a=Ir(e):(a=nn({},e),ze(!a.pathname||!a.pathname.includes("?"),Gh("?","pathname","search",a)),ze(!a.pathname||!a.pathname.includes("#"),Gh("#","pathname","hash",a)),ze(!a.search||!a.search.includes("#"),Gh("#","search","hash",a)));let o=e===""||a.pathname==="",s=o?"/":a.pathname,l;if(s==null)l=t;else{let h=n.length-1;if(!i&&s.startsWith("..")){let g=s.split("/");for(;g[0]==="..";)g.shift(),h-=1;a.pathname=g.join("/")}l=h>=0?n[h]:"/"}let d=$P(a,l),c=s&&s!=="/"&&s.endsWith("/"),u=(o||s===".")&&t.endsWith("/");return!d.pathname.endsWith("/")&&(c||u)&&(d.pathname+="/"),d}const _i=e=>e.join("/").replace(/\/\/+/g,"/"),YP=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),QP=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,JP=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;class Gc{constructor(n,t,i,a){a===void 0&&(a=!1),this.status=n,this.statusText=t||"",this.internal=a,i instanceof Error?(this.data=i.toString(),this.error=i):this.data=i}}function ol(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const K1=["post","put","patch","delete"],XP=new Set(K1),e3=["get",...K1],n3=new Set(e3),t3=new Set([301,302,303,307,308]),i3=new Set([307,308]),$h={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},r3={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},ls={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},Hf=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,a3=e=>({hasErrorBoundary:!!e.hasErrorBoundary}),q1="remix-router-transitions";function o3(e){const n=e.window?e.window:typeof window<"u"?window:void 0,t=typeof n<"u"&&typeof n.document<"u"&&typeof n.document.createElement<"u",i=!t;ze(e.routes.length>0,"You must provide a non-empty routes array to createRouter");let a;if(e.mapRouteProperties)a=e.mapRouteProperties;else if(e.detectErrorBoundary){let N=e.detectErrorBoundary;a=P=>({hasErrorBoundary:N(P)})}else a=a3;let o={},s=Uc(e.routes,a,void 0,o),l,d=e.basename||"/",c=e.dataStrategy||c3,u=e.patchRoutesOnNavigation,h=nn({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},e.future),g=null,m=new Set,p=null,f=null,w=null,k=e.hydrationData!=null,v=or(s,e.history.location,d),x=!1,y=null;if(v==null&&!u){let N=Xn(404,{pathname:e.history.location.pathname}),{matches:P,route:R}=Yk(s);v=P,y={[R.id]:N}}v&&!e.hydrationData&&Le(v,s,e.history.location.pathname).active&&(v=null);let j;if(v)if(v.some(N=>N.route.lazy))j=!1;else if(!v.some(N=>N.route.loader))j=!0;else if(h.v7_partialHydration){let N=e.hydrationData?e.hydrationData.loaderData:null,P=e.hydrationData?e.hydrationData.errors:null;if(P){let R=v.findIndex(q=>P[q.route.id]!==void 0);j=v.slice(0,R+1).every(q=>!$m(q.route,N,P))}else j=v.every(R=>!$m(R.route,N,P))}else j=e.hydrationData!=null;else if(j=!1,v=[],h.v7_partialHydration){let N=Le(null,s,e.history.location.pathname);N.active&&N.matches&&(x=!0,v=N.matches)}let z,S={historyAction:e.history.action,location:e.history.location,matches:v,initialized:j,navigation:$h,restoreScrollPosition:e.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||y,fetchers:new Map,blockers:new Map},A=fn.Pop,E=!1,C,O=!1,T=new Map,W=null,F=!1,L=!1,G=[],X=new Set,D=new Map,M=0,K=-1,Q=new Map,$=new Set,se=new Map,le=new Map,we=new Set,Re=new Map,I=new Map,de;function he(){if(g=e.history.listen(N=>{let{action:P,location:R,delta:q}=N;if(de){de(),de=void 0;return}go(I.size===0||q!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs.  This can also happen if you are using createHashRouter and the user manually changes the URL.");let J=Go({currentLocation:S.location,nextLocation:R,historyAction:P});if(J&&q!=null){let ue=new Promise(pe=>{de=pe});e.history.go(q*-1),Fr(J,{state:"blocked",location:R,proceed(){Fr(J,{state:"proceeding",proceed:void 0,reset:void 0,location:R}),ue.then(()=>e.history.go(q))},reset(){let pe=new Map(S.blockers);pe.set(J,ls),ce({blockers:pe})}});return}return Oe(P,R)}),t){S3(n,T);let N=()=>z3(n,T);n.addEventListener("pagehide",N),W=()=>n.removeEventListener("pagehide",N)}return S.initialized||Oe(fn.Pop,S.location,{initialHydration:!0}),z}function Z(){g&&g(),W&&W(),m.clear(),C&&C.abort(),S.fetchers.forEach((N,P)=>ka(P)),S.blockers.forEach((N,P)=>Gl(P))}function ke(N){return m.add(N),()=>m.delete(N)}function ce(N,P){P===void 0&&(P={}),S=nn({},S,N);let R=[],q=[];h.v7_fetcherPersist&&S.fetchers.forEach((J,ue)=>{J.state==="idle"&&(we.has(ue)?q.push(ue):R.push(ue))}),we.forEach(J=>{!S.fetchers.has(J)&&!D.has(J)&&q.push(J)}),[...m].forEach(J=>J(S,{deletedFetchers:q,viewTransitionOpts:P.viewTransitionOpts,flushSync:P.flushSync===!0})),h.v7_fetcherPersist?(R.forEach(J=>S.fetchers.delete(J)),q.forEach(J=>ka(J))):q.forEach(J=>we.delete(J))}function be(N,P,R){var q,J;let{flushSync:ue}=R===void 0?{}:R,pe=S.actionData!=null&&S.navigation.formMethod!=null&&Ht(S.navigation.formMethod)&&S.navigation.state==="loading"&&((q=N.state)==null?void 0:q._isRedirect)!==!0,ie;P.actionData?Object.keys(P.actionData).length>0?ie=P.actionData:ie=null:pe?ie=S.actionData:ie=null;let ae=P.loaderData?$k(S.loaderData,P.loaderData,P.matches||[],P.errors):S.loaderData,ne=S.blockers;ne.size>0&&(ne=new Map(ne),ne.forEach((Ie,Pn)=>ne.set(Pn,ls)));let oe=E===!0||S.navigation.formMethod!=null&&Ht(S.navigation.formMethod)&&((J=N.state)==null?void 0:J._isRedirect)!==!0;l&&(s=l,l=void 0),F||A===fn.Pop||(A===fn.Push?e.history.push(N,N.state):A===fn.Replace&&e.history.replace(N,N.state));let xe;if(A===fn.Pop){let Ie=T.get(S.location.pathname);Ie&&Ie.has(N.pathname)?xe={currentLocation:S.location,nextLocation:N}:T.has(N.pathname)&&(xe={currentLocation:N,nextLocation:S.location})}else if(O){let Ie=T.get(S.location.pathname);Ie?Ie.add(N.pathname):(Ie=new Set([N.pathname]),T.set(S.location.pathname,Ie)),xe={currentLocation:S.location,nextLocation:N}}ce(nn({},P,{actionData:ie,loaderData:ae,historyAction:A,location:N,initialized:!0,navigation:$h,revalidation:"idle",restoreScrollPosition:Me(N,P.matches||S.matches),preventScrollReset:oe,blockers:ne}),{viewTransitionOpts:xe,flushSync:ue===!0}),A=fn.Pop,E=!1,O=!1,F=!1,L=!1,G=[]}async function Pe(N,P){if(typeof N=="number"){e.history.go(N);return}let R=Gm(S.location,S.matches,d,h.v7_prependBasename,N,h.v7_relativeSplatPath,P?.fromRouteId,P?.relative),{path:q,submission:J,error:ue}=Lk(h.v7_normalizeFormMethod,!1,R,P),pe=S.location,ie=al(S.location,q,P&&P.state);ie=nn({},ie,e.history.encodeLocation(ie));let ae=P&&P.replace!=null?P.replace:void 0,ne=fn.Push;ae===!0?ne=fn.Replace:ae===!1||J!=null&&Ht(J.formMethod)&&J.formAction===S.location.pathname+S.location.search&&(ne=fn.Replace);let oe=P&&"preventScrollReset"in P?P.preventScrollReset===!0:void 0,xe=(P&&P.flushSync)===!0,Ie=Go({currentLocation:pe,nextLocation:ie,historyAction:ne});if(Ie){Fr(Ie,{state:"blocked",location:ie,proceed(){Fr(Ie,{state:"proceeding",proceed:void 0,reset:void 0,location:ie}),Pe(N,P)},reset(){let Pn=new Map(S.blockers);Pn.set(Ie,ls),ce({blockers:Pn})}});return}return await Oe(ne,ie,{submission:J,pendingError:ue,preventScrollReset:oe,replace:P&&P.replace,enableViewTransition:P&&P.viewTransition,flushSync:xe})}function en(){if(On(),ce({revalidation:"loading"}),S.navigation.state!=="submitting"){if(S.navigation.state==="idle"){Oe(S.historyAction,S.location,{startUninterruptedRevalidation:!0});return}Oe(A||S.historyAction,S.navigation.location,{overrideNavigation:S.navigation,enableViewTransition:O===!0})}}async function Oe(N,P,R){C&&C.abort(),C=null,A=N,F=(R&&R.startUninterruptedRevalidation)===!0,fe(S.location,S.matches),E=(R&&R.preventScrollReset)===!0,O=(R&&R.enableViewTransition)===!0;let q=l||s,J=R&&R.overrideNavigation,ue=R!=null&&R.initialHydration&&S.matches&&S.matches.length>0&&!x?S.matches:or(q,P,d),pe=(R&&R.flushSync)===!0;if(ue&&S.initialized&&!L&&f3(S.location,P)&&!(R&&R.submission&&Ht(R.submission.formMethod))){be(P,{matches:ue},{flushSync:pe});return}let ie=Le(ue,q,P.pathname);if(ie.active&&ie.matches&&(ue=ie.matches),!ue){let{error:$e,notFoundMatches:Fe,route:dn}=$o(P.pathname);be(P,{matches:Fe,loaderData:{},errors:{[dn.id]:$e}},{flushSync:pe});return}C=new AbortController;let ae=za(e.history,P,C.signal,R&&R.submission),ne;if(R&&R.pendingError)ne=[qr(ue).route.id,{type:We.error,error:R.pendingError}];else if(R&&R.submission&&Ht(R.submission.formMethod)){let $e=await Ge(ae,P,R.submission,ue,ie.active,{replace:R.replace,flushSync:pe});if($e.shortCircuited)return;if($e.pendingActionResult){let[Fe,dn]=$e.pendingActionResult;if(ht(dn)&&ol(dn.error)&&dn.error.status===404){C=null,be(P,{matches:$e.matches,loaderData:{},errors:{[Fe]:dn.error}});return}}ue=$e.matches||ue,ne=$e.pendingActionResult,J=Zh(P,R.submission),pe=!1,ie.active=!1,ae=za(e.history,ae.url,ae.signal)}let{shortCircuited:oe,matches:xe,loaderData:Ie,errors:Pn}=await ln(ae,P,ue,ie.active,J,R&&R.submission,R&&R.fetcherSubmission,R&&R.replace,R&&R.initialHydration===!0,pe,ne);oe||(C=null,be(P,nn({matches:xe||ue},Zk(ne),{loaderData:Ie,errors:Pn})))}async function Ge(N,P,R,q,J,ue){ue===void 0&&(ue={}),On();let pe=y3(P,R);if(ce({navigation:pe},{flushSync:ue.flushSync===!0}),J){let ne=await _n(q,P.pathname,N.signal);if(ne.type==="aborted")return{shortCircuited:!0};if(ne.type==="error"){let oe=qr(ne.partialMatches).route.id;return{matches:ne.partialMatches,pendingActionResult:[oe,{type:We.error,error:ne.error}]}}else if(ne.matches)q=ne.matches;else{let{notFoundMatches:oe,error:xe,route:Ie}=$o(P.pathname);return{matches:oe,pendingActionResult:[Ie.id,{type:We.error,error:xe}]}}}let ie,ae=js(q,P);if(!ae.route.action&&!ae.route.lazy)ie={type:We.error,error:Xn(405,{method:N.method,pathname:P.pathname,routeId:ae.route.id})};else if(ie=(await Ft("action",S,N,[ae],q,null))[ae.route.id],N.signal.aborted)return{shortCircuited:!0};if($r(ie)){let ne;return ue&&ue.replace!=null?ne=ue.replace:ne=Hk(ie.response.headers.get("Location"),new URL(N.url),d)===S.location.pathname+S.location.search,await yt(N,ie,!0,{submission:R,replace:ne}),{shortCircuited:!0}}if(cr(ie))throw Xn(400,{type:"defer-action"});if(ht(ie)){let ne=qr(q,ae.route.id);return(ue&&ue.replace)!==!0&&(A=fn.Push),{matches:q,pendingActionResult:[ne.route.id,ie]}}return{matches:q,pendingActionResult:[ae.route.id,ie]}}async function ln(N,P,R,q,J,ue,pe,ie,ae,ne,oe){let xe=J||Zh(P,ue),Ie=ue||pe||Jk(xe),Pn=!F&&(!h.v7_partialHydration||!ae);if(q){if(Pn){let cn=Ke(oe);ce(nn({navigation:xe},cn!==void 0?{actionData:cn}:{}),{flushSync:ne})}let De=await _n(R,P.pathname,N.signal);if(De.type==="aborted")return{shortCircuited:!0};if(De.type==="error"){let cn=qr(De.partialMatches).route.id;return{matches:De.partialMatches,loaderData:{},errors:{[cn]:De.error}}}else if(De.matches)R=De.matches;else{let{error:cn,notFoundMatches:xa,route:Qo}=$o(P.pathname);return{matches:xa,loaderData:{},errors:{[Qo.id]:cn}}}}let $e=l||s,[Fe,dn]=Vk(e.history,S,R,Ie,P,h.v7_partialHydration&&ae===!0,h.v7_skipActionErrorRevalidation,L,G,X,we,se,$,$e,d,oe);if(Rr(De=>!(R&&R.some(cn=>cn.route.id===De))||Fe&&Fe.some(cn=>cn.route.id===De)),K=++M,Fe.length===0&&dn.length===0){let De=Uo();return be(P,nn({matches:R,loaderData:{},errors:oe&&ht(oe[1])?{[oe[0]]:oe[1].error}:null},Zk(oe),De?{fetchers:new Map(S.fetchers)}:{}),{flushSync:ne}),{shortCircuited:!0}}if(Pn){let De={};if(!q){De.navigation=xe;let cn=Ke(oe);cn!==void 0&&(De.actionData=cn)}dn.length>0&&(De.fetchers=kn(dn)),ce(De,{flushSync:ne})}dn.forEach(De=>{jt(De.key),De.controller&&D.set(De.key,De.controller)});let wa=()=>dn.forEach(De=>jt(De.key));C&&C.signal.addEventListener("abort",wa);let{loaderResults:Zo,fetcherResults:Ni}=await hn(S,R,Fe,dn,N);if(N.signal.aborted)return{shortCircuited:!0};C&&C.signal.removeEventListener("abort",wa),dn.forEach(De=>D.delete(De.key));let ai=pd(Zo);if(ai)return await yt(N,ai.result,!0,{replace:ie}),{shortCircuited:!0};if(ai=pd(Ni),ai)return $.add(ai.key),await yt(N,ai.result,!0,{replace:ie}),{shortCircuited:!0};let{loaderData:fh,errors:Yo}=Gk(S,R,Zo,oe,dn,Ni,Re);Re.forEach((De,cn)=>{De.subscribe(xa=>{(xa||De.done)&&Re.delete(cn)})}),h.v7_partialHydration&&ae&&S.errors&&(Yo=nn({},S.errors,Yo));let Or=Uo(),Zl=Ei(K),Yl=Or||Zl||dn.length>0;return nn({matches:R,loaderData:fh,errors:Yo},Yl?{fetchers:new Map(S.fetchers)}:{})}function Ke(N){if(N&&!ht(N[1]))return{[N[0]]:N[1].data};if(S.actionData)return Object.keys(S.actionData).length===0?null:S.actionData}function kn(N){return N.forEach(P=>{let R=S.fetchers.get(P.key),q=ds(void 0,R?R.data:void 0);S.fetchers.set(P.key,q)}),new Map(S.fetchers)}function wt(N,P,R,q){if(i)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");jt(N);let J=(q&&q.flushSync)===!0,ue=l||s,pe=Gm(S.location,S.matches,d,h.v7_prependBasename,R,h.v7_relativeSplatPath,P,q?.relative),ie=or(ue,pe,d),ae=Le(ie,ue,pe);if(ae.active&&ae.matches&&(ie=ae.matches),!ie){Rt(N,P,Xn(404,{pathname:pe}),{flushSync:J});return}let{path:ne,submission:oe,error:xe}=Lk(h.v7_normalizeFormMethod,!0,pe,q);if(xe){Rt(N,P,xe,{flushSync:J});return}let Ie=js(ie,ne),Pn=(q&&q.preventScrollReset)===!0;if(oe&&Ht(oe.formMethod)){Br(N,P,ne,Ie,ie,ae.active,J,Pn,oe);return}se.set(N,{routeId:P,path:ne}),xt(N,P,ne,Ie,ie,ae.active,J,Pn,oe)}async function Br(N,P,R,q,J,ue,pe,ie,ae){On(),se.delete(N);function ne(pn){if(!pn.route.action&&!pn.route.lazy){let ya=Xn(405,{method:ae.formMethod,pathname:R,routeId:P});return Rt(N,P,ya,{flushSync:pe}),!0}return!1}if(!ue&&ne(q))return;let oe=S.fetchers.get(N);Cn(N,j3(ae,oe),{flushSync:pe});let xe=new AbortController,Ie=za(e.history,R,xe.signal,ae);if(ue){let pn=await _n(J,new URL(Ie.url).pathname,Ie.signal,N);if(pn.type==="aborted")return;if(pn.type==="error"){Rt(N,P,pn.error,{flushSync:pe});return}else if(pn.matches){if(J=pn.matches,q=js(J,R),ne(q))return}else{Rt(N,P,Xn(404,{pathname:R}),{flushSync:pe});return}}D.set(N,xe);let Pn=M,Fe=(await Ft("action",S,Ie,[q],J,N))[q.route.id];if(Ie.signal.aborted){D.get(N)===xe&&D.delete(N);return}if(h.v7_fetcherPersist&&we.has(N)){if($r(Fe)||ht(Fe)){Cn(N,Xi(void 0));return}}else{if($r(Fe))if(D.delete(N),K>Pn){Cn(N,Xi(void 0));return}else return $.add(N),Cn(N,ds(ae)),yt(Ie,Fe,!1,{fetcherSubmission:ae,preventScrollReset:ie});if(ht(Fe)){Rt(N,P,Fe.error);return}}if(cr(Fe))throw Xn(400,{type:"defer-action"});let dn=S.navigation.location||S.location,wa=za(e.history,dn,xe.signal),Zo=l||s,Ni=S.navigation.state!=="idle"?or(Zo,S.navigation.location,d):S.matches;ze(Ni,"Didn't find any matches after fetcher action");let ai=++M;Q.set(N,ai);let fh=ds(ae,Fe.data);S.fetchers.set(N,fh);let[Yo,Or]=Vk(e.history,S,Ni,ae,dn,!1,h.v7_skipActionErrorRevalidation,L,G,X,we,se,$,Zo,d,[q.route.id,Fe]);Or.filter(pn=>pn.key!==N).forEach(pn=>{let ya=pn.key,wv=S.fetchers.get(ya),EE=ds(void 0,wv?wv.data:void 0);S.fetchers.set(ya,EE),jt(ya),pn.controller&&D.set(ya,pn.controller)}),ce({fetchers:new Map(S.fetchers)});let Zl=()=>Or.forEach(pn=>jt(pn.key));xe.signal.addEventListener("abort",Zl);let{loaderResults:Yl,fetcherResults:De}=await hn(S,Ni,Yo,Or,wa);if(xe.signal.aborted)return;xe.signal.removeEventListener("abort",Zl),Q.delete(N),D.delete(N),Or.forEach(pn=>D.delete(pn.key));let cn=pd(Yl);if(cn)return yt(wa,cn.result,!1,{preventScrollReset:ie});if(cn=pd(De),cn)return $.add(cn.key),yt(wa,cn.result,!1,{preventScrollReset:ie});let{loaderData:xa,errors:Qo}=Gk(S,Ni,Yl,void 0,Or,De,Re);if(S.fetchers.has(N)){let pn=Xi(Fe.data);S.fetchers.set(N,pn)}Ei(ai),S.navigation.state==="loading"&&ai>K?(ze(A,"Expected pending action"),C&&C.abort(),be(S.navigation.location,{matches:Ni,loaderData:xa,errors:Qo,fetchers:new Map(S.fetchers)})):(ce({errors:Qo,loaderData:$k(S.loaderData,xa,Ni,Qo),fetchers:new Map(S.fetchers)}),L=!1)}async function xt(N,P,R,q,J,ue,pe,ie,ae){let ne=S.fetchers.get(N);Cn(N,ds(ae,ne?ne.data:void 0),{flushSync:pe});let oe=new AbortController,xe=za(e.history,R,oe.signal);if(ue){let Fe=await _n(J,new URL(xe.url).pathname,xe.signal,N);if(Fe.type==="aborted")return;if(Fe.type==="error"){Rt(N,P,Fe.error,{flushSync:pe});return}else if(Fe.matches)J=Fe.matches,q=js(J,R);else{Rt(N,P,Xn(404,{pathname:R}),{flushSync:pe});return}}D.set(N,oe);let Ie=M,$e=(await Ft("loader",S,xe,[q],J,N))[q.route.id];if(cr($e)&&($e=await Uf($e,xe.signal,!0)||$e),D.get(N)===oe&&D.delete(N),!xe.signal.aborted){if(we.has(N)){Cn(N,Xi(void 0));return}if($r($e))if(K>Ie){Cn(N,Xi(void 0));return}else{$.add(N),await yt(xe,$e,!1,{preventScrollReset:ie});return}if(ht($e)){Rt(N,P,$e.error);return}ze(!cr($e),"Unhandled fetcher deferred data"),Cn(N,Xi($e.data))}}async function yt(N,P,R,q){let{submission:J,fetcherSubmission:ue,preventScrollReset:pe,replace:ie}=q===void 0?{}:q;P.response.headers.has("X-Remix-Revalidate")&&(L=!0);let ae=P.response.headers.get("Location");ze(ae,"Expected a Location header on the redirect Response"),ae=Hk(ae,new URL(N.url),d);let ne=al(S.location,ae,{_isRedirect:!0});if(t){let Fe=!1;if(P.response.headers.has("X-Remix-Reload-Document"))Fe=!0;else if(Hf.test(ae)){const dn=e.history.createURL(ae);Fe=dn.origin!==n.location.origin||Io(dn.pathname,d)==null}if(Fe){ie?n.location.replace(ae):n.location.assign(ae);return}}C=null;let oe=ie===!0||P.response.headers.has("X-Remix-Replace")?fn.Replace:fn.Push,{formMethod:xe,formAction:Ie,formEncType:Pn}=S.navigation;!J&&!ue&&xe&&Ie&&Pn&&(J=Jk(S.navigation));let $e=J||ue;if(i3.has(P.response.status)&&$e&&Ht($e.formMethod))await Oe(oe,ne,{submission:nn({},$e,{formAction:ae}),preventScrollReset:pe||E,enableViewTransition:R?O:void 0});else{let Fe=Zh(ne,J);await Oe(oe,ne,{overrideNavigation:Fe,fetcherSubmission:ue,preventScrollReset:pe||E,enableViewTransition:R?O:void 0})}}async function Ft(N,P,R,q,J,ue){let pe,ie={};try{pe=await u3(c,N,P,R,q,J,ue,o,a)}catch(ae){return q.forEach(ne=>{ie[ne.route.id]={type:We.error,error:ae}}),ie}for(let[ae,ne]of Object.entries(pe))if(b3(ne)){let oe=ne.result;ie[ae]={type:We.redirect,response:m3(oe,R,ae,J,d,h.v7_relativeSplatPath)}}else ie[ae]=await g3(ne);return ie}async function hn(N,P,R,q,J){let ue=N.matches,pe=Ft("loader",N,J,R,P,null),ie=Promise.all(q.map(async oe=>{if(oe.matches&&oe.match&&oe.controller){let Ie=(await Ft("loader",N,za(e.history,oe.path,oe.controller.signal),[oe.match],oe.matches,oe.key))[oe.match.route.id];return{[oe.key]:Ie}}else return Promise.resolve({[oe.key]:{type:We.error,error:Xn(404,{pathname:oe.path})}})})),ae=await pe,ne=(await ie).reduce((oe,xe)=>Object.assign(oe,xe),{});return await Promise.all([w3(P,ae,J.signal,ue,N.loaderData),x3(P,ne,q)]),{loaderResults:ae,fetcherResults:ne}}function On(){L=!0,G.push(...Rr()),se.forEach((N,P)=>{D.has(P)&&X.add(P),jt(P)})}function Cn(N,P,R){R===void 0&&(R={}),S.fetchers.set(N,P),ce({fetchers:new Map(S.fetchers)},{flushSync:(R&&R.flushSync)===!0})}function Rt(N,P,R,q){q===void 0&&(q={});let J=qr(S.matches,P);ka(N),ce({errors:{[J.route.id]:R},fetchers:new Map(S.fetchers)},{flushSync:(q&&q.flushSync)===!0})}function Mr(N){return le.set(N,(le.get(N)||0)+1),we.has(N)&&we.delete(N),S.fetchers.get(N)||r3}function ka(N){let P=S.fetchers.get(N);D.has(N)&&!(P&&P.state==="loading"&&Q.has(N))&&jt(N),se.delete(N),Q.delete(N),$.delete(N),h.v7_fetcherPersist&&we.delete(N),X.delete(N),S.fetchers.delete(N)}function Ul(N){let P=(le.get(N)||0)-1;P<=0?(le.delete(N),we.add(N),h.v7_fetcherPersist||ka(N)):le.set(N,P),ce({fetchers:new Map(S.fetchers)})}function jt(N){let P=D.get(N);P&&(P.abort(),D.delete(N))}function Ci(N){for(let P of N){let R=Mr(P),q=Xi(R.data);S.fetchers.set(P,q)}}function Uo(){let N=[],P=!1;for(let R of $){let q=S.fetchers.get(R);ze(q,"Expected fetcher: "+R),q.state==="loading"&&($.delete(R),N.push(R),P=!0)}return Ci(N),P}function Ei(N){let P=[];for(let[R,q]of Q)if(q<N){let J=S.fetchers.get(R);ze(J,"Expected fetcher: "+R),J.state==="loading"&&(jt(R),Q.delete(R),P.push(R))}return Ci(P),P.length>0}function ph(N,P){let R=S.blockers.get(N)||ls;return I.get(N)!==P&&I.set(N,P),R}function Gl(N){S.blockers.delete(N),I.delete(N)}function Fr(N,P){let R=S.blockers.get(N)||ls;ze(R.state==="unblocked"&&P.state==="blocked"||R.state==="blocked"&&P.state==="blocked"||R.state==="blocked"&&P.state==="proceeding"||R.state==="blocked"&&P.state==="unblocked"||R.state==="proceeding"&&P.state==="unblocked","Invalid blocker state transition: "+R.state+" -> "+P.state);let q=new Map(S.blockers);q.set(N,P),ce({blockers:q})}function Go(N){let{currentLocation:P,nextLocation:R,historyAction:q}=N;if(I.size===0)return;I.size>1&&go(!1,"A router only supports one blocker at a time");let J=Array.from(I.entries()),[ue,pe]=J[J.length-1],ie=S.blockers.get(ue);if(!(ie&&ie.state==="proceeding")&&pe({currentLocation:P,nextLocation:R,historyAction:q}))return ue}function $o(N){let P=Xn(404,{pathname:N}),R=l||s,{matches:q,route:J}=Yk(R);return Rr(),{notFoundMatches:q,route:J,error:P}}function Rr(N){let P=[];return Re.forEach((R,q)=>{(!N||N(q))&&(R.cancel(),P.push(q),Re.delete(q))}),P}function ii(N,P,R){if(p=N,w=P,f=R||null,!k&&S.navigation===$h){k=!0;let q=Me(S.location,S.matches);q!=null&&ce({restoreScrollPosition:q})}return()=>{p=null,w=null,f=null}}function $l(N,P){return f&&f(N,P.map(q=>MP(q,S.loaderData)))||N.key}function fe(N,P){if(p&&w){let R=$l(N,P);p[R]=w()}}function Me(N,P){if(p){let R=$l(N,P),q=p[R];if(typeof q=="number")return q}return null}function Le(N,P,R){if(u)if(N){if(Object.keys(N[0].params).length>0)return{active:!0,matches:nc(P,R,d,!0)}}else return{active:!0,matches:nc(P,R,d,!0)||[]};return{active:!1,matches:null}}async function _n(N,P,R,q){if(!u)return{type:"success",matches:N};let J=N;for(;;){let ue=l==null,pe=l||s,ie=o;try{await u({signal:R,path:P,matches:J,fetcherKey:q,patch:(oe,xe)=>{R.aborted||qk(oe,xe,pe,ie,a)}})}catch(oe){return{type:"error",error:oe,partialMatches:J}}finally{ue&&!R.aborted&&(s=[...s])}if(R.aborted)return{type:"aborted"};let ae=or(pe,P,d);if(ae)return{type:"success",matches:ae};let ne=nc(pe,P,d,!0);if(!ne||J.length===ne.length&&J.every((oe,xe)=>oe.route.id===ne[xe].route.id))return{type:"success",matches:null};J=ne}}function ct(N){o={},l=Uc(N,a,void 0,o)}function ri(N,P){let R=l==null;qk(N,P,l||s,o,a),R&&(s=[...s],ce({}))}return z={get basename(){return d},get future(){return h},get state(){return S},get routes(){return s},get window(){return n},initialize:he,subscribe:ke,enableScrollRestoration:ii,navigate:Pe,fetch:wt,revalidate:en,createHref:N=>e.history.createHref(N),encodeLocation:N=>e.history.encodeLocation(N),getFetcher:Mr,deleteFetcher:Ul,dispose:Z,getBlocker:ph,deleteBlocker:Gl,patchRoutes:ri,_internalFetchControllers:D,_internalActiveDeferreds:Re,_internalSetRoutes:ct},z}function s3(e){return e!=null&&("formData"in e&&e.formData!=null||"body"in e&&e.body!==void 0)}function Gm(e,n,t,i,a,o,s,l){let d,c;if(s){d=[];for(let h of n)if(d.push(h),h.route.id===s){c=h;break}}else d=n,c=n[n.length-1];let u=Bu(a||".",Du(d,o),Io(e.pathname,t)||e.pathname,l==="path");if(a==null&&(u.search=e.search,u.hash=e.hash),(a==null||a===""||a===".")&&c){let h=Gf(u.search);if(c.route.index&&!h)u.search=u.search?u.search.replace(/^\?/,"?index&"):"?index";else if(!c.route.index&&h){let g=new URLSearchParams(u.search),m=g.getAll("index");g.delete("index"),m.filter(f=>f).forEach(f=>g.append("index",f));let p=g.toString();u.search=p?"?"+p:""}}return i&&t!=="/"&&(u.pathname=u.pathname==="/"?t:_i([t,u.pathname])),ca(u)}function Lk(e,n,t,i){if(!i||!s3(i))return{path:t};if(i.formMethod&&!k3(i.formMethod))return{path:t,error:Xn(405,{method:i.formMethod})};let a=()=>({path:t,error:Xn(400,{type:"invalid-body"})}),o=i.formMethod||"get",s=e?o.toUpperCase():o.toLowerCase(),l=G1(t);if(i.body!==void 0){if(i.formEncType==="text/plain"){if(!Ht(s))return a();let g=typeof i.body=="string"?i.body:i.body instanceof FormData||i.body instanceof URLSearchParams?Array.from(i.body.entries()).reduce((m,p)=>{let[f,w]=p;return""+m+f+"="+w+`
50`},""):String(i.body);return{path:t,submission:{formMethod:s,formAction:l,formEncType:i.formEncType,formData:void 0,json:void 0,text:g}}}else if(i.formEncType==="application/json"){if(!Ht(s))return a();try{let g=typeof i.body=="string"?JSON.parse(i.body):i.body;return{path:t,submission:{formMethod:s,formAction:l,formEncType:i.formEncType,formData:void 0,json:g,text:void 0}}}catch{return a()}}}ze(typeof FormData=="function","FormData is not available in this environment");let d,c;if(i.formData)d=Zm(i.formData),c=i.formData;else if(i.body instanceof FormData)d=Zm(i.body),c=i.body;else if(i.body instanceof URLSearchParams)d=i.body,c=Uk(d);else if(i.body==null)d=new URLSearchParams,c=new FormData;else try{d=new URLSearchParams(i.body),c=Uk(d)}catch{return a()}let u={formMethod:s,formAction:l,formEncType:i&&i.formEncType||"application/x-www-form-urlencoded",formData:c,json:void 0,text:void 0};if(Ht(u.formMethod))return{path:t,submission:u};let h=Ir(t);return n&&h.search&&Gf(h.search)&&d.append("index",""),h.search="?"+d,{path:ca(h),submission:u}}function Wk(e,n,t){t===void 0&&(t=!1);let i=e.findIndex(a=>a.route.id===n);return i>=0?e.slice(0,t?i+1:i):e}function Vk(e,n,t,i,a,o,s,l,d,c,u,h,g,m,p,f){let w=f?ht(f[1])?f[1].error:f[1].data:void 0,k=e.createURL(n.location),v=e.createURL(a),x=t;o&&n.errors?x=Wk(t,Object.keys(n.errors)[0],!0):f&&ht(f[1])&&(x=Wk(t,f[0]));let y=f?f[1].statusCode:void 0,j=s&&y&&y>=400,z=x.filter((A,E)=>{let{route:C}=A;if(C.lazy)return!0;if(C.loader==null)return!1;if(o)return $m(C,n.loaderData,n.errors);if(l3(n.loaderData,n.matches[E],A)||d.some(W=>W===A.route.id))return!0;let O=n.matches[E],T=A;return Kk(A,nn({currentUrl:k,currentParams:O.params,nextUrl:v,nextParams:T.params},i,{actionResult:w,actionStatus:y,defaultShouldRevalidate:j?!1:l||k.pathname+k.search===v.pathname+v.search||k.search!==v.search||H1(O,T)}))}),S=[];return h.forEach((A,E)=>{if(o||!t.some(F=>F.route.id===A.routeId)||u.has(E))return;let C=or(m,A.path,p);if(!C){S.push({key:E,routeId:A.routeId,path:A.path,matches:null,match:null,controller:null});return}let O=n.fetchers.get(E),T=js(C,A.path),W=!1;g.has(E)?W=!1:c.has(E)?(c.delete(E),W=!0):O&&O.state!=="idle"&&O.data===void 0?W=l:W=Kk(T,nn({currentUrl:k,currentParams:n.matches[n.matches.length-1].params,nextUrl:v,nextParams:t[t.length-1].params},i,{actionResult:w,actionStatus:y,defaultShouldRevalidate:j?!1:l})),W&&S.push({key:E,routeId:A.routeId,path:A.path,matches:C,match:T,controller:new AbortController})}),[z,S]}function $m(e,n,t){if(e.lazy)return!0;if(!e.loader)return!1;let i=n!=null&&n[e.id]!==void 0,a=t!=null&&t[e.id]!==void 0;return!i&&a?!1:typeof e.loader=="function"&&e.loader.hydrate===!0?!0:!i&&!a}function l3(e,n,t){let i=!n||t.route.id!==n.route.id,a=e[t.route.id]===void 0;return i||a}function H1(e,n){let t=e.route.path;return e.pathname!==n.pathname||t!=null&&t.endsWith("*")&&e.params["*"]!==n.params["*"]}function Kk(e,n){if(e.route.shouldRevalidate){let t=e.route.shouldRevalidate(n);if(typeof t=="boolean")return t}return n.defaultShouldRevalidate}function qk(e,n,t,i,a){var o;let s;if(e){let c=i[e];ze(c,"No route found to patch children into: routeId = "+e),c.children||(c.children=[]),s=c.children}else s=t;let l=n.filter(c=>!s.some(u=>U1(c,u))),d=Uc(l,a,[e||"_","patch",String(((o=s)==null?void 0:o.length)||"0")],i);s.push(...d)}function U1(e,n){return"id"in e&&"id"in n&&e.id===n.id?!0:e.index===n.index&&e.path===n.path&&e.caseSensitive===n.caseSensitive?(!e.children||e.children.length===0)&&(!n.children||n.children.length===0)?!0:e.children.every((t,i)=>{var a;return(a=n.children)==null?void 0:a.some(o=>U1(t,o))}):!1}async function d3(e,n,t){if(!e.lazy)return;let i=await e.lazy();if(!e.lazy)return;let a=t[e.id];ze(a,"No route found in manifest");let o={};for(let s in i){let d=a[s]!==void 0&&s!=="hasErrorBoundary";go(!d,'Route "'+a.id+'" has a static property "'+s+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+s+'" will be ignored.')),!d&&!DP.has(s)&&(o[s]=i[s])}Object.assign(a,o),Object.assign(a,nn({},n(a),{lazy:void 0}))}async function c3(e){let{matches:n}=e,t=n.filter(a=>a.shouldLoad);return(await Promise.all(t.map(a=>a.resolve()))).reduce((a,o,s)=>Object.assign(a,{[t[s].route.id]:o}),{})}async function u3(e,n,t,i,a,o,s,l,d,c){let u=o.map(m=>m.route.lazy?d3(m.route,d,l):void 0),h=o.map((m,p)=>{let f=u[p],w=a.some(v=>v.route.id===m.route.id);return nn({},m,{shouldLoad:w,resolve:async v=>(v&&i.method==="GET"&&(m.route.lazy||m.route.loader)&&(w=!0),w?h3(n,i,m,f,v,c):Promise.resolve({type:We.data,result:void 0}))})}),g=await e({matches:h,request:i,params:o[0].params,fetcherKey:s,context:c});try{await Promise.all(u)}catch{}return g}async function h3(e,n,t,i,a,o){let s,l,d=c=>{let u,h=new Promise((p,f)=>u=f);l=()=>u(),n.signal.addEventListener("abort",l);let g=p=>typeof c!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+e+'" [routeId: '+t.route.id+"]"))):c({request:n,params:t.params,context:o},...p!==void 0?[p]:[]),m=(async()=>{try{return{type:"data",result:await(a?a(f=>g(f)):g())}}catch(p){return{type:"error",result:p}}})();return Promise.race([m,h])};try{let c=t.route[e];if(i)if(c){let u,[h]=await Promise.all([d(c).catch(g=>{u=g}),i]);if(u!==void 0)throw u;s=h}else if(await i,c=t.route[e],c)s=await d(c);else if(e==="action"){let u=new URL(n.url),h=u.pathname+u.search;throw Xn(405,{method:n.method,pathname:h,routeId:t.route.id})}else return{type:We.data,result:void 0};else if(c)s=await d(c);else{let u=new URL(n.url),h=u.pathname+u.search;throw Xn(404,{pathname:h})}ze(s.result!==void 0,"You defined "+(e==="action"?"an action":"a loader")+" for route "+('"'+t.route.id+"\" but didn't return anything from your `"+e+"` ")+"function. Please return a value or `null`.")}catch(c){return{type:We.error,result:c}}finally{l&&n.signal.removeEventListener("abort",l)}return s}async function g3(e){let{result:n,type:t}=e;if($1(n)){let h;try{let g=n.headers.get("Content-Type");g&&/\bapplication\/json\b/.test(g)?n.body==null?h=null:h=await n.json():h=await n.text()}catch(g){return{type:We.error,error:g}}return t===We.error?{type:We.error,error:new Gc(n.status,n.statusText,h),statusCode:n.status,headers:n.headers}:{type:We.data,data:h,statusCode:n.status,headers:n.headers}}if(t===We.error){if(Qk(n)){var i,a;if(n.data instanceof Error){var o,s;return{type:We.error,error:n.data,statusCode:(o=n.init)==null?void 0:o.status,headers:(s=n.init)!=null&&s.headers?new Headers(n.init.headers):void 0}}return{type:We.error,error:new Gc(((i=n.init)==null?void 0:i.status)||500,void 0,n.data),statusCode:ol(n)?n.status:void 0,headers:(a=n.init)!=null&&a.headers?new Headers(n.init.headers):void 0}}return{type:We.error,error:n,statusCode:ol(n)?n.status:void 0}}if(v3(n)){var l,d;return{type:We.deferred,deferredData:n,statusCode:(l=n.init)==null?void 0:l.status,headers:((d=n.init)==null?void 0:d.headers)&&new Headers(n.init.headers)}}if(Qk(n)){var c,u;return{type:We.data,data:n.data,statusCode:(c=n.init)==null?void 0:c.status,headers:(u=n.init)!=null&&u.headers?new Headers(n.init.headers):void 0}}return{type:We.data,data:n}}function m3(e,n,t,i,a,o){let s=e.headers.get("Location");if(ze(s,"Redirects returned/thrown from loaders/actions must have a Location header"),!Hf.test(s)){let l=i.slice(0,i.findIndex(d=>d.route.id===t)+1);s=Gm(new URL(n.url),l,a,!0,s,o),e.headers.set("Location",s)}return e}function Hk(e,n,t){if(Hf.test(e)){let i=e,a=i.startsWith("//")?new URL(n.protocol+i):new URL(i),o=Io(a.pathname,t)!=null;if(a.origin===n.origin&&o)return a.pathname+a.search+a.hash}return e}function za(e,n,t,i){let a=e.createURL(G1(n)).toString(),o={signal:t};if(i&&Ht(i.formMethod)){let{formMethod:s,formEncType:l}=i;o.method=s.toUpperCase(),l==="application/json"?(o.headers=new Headers({"Content-Type":l}),o.body=JSON.stringify(i.json)):l==="text/plain"?o.body=i.text:l==="application/x-www-form-urlencoded"&&i.formData?o.body=Zm(i.formData):o.body=i.formData}return new Request(a,o)}function Zm(e){let n=new URLSearchParams;for(let[t,i]of e.entries())n.append(t,typeof i=="string"?i:i.name);return n}function Uk(e){let n=new FormData;for(let[t,i]of e.entries())n.append(t,i);return n}function p3(e,n,t,i,a){let o={},s=null,l,d=!1,c={},u=t&&ht(t[1])?t[1].error:void 0;return e.forEach(h=>{if(!(h.route.id in n))return;let g=h.route.id,m=n[g];if(ze(!$r(m),"Cannot handle redirect results in processLoaderData"),ht(m)){let p=m.error;u!==void 0&&(p=u,u=void 0),s=s||{};{let f=qr(e,g);s[f.route.id]==null&&(s[f.route.id]=p)}o[g]=void 0,d||(d=!0,l=ol(m.error)?m.error.status:500),m.headers&&(c[g]=m.headers)}else cr(m)?(i.set(g,m.deferredData),o[g]=m.deferredData.data,m.statusCode!=null&&m.statusCode!==200&&!d&&(l=m.statusCode),m.headers&&(c[g]=m.headers)):(o[g]=m.data,m.statusCode&&m.statusCode!==200&&!d&&(l=m.statusCode),m.headers&&(c[g]=m.headers))}),u!==void 0&&t&&(s={[t[0]]:u},o[t[0]]=void 0),{loaderData:o,errors:s,statusCode:l||200,loaderHeaders:c}}function Gk(e,n,t,i,a,o,s){let{loaderData:l,errors:d}=p3(n,t,i,s);return a.forEach(c=>{let{key:u,match:h,controller:g}=c,m=o[u];if(ze(m,"Did not find corresponding fetcher result"),!(g&&g.signal.aborted))if(ht(m)){let p=qr(e.matches,h?.route.id);d&&d[p.route.id]||(d=nn({},d,{[p.route.id]:m.error})),e.fetchers.delete(u)}else if($r(m))ze(!1,"Unhandled fetcher revalidation redirect");else if(cr(m))ze(!1,"Unhandled fetcher deferred data");else{let p=Xi(m.data);e.fetchers.set(u,p)}}),{loaderData:l,errors:d}}function $k(e,n,t,i){let a=nn({},n);for(let o of t){let s=o.route.id;if(n.hasOwnProperty(s)?n[s]!==void 0&&(a[s]=n[s]):e[s]!==void 0&&o.route.loader&&(a[s]=e[s]),i&&i.hasOwnProperty(s))break}return a}function Zk(e){return e?ht(e[1])?{actionData:{}}:{actionData:{[e[0]]:e[1].data}}:{}}function qr(e,n){return(n?e.slice(0,e.findIndex(i=>i.route.id===n)+1):[...e]).reverse().find(i=>i.route.hasErrorBoundary===!0)||e[0]}function Yk(e){let n=e.length===1?e[0]:e.find(t=>t.index||!t.path||t.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:n}],route:n}}function Xn(e,n){let{pathname:t,routeId:i,method:a,type:o,message:s}=n===void 0?{}:n,l="Unknown Server Error",d="Unknown @remix-run/router error";return e===400?(l="Bad Request",a&&t&&i?d="You made a "+a+' request to "'+t+'" but '+('did not provide a `loader` for route "'+i+'", ')+"so there is no way to handle the request.":o==="defer-action"?d="defer() is not supported in actions":o==="invalid-body"&&(d="Unable to encode submission body")):e===403?(l="Forbidden",d='Route "'+i+'" does not match URL "'+t+'"'):e===404?(l="Not Found",d='No route matches URL "'+t+'"'):e===405&&(l="Method Not Allowed",a&&t&&i?d="You made a "+a.toUpperCase()+' request to "'+t+'" but '+('did not provide an `action` for route "'+i+'", ')+"so there is no way to handle the request.":a&&(d='Invalid request method "'+a.toUpperCase()+'"')),new Gc(e||500,l,new Error(d),!0)}function pd(e){let n=Object.entries(e);for(let t=n.length-1;t>=0;t--){let[i,a]=n[t];if($r(a))return{key:i,result:a}}}function G1(e){let n=typeof e=="string"?Ir(e):e;return ca(nn({},n,{hash:""}))}function f3(e,n){return e.pathname!==n.pathname||e.search!==n.search?!1:e.hash===""?n.hash!=="":e.hash===n.hash?!0:n.hash!==""}function b3(e){return $1(e.result)&&t3.has(e.result.status)}function cr(e){return e.type===We.deferred}function ht(e){return e.type===We.error}function $r(e){return(e&&e.type)===We.redirect}function Qk(e){return typeof e=="object"&&e!=null&&"type"in e&&"data"in e&&"init"in e&&e.type==="DataWithResponseInit"}function v3(e){let n=e;return n&&typeof n=="object"&&typeof n.data=="object"&&typeof n.subscribe=="function"&&typeof n.cancel=="function"&&typeof n.resolveData=="function"}function $1(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.headers=="object"&&typeof e.body<"u"}function k3(e){return n3.has(e.toLowerCase())}function Ht(e){return XP.has(e.toLowerCase())}async function w3(e,n,t,i,a){let o=Object.entries(n);for(let s=0;s<o.length;s++){let[l,d]=o[s],c=e.find(g=>g?.route.id===l);if(!c)continue;let u=i.find(g=>g.route.id===c.route.id),h=u!=null&&!H1(u,c)&&(a&&a[c.route.id])!==void 0;cr(d)&&h&&await Uf(d,t,!1).then(g=>{g&&(n[l]=g)})}}async function x3(e,n,t){for(let i=0;i<t.length;i++){let{key:a,routeId:o,controller:s}=t[i],l=n[a];e.find(c=>c?.route.id===o)&&cr(l)&&(ze(s,"Expected an AbortController for revalidating fetcher deferred result"),await Uf(l,s.signal,!0).then(c=>{c&&(n[a]=c)}))}}async function Uf(e,n,t){if(t===void 0&&(t=!1),!await e.deferredData.resolveData(n)){if(t)try{return{type:We.data,data:e.deferredData.unwrappedData}}catch(a){return{type:We.error,error:a}}return{type:We.data,data:e.deferredData.data}}}function Gf(e){return new URLSearchParams(e).getAll("index").some(n=>n==="")}function js(e,n){let t=typeof n=="string"?Ir(n).search:n.search;if(e[e.length-1].route.index&&Gf(t||""))return e[e.length-1];let i=V1(e);return i[i.length-1]}function Jk(e){let{formMethod:n,formAction:t,formEncType:i,text:a,formData:o,json:s}=e;if(!(!n||!t||!i)){if(a!=null)return{formMethod:n,formAction:t,formEncType:i,formData:void 0,json:void 0,text:a};if(o!=null)return{formMethod:n,formAction:t,formEncType:i,formData:o,json:void 0,text:void 0};if(s!==void 0)return{formMethod:n,formAction:t,formEncType:i,formData:void 0,json:s,text:void 0}}}function Zh(e,n){return n?{state:"loading",location:e,formMethod:n.formMethod,formAction:n.formAction,formEncType:n.formEncType,formData:n.formData,json:n.json,text:n.text}:{state:"loading",location:e,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function y3(e,n){return{state:"submitting",location:e,formMethod:n.formMethod,formAction:n.formAction,formEncType:n.formEncType,formData:n.formData,json:n.json,text:n.text}}function ds(e,n){return e?{state:"loading",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:n}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:n}}function j3(e,n){return{state:"submitting",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:n?n.data:void 0}}function Xi(e){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e}}function S3(e,n){try{let t=e.sessionStorage.getItem(q1);if(t){let i=JSON.parse(t);for(let[a,o]of Object.entries(i||{}))o&&Array.isArray(o)&&n.set(a,new Set(o||[]))}}catch{}}function z3(e,n){if(n.size>0){let t={};for(let[i,a]of n)t[i]=[...a];try{e.sessionStorage.setItem(q1,JSON.stringify(t))}catch(i){go(!1,"Failed to save applied view transitions in sessionStorage ("+i+").")}}}/**
51 * React Router v6.30.1
52 *
53 * Copyright (c) Remix Software Inc.
54 *
55 * This source code is licensed under the MIT license found in the
56 * LICENSE.md file in the root directory of this source tree.
57 *
58 * @license MIT
59 */function $c(){return $c=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},$c.apply(this,arguments)}const Mu=b.createContext(null),Z1=b.createContext(null),Pr=b.createContext(null),$f=b.createContext(null),Si=b.createContext({outlet:null,matches:[],isDataRoute:!1}),Y1=b.createContext(null);function A3(e,n){let{relative:t}=n===void 0?{}:n;Po()||ze(!1);let{basename:i,navigator:a}=b.useContext(Pr),{hash:o,pathname:s,search:l}=X1(e,{relative:t}),d=s;return i!=="/"&&(d=s==="/"?i:_i([i,s])),a.createHref({pathname:d,search:l,hash:o})}function Po(){return b.useContext($f)!=null}function dt(){return Po()||ze(!1),b.useContext($f).location}function Q1(e){b.useContext(Pr).static||b.useLayoutEffect(e)}function Fu(){let{isDataRoute:e}=b.useContext(Si);return e?_3():C3()}function C3(){Po()||ze(!1);let e=b.useContext(Mu),{basename:n,future:t,navigator:i}=b.useContext(Pr),{matches:a}=b.useContext(Si),{pathname:o}=dt(),s=JSON.stringify(Du(a,t.v7_relativeSplatPath)),l=b.useRef(!1);return Q1(()=>{l.current=!0}),b.useCallback(function(c,u){if(u===void 0&&(u={}),!l.current)return;if(typeof c=="number"){i.go(c);return}let h=Bu(c,JSON.parse(s),o,u.relative==="path");e==null&&n!=="/"&&(h.pathname=h.pathname==="/"?n:_i([n,h.pathname])),(u.replace?i.replace:i.push)(h,u.state,u)},[n,i,s,o,e])}const E3=b.createContext(null);function N3(e){let n=b.useContext(Si).outlet;return n&&b.createElement(E3.Provider,{value:e},n)}function J1(){let{matches:e}=b.useContext(Si),n=e[e.length-1];return n?n.params:{}}function X1(e,n){let{relative:t}=n===void 0?{}:n,{future:i}=b.useContext(Pr),{matches:a}=b.useContext(Si),{pathname:o}=dt(),s=JSON.stringify(Du(a,i.v7_relativeSplatPath));return b.useMemo(()=>Bu(e,JSON.parse(s),o,t==="path"),[e,s,o,t])}function I3(e,n,t,i){Po()||ze(!1);let{navigator:a}=b.useContext(Pr),{matches:o}=b.useContext(Si),s=o[o.length-1],l=s?s.params:{};s&&s.pathname;let d=s?s.pathnameBase:"/";s&&s.route;let c=dt(),u;u=c;let h=u.pathname||"/",g=h;if(d!=="/"){let f=d.replace(/^\//,"").split("/");g="/"+h.replace(/^\//,"").split("/").slice(f.length).join("/")}let m=or(e,{pathname:g});return M3(m&&m.map(f=>Object.assign({},f,{params:Object.assign({},l,f.params),pathname:_i([d,a.encodeLocation?a.encodeLocation(f.pathname).pathname:f.pathname]),pathnameBase:f.pathnameBase==="/"?d:_i([d,a.encodeLocation?a.encodeLocation(f.pathnameBase).pathname:f.pathnameBase])})),o,t,i)}function P3(){let e=t2(),n=ol(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),t=e instanceof Error?e.stack:null,a={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return b.createElement(b.Fragment,null,b.createElement("h2",null,"Unexpected Application 
59Error!"),b.createElement("h3",{style:{fontStyle:"italic"}},n),t?b.createElement("pre",{style:a},t):null,null)}const T3=b.createElement(P3,null);class D3 extends b.Component{constructor(n){super(n),this.state={location:n.location,revalidation:n.revalidation,error:n.error}}static getDerivedStateFromError(n){return{error:n}}static getDerivedStateFromProps(n,t){return t.location!==n.location||t.revalidation!=="idle"&&n.revalidation==="idle"?{error:n.error,location:n.location,revalidation:n.revalidation}:{error:n.error!==void 0?n.error:t.error,location:t.location,revalidation:n.revalidation||t.revalidation}}componentDidCatch(n,t){console.error("React Router caught the following error during render",n,t)}render(){return this.state.error!==void 0?b.createElement(Si.Provider,{value:this.props.routeContext},b.createElement(Y1.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function B3(e){let{routeContext:n,match:t,children:i}=e,a=b.useContext(Mu);return a&&a.static&&a.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=t.route.id),b.createElement(Si.Provider,{value:n},i)}function M3(e,n,t,i){var a;if(n===void 0&&(n=[]),t===void 0&&(t=null),i===void 0&&(i=null),e==null){var o;if(!t)return null;if(t.errors)e=t.matches;else if((o=i)!=null&&o.v7_partialHydration&&n.length===0&&!t.initialized&&t.matches.length>0)e=t.matches;else return null}let s=e,l=(a=t)==null?void 0:a.errors;if(l!=null){let u=s.findIndex(h=>h.route.id&&l?.[h.route.id]!==void 0);u>=0||ze(!1),s=s.slice(0,Math.min(s.length,u+1))}let d=!1,c=-1;if(t&&i&&i.v7_partialHydration)for(let u=0;u<s.length;u++){let h=s[u];if((h.route.HydrateFallback||h.route.hydrateFallbackElement)&&(c=u),h.route.id){let{loaderData:g,errors:m}=t,p=h.route.loader&&g[h.route.id]===void 0&&(!m||m[h.route.id]===void 0);if(h.route.lazy||p){d=!0,c>=0?s=s.slice(0,c+1):s=[s[0]];break}}}return s.reduceRight((u,h,g)=>{let m,p=!1,f=null,w=null;t&&(m=l&&h.route.id?l[h.route.id]:void 0,f=h.route.errorElement||T3,d&&(c<0&&g===0?(p=!0,w=null):c===g&&(p=!0,w=h.route.hydrateFallbackElement||null)));let k=n.concat(s.slice(0,g+1)),v=()=>{let x;return m?x=f:p?x=w:h.route.Component?x=b.createElement(h.route.Component,null):h.route.element?x=h.route.element:x=u,b.createElement(B3,{match:h,routeContext:{outlet:u,matches:k,isDataRoute:t!=null},children:x})};return t&&(h.route.ErrorBoundary||h.route.errorElement||g===0)?b.createElement(D3,{location:t.location,revalidation:t.revalidation,component:f,error:m,children:v(),routeContext:{outlet:null,matches:k,isDataRoute:!0}}):v()},null)}var e2=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(e2||{}),Zc=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Zc||{});function F3(e){let n=b.useContext(Mu);return n||ze(!1),n}function R3(e){let n=b.useContext(Z1);return n||ze(!1),n}function O3(e){let n=b.useContext(Si);return n||ze(!1),n}function n2(e){let n=O3(),t=n.matches[n.matches.length-1];return t.route.id||ze(!1),t.route.id}function t2(){var e;let n=b.useContext(Y1),t=R3(Zc.UseRouteError),i=n2(Zc.UseRouteError);return n!==void 0?n:(e=t.errors)==null?void 0:e[i]}function _3(){let{router:e}=F3(e2.UseNavigateStable),n=n2(Zc.UseNavigateStable),t=b.useRef(!1);return Q1(()=>{t.current=!0}),b.useCallback(function(a,o){o===void 0&&(o={}),t.current&&(typeof a=="number"?e.navigate(a):e.navigate(a,$c({fromRouteId:n},o)))},[e,n])}function L3(e,n){e?.v7_startTransition,e?.v7_relativeSplatPath===void 0&&(!n||n.v7_relativeSplatPath),n&&(n.v7_fetcherPersist,n.v7_normalizeFormMethod,n.v7_partialHydration,n.v7_skipActionErrorRevalidation)}function i2(e){let{to:n,replace:t,state:i,relative:a}=e;Po()||ze(!1);let{future:o,static:s}=b.useContext(Pr),{matches:l}=b.useContext(Si),{pathname:d}=dt(),c=Fu(),u=Bu(n,Du(l,o.v7_relativeSplatPath),d,a==="path"),h=JSON.stringify(u);return b.useEffect(()=>c(JSON.parse(h),{replace:t,state:i,relative:a}),[c,h,a,t,i]),null}function W3(e){return N3(e.context)}function V3(e){let{basename:n="/",children:t=null,location:i,navigationType:a=fn.Pop,navigator:o,static:s=!1,future:l}=e;Po()&&ze(!1);let d=n.replace(/^\/*/,"/"),c=b.useMemo(()=>({basename:d,navigator:o,static:s,future:$c({v7_relativeSplatPath:!1},l)}),[d,l,o,s]);typeof i=="string"&&(i=Ir(i));
59let{pathname:u="/",search:h="",hash:g="",state:m=null,key:p="default"}=i,f=b.useMemo(()=>{let w=Io(u,d);return w==null?null:{location:{pathname:w,search:h,hash:g,state:m,key:p},navigationType:a}},[d,u,h,g,m,p,a]);return f==null?null:b.createElement(Pr.Provider,{value:c},b.createElement($f.Provider,{children:t,value:f}))}new Promise(()=>{});function K3(e){let n={hasErrorBoundary:e.ErrorBoundary!=null||e.errorElement!=null};return e.Component&&Object.assign(n,{element:b.createElement(e.Component),Component:void 0}),e.HydrateFallback&&Object.assign(n,{hydrateFallbackElement:b.createElement(e.HydrateFallback),HydrateFallback:void 0}),e.ErrorBoundary&&Object.assign(n,{errorElement:b.createElement(e.ErrorBoundary),ErrorBoundary:void 0}),n}/**
60 * React Router DOM v6.30.1
61 *
62 * Copyright (c) Remix Software Inc.
63 *
64 * This source code is licensed under the MIT license found in the
65 * LICENSE.md file in the root directory of this source tree.
66 *
67 * @license MIT
68 */function sl(){return sl=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},sl.apply(this,arguments)}function q3(e,n){if(e==null)return{};var t={},i=Object.keys(e),a,o;for(o=0;o<i.length;o++)a=i[o],!(n.indexOf(a)>=0)&&(t[a]=e[a]);return t}function H3(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function U3(e,n){return e.button===0&&(!n||n==="_self")&&!H3(e)}function Ym(e){return e===void 0&&(e=""),new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((n,t)=>{let i=e[t];return n.concat(Array.isArray(i)?i.map(a=>[t,a]):[[t,i]])},[]))}function G3(e,n){let t=Ym(e);return n&&n.forEach((i,a)=>{t.has(a)||n.getAll(a).forEach(o=>{t.append(a,o)})}),t}const $3=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],Z3="6";try{window.__reactRouterVersion=Z3}catch{}function Y3(e,n){return o3({basename:n?.basename,future:sl({},n?.future,{v7_prependBasename:!0}),history:IP({window:n?.window}),hydrationData:n?.hydrationData||Q3(),routes:e,mapRouteProperties:K3,dataStrategy:n?.dataStrategy,patchRoutesOnNavigation:n?.patchRoutesOnNavigation,window:n?.window}).initialize()}function Q3(){var e;let n=(e=window)==null?void 0:e.__staticRouterHydrationData;return n&&n.errors&&(n=sl({},n,{errors:J3(n.errors)})),n}function J3(e){if(!e)return null;let n=Object.entries(e),t={};for(let[i,a]of n)if(a&&a.__type==="RouteErrorResponse")t[i]=new Gc(a.status,a.statusText,a.data,a.internal===!0);else if(a&&a.__type==="Error"){if(a.__subType){let o=window[a.__subType];if(typeof o=="function")try{let s=new o(a.message);s.stack="",t[i]=s}catch{}}if(t[i]==null){let o=new Error(a.message);o.stack="",t[i]=o}}else t[i]=a;return t}const X3=b.createContext({isTransitioning:!1}),eT=b.createContext(new Map),nT="startTransition",Xk=Qp[nT],tT="flushSync",ew=_1[tT];function iT(e){Xk?Xk(e):e()}function cs(e){ew?ew(e):e()}class rT{constructor(){this.status="pending",this.promise=new Promise((n,t)=>{this.resolve=i=>{this.status==="pending"&&(this.status="resolved",n(i))},this.reject=i=>{this.status==="pending"&&(this.status="rejected",t(i))}})}}function aT(e){let{fallbackElement:n,router:t,future:i}=e,[a,o]=b.useState(t.state),[s,l]=b.useState(),[d,c]=b.useState({isTransitioning:!1}),[u,h]=b.useState(),[g,m]=b.useState(),[p,f]=b.useState(),w=b.useRef(new Map),{v7_startTransition:k}=i||{},v=b.useCallback(A=>{k?iT(A):A()},[k]),x=b.useCallback((A,E)=>{let{deletedFetchers:C,flushSync:O,viewTransitionOpts:T}=E;A.fetchers.forEach((F,L)=>{F.data!==void 0&&w.current.set(L,F.data)}),C.forEach(F=>w.current.delete(F));let W=t.window==null||t.window.document==null||typeof t.window.document.startViewTransition!="function";if(!T||W){O?cs(()=>o(A)):v(()=>
vendor: 4,249 bytes, line 68
68o(A));return}if(O){cs(()=>{g&&(u&&u.resolve(),g.skipTransition()),c({isTransitioning:!0,flushSync:!0,currentLocation:T.currentLocation,nextLocation:T.nextLocation})});let F=t.window.document.startViewTransition(()=>{cs(()=>o(A))});F.finished.finally(()=>{cs(()=>{h(void 0),m(void 0),l(void 0),c({isTransitioning:!1})})}),cs(()=>m(F));return}g?(u&&u.resolve(),g.skipTransition(),f({state:A,currentLocation:T.currentLocation,nextLocation:T.nextLocation})):(l(A),c({isTransitioning:!0,flushSync:!1,currentLocation:T.currentLocation,nextLocation:T.nextLocation}))},[t.window,g,u,w,v]);b.useLayoutEffect(()=>t.subscribe(x),[t,x]),b.useEffect(()=>{d.isTransitioning&&!d.flushSync&&h(new rT)},[d]),b.useEffect(()=>{if(u&&s&&t.window){let A=s,E=u.promise,C=t.window.document.startViewTransition(async()=>{v(()=>o(A)),await E});C.finished.finally(()=>{h(void 0),m(void 0),l(void 0),c({isTransitioning:!1})}),m(C)}},[v,s,u,t.window]),b.useEffect(()=>{u&&s&&a.location.key===s.location.key&&u.resolve()},[u,g,a.location,s]),b.useEffect(()=>{!d.isTransitioning&&p&&(l(p.state),c({isTransitioning:!0,flushSync:!1,currentLocation:p.currentLocation,nextLocation:p.nextLocation}),f(void 0))},[d.isTransitioning,p]),b.useEffect(()=>{},[]);let y=b.useMemo(()=>({createHref:t.createHref,encodeLocation:t.encodeLocation,go:A=>t.navigate(A),push:(A,E,C)=>t.navigate(A,{state:E,preventScrollReset:C?.preventScrollReset}),replace:(A,E,C)=>t.navigate(A,{replace:!0,state:E,preventScrollReset:C?.preventScrollReset})}),[t]),j=t.basename||"/",z=b.useMemo(()=>({router:t,navigator:y,static:!1,basename:j}),[t,y,j]),S=b.useMemo(()=>({v7_relativeSplatPath:t.future.v7_relativeSplatPath}),[t.future.v7_relativeSplatPath]);return b.useEffect(()=>L3(i,t.future),[i,t.future]),b.createElement(b.Fragment,null,b.createElement(Mu.Provider,{value:z},b.createElement(Z1.Provider,{value:a},b.createElement(eT.Provider,{value:w.current},b.createElement(X3.Provider,{value:d},b.createElement(V3,{basename:j,location:a.location,navigationType:a.historyAction,navigator:y,future:S},a.initialized||t.future.v7_partialHydration?b.createElement(oT,{routes:t.routes,future:t.future,state:a}):n))))),null)}const oT=b.memo(sT);function sT(e){let{routes:n,future:t,state:i}=e;return I3(n,void 0,i,t)}const lT=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",dT=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,_=b.forwardRef(function(n,t){let{onClick:i,relative:a,reloadDocument:o,replace:s,state:l,target:d,to:c,preventScrollReset:u,viewTransition:h}=n,g=q3(n,$3),{basename:m}=b.useContext(Pr),p,f=!1;if(typeof c=="string"&&dT.test(c)&&(p=c,lT))try{let x=new URL(window.location.href),y=c.startsWith("//")?new URL(x.protocol+c):new URL(c),j=Io(y.pathname,m);y.origin===x.origin&&j!=null?c=j+y.search+y.hash:f=!0}catch{}let w=A3(c,{relative:a}),k=cT(c,{replace:s,state:l,target:d,preventScrollReset:u,relative:a,viewTransition:h});function v(x){i&&i(x),x.defaultPrevented||k(x)}return b.createElement("a",sl({},g,{href:p||w,onClick:f||o?i:v,ref:t,target:d}))});var nw;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(nw||(nw={}));var tw;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(tw||(tw={}));function cT(e,n){let{target:t,replace:i,state:a,preventScrollReset:o,relative:s,viewTransition:l}=n===void 0?{}:n,d=Fu(),c=dt(),u=X1(e,{relative:s});return b.useCallback(h=>{if(U3(h,t)){h.preventDefault();let g=i!==void 0?i:ca(c)===ca(u);d(e,{replace:g,state:a,preventScrollReset:o,relative:s,viewTransition:l})}},[c,d,u,i,a,t,e,o,s,l])}function uT(e){let n=b.useRef(Ym(e)),t=b.useRef(!1),i=dt(),a=b.useMemo(()=>G3(i.search,t.current?null:n.current),[i.search]),o=Fu(),s=b.useCallback((l,d)=>{const c=Ym(typeof l=="function"?l(a):l);t.current=!0,o("?"+c,d)},[o,a]);return[a,s]}const hT="modulepreload",gT=function(e){return"/"+e},iw={},mT=function(n,t,i){let a=Promise.resolve();if(t&&t.length>0){document.getElementsByTagName("link");const s=document.querySelector("meta[property=csp-nonce]"),l=s?.nonce||s?.getAttribute("nonce");a=Promise.allSettled(t.map(d=>
68{if(d=gT(d),d in iw)return;iw[d]=!0;const c=d.endsWith(".css"),u=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${d}"]${u}`))return;const h=document.createElement("link");if(h.rel=c?"stylesheet":hT,c||(h.as="script"),h.crossOrigin="",h.href=d,l&&h.setAttribute("nonce",l),document.head.appendChild(h),c)return new Promise((g,m)=>{h.addEventListener("load",g),h.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${d}`)))})}))}function o(s){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=s,window.dispatchEvent(l),!l.defaultPrevented)throw s}return a.then(s=>{for(const l of s||[])l.status==="rejected"&&o(l.reason);return n().catch(o)})},tc={..._1},{version:r2,render:VQ,hydrate:pT}=tc,fT=Number((r2||"").split(".")[0])>17,bT=Number((r2||"").split(".")[0])>18;function vT(e,n,t={}){const{useLegacyRender:i}=t;if(i||!fT)pT(e,n);else if(bT)mT(()=>import("./client-B-SJxvyA.js").then(a=>a.c),[]).then(({default:{hydrateRoot:a}})=>{V.startTransition(()=>{a(n,e)})});else{tc.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint=!0;const{hydrateRoot:a}=tc;if(!a)throw new Error("hydrateRoot not found");V.startTransition(()=>{a(n,e),tc.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint=!1})}}function kT(e){return document.readyState==="loading"?new Promise(n=>{document.addEventListener("DOMContentLoaded",()=>n(e))}):Promise.resolve(e)}function rw(e,n){return!e||!n?e||n||"":(e[e.length-1]==="/"&&(e=e.substring(0,e.length-1)),n[0]!=="/"&&(n=`/${n}`),e+n)}function wT(e,n){if(e===n)return"/";const t=xT(n);return e.startsWith(t)?e.slice(t.length-1):e}function xT(e){return e[e.length-1]!=="/"?`${e}/`:e}function aw(e){return e[0]!=="/"?`/${e}`:e}function a2(e,n,t=[]){return e.map((i,a)=>{const o=[...t,String(a)],s=typeof i.id=="string"?i.id:o.join("-");if(i.id=s,yT(i))return{...i,...n(i),id:s};{const l={...i,...n(i),id:s,children:void 0};return i.children&&(l.children=a2(i.children,n,o)),l}})}function yT(e){return e.index===!0}function jT(e){try{return JSON.parse(e||"{}")}catch(n){return console.error("[SSG] On state deserialization -",n,e),{}}}function ST(e,n,t={}){const{transformState:i,rootContainer:a="#root",ssrWhenDev:o,getStyleCollector:s=null}=t,l=typeof window<"u",d=e.basename??"/",{v7_startTransition:c=!0,...u}=e.future??{};async function h(m=!1,p){const f=m?Y3(a2(e.routes,g),{basename:d,future:u}):void 0,w=[],k=m?()=>{}:j=>w.push(j),v=()=>Promise.all(w.map(j=>j())),x={isClient:l,routes:e.routes,router:f,routerOptions:e,onSSRAppRendered:k,triggerOnSSRAppRendered:v,initialState:{},transformState:i,routePath:p,base:d,getStyleCollector:s,routerType:"remix"};m&&(await kT(),x.initialState=i?.(window.__INITIAL_STATE__||{})||jT(window.__INITIAL_STATE__)),await n?.(x);const y=x.initialState;return{...x,initialState:y}}return l&&(async()=>{const m=typeof a=="string"?document.querySelector(a):a;if(!m){typeof $jsdom>"u"&&console.warn("[vite-react-ssg] Root container not found.");return}const p=or(e.routes,window.location,d)?.filter(x=>x.route.lazy);p&&p?.length>0&&await Promise.all(p.map(async x=>{const y=await x.route.lazy();Object.assign(x.route,{...y,lazy:void 0})}));const f=await h(!0);window.__VITE_REACT_SSG_CONTEXT__=f;const{router:w}=f,k=r.jsx(Pa,{children:r.jsx(aT,{router:w,future:{v7_startTransition:c}})}),v=document.querySelector("[data-server-rendered=true]")!==null;vT(k,m,t)})(),h;function g(m){if(!(document.querySelector("[data-server-rendered=true]")!==null))return m;const f=async({request:w})=>{{if(!window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__){const z=rw(d,`static-loader-data-manifest-${window.__VITE_REACT_SSG_HASH__}.json`);window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__=await(await fetch(aw(z))).json()}const{url:k}=w;let{pathname:v}=new URL(k);d!=="/"&&(v=wT(v,d));const y=window.__VITE_REACT_SSG_STATIC_LOADER_MANIFEST__?.[v];if(!y)return null;if(window.__VITE_REACT_SSG_STATIC_LOADER_DATA__||(window.__VITE_REACT_SSG_STATIC_LOADER_DATA__={}),!window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[v]){const z=rw(d,y);window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[v]=await(await fetch(aw(z))).json()}return window.__VITE_REACT_SSG_STATIC_LOADER_DATA__[v]?.[m.id]??null}};return m.loader=f,m}}var Ru=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Ou=typeof window>"u"||"Deno"in globalThis;function Kt(){}function zT(e,n){return typeof e=="function"?e(n):e}function AT(e){return typeof e=="number"&&e>=0&&e!==1/0}function CT(e,n){return Math.max(e+(n||0)-Date.now(),0)}function Qm(e,n){return typeof e=="function"?e(n):e}function ET(e,n){return typeof e=="function"?e(n):e}function ow(e,n){const{type:t="all",exact:i,fetchStatus:a,predicate:o,queryKey:s,stale:l}=e;if(s){if(i){if(n.queryHash!==Zf(s,n.options))return!1}else if(!dl(n.queryKey,s))return!1}if(t!=="all"){const d=n.isActive();if(t==="active"&&!d||t==="inactive"&&d)return!1}return!(typeof l=="boolean"&&n.isStale()!==l||a&&a!==n.state.fetchStatus||o&&!o(n))}function sw(e,n){const{exact:t,status:i,predicate:a,mutationKey:o}=e;if(o){if(!n.options.mutationKey)return!1;if(t){if(ll(n.options.mutationKey)!==ll(o))return!1}else if(!dl(n.options.mutationKey,o))return!1}return!(i&&n.state.status!==i||a&&!a(n))}function Zf(e,n){return(n?.queryKeyHashFn||ll)(e)}function ll(e){return JSON.stringify(e,(n,t)=>Jm(t)?Object.keys(t).sort().reduce((i,a)=>(i[a]=t[a],i),{}):t)}function dl(e,n){return e===n?!0:typeof e!=typeof n?!1:e&&n&&typeof e=="object"&&typeof n=="object"?Object.keys(n).every(t=>dl(e[t],n[t])):!1}function o2(e,n){if(e===n)return e;const t=lw(e)&&lw(n);if(t||Jm(e)&&Jm(n)){const i=t?e:Object.keys(e),a=i.length,o=t?n:Object.keys(n),s=o.length,l=t?[]:{},d=new Set(i);let c=0;for(let u=0;u<s;u++){const h=t?u:o[u];(!t&&d.has(h)||t)&&e[h]===void 0&&n[h]===void 0?(l[h]=void 0,c++):(l[h]=o2(e[h],n[h]),l[h]===e[h]&&e[h]!==void 0&&c++)}return a===s&&c===a?e:l}return n}function lw(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function Jm(e){if(!dw(e))return!1;const n=e.constructor;if(n===void 0)return!0;const t=n.prototype;return!(!dw(t)||!t.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function dw(e){return Object.prototype.toString.call(e)==="[object Object]"}function NT(e){return new Promise(n=>{setTimeout(n,e)})}function IT(e,n,t){return typeof t.structuralSharing=="function"?t.structuralSharing(e,n):t.structuralSharing!==!1?o2(e,n):n}function PT(e,n,t=0){const i=[...e,n];return t&&i.length>t?i.slice(1):i}function TT(e,n,t=0){const i=[n,...e];return t&&i.length>t?i.slice(0,-1):i}var Yf=Symbol();function s2(e,n){return!e.queryFn&&n?.initialPromise?()=>n.initialPromise:!e.queryFn||e.queryFn===Yf?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}var DT=class extends Ru{#e;
vendor: 12,540 bytes, line 68
68#n;#t;constructor(){super(),this.#t=e=>{if(!Ou&&window.addEventListener){const n=()=>e();return window.addEventListener("visibilitychange",n,!1),()=>{window.removeEventListener("visibilitychange",n)}}}}onSubscribe(){this.#n||this.setEventListener(this.#t)}onUnsubscribe(){this.hasListeners()||(this.#n?.(),this.#n=void 0)}setEventListener(e){this.#t=e,this.#n?.(),this.#n=e(n=>{typeof n=="boolean"?this.setFocused(n):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){const e=this.isFocused();this.listeners.forEach(n=>{n(e)})}isFocused(){return typeof this.#e=="boolean"?this.#e:globalThis.document?.visibilityState!=="hidden"}},l2=new DT,BT=class extends Ru{#e=!0;#n;#t;constructor(){super(),this.#t=e=>{if(!Ou&&window.addEventListener){const n=()=>e(!0),t=()=>e(!1);return window.addEventListener("online",n,!1),window.addEventListener("offline",t,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",t)}}}}onSubscribe(){this.#n||this.setEventListener(this.#t)}onUnsubscribe(){this.hasListeners()||(this.#n?.(),this.#n=void 0)}setEventListener(e){this.#t=e,this.#n?.(),this.#n=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}},Yc=new BT;function MT(){let e,n;const t=new Promise((a,o)=>{e=a,n=o});t.status="pending",t.catch(()=>{});function i(a){Object.assign(t,a),delete t.resolve,delete t.reject}return t.resolve=a=>{i({status:"fulfilled",value:a}),e(a)},t.reject=a=>{i({status:"rejected",reason:a}),n(a)},t}function FT(e){return Math.min(1e3*2**e,3e4)}function d2(e){return(e??"online")==="online"?Yc.isOnline():!0}var c2=class extends Error{constructor(e){super("CancelledError"),this.revert=e?.revert,this.silent=e?.silent}};function Yh(e){return e instanceof c2}function u2(e){let n=!1,t=0,i=!1,a;const o=MT(),s=f=>{i||(g(new c2(f)),e.abort?.())},l=()=>{n=!0},d=()=>{n=!1},c=()=>l2.isFocused()&&(e.networkMode==="always"||Yc.isOnline())&&e.canRun(),u=()=>d2(e.networkMode)&&e.canRun(),h=f=>{i||(i=!0,e.onSuccess?.(f),a?.(),o.resolve(f))},g=f=>{i||(i=!0,e.onError?.(f),a?.(),o.reject(f))},m=()=>new Promise(f=>{a=w=>{(i||c())&&f(w)},e.onPause?.()}).then(()=>{a=void 0,i||e.onContinue?.()}),p=()=>{if(i)return;let f;const w=t===0?e.initialPromise:void 0;try{f=w??e.fn()}catch(k){f=Promise.reject(k)}Promise.resolve(f).then(h).catch(k=>{if(i)return;const v=e.retry??(Ou?0:3),x=e.retryDelay??FT,y=typeof x=="function"?x(t,k):x,j=v===!0||typeof v=="number"&&t<v||typeof v=="function"&&v(t,k);if(n||!j){g(k);return}t++,e.onFail?.(t,k),NT(y).then(()=>c()?void 0:m()).then(()=>{n?g(k):p()})})};return{promise:o,cancel:s,continue:()=>(a?.(),o),cancelRetry:l,continueRetry:d,canStart:u,start:()=>(u()?p():m().then(p),o)}}var RT=e=>setTimeout(e,0);function OT(){let e=[],n=0,t=l=>{l()},i=l=>{l()},a=RT;const o=l=>{n?e.push(l):a(()=>{t(l)})},s=()=>{const l=e;e=[],l.length&&a(()=>{i(()=>{l.forEach(d=>{t(d)})})})};return{batch:l=>{let d;n++;try{d=l()}finally{n--,n||s()}return d},batchCalls:l=>(...d)=>{o(()=>{l(...d)})},schedule:o,setNotifyFunction:l=>{t=l},setBatchNotifyFunction:l=>{i=l},setScheduler:l=>{a=l}}}var Un=OT(),h2=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),AT(this.gcTime)&&(this.#e=setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(Ou?1/0:5*60*1e3))}clearGcTimeout(){this.#e&&(clearTimeout(this.#e),this.#e=void 0)}},_T=class extends h2{#e;#n;#t;#r;#i;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#r=e.client,this.#t=this.#r.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#e=WT(this.options),this.state=e.state??this.#e,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#i?.promise}setOptions(e){this.options={...this.#o,...e},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&this.#t.remove(this)}setData(e,n){const t=IT(this.state.data,e,this.options);return this.#a({data:t,type:"success",dataUpdatedAt:n?.updatedAt,manual:n?.manual}),t}setState(e,n){this.#a({type:"setState",state:e,setStateOptions:n})}cancel(e){const n=this.#i?.promise;return this.#i?.cancel(e),n?n.then(Kt).catch(Kt):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(this.#e)}isActive(){return this.observers.some(e=>ET(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===Yf||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>Qm(e.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e==="static"?!1:this.state.isInvalidated?!0:!CT(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(n=>n.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#i?.continue()}onOnline(){this.observers.find(n=>n.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#i?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#t.notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(n=>n!==e),this.observers.length||(this.#i&&(this.#s?this.#i.cancel({revert:!0}):this.#i.cancelRetry()),this.scheduleGc()),this.#t.notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||this.#a({type:"invalidate"})}fetch(e,n){if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&n?.cancelRefetch)this.cancel({silent:!0});else if(this.#i)return this.#i.continueRetry(),this.#i.promise}if(e&&this.setOptions(e),!this.options.queryFn){const d=this.observers.find(c=>c.options.queryFn);d&&this.setOptions(d.options)}const t=new AbortController,i=d=>{Object.defineProperty(d,"signal",{enumerable:!0,get:()=>(this.#s=!0,t.signal)})},a=()=>{const d=s2(this.options,n),u=(()=>{const h={client:this.#r,queryKey:this.queryKey,meta:this.meta};return i(h),h})();return this.#s=!1,this.options.persister?this.options.persister(d,u,this):d(u)},s=(()=>{const d={fetchOptions:n,options:this.options,queryKey:this.queryKey,client:this.#r,state:this.state,fetchFn:a};return i(d),d})();this.options.behavior?.onFetch(s,this),this.#n=this.state,(this.state.fetchStatus==="idle"||this.state.fetchMeta!==s.fetchOptions?.meta)&&this.#a({type:"fetch",meta:s.fetchOptions?.meta});const l=d=>{Yh(d)&&d.silent||this.#a({type:"error",error:d}),Yh(d)||(this.#t.config.onError?.(d,this),this.#t.config.onSettled?.(this.state.data,d,this)),this.scheduleGc()};return this.#i=u2({initialPromise:n?.initialPromise,fn:s.fetchFn,abort:t.abort.bind(t),onSuccess:d=>{if(d===void 0){l(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(d)}catch(c){l(c);return}this.#t.config.onSuccess?.(d,this),this.#t.config.onSettled?.(d,this.state.error,this),this.scheduleGc()},onError:l,onFail:(d,c)=>{this.#a({type:"failed",failureCount:d,error:c})},onPause:()=>{this.#a({type:"pause"})},onContinue:()=>{this.#a({type:"continue"})},retry:s.options.retry,retryDelay:s.options.retryDelay,networkMode:s.options.networkMode,canRun:()=>!0}),this.#i.start()}#a(e){const n=t=>{switch(e.type){case"failed":return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...t,fetchStatus:"paused"};case"continue":return{...t,fetchStatus:"fetching"};case"fetch":return{...t,...LT(t.data,this.options),fetchMeta:e.meta??null};case"success":return this.#n=void 0,{...t,data:e.data,dataUpdateCount:t.dataUpdateCount+1,dataUpdatedAt:e.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":const i=e.error;return Yh(i)&&i.revert&&this.#n?{...this.#n,fetchStatus:"idle"}:{...t,error:i,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:i,fetchStatus:"idle",status:"error"};case"invalidate":return{...t,isInvalidated:!0};case"setState":return{...t,...e.state}}};this.state=n(this.state),Un.batch(()=>{this.observers.forEach(t=>{t.onQueryUpdate()}),this.#t.notify({query:this,type:"updated",action:e})})}};function LT(e,n){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:d2(n.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function WT(e){const n=typeof e.initialData=="function"?e.initialData():e.initialData,t=n!==void 0,i=t?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:n,dataUpdateCount:0,dataUpdatedAt:t?i??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:t?"success":"pending",fetchStatus:"idle"}}var VT=class extends Ru{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,n,t){const i=n.queryKey,a=n.queryHash??Zf(i,n);let o=this.get(a);return o||(o=new _T({client:e,queryKey:i,queryHash:a,options:e.defaultQueryOptions(n),state:t,defaultOptions:e.getQueryDefaults(i)}),this.add(o)),o}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){const n=this.#e.get(e.queryHash);n&&(e.destroy(),n===e&&this.#e.delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){Un.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){const n={exact:!0,...e};return this.getAll().find(t=>ow(n,t))}findAll(e={}){const n=this.getAll();return Object.keys(e).length>0?n.filter(t=>ow(e,t)):n}notify(e){Un.batch(()=>{this.listeners.forEach(n=>{n(e)})})}onFocus(){Un.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){Un.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},KT=class extends h2{#e;#n;#t;constructor(e){super(),this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#e=[],this.state=e.state||qT(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#e.includes(e)||(this.#e.push(e),this.clearGcTimeout(),this.#n.notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){this.#e=this.#e.filter(n=>n!==e),this.scheduleGc(),this.#n.notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){this.#e.length||(this.state.status==="pending"?this.scheduleGc():this.#n.remove(this))}continue(){return this.#t?.continue()??this.execute(this.state.variables)}async execute(e){const n=()=>{this.#r({type:"continue"})};this.#t=u2({fn:()=>this.options.mutationFn?this.options.mutationFn(e):Promise.reject(new Error("No mutationFn found")),onFail:(a,o)=>{this.#r({type:"failed",failureCount:a,error:o})},onPause:()=>{this.#r({type:"pause"})},onContinue:n,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});const t=this.state.status==="pending",i=!this.#t.canStart();try{if(t)n();else{this.#r({type:"pending",variables:e,isPaused:i}),await this.#n.config.onMutate?.(e,this);const o=await this.options.onMutate?.(e);o!==this.state.context&&this.#r({type:"pending",context:o,variables:e,isPaused:i})}const a=await this.#t.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this),await this.options.onSuccess?.(a,e,this.state.context),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this),await this.options.onSettled?.(a,null,e,this.state.context),this.#r({type:"success",data:a}),a}catch(a){try{throw await this.#n.config.onError?.(a,e,this.state.context,this),await this.options.onError?.(a,e,this.state.context),await this.#n.config.onSettled?.(void 0,a,this.state.variables,this.state.context,this),await this.options.onSettled?.(void 0,a,e,this.state.context),a}finally{this.#r({type:"error",error:a})}}finally{this.#n.runNext(this)}}#r(e){const n=t=>{switch(e.type){case"failed":return{...t,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...t,isPaused:!0};case"continue":return{...t,isPaused:!1};
vendor: 5,930 bytes, line 68
68case"pending":return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}};this.state=n(this.state),Un.batch(()=>{this.#e.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:"updated",action:e})})}};function qT(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var HT=class extends Ru{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#n=new Map,this.#t=0}#e;#n;#t;build(e,n,t){const i=new KT({mutationCache:this,mutationId:++this.#t,options:e.defaultMutationOptions(n),state:t});return this.add(i),i}add(e){this.#e.add(e);const n=fd(e);if(typeof n=="string"){const t=this.#n.get(n);t?t.push(e):this.#n.set(n,[e])}this.notify({type:"added",mutation:e})}remove(e){if(this.#e.delete(e)){const n=fd(e);if(typeof n=="string"){const t=this.#n.get(n);if(t)if(t.length>1){const i=t.indexOf(e);i!==-1&&t.splice(i,1)}else t[0]===e&&this.#n.delete(n)}}this.notify({type:"removed",mutation:e})}canRun(e){const n=fd(e);if(typeof n=="string"){const i=this.#n.get(n)?.find(a=>a.state.status==="pending");return!i||i===e}else return!0}runNext(e){const n=fd(e);return typeof n=="string"?this.#n.get(n)?.find(i=>i!==e&&i.state.isPaused)?.continue()??Promise.resolve():Promise.resolve()}clear(){Un.batch(()=>{this.#e.forEach(e=>{this.notify({type:"removed",mutation:e})}),this.#e.clear(),this.#n.clear()})}getAll(){return Array.from(this.#e)}find(e){const n={exact:!0,...e};return this.getAll().find(t=>sw(n,t))}findAll(e={}){return this.getAll().filter(n=>sw(e,n))}notify(e){Un.batch(()=>{this.listeners.forEach(n=>{n(e)})})}resumePausedMutations(){const e=this.getAll().filter(n=>n.state.isPaused);return Un.batch(()=>Promise.all(e.map(n=>n.continue().catch(Kt))))}};function fd(e){return e.options.scope?.id}function cw(e){return{onFetch:(n,t)=>{const i=n.options,a=n.fetchOptions?.meta?.fetchMore?.direction,o=n.state.data?.pages||[],s=n.state.data?.pageParams||[];let l={pages:[],pageParams:[]},d=0;const c=async()=>{let u=!1;const h=p=>{Object.defineProperty(p,"signal",{enumerable:!0,get:()=>(n.signal.aborted?u=!0:n.signal.addEventListener("abort",()=>{u=!0}),n.signal)})},g=s2(n.options,n.fetchOptions),m=async(p,f,w)=>{if(u)return Promise.reject();if(f==null&&p.pages.length)return Promise.resolve(p);const v=(()=>{const z={client:n.client,queryKey:n.queryKey,pageParam:f,direction:w?"backward":"forward",meta:n.options.meta};return h(z),z})(),x=await g(v),{maxPages:y}=n.options,j=w?TT:PT;return{pages:j(p.pages,x,y),pageParams:j(p.pageParams,f,y)}};if(a&&o.length){const p=a==="backward",f=p?UT:uw,w={pages:o,pageParams:s},k=f(i,w);l=await m(w,k,p)}else{const p=e??o.length;do{const f=d===0?s[0]??i.initialPageParam:uw(i,l);if(d>0&&f==null)break;l=await m(l,f),d++}while(d<p)}return l};n.options.persister?n.fetchFn=()=>n.options.persister?.(c,{client:n.client,queryKey:n.queryKey,meta:n.options.meta,signal:n.signal},t):n.fetchFn=c}}}function uw(e,{pages:n,pageParams:t}){const i=n.length-1;return n.length>0?e.getNextPageParam(n[i],n,t[i],t):void 0}function UT(e,{pages:n,pageParams:t}){return n.length>0?e.getPreviousPageParam?.(n[0],n,t[0],t):void 0}var GT=class{#e;#n;#t;#r;#i;#o;#s;#a;constructor(e={}){this.#e=e.queryCache||new VT,this.#n=e.mutationCache||new HT,this.#t=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#o=0}mount(){this.#o++,this.#o===1&&(this.#s=l2.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#a=Yc.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#o--,this.#o===0&&(this.#s?.(),this.#s=void 0,this.#a?.(),this.#a=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return this.#n.findAll({...e,status:"pending"}).length}getQueryData(e){const n=this.defaultQueryOptions({queryKey:e});return this.#e.get(n.queryHash)?.state.data}ensureQueryData(e){const n=this.defaultQueryOptions(e),t=this.#e.build(this,n),i=t.state.data;return i===void 0?this.fetchQuery(e):(e.revalidateIfStale&&t.isStaleByTime(Qm(n.staleTime,t))&&this.prefetchQuery(n),Promise.resolve(i))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:n,state:t})=>{const i=t.data;return[n,i]})}setQueryData(e,n,t){const i=this.defaultQueryOptions({queryKey:e}),o=this.#e.get(i.queryHash)?.state.data,s=zT(n,o);if(s!==void 0)return this.#e.build(this,i).setData(s,{...t,manual:!0})}setQueriesData(e,n,t){return Un.batch(()=>this.#e.findAll(e).map(({queryKey:i})=>[i,this.setQueryData(i,n,t)]))}getQueryState(e){const n=this.defaultQueryOptions({queryKey:e});return this.#e.get(n.queryHash)?.state}removeQueries(e){const n=this.#e;Un.batch(()=>{n.findAll(e).forEach(t=>{n.remove(t)})})}resetQueries(e,n){const t=this.#e;return Un.batch(()=>(t.findAll(e).forEach(i=>{i.reset()}),this.refetchQueries({type:"active",...e},n)))}cancelQueries(e,n={}){const t={revert:!0,...n},i=Un.batch(()=>this.#e.findAll(e).map(a=>a.cancel(t)));return Promise.all(i).then(Kt).catch(Kt)}invalidateQueries(e,n={}){return Un.batch(()=>(this.#e.findAll(e).forEach(t=>{t.invalidate()}),e?.refetchType==="none"?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??"active"},n)))}refetchQueries(e,n={}){const t={...n,cancelRefetch:n.cancelRefetch??!0},i=Un.batch(()=>this.#e.findAll(e).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let o=a.fetch(void 0,t);return t.throwOnError||(o=o.catch(Kt)),a.state.fetchStatus==="paused"?Promise.resolve():o}));return Promise.all(i).then(Kt)}fetchQuery(e){const n=this.defaultQueryOptions(e);
68n.retry===void 0&&(n.retry=!1);const t=this.#e.build(this,n);return t.isStaleByTime(Qm(n.staleTime,t))?t.fetch(n):Promise.resolve(t.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(Kt).catch(Kt)}fetchInfiniteQuery(e){return e.behavior=cw(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(Kt).catch(Kt)}ensureInfiniteQueryData(e){return e.behavior=cw(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return Yc.isOnline()?this.#n.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#n}getDefaultOptions(){return this.#t}setDefaultOptions(e){this.#t=e}setQueryDefaults(e,n){this.#r.set(ll(e),{queryKey:e,defaultOptions:n})}getQueryDefaults(e){const n=[...this.#r.values()],t={};return n.forEach(i=>{dl(e,i.queryKey)&&Object.assign(t,i.defaultOptions)}),t}setMutationDefaults(e,n){this.#i.set(ll(e),{mutationKey:e,defaultOptions:n})}getMutationDefaults(e){const n=[...this.#i.values()],t={};return n.forEach(i=>{dl(e,i.mutationKey)&&Object.assign(t,i.defaultOptions)}),t}defaultQueryOptions(e){if(e._defaulted)return e;const n={...this.#t.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return n.queryHash||(n.queryHash=Zf(n.queryKey,n)),n.refetchOnReconnect===void 0&&(n.refetchOnReconnect=n.networkMode!=="always"),n.throwOnError===void 0&&(n.throwOnError=!!n.suspense),!n.networkMode&&n.persister&&(n.networkMode="offlineFirst"),n.queryFn===Yf&&(n.enabled=!1),n}defaultMutationOptions(e){return e?._defaulted?e:{...this.#t.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#n.clear()}},$T=b.createContext(void 0),ZT=({client:e,children:n})=>(b.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),r.jsx($T.Provider,{value:e,children:n}));const YT=1,QT=1e6;let Qh=0;function JT(){return Qh=(Qh+1)%Number.MAX_SAFE_INTEGER,Qh.toString()}const Jh=new Map,hw=e=>{if(Jh.has(e))return;const n=setTimeout(()=>{Jh.delete(e),Ms({type:"REMOVE_TOAST",toastId:e})},QT);Jh.set(e,n)},XT=(e,n)=>{switch(n.type){case"ADD_TOAST":return{...e,toasts:[n.toast,...e.toasts].slice(0,YT)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(t=>t.id===n.toast.id?{...t,...n.toast}:t)};case"DISMISS_TOAST":{const{toastId:t}=n;return t?hw(t):e.toasts.forEach(i=>{hw(i.id)}),{...e,toasts:e.toasts.map(i=>i.id===t||t===void 0?{...i,open:!1}:i)}}case"REMOVE_TOAST":return n.toastId===void 0?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(t=>t.id!==n.toastId)}}},ic=[];let rc={toasts:[]};function Ms(e){rc=XT(rc,e),ic.forEach(n=>{n(rc)})}function e4({...e}){const n=JT(),t=a=>Ms({type:"UPDATE_TOAST",toast:{...a,id:n}}),i=()=>Ms({type:"DISMISS_TOAST",toastId:n});return Ms({type:"ADD_TOAST",toast:{...e,id:n,open:!0,onOpenChange:a=>{a||i()}}}),{id:n,dismiss:i,update:t}}function n4(){const[e,n]=b.useState(rc);return b.useEffect(()=>(ic.push(n),()=>{const t=ic.indexOf(n);t>-1&&ic.splice(t,1)}),[e]),{...e,toast:e4,dismiss:t=>Ms({type:"DISMISS_TOAST",toastId:t})}}function qe(e,n,{checkForDefaultPrevented:t=!0}={}){return function(a){if(e?.(a),t===!1||!a.defaultPrevented)return n?.(a)}}function gw(e,n){if(typeof e=="function")return e(n);e!=null&&(e.current=n)}function g2(...e){return n=>{let t=!1;const i=e.map(a=>{const o=gw(a,n);return!t&&typeof o=="function"&&(t=!0),o});if(t)return()=>{for(let a=0;a<i.length;a++){const o=i[a];typeof o=="function"?o():gw(e[a],null)}}}}function zn(...e){return b.useCallback(g2(...e),e)}function t4(e,n){const t=b.createContext(n),i=o=>{const{children:s,...l}=o,d=b.useMemo(()=>l,Object.values(l));return r.jsx(t.Provider,{value:d,children:s})};i.displayName=e+"Provider";function a(o){const s=b.useContext(t);if(s)return s;if(n!==void 0)return n;throw new Error(`\`${o}\` must be used within \`${e}\``)}return[i,a]}function Tr(e,n=[]){let t=[];function i(o,s){const l=b.createContext(s),d=t.length;t=[...t,s];const c=h=>{const{scope:g,children:m,...p}=h,f=g?.[e]?.[d]||l,w=b.useMemo(()=>p,Object.values(p));return r.jsx(f.Provider,{value:w,children:m})};c.displayName=o+"Provider";function u(h,g){const m=g?.[e]?.[d]||l,p=b.useContext(m);if(p)return p;if(s!==void 0)return s;throw new Error(`\`${h}\` must be used within \`${o}\``)}return[c,u]}const a=()=>{const o=t.map(s=>b.createContext(s));return function(l){const d=l?.[e]||o;return b.useMemo(()=>({[`__scope${e}`]:{...l,[e]:d}}),[l,d])}};return a.scopeName=e,[i,i4(a,...n)]}function i4(...e){const n=e[0];if(e.length===1)return n;const t=()=>{const i=e.map(a=>({useScope:a(),scopeName:a.scopeName}));
vendor: 5,418 bytes, line 68
68return function(o){const s=i.reduce((l,{useScope:d,scopeName:c})=>{const h=d(o)[`__scope${c}`];return{...l,...h}},{});return b.useMemo(()=>({[`__scope${n.scopeName}`]:s}),[s])}};return t.scopeName=n.scopeName,t}function cl(e){const n=a4(e),t=b.forwardRef((i,a)=>{const{children:o,...s}=i,l=b.Children.toArray(o),d=l.find(s4);if(d){const c=d.props.children,u=l.map(h=>h===d?b.Children.count(c)>1?b.Children.only(null):b.isValidElement(c)?c.props.children:null:h);return r.jsx(n,{...s,ref:a,children:b.isValidElement(c)?b.cloneElement(c,void 0,u):null})}return r.jsx(n,{...s,ref:a,children:o})});return t.displayName=`${e}.Slot`,t}var r4=cl("Slot");function a4(e){const n=b.forwardRef((t,i)=>{const{children:a,...o}=t;if(b.isValidElement(a)){const s=d4(a),l=l4(o,a.props);return a.type!==b.Fragment&&(l.ref=i?g2(i,s):s),b.cloneElement(a,l)}return b.Children.count(a)>1?b.Children.only(null):null});return n.displayName=`${e}.SlotClone`,n}var m2=Symbol("radix.slottable");function o4(e){const n=({children:t})=>r.jsx(r.Fragment,{children:t});return n.displayName=`${e}.Slottable`,n.__radixId=m2,n}function s4(e){return b.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===m2}function l4(e,n){const t={...n};for(const i in n){const a=e[i],o=n[i];/^on[A-Z]/.test(i)?a&&o?t[i]=(...l)=>{const d=o(...l);return a(...l),d}:a&&(t[i]=a):i==="style"?t[i]={...a,...o}:i==="className"&&(t[i]=[a,o].filter(Boolean).join(" "))}return{...e,...t}}function d4(e){let n=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning;return t?e.ref:(n=Object.getOwnPropertyDescriptor(e,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning,t?e.props.ref:e.props.ref||e.ref)}function p2(e){const n=e+"CollectionProvider",[t,i]=Tr(n),[a,o]=t(n,{collectionRef:{current:null},itemMap:new Map}),s=f=>{const{scope:w,children:k}=f,v=V.useRef(null),x=V.useRef(new Map).current;return r.jsx(a,{scope:w,itemMap:x,collectionRef:v,children:k})};s.displayName=n;const l=e+"CollectionSlot",d=cl(l),c=V.forwardRef((f,w)=>{const{scope:k,children:v}=f,x=o(l,k),y=zn(w,x.collectionRef);return r.jsx(d,{ref:y,children:v})});c.displayName=l;const u=e+"CollectionItemSlot",h="data-radix-collection-item",g=cl(u),m=V.forwardRef((f,w)=>{const{scope:k,children:v,...x}=f,y=V.useRef(null),j=zn(w,y),z=o(u,k);return V.useEffect(()=>(z.itemMap.set(y,{ref:y,...x}),()=>void z.itemMap.delete(y))),r.jsx(g,{[h]:"",ref:j,children:v})});m.displayName=u;function p(f){const w=o(e+"CollectionConsumer",f);return V.useCallback(()=>{const v=w.collectionRef.current;if(!v)return[];const x=Array.from(v.querySelectorAll(`[${h}]`));return Array.from(w.itemMap.values()).sort((z,S)=>x.indexOf(z.ref.current)-x.indexOf(S.ref.current))},[w.collectionRef,w.itemMap])}return[{Provider:s,Slot:c,ItemSlot:m},p,i]}var c4=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Ue=c4.reduce((e,n)=>{const t=cl(`Primitive.${n}`),i=b.forwardRef((a,o)=>{const{asChild:s,...l}=a,d=s?t:n;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),r.jsx(d,{...l,ref:o})});return i.displayName=`Primitive.${n}`,{...e,[n]:i}},{});function f2(e,n){e&&Cl.flushSync(()=>e.dispatchEvent(n))}function vi(e){const n=b.useRef(e);return b.useEffect(()=>{n.current=e}),b.useMemo(()=>(...t)=>n.current?.(...t),[])}function u4(e,n=globalThis?.document){const t=vi(e);b.useEffect(()=>{const i=a=>{a.key==="Escape"&&t(a)};return n.addEventListener("keydown",i,{capture:!0}),()=>n.removeEventListener("keydown",i,{capture:!0})},[t,n])}var h4="DismissableLayer",Xm="dismissableLayer.update",g4="dismissableLayer.pointerDownOutside",m4="dismissableLayer.focusOutside",mw,b2=b.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),_u=b.forwardRef((e,n)=>{const{disableOutsidePointerEvents:t=!1,onEscapeKeyDown:i,onPointerDownOutside:a,onFocusOutside:o,onInteractOutside:s,onDismiss:l,...d}=e,c=b.useContext(b2),[u,h]=b.useState(null),g=u?.ownerDocument??globalThis?.document,[,m]=b.useState({}),p=zn(n,S=>h(S)),f=Array.from(c.layers),[w]=[...c.layersWithOutsidePointerEventsDisabled].slice(-1),k=f.indexOf(w),v=u?f.indexOf(u):-1,x=c.layersWithOutsidePointerEventsDisabled.size>0,y=v>=k,j=f4(S=>{const A=S.target,E=[...c.branches].some(C=>C.contains(A));!y||E||(a?.(S),s?.(S),S.defaultPrevented||l?.())},g),z=b4(S=>{const A=S.target;[...c.branches].some(C=>C.contains(A))||(o?.(S),s?.(S),S.defaultPrevented||l?.())},g);return u4(S=>{v===c.layers.size-1&&(i?.(S),!S.defaultPrevented&&l&&(S.preventDefault(),l()))},g),b.useEffect(()=>{if(u)return t&&(c.layersWithOutsidePointerEventsDisabled.size===0&&(mw=g.body.style.pointerEvents,g.body.style.pointerEvents="none"),c.layersWithOutsidePointerEventsDisabled.add(u)),c.layers.add(u),pw(),()=>{t&&c.layersWithOutsidePointerEventsDisabled.size===1&&(g.body.style.pointerEvents=mw)}},[u,g,t,c]),b.useEffect(()=>()=>{u&&(c.layers.delete(u),c.layersWithOutsidePointerEventsDisabled.delete(u),pw())},[u,c]),b.useEffect(()=>{const S=()=>m({});return document.addEventListener(Xm,S),()=>document.removeEventListener(Xm,S)},[]),r.jsx(Ue.div,{...d,ref:p,style:{pointerEvents:x?y?"auto":"none":void 0,...e.style},onFocusCapture:qe(e.onFocusCapture,z.onFocusCapture),onBlurCapture:qe(e.onBlurCapture,z.onBlurCapture),onPointerDownCapture:qe(e.onPointerDownCapture,j.onPointerDownCapture)})});_u.displayName=h4;
vendor: 4,803 bytes, line 68
68var p4="DismissableLayerBranch",v2=b.forwardRef((e,n)=>{const t=b.useContext(b2),i=b.useRef(null),a=zn(n,i);return b.useEffect(()=>{const o=i.current;if(o)return t.branches.add(o),()=>{t.branches.delete(o)}},[t.branches]),r.jsx(Ue.div,{...e,ref:a})});v2.displayName=p4;function f4(e,n=globalThis?.document){const t=vi(e),i=b.useRef(!1),a=b.useRef(()=>{});return b.useEffect(()=>{const o=l=>{if(l.target&&!i.current){let d=function(){k2(g4,t,c,{discrete:!0})};const c={originalEvent:l};l.pointerType==="touch"?(n.removeEventListener("click",a.current),a.current=d,n.addEventListener("click",a.current,{once:!0})):d()}else n.removeEventListener("click",a.current);i.current=!1},s=window.setTimeout(()=>{n.addEventListener("pointerdown",o)},0);return()=>{window.clearTimeout(s),n.removeEventListener("pointerdown",o),n.removeEventListener("click",a.current)}},[n,t]),{onPointerDownCapture:()=>i.current=!0}}function b4(e,n=globalThis?.document){const t=vi(e),i=b.useRef(!1);return b.useEffect(()=>{const a=o=>{o.target&&!i.current&&k2(m4,t,{originalEvent:o},{discrete:!1})};return n.addEventListener("focusin",a),()=>n.removeEventListener("focusin",a)},[n,t]),{onFocusCapture:()=>i.current=!0,onBlurCapture:()=>i.current=!1}}function pw(){const e=new CustomEvent(Xm);document.dispatchEvent(e)}function k2(e,n,t,{discrete:i}){const a=t.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:t});n&&a.addEventListener(e,n,{once:!0}),i?f2(a,o):a.dispatchEvent(o)}var v4=_u,k4=v2,ki=globalThis?.document?b.useLayoutEffect:()=>{},w4="Portal",Qf=b.forwardRef((e,n)=>{const{container:t,...i}=e,[a,o]=b.useState(!1);ki(()=>o(!0),[]);const s=t||a&&globalThis?.document?.body;return s?qf.createPortal(r.jsx(Ue.div,{...i,ref:n}),s):null});Qf.displayName=w4;function x4(e,n){return b.useReducer((t,i)=>n[t][i]??t,e)}var fa=e=>{const{present:n,children:t}=e,i=y4(n),a=typeof t=="function"?t({present:i.isPresent}):b.Children.only(t),o=zn(i.ref,j4(a));return typeof t=="function"||i.isPresent?b.cloneElement(a,{ref:o}):null};fa.displayName="Presence";function y4(e){const[n,t]=b.useState(),i=b.useRef(null),a=b.useRef(e),o=b.useRef("none"),s=e?"mounted":"unmounted",[l,d]=x4(s,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return b.useEffect(()=>{const c=bd(i.current);o.current=l==="mounted"?c:"none"},[l]),ki(()=>{const c=i.current,u=a.current;if(u!==e){const g=o.current,m=bd(c);e?d("MOUNT"):m==="none"||c?.display==="none"?d("UNMOUNT"):d(u&&g!==m?"ANIMATION_OUT":"UNMOUNT"),a.current=e}},[e,d]),ki(()=>{if(n){let c;const u=n.ownerDocument.defaultView??window,h=m=>{const f=bd(i.current).includes(m.animationName);if(m.target===n&&f&&(d("ANIMATION_END"),!a.current)){const w=n.style.animationFillMode;n.style.animationFillMode="forwards",c=u.setTimeout(()=>{n.style.animationFillMode==="forwards"&&(n.style.animationFillMode=w)})}},g=m=>{m.target===n&&(o.current=bd(i.current))};return n.addEventListener("animationstart",g),n.addEventListener("animationcancel",h),n.addEventListener("animationend",h),()=>{u.clearTimeout(c),n.removeEventListener("animationstart",g),n.removeEventListener("animationcancel",h),n.removeEventListener("animationend",h)}}else d("ANIMATION_END")},[n,d]),{isPresent:["mounted","unmountSuspended"].includes(l),ref:b.useCallback(c=>{i.current=c?getComputedStyle(c):null,t(c)},[])}}function bd(e){return e?.animationName||"none"}function j4(e){let n=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning;return t?e.ref:(n=Object.getOwnPropertyDescriptor(e,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning,t?e.props.ref:e.props.ref||e.ref)}var S4=Qp[" useInsertionEffect ".trim().toString()]||ki;function ba({prop:e,defaultProp:n,onChange:t=()=>{},caller:i}){const[a,o,s]=z4({defaultProp:n,onChange:t}),l=e!==void 0,d=l?e:a;{const u=b.useRef(e!==void 0);b.useEffect(()=>{const h=u.current;h!==l&&console.warn(`${i} is changing from ${h?"controlled":"uncontrolled"} to ${l?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),u.current=l},[l,i])}const c=b.useCallback(u=>{if(l){const h=A4(u)?u(e):u;h!==e&&s.current?.(h)}else o(u)},[l,e,o,s]);return[d,c]}function z4({defaultProp:e,onChange:n}){const[t,i]=b.useState(e),a=b.useRef(t),o=b.useRef(n);return S4(()=>{o.current=n},[n]),b.useEffect(()=>{a.current!==t&&(o.current?.(t),a.current=t)},[t,a]),[t,i,o]}function A4(e){return typeof e=="function"}var C4=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}
vendor: 9,315 bytes, line 68
68),E4="VisuallyHidden",Lu=b.forwardRef((e,n)=>r.jsx(Ue.span,{...e,ref:n,style:{...C4,...e.style}}));Lu.displayName=E4;var N4=Lu,Jf="ToastProvider",[Xf,I4,P4]=p2("Toast"),[w2,KQ]=Tr("Toast",[P4]),[T4,Wu]=w2(Jf),x2=e=>{const{__scopeToast:n,label:t="Notification",duration:i=5e3,swipeDirection:a="right",swipeThreshold:o=50,children:s}=e,[l,d]=b.useState(null),[c,u]=b.useState(0),h=b.useRef(!1),g=b.useRef(!1);return t.trim()||console.error(`Invalid prop \`label\` supplied to \`${Jf}\`. Expected non-empty \`string\`.`),r.jsx(Xf.Provider,{scope:n,children:r.jsx(T4,{scope:n,label:t,duration:i,swipeDirection:a,swipeThreshold:o,toastCount:c,viewport:l,onViewportChange:d,onToastAdd:b.useCallback(()=>u(m=>m+1),[]),onToastRemove:b.useCallback(()=>u(m=>m-1),[]),isFocusedToastEscapeKeyDownRef:h,isClosePausedRef:g,children:s})})};x2.displayName=Jf;var y2="ToastViewport",D4=["F8"],ep="toast.viewportPause",np="toast.viewportResume",j2=b.forwardRef((e,n)=>{const{__scopeToast:t,hotkey:i=D4,label:a="Notifications ({hotkey})",...o}=e,s=Wu(y2,t),l=I4(t),d=b.useRef(null),c=b.useRef(null),u=b.useRef(null),h=b.useRef(null),g=zn(n,h,s.onViewportChange),m=i.join("+").replace(/Key/g,"").replace(/Digit/g,""),p=s.toastCount>0;b.useEffect(()=>{const w=k=>{i.length!==0&&i.every(x=>k[x]||k.code===x)&&h.current?.focus()};return document.addEventListener("keydown",w),()=>document.removeEventListener("keydown",w)},[i]),b.useEffect(()=>{const w=d.current,k=h.current;if(p&&w&&k){const v=()=>{if(!s.isClosePausedRef.current){const z=new CustomEvent(ep);k.dispatchEvent(z),s.isClosePausedRef.current=!0}},x=()=>{if(s.isClosePausedRef.current){const z=new CustomEvent(np);k.dispatchEvent(z),s.isClosePausedRef.current=!1}},y=z=>{!w.contains(z.relatedTarget)&&x()},j=()=>{w.contains(document.activeElement)||x()};return w.addEventListener("focusin",v),w.addEventListener("focusout",y),w.addEventListener("pointermove",v),w.addEventListener("pointerleave",j),window.addEventListener("blur",v),window.addEventListener("focus",x),()=>{w.removeEventListener("focusin",v),w.removeEventListener("focusout",y),w.removeEventListener("pointermove",v),w.removeEventListener("pointerleave",j),window.removeEventListener("blur",v),window.removeEventListener("focus",x)}}},[p,s.isClosePausedRef]);const f=b.useCallback(({tabbingDirection:w})=>{const v=l().map(x=>{const y=x.ref.current,j=[y,...U4(y)];return w==="forwards"?j:j.reverse()});return(w==="forwards"?v.reverse():v).flat()},[l]);return b.useEffect(()=>{const w=h.current;if(w){const k=v=>{const x=v.altKey||v.ctrlKey||v.metaKey;if(v.key==="Tab"&&!x){const j=document.activeElement,z=v.shiftKey;if(v.target===w&&z){c.current?.focus();return}const E=f({tabbingDirection:z?"backwards":"forwards"}),C=E.findIndex(O=>O===j);Xh(E.slice(C+1))?v.preventDefault():z?c.current?.focus():u.current?.focus()}};return w.addEventListener("keydown",k),()=>w.removeEventListener("keydown",k)}},[l,f]),r.jsxs(k4,{ref:d,role:"region","aria-label":a.replace("{hotkey}",m),tabIndex:-1,style:{pointerEvents:p?void 0:"none"},children:[p&&r.jsx(tp,{ref:c,onFocusFromOutsideViewport:()=>{const w=f({tabbingDirection:"forwards"});Xh(w)}}),r.jsx(Xf.Slot,{scope:t,children:r.jsx(Ue.ol,{tabIndex:-1,...o,ref:g})}),p&&r.jsx(tp,{ref:u,onFocusFromOutsideViewport:()=>{const w=f({tabbingDirection:"backwards"});Xh(w)}})]})});j2.displayName=y2;var S2="ToastFocusProxy",tp=b.forwardRef((e,n)=>{const{__scopeToast:t,onFocusFromOutsideViewport:i,...a}=e,o=Wu(S2,t);return r.jsx(Lu,{"aria-hidden":!0,tabIndex:0,...a,ref:n,style:{position:"fixed"},onFocus:s=>{const l=s.relatedTarget;!o.viewport?.contains(l)&&i()}})});tp.displayName=S2;var El="Toast",B4="toast.swipeStart",M4="toast.swipeMove",F4="toast.swipeCancel",R4="toast.swipeEnd",z2=b.forwardRef((e,n)=>{const{forceMount:t,open:i,defaultOpen:a,onOpenChange:o,...s}=e,[l,d]=ba({prop:i,defaultProp:a??!0,onChange:o,caller:El});return r.jsx(fa,{present:t||l,children:r.jsx(L4,{open:l,...s,ref:n,onClose:()=>d(!1),onPause:vi(e.onPause),onResume:vi(e.onResume),onSwipeStart:qe(e.onSwipeStart,c=>{c.currentTarget.setAttribute("data-swipe","start")}),onSwipeMove:qe(e.onSwipeMove,c=>{const{x:u,y:h}=c.detail.delta;c.currentTarget.setAttribute("data-swipe","move"),c.currentTarget.style.setProperty("--radix-toast-swipe-move-x",`${u}px`),c.currentTarget.style.setProperty("--radix-toast-swipe-move-y",`${h}px`)}),onSwipeCancel:qe(e.onSwipeCancel,c=>{c.currentTarget.setAttribute("data-swipe","cancel"),c.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),c.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),c.currentTarget.style.removeProperty("--radix-toast-swipe-end-x"),c.currentTarget.style.removeProperty("--radix-toast-swipe-end-y")}),onSwipeEnd:qe(e.onSwipeEnd,c=>{const{x:u,y:h}=c.detail.delta;c.currentTarget.setAttribute("data-swipe","end"),c.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),c.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),c.currentTarget.style.setProperty("--radix-toast-swipe-end-x",`${u}px`),c.currentTarget.style.setProperty("--radix-toast-swipe-end-y",`${h}px`),d(!1)})})})});z2.displayName=El;var[O4,_4]=w2(El,{onClose(){}}),L4=b.forwardRef((e,n)=>{const{__scopeToast:t,type:i="foreground",duration:a,open:o,onClose:s,onEscapeKeyDown:l,onPause:d,onResume:c,onSwipeStart:u,onSwipeMove:h,onSwipeCancel:g,onSwipeEnd:m,...p}=e,f=Wu(El,t),[w,k]=b.useState(null),v=zn(n,F=>k(F)),x=b.useRef(null),y=b.useRef(null),j=a||f.duration,z=b.useRef(0),S=b.useRef(j),A=b.useRef(0),{onToastAdd:E,onToastRemove:C}=f,O=vi(()=>{w?.contains(document.activeElement)&&f.viewport?.focus(),s()}),T=b.useCallback(F=>{!F||F===1/0||(window.clearTimeout(A.current),z.current=new Date().getTime(),A.current=window.setTimeout(O,F))},[O]);b.useEffect(()=>{const F=f.viewport;if(F){const L=()=>{T(S.current),c?.()},G=()=>{const X=new Date().getTime()-z.current;S.current=S.current-X,window.clearTimeout(A.current),d?.()};return F.addEventListener(ep,G),F.addEventListener(np,L),()=>{F.removeEventListener(ep,G),F.removeEventListener(np,L)}}},[f.viewport,j,d,c,T]),b.useEffect(()=>{o&&!f.isClosePausedRef.current&&T(j)},[o,j,f.isClosePausedRef,T]),b.useEffect(()=>(E(),()=>C()),[E,C]);const W=b.useMemo(()=>w?T2(w):null,[w]);return f.viewport?r.jsxs(r.Fragment,{children:[W&&r.jsx(W4,{__scopeToast:t,role:"status","aria-live":i==="foreground"?"assertive":"polite","aria-atomic":!0,children:W}),r.jsx(O4,{scope:t,onClose:O,children:Cl.createPortal(r.jsx(Xf.ItemSlot,{scope:t,children:r.jsx(v4,{asChild:!0,onEscapeKeyDown:qe(l,()=>{f.isFocusedToastEscapeKeyDownRef.current||O(),f.isFocusedToastEscapeKeyDownRef.current=!1}),children:r.jsx(Ue.li,{role:"status","aria-live":"off","aria-atomic":!0,tabIndex:0,"data-state":o?"open":"closed","data-swipe-direction":f.swipeDirection,...p,ref:v,style:{userSelect:"none",touchAction:"none",...e.style},onKeyDown:qe(e.onKeyDown,F=>{F.key==="Escape"&&(l?.(F.nativeEvent),F.nativeEvent.defaultPrevented||(f.isFocusedToastEscapeKeyDownRef.current=!0,O()))}),onPointerDown:qe(e.onPointerDown,F=>{F.button===0&&(x.current={x:F.clientX,y:F.clientY})}),onPointerMove:qe(e.onPointerMove,F=>{if(!x.current)return;const L=F.clientX-x.current.x,G=F.clientY-x.current.y,X=!!y.current,D=["left","right"].includes(f.swipeDirection),M=["left","up"].includes(f.swipeDirection)?Math.min:Math.max,K=D?M(0,L):0,Q=D?0:M(0,G),$=F.pointerType==="touch"?10:2,se={x:K,y:Q},le={originalEvent:F,delta:se};X?(y.current=se,vd(M4,h,le,{discrete:!1})):fw(se,f.swipeDirection,$)?(y.current=se,vd(B4,u,le,{discrete:!1}),F.target.setPointerCapture(F.pointerId)):(Math.abs(L)>$||Math.abs(G)>$)&&(x.current=null)}),onPointerUp:qe(e.onPointerUp,F=>{const L=y.current,G=F.target;if(G.hasPointerCapture(F.pointerId)&&G.releasePointerCapture(F.pointerId),y.current=null,x.current=null,L){const X=F.currentTarget,D={originalEvent:F,delta:L};fw(L,f.swipeDirection,f.swipeThreshold)?vd(R4,m,D,{discrete:!0}):vd(F4,g,D,{discrete:!0}),X.addEventListener("click",M=>M.preventDefault(),{once:!0})}})})})}),f.viewport)})]}):null}),W4=e=>{const{__scopeToast:n,children:t,...i}=e,a=Wu(El,n),[o,s]=b.useState(!1),[l,d]=b.useState(!1);return q4(()=>s(!0)),b.useEffect(()=>{const c=window.setTimeout(()=>d(!0),1e3);return()=>window.clearTimeout(c)},[]),l?null:r.jsx(Qf,{asChild:!0,children:r.jsx(Lu,{...i,children:o&&r.jsxs(r.Fragment,{children:[a.label," ",t]})})})},V4="ToastTitle",A2=b.forwardRef((e,n)=>{const{__scopeToast:t,...i}=e;return r.jsx(Ue.div,{...i,ref:n})});A2.displayName=V4;var K4="ToastDescription",C2=b.forwardRef((e,n)=>{const{__scopeToast:t,...i}=e;return r.jsx(Ue.div,{...i,ref:n})});C2.displayName=K4;var E2="ToastAction",N2=b.forwardRef((e,n)=>{const{altText:t,...i}=e;return t.trim()?r.jsx(P2,{altText:t,asChild:!0,children:r.jsx(eb,{...i,ref:n})}):(console.error(`Invalid prop \`altText\` supplied to \`${E2}\`. Expected non-empty \`string\`.`),null)});N2.displayName=E2;var I2="ToastClose",eb=b.forwardRef((e,n)=>{const{__scopeToast:t,...i}=e,a=_4(I2,t);return r.jsx(P2,{asChild:!0,children:r.jsx(Ue.button,{type:"button",...i,ref:n,onClick:qe(e.onClick,a.onClose)})})});eb.displayName=I2;var P2=b.forwardRef((e,n)=>{const{__scopeToast:t,altText:i,...a}=e;return r.jsx(Ue.div,{"data-radix-toast-announce-exclude":"","data-radix-toast-announce-alt":i||void 0,...a,ref:n})});function T2(e){const n=[];
68return Array.from(e.childNodes).forEach(i=>{if(i.nodeType===i.TEXT_NODE&&i.textContent&&n.push(i.textContent),H4(i)){const a=i.ariaHidden||i.hidden||i.style.display==="none",o=i.dataset.radixToastAnnounceExclude==="";if(!a)if(o){const s=i.dataset.radixToastAnnounceAlt;s&&n.push(s)}else n.push(...T2(i))}}),n}function vd(e,n,t,{discrete:i}){const a=t.originalEvent.currentTarget,o=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:t});n&&a.addEventListener(e,n,{once:!0}),i?f2(a,o):a.dispatchEvent(o)}var fw=(e,n,t=0)=>{const i=Math.abs(e.x),a=Math.abs(e.y),o=i>a;return n==="left"||n==="right"?o&&i>t:!o&&a>t};function q4(e=()=>{}){const n=vi(e);ki(()=>{let t=0,i=0;return t=window.requestAnimationFrame(()=>i=window.requestAnimationFrame(n)),()=>{window.cancelAnimationFrame(t),window.cancelAnimationFrame(i)}},[n])}function H4(e){return e.nodeType===e.ELEMENT_NODE}function U4(e){const n=[],t=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:i=>{const a=i.tagName==="INPUT"&&i.type==="hidden";return i.disabled||i.hidden||a?NodeFilter.FILTER_SKIP:i.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;t.nextNode();)n.push(t.currentNode);return n}function Xh(e){const n=document.activeElement;return e.some(t=>t===n?!0:(t.focus(),document.activeElement!==n))}var G4=x2,D2=j2,B2=z2,M2=A2,F2=C2,R2=N2,O2=eb;function _2(e){var n,t,i="";if(typeof e=="string"||typeof e=="number")i+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(n=0;n<a;n++)e[n]&&(t=_2(e[n]))&&(i&&(i+=" "),i+=t)}else for(t in e)e[t]&&(i&&(i+=" "),i+=t);return i}function L2(){for(var e,n,t=0,i="",a=arguments.length;t<a;t++)(e=arguments[t])&&(n=_2(e))&&(i&&(i+=" "),i+=n);return i}const bw=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,vw=L2,W2=(e,n)=>t=>{var i;if(n?.variants==null)return vw(e,t?.class,t?.className);const{variants:a,defaultVariants:o}=n,s=Object.keys(a).map(c=>{const u=t?.[c],h=o?.[c];if(u===null)return null;const g=bw(u)||bw(h);return a[c][g]}),l=t&&Object.entries(t).reduce((c,u)=>{let[h,g]=u;return g===void 0||(c[h]=g),c},{}),d=n==null||(i=n.compoundVariants)===null||i===void 0?void 0:i.reduce((c,u)=>{let{class:h,className:g,...m}=u;return Object.entries(m).every(p=>{let[f,w]=p;return Array.isArray(w)?w.includes({...o,...l}[f]):{...o,...l}[f]===w})?[...c,h,g]:c},[]);return vw(e,s,d,t?.class,t?.className)};/**
69 * @license lucide-react v0.462.0 - ISC
70 *
71 * This source code is licensed under the ISC license.
72 * See the LICENSE file in the root directory of this source tree.
73 */const $4=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),V2=(...e)=>e.filter((n,t,i)=>!!n&&n.trim()!==""&&i.indexOf(n)===t).join(" ").trim();/**
74 * @license lucide-react v0.462.0 - ISC
75 *
76 * This source code is licensed under the ISC license.
77 * See the LICENSE file in the root directory of this source tree.
78 */var Z4={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
79 * @license lucide-react v0.462.0 - ISC
80 *
81 * This source code is licensed under the ISC license.
82 * See the LICENSE file in the root directory of this source tree.
83 */const Y4=b.forwardRef(({color:e="currentColor",size:n=24,strokeWidth:t=2,absoluteStrokeWidth:i,className:a="",children:o,iconNode:s,...l},d)=>b.createElement("svg",{ref:d,...Z4,width:n,height:n,stroke:e,strokeWidth:i?Number(t)*24/Number(n):t,className:V2("lucide",a),...l},[...s.map(([c,u])=>b.createElement(c,u)),...Array.isArray(o)?o:[o]]));/**
84 * @license lucide-react v0.462.0 - ISC
85 *
86 * This source code is licensed under the ISC license.
87 * See the LICENSE file in the root directory of this source tree.
88 */const U=(e,n)=>{const t=b.forwardRef(({className:i,...a},o)=>b.createElement(Y4,{ref:o,iconNode:n,className:V2(`lucide-${$4(e)}`,i),...a}));return t.displayName=`${e}`,t};/**
89 * @license lucide-react v0.462.0 - ISC
90 *
91 * This source code is licensed under the ISC license.
92 * See the LICENSE file in the root directory of this source tree.
93 */const Q4=U("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l
93-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/**
94 * @license lucide-react v0.462.0 - ISC
95 *
96 * This source code is licensed under the ISC license.
97 * See the LICENSE file in the root directory of this source tree.
98 */const J4=U("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);/**
99 * @license lucide-react v0.462.0 - ISC
100 *
101 * This source code is licensed under the ISC license.
102 * See the LICENSE file in the root directory of this source tree.
103 */const K2=U("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/**
104 * @license lucide-react v0.462.0 - ISC
105 *
106 * This source code is licensed under the ISC license.
107 * See the LICENSE file in the root directory of this source tree.
108 */const re=U("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/**
109 * @license lucide-react v0.462.0 - ISC
110 *
111 * This source code is licensed under the ISC license.
112 * See the LICENSE file in the root directory of this source tree.
113 */const X4=U("ArrowUpRight",[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]]);/**
114 * @license lucide-react v0.462.0 - ISC
115 *
116 * This source code is licensed under the ISC license.
117 * See the LICENSE file in the root directory of this source tree.
118 */const eg=U("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);/**
119 * @license lucide-react v0.462.0 - ISC
120 *
121 * This source code is licensed under the ISC license.
122 * See the LICENSE file in the root directory of this source tree.
123 */const q2=U("BadgeCheck",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/**
124 * @license lucide-react v0.462.0 - ISC
125 *
126 * This source code is licensed under the ISC license.
127 * See the LICENSE file in the root directory of this source tree.
128 */const eD=U("Banknote",[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2",key:"9lu3g6"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M6 12h.01M18 12h.01",key:"113zkx"}]]);/**
129 * @license lucide-react v0.462.0 - ISC
130 *
131 * This source code is licensed under the ISC license.
132 * See the LICENSE file in the root directory of this source tree.
133 */const To=U("BookOpen",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]);/**
134 * @license lucide-react v0.462.0 - ISC
135 *
136 * This source code is licensed under the ISC license.
137 * See the LICENSE file in the root directory of this source tree.
138 */const mo=U("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/**
139 * @license lucide-react v0.462.0 - ISC
140 *
141 * This source code is licensed under the ISC license.
142 * See the LICENSE file in the root directory of this source tree.
143 */const nD=U("Boxes",[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]]);/**
144 * @license lucide-react v0.462.0 - ISC
145 *
146 * This source code is licensed under the ISC license.
147 * See the LICENSE file in the root directory of this source tree.
148 */const nb=U("Briefcase",[["path",{d:"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16",key:"jecpp"}],["rect",{width:"20",height:"14",x:"2",y:"6",rx:"2",key:"i6l2r4"}]]);/**
149 * @license lucide-react v0.462.0 - ISC
150 *
151 * This source code is licensed under the ISC license.
152 * See the LICENSE file in the root directory of this source tree.
153 */const H2=U("Building2",[["path",{d:"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z",key:"1b4qmf"}],["path",{d:"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",key:"i71pzd"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2",key:"10jefs"}],["path",{d:"M10 6h4",key:"1itunk"}],["path",{d:"M10 10h4",key:"tcdvrf"}
153],["path",{d:"M10 14h4",key:"kelpxr"}],["path",{d:"M10 18h4",key:"1ulq68"}]]);/**
154 * @license lucide-react v0.462.0 - ISC
155 *
156 * This source code is licensed under the ISC license.
157 * See the LICENSE file in the root directory of this source tree.
158 */const tD=U("Calculator",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",key:"1nb95v"}],["line",{x1:"8",x2:"16",y1:"6",y2:"6",key:"x4nwl0"}],["line",{x1:"16",x2:"16",y1:"14",y2:"18",key:"wjye3r"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M8 18h.01",key:"lrp35t"}]]);/**
159 * @license lucide-react v0.462.0 - ISC
160 *
161 * This source code is licensed under the ISC license.
162 * See the LICENSE file in the root directory of this source tree.
163 */const kw=U("CalendarCheck",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"m9 16 2 2 4-4",key:"19s6y9"}]]);/**
164 * @license lucide-react v0.462.0 - ISC
165 *
166 * This source code is licensed under the ISC license.
167 * See the LICENSE file in the root directory of this source tree.
168 */const iD=U("CalendarDays",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]]);/**
169 * @license lucide-react v0.462.0 - ISC
170 *
171 * This source code is licensed under the ISC license.
172 * See the LICENSE file in the root directory of this source tree.
173 */const tb=U("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/**
174 * @license lucide-react v0.462.0 - ISC
175 *
176 * This source code is licensed under the ISC license.
177 * See the LICENSE file in the root directory of this source tree.
178 */const po=U("ChartColumn",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);/**
179 * @license lucide-react v0.462.0 - ISC
180 *
181 * This source code is licensed under the ISC license.
182 * See the LICENSE file in the root directory of this source tree.
183 */const ib=U("ChartLine",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"m19 9-5 5-4-4-3 3",key:"2osh9i"}]]);/**
184 * @license lucide-react v0.462.0 - ISC
185 *
186 * This source code is licensed under the ISC license.
187 * See the LICENSE file in the root directory of this source tree.
188 */const ip=U("ChartPie",[["path",{d:"M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z",key:"pzmjnu"}],["path",{d:"M21.21 15.89A10 10 0 1 1 8 2.83",key:"k2fpak"}]]);/**
189 * @license lucide-react v0.462.0 - ISC
190 *
191 * This source code is licensed under the ISC license.
192 * See the LICENSE file in the root directory of this source tree.
193 */const _e=U("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/**
194 * @license lucide-react v0.462.0 - ISC
195 *
196 * This source code is licensed under the ISC license.
197 * See the LICENSE file in the root directory of this source tree.
198 */const Ut=U("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/**
199 * @license lucide-react v0.462.0 - ISC
200 *
201 * This source code is licensed under the ISC license.
202 * See the LICENSE file in the root directory of this source tree.
203 */const rD=U("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/**
204 * @license lucide-react v0.462.0 - ISC
205 *
206 * This source code is licensed under the ISC license.
207 * See the LICENSE file in the root directory of this source tree.
208 */const aD=U("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/**
209 * @license lucide-react v0.462.0 - ISC
210 *
211 * This source code is licensed under the ISC license.
212 * See the LICENSE file in the root directory of this source tree.
213 */const Yn=U("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/**
214 * @license lucide-react v0.462.0 - ISC
215 *
216 * This source code is licensed under the ISC license.
217 * See the LICENSE file in the root directory of this source tree.
218 */const oD=U("CirclePlay",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polygon",{points:"10 8 16 12 10 16 10 8",key:"1cimsy"}]]);/**
219 * @license lucide-react v0.462.0 - ISC
220 *
221 * This source code is licensed under the ISC license.
222 * See the LICENSE file in the root directory of this source tree.
223 */const U2=U("ClipboardCheck",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"m9 14 2 2 4-4",key:"df797q"}]]);/**
224 * @license lucide-react v0.462.0 - ISC
225 *
226 * This source code is licensed under the ISC license.
227 * See the LICENSE file in the root directory of this source tree.
228 */const fo=U("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/**
229 * @license lucide-react v0.462.0 - ISC
230 *
231 * This source code is licensed under the ISC license.
232 * See the LICENSE file in the root directory of this source tree.
233 */const G2=U("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/**
234 * @license lucide-react v0.462.0 - ISC
235 *
236 * This source code is licensed under the ISC license.
237 * See the LICENSE file in the root directory of this source tree.
238 */const rb=U("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/**
239 * @license lucide-react v0.462.0 - ISC
240 *
241 * This source code is licensed under the ISC license.
242 * See the LICENSE file in the root directory of this source tree.
243 */const sD=U("Factory",[["path",{d:"M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z",key:"159hny"}],["path",{d:"M17 18h1",key:"uldtlt"}],["path",{d:"M12 18h1",key:"s9uhes"}],["path",{d:"M7 18h1",key:"1neino"}]]);/**
244 * @license lucide-react v0.462.0 - ISC
245 *
246 * This source code is licensed under the ISC license.
247 * See the LICENSE file in the root directory of this source tree.
248 */const ww=U("FileDown",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M12 18v-6",key:"17g6i2"}],["path",{d:"m9 15 3 3 3-3",key:"1npd3o"}]]);/**
249 * @license lucide-react v0.462.0 - ISC
250 *
251 * This source code is licensed under the ISC license.
252 * See the LICENSE file in the root directory of this source tree.
253 */const $2=U("FileSpreadsheet",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M8 13h2",key:"yr2amv"}],["path",{d:"M14 13h2",key:"un5t4a"}],["path",{d:"M8 17h2",key:"2yhykz"}],["path",{d:"M14 17h2",key:"10kma7"}]]);/**
254 * @license lucide-react v0.462.0 - ISC
255 *
256 * This source code is licensed under the ISC license.
257 * See the LICENSE file in the root directory of this source tree.
258 */const Nl=U("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);/**
259 * @license lucide-react v0.462.0 - ISC
260 *
261 * This source code is licensed under the ISC license.
262 * See the LICENSE file in the root directory of this source tree.
263 */const lD=U("Gift",[["rect",{x:"3",y:"8",width:"18",height:"4",rx:"1",key:"bkv52"}],["path",{d:"M12 8v13",key:"1c76mn"}],["path",{d:"M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7",key:"6wjy6b"}],["path",{d:"M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5",key:"1ihvrl"}]]);/**
264 * @license lucide-react v0.462.0 - ISC
265 *
266 * This source code is licensed under the ISC license.
267 * See the LICENSE file in the root directory of this source tree.
268 */const dD=U("GitMerge",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]]);/**
269 * @license lucide-react v0.462.0 - ISC
270 *
271 * This source code is licensed under the ISC license.
272 * See the LICENSE file in the root directory of this source tree.
273 */const cD=U("Hand",[["path",{d:"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2",key:"1fvzgz"}],["path",{d:"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2",key:"1kc0my"}],["path",{d:"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8",key:"10h0bg"}],["path",{d:"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15",key:"1s1gnw"}]]);/**
274 * @license lucide-react v0.462.0 - ISC
275 *
276 * This source code is licensed under the ISC license.
277 * See the LICENSE file in the root directory of this source tree.
278 */const uD=U("Handshake",[["path",{d:"m11 17 2 2a1 1 0 1 0 3-3",key:"efffak"}],["path",{d:"m14 14 2.5 2.5a1 1 0 1 0 3-3l-3.88-3.88a3 3 0 0 0-4.24 0l-.88.88a1 1 0 1 1-3-3l2.81-2.81a5.79 5.79 0 0 1 7.06-.87l.47.28a2 2 0 0 0 1.42.25L21 4",key:"9pr0kb"}],["path",{d:"m21 3 1 11h-2",key:"1tisrp"}],["path",{d:"M3 3 2 14l6.5 6.5a1 1 0 1 0 3-3",key:"1uvwmv"}],["path",{d:"M3 4h8",key:"1ep09j"}]]);/**
279 * @license lucide-react v0.462.0 - ISC
280 *
281 * This source code is licensed under the ISC license.
282 * See the LICENSE file in the root directory of this source tree.
283 */const ab=U("History",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);/**
284 * @license lucide-react v0.462.0 - ISC
285 *
286 * This source code is licensed under the ISC license.
287 * See the LICENSE file in the root directory of this source tree.
288 */const hD=U("House",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"1d0kgt"}]]);/**
289 * @license lucide-react v0.462.0 - ISC
290 *
291 * This source code is licensed under the ISC license.
292 * See the LICENSE file in the root directory of this source tree.
293 */const Z2=U("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);/**
294 * @license lucide-react v0.462.0 - ISC
295 *
296 * This source code is licensed under the ISC license.
297 * See the LICENSE file in the root directory of this source tree.
298 */const gD=U("KeyRound",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);/**
299 * @license lucide-react v0.462.0 - ISC
300 *
301 * This source code is licensed under the ISC license.
302 * See the LICENSE file in the root directory of this source tree.
303 */const $i=U("Layers",[["path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z",key:"8b97xw"}],["path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65",key:"dd6zsq"}],["path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65",key:"ep9fru"}]]);/**
304 * @license lucide-react v0.462.0 - ISC
305 *
306 * This source code is licensed under the ISC license.
307 * See the LICENSE file in the root directory of this source tree.
308 */const mD=U("LifeBuoy",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m4.93 4.93 4.24 4.24",key:"1ymg45"}],["path",{d:"m14.83 9.17 4.24-4.24",key:"1cb5xl"}],["path",{d:"m14.83 14.83 4.24 4.24",key:"q42g0n"}],["path",{d:"m9.17 14.83-4.24 4.24",key:"bqpfvv"}],["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}]]);/**
309 * @license lucide-react v0.462.0 - ISC
310 *
311 * This source code is licensed under the ISC license.
312 * See the LICENSE file in the root directory of this source tree.
313 */const ob=U("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);/**
314 * @license lucide-react v0.462.0 - ISC
315 *
316 * This source code is licensed under the ISC license.
317 * See the LICENSE file in the root directory of this source tree.
318 */const ng=U("LogIn",[["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}],["polyline",{points:"10 17 15 12 10 7",key:"1ail0h"}],["line",{x1:"15",x2:"3",y1:"12",y2:"12",key:"v6grx8"}]]);/**
319 * @license lucide-react v0.462.0 - ISC
320 *
321 * This source code is licensed under the ISC license.
322 * See the LICENSE file in the root directory of this source tree.
323 */const Y2=U("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]);/**
324 * @license lucide-react v0.462.0 - ISC
325 *
326 * This source code is licensed under the ISC license.
327 * See the LICENSE file in the root directory of this source tree.
328 */const pD=U("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/**
329 * @license lucide-react v0.462.0 - ISC
330 *
331 * This source code is licensed under the ISC license.
332 * See the LICENSE file in the root directory of this source tree.
333 */const Q2=U("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);/**
334 * @license lucide-react v0.462.0 - ISC
335 *
336 * This source code is licensed under the ISC license.
337 * See the LICENSE file in the root directory of this source tree.
338 */const xw=U("MessageSquare",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]]);/**
339 * @license lucide-react v0.462.0 - ISC
340 *
341 * This source code is licensed under the ISC license.
342 * See the LICENSE file in the root directory of this source tree.
343 */const bo=U("Minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);/**
344 * @license lucide-react v0.462.0 - ISC
345 *
346 * This source code is licensed under the ISC license.
347 * See the LICENSE file in the root directory of this source tree.
348 */const fD=U("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/**
349 * @license lucide-react v0.462.0 - ISC
350 *
351 * This source code is licensed under the ISC license.
352 * See the LICENSE file in the root directory of this source tree.
353 */const bD=U("Package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["path",{d:"m3.3 7 7.703 4.734a2 2 0 0 0 1.994 0L20.7 7",key:"yx3hmr"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);/**
354 * @license lucide-react v0.462.0 - ISC
355 *
356 * This source code is licensed under the ISC license.
357 * See the LICENSE file in the root directory of this source tree.
358 */const vD=U("Paperclip",[["path",{d:"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48",key:"1u3ebp"}]]);/**
359 * @license lucide-react v0.462.0 - ISC
360 *
361 * This source code is licensed under the ISC license.
362 * See the LICENSE file in the root directory of this source tree.
363 */const kD=U("Phone",[["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z",key:"foiqr5"}]]);/**
364 * @license lucide-react v0.462.0 - ISC
365 *
366 * This source code is licensed under the ISC license.
367 * See the LICENSE file in the root directory of this source tree.
368 */const yw=U("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/**
369 * @license lucide-react v0.462.0 - ISC
370 *
371 * This source code is licensed under the ISC license.
372 * See the LICENSE file in the root directory of this source tree.
373 */const qa=U("Plug",[["path",{d:"M12 22v-5",key:"1ega77"}
373],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]]);/**
374 * @license lucide-react v0.462.0 - ISC
375 *
376 * This source code is licensed under the ISC license.
377 * See the LICENSE file in the root directory of this source tree.
378 */const sb=U("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/**
379 * @license lucide-react v0.462.0 - ISC
380 *
381 * This source code is licensed under the ISC license.
382 * See the LICENSE file in the root directory of this source tree.
383 */const wi=U("Quote",[["path",{d:"M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"rib7q0"}],["path",{d:"M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"1ymkrd"}]]);/**
384 * @license lucide-react v0.462.0 - ISC
385 *
386 * This source code is licensed under the ISC license.
387 * See the LICENSE file in the root directory of this source tree.
388 */const wD=U("Receipt",[["path",{d:"M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1Z",key:"q3az6g"}],["path",{d:"M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8",key:"1h4pet"}],["path",{d:"M12 17.5v-11",key:"1jc1ny"}]]);/**
389 * @license lucide-react v0.462.0 - ISC
390 *
391 * This source code is licensed under the ISC license.
392 * See the LICENSE file in the root directory of this source tree.
393 */const lb=U("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/**
394 * @license lucide-react v0.462.0 - ISC
395 *
396 * This source code is licensed under the ISC license.
397 * See the LICENSE file in the root directory of this source tree.
398 */const xD=U("Repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);/**
399 * @license lucide-react v0.462.0 - ISC
400 *
401 * This source code is licensed under the ISC license.
402 * See the LICENSE file in the root directory of this source tree.
403 */const rp=U("Rocket",[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]]);/**
404 * @license lucide-react v0.462.0 - ISC
405 *
406 * This source code is licensed under the ISC license.
407 * See the LICENSE file in the root directory of this source tree.
408 */const yD=U("Scale",[["path",{d:"m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z",key:"7g6ntu"}],["path",{d:"m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z",key:"ijws7r"}],["path",{d:"M7 21h10",key:"1b0cd5"}],["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2",key:"3gwbw2"}]]);/**
409 * @license lucide-react v0.462.0 - ISC
410 *
411 * This source code is licensed under the ISC license.
412 * See the LICENSE file in the root directory of this source tree.
413 */const J2=U("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/**
414 * @license lucide-react v0.462.0 - ISC
415 *
416 * This source code is licensed under the ISC license.
417 * See the LICENSE file in the root directory of this source tree.
418 */const jD=U("Send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/**
419 * @license lucide-react v0.462.0 - ISC
420 *
421 * This source code is licensed under the ISC license.
422 * See the LICENSE file in the root directory of this source tree.
423 */const yr=U("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",ke
423y:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/**
424 * @license lucide-react v0.462.0 - ISC
425 *
426 * This source code is licensed under the ISC license.
427 * See the LICENSE file in the root directory of this source tree.
428 */const X2=U("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);/**
429 * @license lucide-react v0.462.0 - ISC
430 *
431 * This source code is licensed under the ISC license.
432 * See the LICENSE file in the root directory of this source tree.
433 */const Jt=U("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);/**
434 * @license lucide-react v0.462.0 - ISC
435 *
436 * This source code is licensed under the ISC license.
437 * See the LICENSE file in the root directory of this source tree.
438 */const Vu=U("Star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]);/**
439 * @license lucide-react v0.462.0 - ISC
440 *
441 * This source code is licensed under the ISC license.
442 * See the LICENSE file in the root directory of this source tree.
443 */const eS=U("Tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);/**
444 * @license lucide-react v0.462.0 - ISC
445 *
446 * This source code is licensed under the ISC license.
447 * See the LICENSE file in the root directory of this source tree.
448 */const SD=U("Tags",[["path",{d:"m15 5 6.3 6.3a2.4 2.4 0 0 1 0 3.4L17 19",key:"1cbfv1"}],["path",{d:"M9.586 5.586A2 2 0 0 0 8.172 5H3a1 1 0 0 0-1 1v5.172a2 2 0 0 0 .586 1.414L8.29 18.29a2.426 2.426 0 0 0 3.42 0l3.58-3.58a2.426 2.426 0 0 0 0-3.42z",key:"135mg7"}],["circle",{cx:"6.5",cy:"9.5",r:".5",fill:"currentColor",key:"5pm5xn"}]]);/**
449 * @license lucide-react v0.462.0 - ISC
450 *
451 * This source code is licensed under the ISC license.
452 * See the LICENSE file in the root directory of this source tree.
453 */const zD=U("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/**
454 * @license lucide-react v0.462.0 - ISC
455 *
456 * This source code is licensed under the ISC license.
457 * See the LICENSE file in the root directory of this source tree.
458 */const AD=U("Timer",[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]]);/**
459 * @license lucide-react v0.462.0 - ISC
460 *
461 * This source code is licensed under the ISC license.
462 * See the LICENSE file in the root directory of this source tree.
463 */const Do=U("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/**
464 * @license lucide-react v0.462.0 - ISC
465 *
466 * This source code is licensed under the ISC license.
467 * See the LICENSE file in the root directory of this source tree.
468 */const vo=U("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/**
469 * @license lucide-react v0.462.0 - ISC
470 *
471 * This source code is licensed under the ISC license.
472 * See the LICENSE file in the root directory of this source tree.
473 */const nS=U("UserCheck",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}
vendor: 4,196 bytes, lines 473-523
473],["polyline",{points:"16 11 18 13 22 9",key:"1pwet4"}]]);/**
474 * @license lucide-react v0.462.0 - ISC
475 *
476 * This source code is licensed under the ISC license.
477 * See the LICENSE file in the root directory of this source tree.
478 */const jw=U("UserPlus",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);/**
479 * @license lucide-react v0.462.0 - ISC
480 *
481 * This source code is licensed under the ISC license.
482 * See the LICENSE file in the root directory of this source tree.
483 */const tS=U("UserX",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"17",x2:"22",y1:"8",y2:"13",key:"3nzzx3"}],["line",{x1:"22",x2:"17",y1:"8",y2:"13",key:"1swrse"}]]);/**
484 * @license lucide-react v0.462.0 - ISC
485 *
486 * This source code is licensed under the ISC license.
487 * See the LICENSE file in the root directory of this source tree.
488 */const iS=U("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);/**
489 * @license lucide-react v0.462.0 - ISC
490 *
491 * This source code is licensed under the ISC license.
492 * See the LICENSE file in the root directory of this source tree.
493 */const zi=U("Users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]);/**
494 * @license lucide-react v0.462.0 - ISC
495 *
496 * This source code is licensed under the ISC license.
497 * See the LICENSE file in the root directory of this source tree.
498 */const rS=U("Video",[["path",{d:"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5",key:"ftymec"}],["rect",{x:"2",y:"6",width:"14",height:"12",rx:"2",key:"158x01"}]]);/**
499 * @license lucide-react v0.462.0 - ISC
500 *
501 * This source code is licensed under the ISC license.
502 * See the LICENSE file in the root directory of this source tree.
503 */const CD=U("Wallet",[["path",{d:"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1",key:"18etb6"}],["path",{d:"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4",key:"xoc0q4"}]]);/**
504 * @license lucide-react v0.462.0 - ISC
505 *
506 * This source code is licensed under the ISC license.
507 * See the LICENSE file in the root directory of this source tree.
508 */const aS=U("Workflow",[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]]);/**
509 * @license lucide-react v0.462.0 - ISC
510 *
511 * This source code is licensed under the ISC license.
512 * See the LICENSE file in the root directory of this source tree.
513 */const db=U("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);/**
514 * @license lucide-react v0.462.0 - ISC
515 *
516 * This source code is licensed under the ISC license.
517 * See the LICENSE file in the root directory of this source tree.
518 */const xi=U("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/**
519 * @license lucide-react v0.462.0 - ISC
520 *
521 * This source code is licensed under the ISC license.
522 * See the LICENSE file in the root directory of this source tree.
523 */const Bo=U("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),cb="-",ED=e=>{const n=ID(e),{conflictingClassGroups:t,conflictingClassGroupModifiers:i}=e;return{getClassGroupId:s=>{const l=s.split(cb);return l[0]===""&&l.length!==1&&l.shift(),oS(l,n)||ND(s)},getConflictingClassGroupIds:(s,l)=>{const d=t[s]||[];return l&&i[s]?[...d,...i[s]]:d}}},oS=(e,n)=>{if(e.length===0)return n.classGroupId;const t=e[0],i=n.nextPart.get(t),a=i?oS(e.slice(1),i):void 0;if(a)return a;
vendor: 7,002 bytes, line 523
523if(n.validators.length===0)return;const o=e.join(cb);return n.validators.find(({validator:s})=>s(o))?.classGroupId},Sw=/^\[(.+)\]$/,ND=e=>{if(Sw.test(e)){const n=Sw.exec(e)[1],t=n?.substring(0,n.indexOf(":"));if(t)return"arbitrary.."+t}},ID=e=>{const{theme:n,prefix:t}=e,i={nextPart:new Map,validators:[]};return TD(Object.entries(e.classGroups),t).forEach(([o,s])=>{ap(s,i,o,n)}),i},ap=(e,n,t,i)=>{e.forEach(a=>{if(typeof a=="string"){const o=a===""?n:zw(n,a);o.classGroupId=t;return}if(typeof a=="function"){if(PD(a)){ap(a(i),n,t,i);return}n.validators.push({validator:a,classGroupId:t});return}Object.entries(a).forEach(([o,s])=>{ap(s,zw(n,o),t,i)})})},zw=(e,n)=>{let t=e;return n.split(cb).forEach(i=>{t.nextPart.has(i)||t.nextPart.set(i,{nextPart:new Map,validators:[]}),t=t.nextPart.get(i)}),t},PD=e=>e.isThemeGetter,TD=(e,n)=>n?e.map(([t,i])=>{const a=i.map(o=>typeof o=="string"?n+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([s,l])=>[n+s,l])):o);return[t,a]}):e,DD=e=>{if(e<1)return{get:()=>{},set:()=>{}};let n=0,t=new Map,i=new Map;const a=(o,s)=>{t.set(o,s),n++,n>e&&(n=0,i=t,t=new Map)};return{get(o){let s=t.get(o);if(s!==void 0)return s;if((s=i.get(o))!==void 0)return a(o,s),s},set(o,s){t.has(o)?t.set(o,s):a(o,s)}}},sS="!",BD=e=>{const{separator:n,experimentalParseClassName:t}=e,i=n.length===1,a=n[0],o=n.length,s=l=>{const d=[];let c=0,u=0,h;for(let w=0;w<l.length;w++){let k=l[w];if(c===0){if(k===a&&(i||l.slice(w,w+o)===n)){d.push(l.slice(u,w)),u=w+o;continue}if(k==="/"){h=w;continue}}k==="["?c++:k==="]"&&c--}const g=d.length===0?l:l.substring(u),m=g.startsWith(sS),p=m?g.substring(1):g,f=h&&h>u?h-u:void 0;return{modifiers:d,hasImportantModifier:m,baseClassName:p,maybePostfixModifierPosition:f}};return t?l=>t({className:l,parseClassName:s}):s},MD=e=>{if(e.length<=1)return e;const n=[];let t=[];return e.forEach(i=>{i[0]==="["?(n.push(...t.sort(),i),t=[]):t.push(i)}),n.push(...t.sort()),n},FD=e=>({cache:DD(e.cacheSize),parseClassName:BD(e),...ED(e)}),RD=/\s+/,OD=(e,n)=>{const{parseClassName:t,getClassGroupId:i,getConflictingClassGroupIds:a}=n,o=[],s=e.trim().split(RD);let l="";for(let d=s.length-1;d>=0;d-=1){const c=s[d],{modifiers:u,hasImportantModifier:h,baseClassName:g,maybePostfixModifierPosition:m}=t(c);let p=!!m,f=i(p?g.substring(0,m):g);if(!f){if(!p){l=c+(l.length>0?" "+l:l);continue}if(f=i(g),!f){l=c+(l.length>0?" "+l:l);continue}p=!1}const w=MD(u).join(":"),k=h?w+sS:w,v=k+f;if(o.includes(v))continue;o.push(v);const x=a(f,p);for(let y=0;y<x.length;++y){const j=x[y];o.push(k+j)}l=c+(l.length>0?" "+l:l)}return l};function _D(){let e=0,n,t,i="";for(;e<arguments.length;)(n=arguments[e++])&&(t=lS(n))&&(i&&(i+=" "),i+=t);return i}const lS=e=>{if(typeof e=="string")return e;let n,t="";for(let i=0;i<e.length;i++)e[i]&&(n=lS(e[i]))&&(t&&(t+=" "),t+=n);return t};function LD(e,...n){let t,i,a,o=s;function s(d){const c=n.reduce((u,h)=>h(u),e());return t=FD(c),i=t.cache.get,a=t.cache.set,o=l,l(d)}function l(d){const c=i(d);if(c)return c;const u=OD(d,t);return a(d,u),u}return function(){return o(_D.apply(null,arguments))}}const Ye=e=>{const n=t=>t[e]||[];return n.isThemeGetter=!0,n},dS=/^\[(?:([a-z-]+):)?(.+)\]$/i,WD=/^\d+\/\d+$/,VD=new Set(["px","full","screen"]),KD=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,qD=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,HD=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,UD=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,GD=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Ii=e=>no(e)||VD.has(e)||WD.test(e),Qi=e=>Mo(e,"length",n5),no=e=>!!e&&!Number.isNaN(Number(e)),tg=e=>Mo(e,"number",no),us=e=>!!e&&Number.isInteger(Number(e)),$D=e=>e.endsWith("%")&&no(e.slice(0,-1)),ye=e=>dS.test(e),Ji=e=>KD.test(e),ZD=new Set(["length","size","percentage"]),YD=e=>Mo(e,ZD,cS),QD=e=>Mo(e,"position",cS),JD=new Set(["image","url"]),XD=e=>Mo(e,JD,i5),e5=e=>Mo(e,"",t5),hs=()=>!0,Mo=(e,n,t)=>{const i=dS.exec(e);return i?i[1]?typeof n=="string"?i[1]===n:n.has(i[1]):t(i[2]):!1},n5=e=>qD.test(e)&&!HD.test(e),cS=()=>!1,t5=e=>UD.test(e),i5=e=>GD.test(e),r5=()=>{const e=Ye("colors"),n=Ye("spacing"),t=Ye("blur"),i=Ye("brightness"),a=Ye("borderColor"),o=Ye("borderRadius"),s=Ye("borderSpacing"),l=Ye("borderWidth"),d=Ye("contrast"),c=Ye("grayscale"),u=Ye("hueRotate"),h=Ye("invert"),g=Ye("gap"),m=Ye("gradientColorStops"),p=Ye("gradientColorStopPositions"),f=Ye("inset"),w=Ye("margin"),k=Ye("opacity"),v=Ye("padding"),x=Ye("saturate"),y=Ye("scale"),j=Ye("sepia"),z=Ye("skew"),S=Ye("space"),A=Ye("translate"),E=()=>["auto","contain","none"],C=()=>["auto","hidden","clip","visible","scroll"],O=()=>["auto",ye,n],T=()=>[ye,n],W=()=>["",Ii,Qi],F=()=>["auto",no,ye],L=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],G=()=>["solid","dashed","dotted","double","none"],X=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],D=()=>["start","end","center","between","around","evenly","stretch"],M=()=>["","0",ye],K=()=>["auto","avoid","all","avoid-page","page","left","right","column"],Q=()=>[no,ye];return{cacheSize:500,separator:":",theme:{colors:[hs],spacing:[Ii,Qi],blur:["none","",Ji,ye],brightness:Q(),borderColor:[e],borderRadius:["none","","full",Ji,ye],borderSpacing:T(),borderWidth:W(),contrast:Q(),grayscale:M(),hueRotate:Q(),invert:M(),gap:T(),gradientColorStops:[e],gradientColorStopPositions:[$D,Qi],inset:O(),margin:O(),opacity:Q(),padding:T(),saturate:Q(),scale:Q(),sepia:M(),skew:Q(),space:T(),translate:T()},classGroups:{aspect:[{aspect:["auto","square","video",ye]}],container:["container"],columns:[{columns:[Ji]}],"break-after":[{"break-after":K()}],"break-before":[{"break-before":K()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...L(),ye]}],overflow:[{overflow:C()}],"overflow-x":[{"overflow-x":C()}],"overflow-y":[{"overflow-y":C()}],overscroll:[{overscroll:E()}],"overscroll-x":[{"overscroll-x":E()}],"overscroll-y":[{"overscroll-y":E()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[f]}],"inset-x":[{"inset-x":[f]}],"inset-y":[{"inset-y":[f]}],start:[{start:[f]}],end:[{end:[f]}],top:[{top:[f]}
vendor: 9,947 bytes, line 523
523],right:[{right:[f]}],bottom:[{bottom:[f]}],left:[{left:[f]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",us,ye]}],basis:[{basis:O()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",ye]}],grow:[{grow:M()}],shrink:[{shrink:M()}],order:[{order:["first","last","none",us,ye]}],"grid-cols":[{"grid-cols":[hs]}],"col-start-end":[{col:["auto",{span:["full",us,ye]},ye]}],"col-start":[{"col-start":F()}],"col-end":[{"col-end":F()}],"grid-rows":[{"grid-rows":[hs]}],"row-start-end":[{row:["auto",{span:[us,ye]},ye]}],"row-start":[{"row-start":F()}],"row-end":[{"row-end":F()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",ye]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",ye]}],gap:[{gap:[g]}],"gap-x":[{"gap-x":[g]}],"gap-y":[{"gap-y":[g]}],"justify-content":[{justify:["normal",...D()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...D(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...D(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[v]}],px:[{px:[v]}],py:[{py:[v]}],ps:[{ps:[v]}],pe:[{pe:[v]}],pt:[{pt:[v]}],pr:[{pr:[v]}],pb:[{pb:[v]}],pl:[{pl:[v]}],m:[{m:[w]}],mx:[{mx:[w]}],my:[{my:[w]}],ms:[{ms:[w]}],me:[{me:[w]}],mt:[{mt:[w]}],mr:[{mr:[w]}],mb:[{mb:[w]}],ml:[{ml:[w]}],"space-x":[{"space-x":[S]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[S]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",ye,n]}],"min-w":[{"min-w":[ye,n,"min","max","fit"]}],"max-w":[{"max-w":[ye,n,"none","full","min","max","fit","prose",{screen:[Ji]},Ji]}],h:[{h:[ye,n,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[ye,n,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[ye,n,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[ye,n,"auto","min","max","fit"]}],"font-size":[{text:["base",Ji,Qi]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",tg]}],"font-family":[{font:[hs]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",ye]}],"line-clamp":[{"line-clamp":["none",no,tg]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",Ii,ye]}],"list-image":[{"list-image":["none",ye]}],"list-style-type":[{list:["none","disc","decimal",ye]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[k]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[k]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...G(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",Ii,Qi]}],"underline-offset":[{"underline-offset":["auto",Ii,ye]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:T()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ye]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",ye]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[k]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...L(),QD]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",YD]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},XD]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[p]}],"gradient-via-pos":[{via:[p]}],"gradient-to-pos":[{to:[p]}],"gradient-from":[{from:[m]}],"gradient-via":[{via:[m]}],"gradient-to":[{to:[m]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[l]}],"border-w-x":[{"border-x":[l]}],"border-w-y":[{"border-y":[l]}],"border-w-s":[{"border-s":[l]}],"border-w-e":[{"border-e":[l]}],"border-w-t":[{"border-t":[l]}],"border-w-r":[{"border-r":[l]}],"border-w-b":[{"border-b":[l]}],"border-w-l":[{"border-l":[l]}],"border-opacity":[{"border-opacity":[k]}],"border-style":[{border:[...G(),"hidden"]}],"divide-x":[{"divide-x":[l]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[l]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[k]}],"divide-style":[{divide:G()}],"border-color":[{border:[a]}],"border-color-x":[{"border-x":[a]}],"border-color-y":[{"border-y":[a]}],"border-color-s":[{"border-s":[a]}],"border-color-e":[{"border-e":[a]}],"border-color-t":[{"border-t":[a]}],"border-color-r":[{"border-r":[a]}],"border-color-b":[{"border-b":[a]}],"border-color-l":[{"border-l":[a]}],"divide-color":[{divide:[a]}],"outline-style":[{outline:["",...G()]}],"outline-offset":[{"outline-offset":[Ii,ye]}],"outline-w":[{outline:[Ii,Qi]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:W()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[k]}],"ring-offset-w":[{"ring-offset":[Ii,Qi]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Ji,e5]}],"shadow-color":[{shadow:[hs]}],opacity:[{opacity:[k]}],"mix-blend":[{"mix-blend":[...X(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":X()}],filter:[{filter:["","none"]}],blur:[{blur:[t]}],brightness:[{brightness:[i]}],contrast:[{contrast:[d]}],"drop-shadow":[{"drop-shadow":["","none",Ji,ye]}],grayscale:[{grayscale:[c]}],"hue-rotate":[{"hue-rotate":[u]}],invert:[{invert:[h]}],saturate:[{saturate:[x]}],sepia:[{sepia:[j]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[t]}],"backdrop-brightness":[{"backdrop-brightness":[i]}],"backdrop-contrast":[{"backdrop-contrast":[d]}],"backdrop-grayscale":[{"backdrop-grayscale":[c]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[u]}],"backdrop-invert":[{"backdrop-invert":[h]}],"backdrop-opacity":[{"backdrop-opacity":[k]}],"backdrop-saturate":[{"backdrop-saturate":[x]}],"backdrop-sepia":[{"backdrop-sepia":[j]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[s]}],"border-spacing-x":[{"border-spacing-x":[s]}],"border-spacing-y":[{"border-spacing-y":[s]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",ye]}],duration:[{duration:Q()}],ease:[{ease:["linear","in","out","in-out",ye]}],delay:[{delay:Q()}],animate:[{animate:["none","spin","ping","pulse","bounce",ye]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[y]}],"scale-x":[{"scale-x":[y]}],"scale-y":[{"scale-y":[y]}],rotate:[{rotate:[us,ye]}],"translate-x":[{"translate-x":[A]}],"translate-y":[{"translate-y":[A]}],"skew-x":[{"skew-x":[z]}],"skew-y":[{"skew-y":[z]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",ye]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",ye]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":T()}],"scroll-mx":[{"scroll-mx":T()}],"scroll-my":[{"scroll-my":T()}],"scroll-ms":[{"scroll-ms":T()}],"scroll-me":[{"scroll-me":T()}],"scroll-mt":[{"scroll-mt":T()}],"scroll-mr":[{"scroll-mr":T()}],"scroll-mb":[{"scroll-mb":T()}],"scroll-ml":[{"scroll-ml":T()}],"scroll-p":[{"scroll-p":T()}],"scroll-px":[{"scroll-px":T()}],"scroll-py":[{"scroll-py":T()}],"scroll-ps":[{"scroll-ps":T()}],"scroll-pe":[{"scroll-pe":T()}],"scroll-pt":[{"scroll-pt":T()}],"scroll-pr":[{"scroll-pr":T()}],"scroll-pb":[{"scroll-pb":T()}],"scroll-pl":[{"scroll-pl":T()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}
vendor: 4,647 bytes, line 523
523],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",ye]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[Ii,Qi,tg]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},a5=LD(r5);function An(...e){return a5(L2(e))}const o5=G4,uS=b.forwardRef(({className:e,...n},t)=>r.jsx(D2,{ref:t,className:An("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",e),...n}));uS.displayName=D2.displayName;const s5=W2("group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",{variants:{variant:{default:"border bg-background text-foreground",destructive:"destructive group border-destructive bg-destructive text-destructive-foreground"}},defaultVariants:{variant:"default"}}),hS=b.forwardRef(({className:e,variant:n,...t},i)=>r.jsx(B2,{ref:i,className:An(s5({variant:n}),e),...t}));hS.displayName=B2.displayName;const l5=b.forwardRef(({className:e,...n},t)=>r.jsx(R2,{ref:t,className:An("inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50",e),...n}));l5.displayName=R2.displayName;const gS=b.forwardRef(({className:e,...n},t)=>r.jsx(O2,{ref:t,className:An("absolute right-2 top-2 rounded-md p-1 text-foreground
523/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-none focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",e),"toast-close":"",...n,children:r.jsx(xi,{className:"h-4 w-4"})}));gS.displayName=O2.displayName;const mS=b.forwardRef(({className:e,...n},t)=>r.jsx(M2,{ref:t,className:An("text-sm font-semibold",e),...n}));mS.displayName=M2.displayName;const pS=b.forwardRef(({className:e,...n},t)=>r.jsx(F2,{ref:t,className:An("text-sm opacity-90",e),...n}));pS.displayName=F2.displayName;function d5(){const{toasts:e}=n4();return r.jsxs(o5,{children:[e.map(function({id:n,title:t,description:i,action:a,...o}){return r.jsxs(hS,{...o,children:[r.jsxs("div",{className:"grid gap-1",children:[t&&r.jsx(mS,{children:t}),i&&r.jsx(pS,{children:i})]}),a,r.jsx(gS,{})]},n)}),r.jsx(uS,{})]})}var Aw=["light","dark"],c5="(prefers-color-scheme: dark)",u5=b.createContext(void 0),h5={setTheme:e=>{},themes:[]},g5=()=>{var e;return(e=b.useContext(u5))!=null?e:h5};b.memo(({forcedTheme:e,storageKey:n,attribute:t,enableSystem:i,enableColorScheme:a,defaultTheme:o,value:s,attrs:l,nonce:d})=>{let c=o==="system",u=t==="class"?`var d=document.documentElement,c=d.classList;${`c.remove(${l.map(p=>`'${p}'`).join(",")})`};`:`var d=document.documentElement,n='${t}',s='setAttribute';`,h=a?Aw.includes(o)&&o?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${o}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",g=(p,f=!1,w=!0)=>{let k=s?s[p]:p,v=f?p+"|| ''":`'${k}'`,x="";return a&&w&&!f&&Aw.includes(p)&&(x+=`d.style.colorScheme = '${p}';`),t==="class"?f||k?x+=`c.add(${v})`:x+="null":k&&(x+=`d[s](n,${v})`),x},m=e?`!function(){${u}${g(e)}}()`:i?`!function(){try{${u}var e=localStorage.getItem('${n}');if('system'===e||(!e&&${c})){var t='${c5}',m=window.matchMedia(t);if(m.media!==t||m.matches){${g("dark")}}else{${g("light")}}}else if(e){${s?`var x=${JSON.stringify(s)};`:""}${g(s?"x[e]":"e",!0)}}${c?"":"else{"+g(o,!1,!1)+"}"}${h}}catch(e){}}()`:`!function(){try{${u}var e=localStorage.getItem('${n}');if(e){${s?`var x=${JSON.stringify(s)};`:""}${g(s?"x[e]":"e",!0)}}else{${g(o,!1,!1)};}${h}}catch(t){}}();`;return b.createElement("script",{nonce:d,dangerouslySetInnerHTML:{__html:m}})});var m5=e=>{switch(e){case"success":return b5;case"info":return k5;case"warning":return v5;case"error":return w5;default:return null}},p5=Array(12).fill(0),f5=({visible:e,className:n})=>V.createElement("div",{className:["sonner-loading-wrapper",n].filter(Boolean).join(" "),"data-visible":e},V.createElement("div",{className:"sonner-spinner"},p5.map((t,i)=>V.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${i}`})))),b5=V.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},V.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),v5=V.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},V.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),k5=V.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},V.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),w5=V.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},V.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),x5=V.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},V.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),V.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),y5=()=>{let[e,n]=V.useState(document.hidden);return V.useEffect(()=>{let t=()=>{n(document.hidden)};return document.addEventListener("visibilitychange",t),()=>window.removeEventListener("visibilitychange",t)},[]),e},op=1,j5=class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let n=this.subscribers.indexOf(e);this.subscribers.splice(n,1)}),this.publish=e=>
523{this.subscribers.forEach(n=>n(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{var n;let{message:t,...i}=e,a=typeof e?.id=="number"||((n=e.id)==null?void 0:n.length)>0?e.id:op++,o=this.toasts.find(l=>l.id===a),s=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(a)&&this.dismissedToasts.delete(a),o?this.toasts=this.toasts.map(l=>l.id===a?(this.publish({...l,...e,id:a,title:t}),{...l,...e,id:a,dismissible:s,title:t}):l):this.addToast({title:t,...i,dismissible:s,id:a}),a},this.dismiss=e=>(this.dismissedToasts.add(e),e||this.toasts.forEach(n=>{this.subscribers.forEach(t=>t({id:n.id,dismiss:!0}))}),this.subscribers.forEach(n=>n({id:e,dismiss:!0})),e),this.message=(e,n)=>this.create({...n,message:e}),this.error=(e,n)=>this.create({...n,message:e,type:"error"}),this.success=(e,n)=>this.create({...n,type:"success",message:e}),this.info=(e,n)=>this.create({...n,type:"info",message:e}),this.warning=(e,n)=>this.create({...n,type:"warning",message:e}),this.loading=(e,n)=>this.create({...n,type:"loading",message:e}),this.promise=(e,n)=>{if(!n)return;let t;n.loading!==void 0&&(t=this.create({...n,promise:e,type:"loading",message:n.loading,description:typeof n.description!="function"?n.description:void 0}));let i=e instanceof Promise?e:e(),a=t!==void 0,o,s=i.then(async d=>{if(o=["resolve",d],V.isValidElement(d))a=!1,this.create({id:t,type:"default",message:d});else if(z5(d)&&!d.ok){a=!1;let c=typeof n.error=="function"?await n.error(`HTTP error! status: ${d.status}`):n.error,u=typeof n.description=="function"?await n.description(`HTTP error! status: ${d.status}`):n.description;this.create({id:t,type:"error",message:c,description:u})}else if(n.success!==void 0){a=!1;let c=typeof n.success=="function"?await n.success(d):n.success,u=typeof n.description=="function"?await n.description(d):n.description;this.create({id:t,type:"success",message:c,description:u})}}).catch(async d=>{if(o=["reject",d],n.error!==void 0){a=!1;let c=typeof n.error=="function"?await n.error(d):n.error,u=typeof n.description=="function"?await n.description(d):n.description;this.create({id:t,type:"error",message:c,description:u})}}).finally(()=>{var d;a&&(this.dismiss(t),t=void 0),(d=n.finally)==null||d.call(n)}),l=()=>new Promise((d,c)=>s.then(()=>o[0]==="reject"?c(o[1]):d(o[1])).catch(c));return typeof t!="string"&&typeof t!="number"?{unwrap:l}:Object.assign(t,{unwrap:l})},this.custom=(e,n)=>{let t=n?.id||op++;return this.create({jsx:e(t),id:t,...n}),t},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},et=new j5,S5=(e,n)=>{let t=n?.id||op++;return et.addToast({title:e,...n,id:t}),t},z5=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",A5=S5,C5=()=>et.toasts,E5=()=>et.getActiveToasts();Object.assign(A5,{success:et.success,info:et.info,warning:et.warning,error:et.error,custom:et.custom,message:et.message,promise:et.promise,dismiss:et.dismiss,loading:et.loading},{getHistory:C5,getToasts:E5});function N5(e,{insertAt:n}={}){if(typeof document>"u")return;let t=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css",n==="top"&&t.firstChild?t.insertBefore(i,t.firstChild):t.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}N5(`:where(html[dir="ltr"]),:where([data-sonner-toaster][dir="ltr"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][dir="rtl"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted="true"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted="true"]){transform:none}}:where([data-sonner-toaster][data-x-position="right"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position="left"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled="true"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;
523left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}
523:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="false"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed="true"][data-front="false"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);
523--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}
524`);function kd(e){return e.label!==void 0}var I5=3,P5="32px",T5="16px",Cw=4e3,D5=356,B5=14,M5=20,F5=200;function _t(...e){return e.filter(Boolean).join(" ")}function R5(e){let[n,t]=e.split("-"),i=[];return n&&i.push(n),t&&i.push(t),i}var O5=e=>{var n,t,i,a,o,s,l,d,c,u,h;let{invert:g,toast:m,unstyled:p,interacting:f,setHeights:w,visibleToasts:k,heights:v,index:x,toasts:y,expanded:j,removeToast:z,defaultRichColors:S,closeButton:A,style:E,cancelButtonStyle:C,actionButtonStyle:O,className:T="",descriptionClassName:W="",duration:F,position:L,gap:G,loadingIcon:X,expandByDefault:D,classNames:M,icons:K,closeButtonAriaLabel:Q="Close toast",pauseWhenPageIsHidden:$}=e,[se,le]=V.useState(null),[we,Re]=V.useState(null),[I,de]=V.useState(!1),[he,Z]=V.useState(!1),[ke,ce]=V.useState(!1),[be,Pe]=V.useState(!1),[en,Oe]=V.useState(!1),[Ge,ln]=V.useState(0),[Ke,kn]=V.useState(0),wt=V.useRef(m.duration||F||Cw),Br=V.useRef(null),xt=V.useRef(null),yt=x===0,Ft=x+1<=k,hn=m.type,On=m.dismissible!==!1,Cn=m.className||"",Rt=m.descriptionClassName||"",Mr=V.useMemo(()=>v.findIndex(fe=>fe.toastId===m.id)||0,[v,m.id]),ka=V.useMemo(()=>{var fe;return(fe=m.closeButton)!=null?fe:A},[m.closeButton,A]),Ul=V.useMemo(()=>m.duration||F||Cw,[m.duration,F]),jt=V.useRef(0),Ci=V.useRef(0),Uo=V.useRef(0),Ei=V.useRef(null),[ph,Gl]=L.split("-"),Fr=V.useMemo(()=>v.reduce((fe,Me,Le)=>Le>=Mr?fe:fe+Me.height,0),[v,Mr]),Go=y5(),$o=m.invert||g,Rr=hn==="loading";Ci.current=V.useMemo(()=>Mr*G+Fr,[Mr,Fr]),V.useEffect(()=>{wt.current=Ul},[Ul]),V.useEffect(()=>{de(!0)},[]),V.useEffect(()=>{let fe=xt.current;if(fe){let Me=fe.getBoundingClientRect().height;return kn(Me),w(Le=>[{toastId:m.id,height:Me,position:m.position},...Le]),()=>w(Le=>Le.filter(_n=>_n.toastId!==m.id))}},[w,m.id]),V.useLayoutEffect(()=>{if(!I)return;let fe=xt.current,Me=fe.style.height;fe.style.height="auto";let Le=fe.getBoundingClientRect().height;fe.style.height=Me,kn(Le),w(_n=>_n.find(ct=>ct.toastId===m.id)?_n.map(ct=>ct.toastId===m.id?{...ct,height:Le}:ct):[{toastId:m.id,height:Le,position:m.position},..._n])},[I,m.title,m.description,w,m.id]);let ii=V.useCallback(()=>{Z(!0),ln(Ci.current),w(fe=>fe.filter(Me=>Me.toastId!==m.id)),setTimeout(()=>{z(m)},F5)},[m,z,w,Ci]);V.useEffect(()=>{if(m.promise&&hn==="loading"||m.duration===1/0||m.type==="loading")return;let fe;return j||f||$&&Go?(()=>{if(Uo.current<jt.current){let Me=new Date().getTime()-jt.current;wt.current=wt.current-Me}
524Uo.current=new Date().getTime()})():wt.current!==1/0&&(jt.current=new Date().getTime(),fe=setTimeout(()=>{var Me;(Me=m.onAutoClose)==null||Me.call(m,m),ii()},wt.current)),()=>clearTimeout(fe)},[j,f,m,hn,$,Go,ii]),V.useEffect(()=>{m.delete&&ii()},[ii,m.delete]);function $l(){var fe,Me,Le;return K!=null&&K.loading?V.createElement("div",{className:_t(M?.loader,(fe=m?.classNames)==null?void 0:fe.loader,"sonner-loader"),"data-visible":hn==="loading"},K.loading):X?V.createElement("div",{className:_t(M?.loader,(Me=m?.classNames)==null?void 0:Me.loader,"sonner-loader"),"data-visible":hn==="loading"},X):V.createElement(f5,{className:_t(M?.loader,(Le=m?.classNames)==null?void 0:Le.loader),visible:hn==="loading"})}return V.createElement("li",{tabIndex:0,ref:xt,className:_t(T,Cn,M?.toast,(n=m?.classNames)==null?void 0:n.toast,M?.default,M?.[hn],(t=m?.classNames)==null?void 0:t[hn]),"data-sonner-toast":"","data-rich-colors":(i=m.richColors)!=null?i:S,"data-styled":!(m.jsx||m.unstyled||p),"data-mounted":I,"data-promise":!!m.promise,"data-swiped":en,"data-removed":he,"data-visible":Ft,"data-y-position":ph,"data-x-position":Gl,"data-index":x,"data-front":yt,"data-swiping":ke,"data-dismissible":On,"data-type":hn,"data-invert":$o,"data-swipe-out":be,"data-swipe-direction":we,"data-expanded":!!(j||D&&I),style:{"--index":x,"--toasts-before":x,"--z-index":y.length-x,"--offset":`${he?Ge:Ci.current}px`,"--initial-height":D?"auto":`${Ke}px`,...E,...m.style},onDragEnd:()=>{ce(!1),le(null),Ei.current=null},onPointerDown:fe=>{Rr||!On||(Br.current=new Date,ln(Ci.current),fe.target.setPointerCapture(fe.pointerId),fe.target.tagName!=="BUTTON"&&(ce(!0),Ei.current={x:fe.clientX,y:fe.clientY}))},onPointerUp:()=>{var fe,Me,Le,_n;if(be||!On)return;Ei.current=null;let ct=Number(((fe=xt.current)==null?void 0:fe.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),ri=Number(((Me=xt.current)==null?void 0:Me.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),N=new Date().getTime()-((Le=Br.current)==null?void 0:Le.getTime()),P=se==="x"?ct:ri,R=Math.abs(P)/N;if(Math.abs(P)>=M5||R>.11){ln(Ci.current),(_n=m.onDismiss)==null||_n.call(m,m),Re(se==="x"?ct>0?"right":"left":ri>0?"down":"up"),ii(),Pe(!0),Oe(!1);return}ce(!1),le(null)},onPointerMove:fe=>{var Me,Le,_n,ct;if(!Ei.current||!On||((Me=window.getSelection())==null?void 0:Me.toString().length)>0)return;let ri=fe.clientY-Ei.current.y,N=fe.clientX-Ei.current.x,P=(Le=e.swipeDirections)!=null?Le:R5(L);!se&&(Math.abs(N)>1||Math.abs(ri)>1)&&le(Math.abs(N)>Math.abs(ri)?"x":"y");let R={x:0,y:0};se==="y"?(P.includes("top")||P.includes("bottom"))&&(P.includes("top")&&ri<0||P.includes("bottom")&&ri>0)&&(R.y=ri):se==="x"&&(P.includes("left")||P.includes("right"))&&(P.includes("left")&&N<0||P.includes("right")&&N>0)&&(R.x=N),(Math.abs(R.x)>0||Math.abs(R.y)>0)&&Oe(!0),(_n=xt.current)==null||_n.style.setProperty("--swipe-amount-x",`${R.x}px`),(ct=xt.current)==null||ct.style.setProperty("--swipe-amount-y",`${R.y}px`)}},ka&&!m.jsx?V.createElement("button",{"aria-label":Q,"data-disabled":Rr,"data-close-button":!0,onClick:Rr||!On?()=>{}:()=>{var fe;ii(),(fe=m.onDismiss)==null||fe.call(m,m)},className:_t(M?.closeButton,(a=m?.classNames)==null?void 0:a.closeButton)},(o=K?.close)!=null?o:x5):null,m.jsx||b.isValidElement(m.title)?m.jsx?m.jsx:typeof m.title=="function"?m.title():m.title:V.createElement(V.Fragment,null,hn||m.icon||m.promise?V.createElement("div",{"data-icon":"",className:_t(M?.icon,(s=m?.classNames)==null?void 0:s.icon)},m.promise||m.type==="loading"&&!m.icon?m.icon||$l():null,m.type!=="loading"?m.
524icon||K?.[hn]||m5(hn):null):null,V.createElement("div",{"data-content":"",className:_t(M?.content,(l=m?.classNames)==null?void 0:l.content)},V.createElement("div",{"data-title":"",className:_t(M?.title,(d=m?.classNames)==null?void 0:d.title)},typeof m.title=="function"?m.title():m.title),m.description?V.createElement("div",{"data-description":"",className:_t(W,Rt,M?.description,(c=m?.classNames)==null?void 0:c.description)},typeof m.description=="function"?m.description():m.description):null),b.isValidElement(m.cancel)?m.cancel:m.cancel&&kd(m.cancel)?V.createElement("button",{"data-button":!0,"data-cancel":!0,style:m.cancelButtonStyle||C,onClick:fe=>{var Me,Le;kd(m.cancel)&&On&&((Le=(Me=m.cancel).onClick)==null||Le.call(Me,fe),ii())},className:_t(M?.cancelButton,(u=m?.classNames)==null?void 0:u.cancelButton)},m.cancel.label):null,b.isValidElement(m.action)?m.action:m.action&&kd(m.action)?V.createElement("button",{"data-button":!0,"data-action":!0,style:m.actionButtonStyle||O,onClick:fe=>{var Me,Le;kd(m.action)&&((Le=(Me=m.action).onClick)==null||Le.call(Me,fe),!fe.defaultPrevented&&ii())},className:_t(M?.actionButton,(h=m?.classNames)==null?void 0:h.actionButton)},m.action.label):null))};function Ew(){if(typeof window>"u"||typeof document>"u")return"ltr";let e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function _5(e,n){let t={};return[e,n].forEach((i,a)=>{let o=a===1,s=o?"--mobile-offset":"--offset",l=o?T5:P5;function d(c){["top","right","bottom","left"].forEach(u=>{t[`${s}-${u}`]=typeof c=="number"?`${c}px`:c})}typeof i=="number"||typeof i=="string"?d(i):typeof i=="object"?["top","right","bottom","left"].forEach(c=>{i[c]===void 0?t[`${s}-${c}`]=l:t[`${s}-${c}`]=typeof i[c]=="number"?`${i[c]}px`:i[c]}):d(l)}),t}var L5=b.forwardRef(function(e,n){let{invert:t,position:i="bottom-right",hotkey:a=["altKey","KeyT"],expand:o,closeButton:s,className:l,offset:d,mobileOffset:c,theme:u="light",richColors:h,duration:g,style:m,visibleToasts:p=I5,toastOptions:f,dir:w=Ew(),gap:k=B5,loadingIcon:v,icons:x,containerAriaLabel:y="Notifications",pauseWhenPageIsHidden:j}=e,[z,S]=V.useState([]),A=V.useMemo(()=>Array.from(new Set([i].concat(z.filter($=>$.position).map($=>$.position)))),[z,i]),[E,C]=V.useState([]),[O,T]=V.useState(!1),[W,F]=V.useState(!1),[L,G]=V.useState(u!=="system"?u:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),X=V.useRef(null),D=a.join("+").replace(/Key/g,"").replace(/Digit/g,""),M=V.useRef(null),K=V.useRef(!1),Q=V.useCallback($=>{S(se=>{var le;return(le=se.find(we=>we.id===$.id))!=null&&le.delete||et.dismiss($.id),se.filter(({id:we})=>we!==$.id)})},[]);return V.useEffect(()=>et.subscribe($=>{if($.dismiss){S(se=>se.map(le=>le.id===$.id?{...le,delete:!0}:le));return}setTimeout(()=>{qf.flushSync(()=>{S(se=>{let le=se.findIndex(we=>we.id===$.id);return le!==-1?[...se.slice(0,le),{...se[le],...$},...se.slice(le+1)]:[$,...se]})})})}),[]),V.useEffect(()=>{if(u!=="system"){G(u);return}if(u==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?G("dark"):G("light")),typeof window>"u")return;let $=window.matchMedia("(prefers-color-scheme: dark)");try{$.addEventListener("change",({matches:se})=>{G(se?"dark":"light")})}catch{$.addListener(({matches:le})=>{try{G(le?"dark":"light")}catch(we){console.error(we)}})}},[u]),V.useEffect(()=>{z.length<=1&&T(!1)},[z]),V.useEffect(()=>{let $=se=>{var le,we;a.every(Re=>se[Re]||se.code===Re)&&(T(!0),(le=X.current)==null||le.focus()),se.code==="Escape"&&(document.activeElement===X.current||(we=X.current)!=null&&we.contains(document.activeElement))&&T(!1)};return document.addEventListener("keydown",$),()=>document.removeEventListener("keydown",$)},[a]),V.useEffect(()=>{if(X.current)return()=>{M.current&&(M.current.focus({preventScroll:!0}),M.current=null,K.current=!1)}},[X.current]),V.createElement("section",{ref:n,"aria-label":`${y} ${D}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},A.map(($,se)=>{var le;let[we,Re]=$.split("-");return z.length?V.createElement("ol",{key:$,dir:w==="auto"?Ew():w,tabIndex:-1,ref:X,className:l,"data-sonner-toaster":!0,"data-theme":L,"data-y-position":we,"data-lifted":O&&z.length>1&&!o,"data-x-position":Re,style:{"--front-toast-height":`${((le=E[0])==null?void 0:le.height)||0}px`,"--width":`${D5}px`,"--gap":`${k}
524px`,...m,..._5(d,c)},onBlur:I=>{K.current&&!I.currentTarget.contains(I.relatedTarget)&&(K.current=!1,M.current&&(M.current.focus({preventScroll:!0}),M.current=null))},onFocus:I=>{I.target instanceof HTMLElement&&I.target.dataset.dismissible==="false"||K.current||(K.current=!0,M.current=I.relatedTarget)},onMouseEnter:()=>T(!0),onMouseMove:()=>T(!0),onMouseLeave:()=>{W||T(!1)},onDragEnd:()=>T(!1),onPointerDown:I=>{I.target instanceof HTMLElement&&I.target.dataset.dismissible==="false"||F(!0)},onPointerUp:()=>F(!1)},z.filter(I=>!I.position&&se===0||I.position===$).map((I,de)=>{var he,Z;return V.createElement(O5,{key:I.id,icons:x,index:de,toast:I,defaultRichColors:h,duration:(he=f?.duration)!=null?he:g,className:f?.className,descriptionClassName:f?.descriptionClassName,invert:t,visibleToasts:p,closeButton:(Z=f?.closeButton)!=null?Z:s,interacting:W,position:$,style:f?.style,unstyled:f?.unstyled,classNames:f?.classNames,cancelButtonStyle:f?.cancelButtonStyle,actionButtonStyle:f?.actionButtonStyle,removeToast:Q,toasts:z.filter(ke=>ke.position==I.position),heights:E.filter(ke=>ke.position==I.position),setHeights:C,expandByDefault:o,gap:k,loadingIcon:v,expanded:O,pauseWhenPageIsHidden:j,swipeDirections:e.swipeDirections})})):null}))});const W5=({...e})=>{const{theme:n="system"}=g5();return r.jsx(L5,{theme:n,className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...e})};var V5=Qp[" useId ".trim().toString()]||(()=>{}),K5=0;function to(e){const[n,t]=b.useState(V5());return ki(()=>{t(i=>i??String(K5++))},[e]),n?`radix-${n}`:""}const q5=["top","right","bottom","left"],jr=Math.min,gt=Math.max,Qc=Math.round,wd=Math.floor,fi=e=>({x:e,y:e}),H5={left:"right",right:"left",bottom:"top",top:"bottom"},U5={start:"end",end:"start"};function sp(e,n,t){return gt(e,jr(n,t))}function Hi(e,n){return typeof e=="function"?e(n):e}function Ui(e){return e.split("-")[0]}function Fo(e){return e.split("-")[1]}function ub(e){return e==="x"?"y":"x"}function hb(e){return e==="y"?"height":"width"}const G5=new Set(["top","bottom"]);function hi(e){return G5.has(Ui(e))?"y":"x"}function gb(e){return ub(hi(e))}function $5(e,n,t){t===void 0&&(t=!1);const i=Fo(e),a=gb(e),o=hb(a);let s=a==="x"?i===(t?"end":"start")?"right":"left":i==="start"?"bottom":"top";return n.reference[o]>n.floating[o]&&(s=Jc(s)),[s,Jc(s)]}function Z5(e){const n=Jc(e);return[lp(e),n,lp(n)]}function lp(e){return e.replace(/start|end/g,n=>U5[n])}const Nw=["left","right"],Iw=["right","left"],Y5=["top","bottom"],Q5=["bottom","top"];function J5(e,n,t){switch(e){case"top":case"bottom":return t?n?Iw:Nw:n?Nw:Iw;case"left":case"right":return n?Y5:Q5;default:return[]}}function X5(e,n,t,i){const a=Fo(e);let o=J5(Ui(e),t==="start",i);return a&&(o=o.map(s=>s+"-"+a),n&&(o=o.concat(o.map(lp)))),o}function Jc(e){return e.replace(/left|right|bottom|top/g,n=>H5[n])}function eB(e){return{top:0,right:0,bottom:0,left:0,...e}}function fS(e){return typeof e!="number"?eB(e):{top:e,right:e,bottom:e,left:e}}function Xc(e){const{x:n,y:t,width:i,height:a}=e;return{width:i,height:a,top:t,left:n,right:n+i,bottom:t+a,x:n,y:t}}function Pw(e,n,t){let{reference:i,floating:a}=e;const o=hi(n),s=gb(n),l=hb(s),d=Ui(n),c=o==="y",u=i.x+i.width/2-a.width/2,h=i.y+i.height/2-a.height/2,g=i[l]/2-a[l]/2;let m;switch(d){case"top":m={x:u,y:i.y-a.height};break;case"bottom":m={x:u,y:i.y+i.height};break;case"right":m={x:i.x+i.width,y:h};break;case"left":m={x:i.x-a.width,y:h};break;default:m={x:i.x,y:i.y}}switch(Fo(n)){case"start":m[s]-=g*(t&&c?-1:1);break;case"end":m[s]+=g*(t&&c?-1:1);break}return m}const nB=async(e,n,t)=>{const{placement:i="bottom",strategy:a="absolute",middleware:o=[],platform:s}=t,l=o.filter(Boolean),d=await(s.isRTL==null?void 0:s.isRTL(n));let c=await s.getElementRects({reference:e,floating:n,strategy:a}),{x:u,y:h}=Pw(c,i,d),g=i,m={},p=0;for(let f=0;f<l.length;f++){const{name:w,fn:k}=l[f],{x:v,y:x,data:y,reset:j}=await k({x:u,y:h,initialPlacement:i,placement:g,strategy:a,middlewareData:m,rects:c,platform:s,elements:{reference:e,floating:n}});u=v??u,h=x??h,m={...m,[w]:{...m[w],...y}},j&&p<=50&&(p++,typeof j=="object"&&(j.placement&&(g=j.placement),j.rects&&(c=j.rects===!0?await s.getElementRects({reference:e,floating:n,strategy:a}):j.rects),{x:u,y:h}=Pw(c,g,d)),f=-1)}return{x:u,y:h,placement:g,strategy:a,middlewareData:m}};async function ul(e,n){var t;n===void 0&&(n={});const{x:i,y:a,platform:o,rects:s,elements:l,strategy:d}=e,{boundary:c="clippingAncestors",rootBoundary:u="viewport",elementContext:h="floating",altBoundary:g=!1,padding:m=0}=Hi(n,e),p=fS(m),w=l[g?h==="floating"?"reference":"floating":h],k=Xc(await o.getClippingRect
vendor: 9,694 bytes, line 524
524({element:(t=await(o.isElement==null?void 0:o.isElement(w)))==null||t?w:w.contextElement||await(o.getDocumentElement==null?void 0:o.getDocumentElement(l.floating)),boundary:c,rootBoundary:u,strategy:d})),v=h==="floating"?{x:i,y:a,width:s.floating.width,height:s.floating.height}:s.reference,x=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l.floating)),y=await(o.isElement==null?void 0:o.isElement(x))?await(o.getScale==null?void 0:o.getScale(x))||{x:1,y:1}:{x:1,y:1},j=Xc(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:v,offsetParent:x,strategy:d}):v);return{top:(k.top-j.top+p.top)/y.y,bottom:(j.bottom-k.bottom+p.bottom)/y.y,left:(k.left-j.left+p.left)/y.x,right:(j.right-k.right+p.right)/y.x}}const tB=e=>({name:"arrow",options:e,async fn(n){const{x:t,y:i,placement:a,rects:o,platform:s,elements:l,middlewareData:d}=n,{element:c,padding:u=0}=Hi(e,n)||{};if(c==null)return{};const h=fS(u),g={x:t,y:i},m=gb(a),p=hb(m),f=await s.getDimensions(c),w=m==="y",k=w?"top":"left",v=w?"bottom":"right",x=w?"clientHeight":"clientWidth",y=o.reference[p]+o.reference[m]-g[m]-o.floating[p],j=g[m]-o.reference[m],z=await(s.getOffsetParent==null?void 0:s.getOffsetParent(c));let S=z?z[x]:0;(!S||!await(s.isElement==null?void 0:s.isElement(z)))&&(S=l.floating[x]||o.floating[p]);const A=y/2-j/2,E=S/2-f[p]/2-1,C=jr(h[k],E),O=jr(h[v],E),T=C,W=S-f[p]-O,F=S/2-f[p]/2+A,L=sp(T,F,W),G=!d.arrow&&Fo(a)!=null&&F!==L&&o.reference[p]/2-(F<T?C:O)-f[p]/2<0,X=G?F<T?F-T:F-W:0;return{[m]:g[m]+X,data:{[m]:L,centerOffset:F-L-X,...G&&{alignmentOffset:X}},reset:G}}}),iB=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(n){var t,i;const{placement:a,middlewareData:o,rects:s,initialPlacement:l,platform:d,elements:c}=n,{mainAxis:u=!0,crossAxis:h=!0,fallbackPlacements:g,fallbackStrategy:m="bestFit",fallbackAxisSideDirection:p="none",flipAlignment:f=!0,...w}=Hi(e,n);if((t=o.arrow)!=null&&t.alignmentOffset)return{};const k=Ui(a),v=hi(l),x=Ui(l)===l,y=await(d.isRTL==null?void 0:d.isRTL(c.floating)),j=g||(x||!f?[Jc(l)]:Z5(l)),z=p!=="none";!g&&z&&j.push(...X5(l,f,p,y));const S=[l,...j],A=await ul(n,w),E=[];let C=((i=o.flip)==null?void 0:i.overflows)||[];if(u&&E.push(A[k]),h){const F=$5(a,s,y);E.push(A[F[0]],A[F[1]])}if(C=[...C,{placement:a,overflows:E}],!E.every(F=>F<=0)){var O,T;const F=(((O=o.flip)==null?void 0:O.index)||0)+1,L=S[F];if(L&&(!(h==="alignment"?v!==hi(L):!1)||C.every(D=>D.overflows[0]>0&&hi(D.placement)===v)))return{data:{index:F,overflows:C},reset:{placement:L}};let G=(T=C.filter(X=>X.overflows[0]<=0).sort((X,D)=>X.overflows[1]-D.overflows[1])[0])==null?void 0:T.placement;if(!G)switch(m){case"bestFit":{var W;const X=(W=C.filter(D=>{if(z){const M=hi(D.placement);return M===v||M==="y"}return!0}).map(D=>[D.placement,D.overflows.filter(M=>M>0).reduce((M,K)=>M+K,0)]).sort((D,M)=>D[1]-M[1])[0])==null?void 0:W[0];X&&(G=X);break}case"initialPlacement":G=l;break}if(a!==G)return{reset:{placement:G}}}return{}}}};function Tw(e,n){return{top:e.top-n.height,right:e.right-n.width,bottom:e.bottom-n.height,left:e.left-n.width}}function Dw(e){return q5.some(n=>e[n]>=0)}const rB=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(n){const{rects:t}=n,{strategy:i="referenceHidden",...a}=Hi(e,n);switch(i){case"referenceHidden":{const o=await ul(n,{...a,elementContext:"reference"}),s=Tw(o,t.reference);return{data:{referenceHiddenOffsets:s,referenceHidden:Dw(s)}}}case"escaped":{const o=await ul(n,{...a,altBoundary:!0}),s=Tw(o,t.floating);return{data:{escapedOffsets:s,escaped:Dw(s)}}}default:return{}}}}},bS=new Set(["left","top"]);async function aB(e,n){const{placement:t,platform:i,elements:a}=e,o=await(i.isRTL==null?void 0:i.isRTL(a.floating)),s=Ui(t),l=Fo(t),d=hi(t)==="y",c=bS.has(s)?-1:1,u=o&&d?-1:1,h=Hi(n,e);let{mainAxis:g,crossAxis:m,alignmentAxis:p}=typeof h=="number"?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:h.mainAxis||0,crossAxis:h.crossAxis||0,alignmentAxis:h.alignmentAxis};return l&&typeof p=="number"&&(m=l==="end"?p*-1:p),d?{x:m*u,y:g*c}:{x:g*c,y:m*u}}const oB=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(n){var t,i;const{x:a,y:o,placement:s,middlewareData:l}=n,d=await aB(n,e);return s===((t=l.offset)==null?void 0:t.placement)&&(i=l.arrow)!=null&&i.alignmentOffset?{}:{x:a+d.x,y:o+d.y,data:{...d,placement:s}}}}},sB=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(n){const{x:t,y:i,placement:a}=n,{mainAxis:o=!0,crossAxis:s=!1,limiter:l={fn:w=>{let{x:k,y:v}=w;return{x:k,y:v}}},...d}=Hi(e,n),c={x:t,y:i},u=await ul(n,d),h=hi(Ui(a)),g=ub(h);let m=c[g],p=c[h];if(o){const w=g==="y"?"top":"left",k=g==="y"?"bottom":"right",v=m+u[w],x=m-u[k];m=sp(v,m,x)}if(s){const w=h==="y"?"top":"left",k=h==="y"?"bottom":"right",v=p+u[w],x=p-u[k];p=sp(v,p,x)}const f=l.fn({...n,[g]:m,[h]:p});return{...f,data:{x:f.x-t,y:f.y-i,enabled:{[g]:o,[h]:s}}}}}},lB=function(e){return e===void 0&&(e={}),{options:e,fn(n){const{x:t,y:i,placement:a,rects:o,middlewareData:s}=n,{offset:l=0,mainAxis:d=!0,crossAxis:c=!0}=Hi(e,n),u={x:t,y:i},h=hi(a),g=ub(h);let m=u[g],p=u[h];const f=Hi(l,n),w=typeof f=="number"?{mainAxis:f,crossAxis:0}:{mainAxis:0,crossAxis:0,...f};if(d){const x=g==="y"?"height":"width",y=o.reference[g]-o.floating[x]+w.mainAxis,j=o.reference[g]+o.reference[x]-w.mainAxis;m<y?m=y:m>j&&(m=j)}if(c){var k,v;const x=g==="y"?"width":"height",y=bS.has(Ui(a)),j=o.reference[h]-o.floating[x]+(y&&((k=s.offset)==null?void 0:k[h])||0)+(y?0:w.crossAxis),z=o.reference[h]+o.reference[x]+(y?0:((v=s.offset)==null?void 0:v[h])||0)-(y?w.crossAxis:0);p<j?p=j:p>z&&(p=z)}return{[g]:m,[h]:p}}}},dB=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(n){var t,i;const{placement:a,rects:o,platform:s,elements:l}=n,{apply:d=()=>{},...c}=Hi(e,n),u=await ul(n,c),h=Ui(a),g=Fo(a),m=hi(a)==="y",{width:p,height:f}=o.floating;let w,k;h==="top"||h==="bottom"?(w=h,k=g===(await(s.isRTL==null?void 0:s.isRTL(l.floating))?"start":"end")?"left":"right"):(k=h,w=g==="end"?"top":"bottom");const v=f-u.top-u.bottom,x=p-u.left-u.right,y=jr(f-u[w],v),j=jr(p-u[k],x),z=!n.middlewareData.shift;let S=y,A=j;if((t=n.middlewareData.shift)!=null&&t.enabled.x&&(A=x),(i=n.middlewareData.shift)!=null&&i.enabled.y&&(S=v),z&&!g){const C=gt(u.left,0),O=gt(u.right,0),T=gt(u.top,0),W=gt(u.bottom,0);m?A=p-2*(C!==0||O!==0?C+O:gt(u.left,u.right)):S=f-2*(T!==0||W!==0?T+W:gt(u.top,u.bottom))}await d({...n,availableWidth:A,availableHeight:S});const E=await s.getDimensions(l.floating);return p!==E.width||f!==E.height?{reset:{rects:!0}}:{}}}};function Ku(){return typeof window<"u"}function Ro(e){return vS(e)?(e.nodeName||"").toLowerCase():"#document"}function ft(e){var n;return(e==null||(n=e.ownerDocument)==null?void 0:n.defaultView)||window}function Ai(e){var n;return(n=(vS(e)?e.ownerDocument:e.document)||window.document)==null?void 0:n.documentElement}function vS(e){return Ku()?e instanceof Node||e instanceof ft(e).Node:!1}function Xt(e){return Ku()?e instanceof Element||e instanceof ft(e).Element:!1}function yi(e){return Ku()?e instanceof HTMLElement||e instanceof ft(e).HTMLElement:!1}function Bw(e){return!Ku()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof ft(e).ShadowRoot}const cB=new Set(["inline","contents"]);function Il(e){const{overflow:n,overflowX:t,overflowY:i,display:a}=ei(e);return/auto|scroll|overlay|hidden|clip/.test(n+i+t)&&!cB.has(a)}const uB=new Set(["table","td","th"]);function hB(e){return uB.has(Ro(e))}const gB=[":popover-open",":modal"];function qu(e){return gB.some(n=>{try{return e.matches(n)}catch{return!1}})}const mB=["transform","translate","scale","rotate","perspective"],pB=["transform","translate","scale","rotate","perspective","filter"],fB=["paint","layout","strict","content"];function mb(e){const n=pb(),t=Xt(e)?ei(e):e;return mB.some(i=>t[i]?t[i]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!n&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!n&&(t.filter?t.filter!=="none":!1)||pB.some(i=>(t.willChange||"").includes(i))||fB.some(i=>(t.contain||"").includes(i))}function bB(e){let n=Sr(e);for(;yi(n)&&!ko(n);){if(mb(n))return n;if(qu(n))return null;n=Sr(n)}return null}function pb(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const vB=new Set(["html","body","#document"]);function ko(e){return vB.has(Ro(e))}function ei(e){return ft(e).getComputedStyle(e)}function Hu(e){return Xt(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Sr(e){if(Ro(e)==="html")return e;const n=e.assignedSlot||e.parentNode||Bw(e)&&e.host||Ai(e);return Bw(n)?n.host:n}function kS(e){const n=Sr(e);return ko(n)?e.ownerDocument?e.ownerDocument.body:e.body:yi(n)&&Il(n)?n:kS(n)}function hl(e,n,t){var i;n===void 0&&(n=[]),t===void 0&&(t=!0);const a=kS(e),o=a===((i=e.ownerDocument)==null?void 0:i.body),s=ft(a);if(o){const l=dp(s);return n.concat(s,s.visualViewport||[],Il(a)?a:[],l&&t?hl(l):[])}return n.concat(a,hl(a,[],t))}function dp(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function wS(e){const n=ei(e);let t=parseFloat(n.width)||0,i=parseFloat(n.height)||0;const a=yi(e),o=a?e.offsetWidth:t,s=a?e.offsetHeight:i,l=Qc(t)!==o||Qc(i)!==s;return l&&(t=o,i=s),{width:t,height:i,$:l}}function fb(e){return Xt(e)?e:e.contextElement}function io(e){const n=fb(e);if(!yi(n))return fi(1);const t=n.getBoundingClientRect(),{width:i,height:a,$:o}=wS(n);let s=(o?Qc(t.width):t.width)/i,l=(o?Qc(t.height):t.height)/a;return(!s||!Number.isFinite(s))&&(s=1),(!l||!Number.isFinite(l))&&(l=1),{x:s,y:l}}const kB=fi(0);function xS(e){const n=ft(e);
vendor: 6,655 bytes, line 524
524return!pb()||!n.visualViewport?kB:{x:n.visualViewport.offsetLeft,y:n.visualViewport.offsetTop}}function wB(e,n,t){return n===void 0&&(n=!1),!t||n&&t!==ft(e)?!1:n}function ua(e,n,t,i){n===void 0&&(n=!1),t===void 0&&(t=!1);const a=e.getBoundingClientRect(),o=fb(e);let s=fi(1);n&&(i?Xt(i)&&(s=io(i)):s=io(e));const l=wB(o,t,i)?xS(o):fi(0);let d=(a.left+l.x)/s.x,c=(a.top+l.y)/s.y,u=a.width/s.x,h=a.height/s.y;if(o){const g=ft(o),m=i&&Xt(i)?ft(i):i;let p=g,f=dp(p);for(;f&&i&&m!==p;){const w=io(f),k=f.getBoundingClientRect(),v=ei(f),x=k.left+(f.clientLeft+parseFloat(v.paddingLeft))*w.x,y=k.top+(f.clientTop+parseFloat(v.paddingTop))*w.y;d*=w.x,c*=w.y,u*=w.x,h*=w.y,d+=x,c+=y,p=ft(f),f=dp(p)}}return Xc({width:u,height:h,x:d,y:c})}function bb(e,n){const t=Hu(e).scrollLeft;return n?n.left+t:ua(Ai(e)).left+t}function yS(e,n,t){t===void 0&&(t=!1);const i=e.getBoundingClientRect(),a=i.left+n.scrollLeft-(t?0:bb(e,i)),o=i.top+n.scrollTop;return{x:a,y:o}}function xB(e){let{elements:n,rect:t,offsetParent:i,strategy:a}=e;const o=a==="fixed",s=Ai(i),l=n?qu(n.floating):!1;if(i===s||l&&o)return t;let d={scrollLeft:0,scrollTop:0},c=fi(1);const u=fi(0),h=yi(i);if((h||!h&&!o)&&((Ro(i)!=="body"||Il(s))&&(d=Hu(i)),yi(i))){const m=ua(i);c=io(i),u.x=m.x+i.clientLeft,u.y=m.y+i.clientTop}const g=s&&!h&&!o?yS(s,d,!0):fi(0);return{width:t.width*c.x,height:t.height*c.y,x:t.x*c.x-d.scrollLeft*c.x+u.x+g.x,y:t.y*c.y-d.scrollTop*c.y+u.y+g.y}}function yB(e){return Array.from(e.getClientRects())}function jB(e){const n=Ai(e),t=Hu(e),i=e.ownerDocument.body,a=gt(n.scrollWidth,n.clientWidth,i.scrollWidth,i.clientWidth),o=gt(n.scrollHeight,n.clientHeight,i.scrollHeight,i.clientHeight);let s=-t.scrollLeft+bb(e);const l=-t.scrollTop;return ei(i).direction==="rtl"&&(s+=gt(n.clientWidth,i.clientWidth)-a),{width:a,height:o,x:s,y:l}}function SB(e,n){const t=ft(e),i=Ai(e),a=t.visualViewport;let o=i.clientWidth,s=i.clientHeight,l=0,d=0;if(a){o=a.width,s=a.height;const c=pb();(!c||c&&n==="fixed")&&(l=a.offsetLeft,d=a.offsetTop)}return{width:o,height:s,x:l,y:d}}const zB=new Set(["absolute","fixed"]);function AB(e,n){const t=ua(e,!0,n==="fixed"),i=t.top+e.clientTop,a=t.left+e.clientLeft,o=yi(e)?io(e):fi(1),s=e.clientWidth*o.x,l=e.clientHeight*o.y,d=a*o.x,c=i*o.y;return{width:s,height:l,x:d,y:c}}function Mw(e,n,t){let i;if(n==="viewport")i=SB(e,t);else if(n==="document")i=jB(Ai(e));else if(Xt(n))i=AB(n,t);else{const a=xS(e);i={x:n.x-a.x,y:n.y-a.y,width:n.width,height:n.height}}return Xc(i)}function jS(e,n){const t=Sr(e);return t===n||!Xt(t)||ko(t)?!1:ei(t).position==="fixed"||jS(t,n)}function CB(e,n){const t=n.get(e);if(t)return t;let i=hl(e,[],!1).filter(l=>Xt(l)&&Ro(l)!=="body"),a=null;const o=ei(e).position==="fixed";let s=o?Sr(e):e;for(;Xt(s)&&!ko(s);){const l=ei(s),d=mb(s);!d&&l.position==="fixed"&&(a=null),(o?!d&&!a:!d&&l.position==="static"&&!!a&&zB.has(a.position)||Il(s)&&!d&&jS(e,s))?i=i.filter(u=>u!==s):a=l,s=Sr(s)}return n.set(e,i),i}function EB(e){let{element:n,boundary:t,rootBoundary:i,strategy:a}=e;const s=[...t==="clippingAncestors"?qu(n)?[]:CB(n,this._c):[].concat(t),i],l=s[0],d=s.reduce((c,u)=>{const h=Mw(n,u,a);return c.top=gt(h.top,c.top),c.right=jr(h.right,c.right),c.bottom=jr(h.bottom,c.bottom),c.left=gt(h.left,c.left),c},Mw(n,l,a));return{width:d.right-d.left,height:d.bottom-d.top,x:d.left,y:d.top}}function NB(e){const{width:n,height:t}=wS(e);return{width:n,height:t}}function IB(e,n,t){const i=yi(n),a=Ai(n),o=t==="fixed",s=ua(e,!0,o,n);let l={scrollLeft:0,scrollTop:0};const d=fi(0);function c(){d.x=bb(a)}if(i||!i&&!o)if((Ro(n)!=="body"||Il(a))&&(l=Hu(n)),i){const m=ua(n,!0,o,n);d.x=m.x+n.clientLeft,d.y=m.y+n.clientTop}else a&&c();o&&!i&&a&&c();const u=a&&!i&&!o?yS(a,l):fi(0),h=s.left+l.scrollLeft-d.x-u.x,g=s.top+l.scrollTop-d.y-u.y;return{x:h,y:g,width:s.width,height:s.height}}function ig(e){return ei(e).position==="static"}function Fw(e,n){if(!yi(e)||ei(e).position==="fixed")return null;if(n)return n(e);let t=e.offsetParent;return Ai(e)===t&&(t=t.ownerDocument.body),t}function SS(e,n){const t=ft(e);if(qu(e))return t;if(!yi(e)){let a=Sr(e);for(;a&&!ko(a);){if(Xt(a)&&!ig(a))return a;a=Sr(a)}return t}let i=Fw(e,n);for(;i&&hB(i)&&ig(i);)i=Fw(i,n);return i&&ko(i)&&ig(i)&&!mb(i)?t:i||bB(e)||t}const PB=async function(e){const n=this.getOffsetParent||SS,t=this.getDimensions,i=await t(e.floating);return{reference:IB(e.reference,await n(e.floating),e.strategy),floating:{x:0,y:0,width:i.width,height:i.height}}};function TB(e){return ei(e).direction==="rtl"}const DB={convertOffsetParentRelativeRectToViewportRelativeRect:xB,getDocumentElement:Ai,getClippingRect:EB,getOffsetParent:SS,getElementRects:PB,getClientRects:yB,getDimensions:NB,getScale:io,isElement:Xt,isRTL:TB};function zS(e,n){return e.x===n.x&&e.y===n.y&&e.width===n.width&&e.height===n.height}function BB(e,n){let t=null,i;const a=Ai(e);function o(){var l;clearTimeout(i),(l=t)==null||l.disconnect(),t=null}function s(l,d){l===void 0&&(l=!1),d===void 0&&(d=1),o();const c=e.getBoundingClientRect(),{left:u,top:h,width:g,height:m}=c;if(l||n(),!g||!m)return;const p=wd(h),f=wd(a.clientWidth-(u+g)),w=wd(a.clientHeight-(h+m)),k=wd(u),x={rootMargin:-p+"px "+-f+"px "+-w+"px "+-k+"px",threshold:gt(0,jr(1,d))||1};let y=!0;function j(z){const S=z[0].intersectionRatio;if(S!==d){if(!y)return s();S?s(!1,S):i=setTimeout(()=>{s(!1,1e-7)},1e3)}S===1&&!zS(c,e.getBoundingClientRect())&&s(),y=!1}try{t=new IntersectionObserver(j,{...x,root:a.ownerDocument})}catch{t=new IntersectionObserver(j,x)}t.observe(e)}return s(!0),o}function MB(e,n,t,i){i===void 0&&(i={});const{ancestorScroll:a=!0,ancestorResize:o=!0,elementResize:s=typeof ResizeObserver=="function",layoutShift:l=typeof IntersectionObserver=="function",animationFrame:d=!1}=i,c=fb(e),u=a||o?[...c?hl(c):[],...hl(n)]:[];u.forEach(k=>{a&&k.addEventListener("scroll",t,{passive:!0}),o&&k.addEventListener("resize",t)});const h=c&&l?BB(c,t):null;let g=-1,m=null;s&&(m=new ResizeObserver(k=>{let[v]=k;v&&v.target===c&&m&&(m.unobserve(n),cancelAnimationFrame(g),g=requestAnimationFrame(()=>{var x;(x=m)==null||x.observe(n)})),t()}),c&&!d&&m.observe(c),m.observe(n));let p,f=d?ua(e):null;d&&w();function w(){const k=ua(e);f&&!zS(f,k)&&t(),f=k,p=requestAnimationFrame(w)}return t(),()=>{var k;u.forEach(v=>{a&&v.removeEventListener("scroll",t),o&&v.removeEventListener("resize",t)}),h?.(),(k=m)==null||k.disconnect(),m=null,d&&cancelAnimationFrame(p)}}const FB=oB,RB=sB,OB=iB,_B=dB,LB=rB,Rw=tB,WB=lB,VB=(e,n,t)=>{const i=new Map,a={platform:DB,...t},o={...a.platform,_c:i};return nB(e,n,{...a,platform:o})};var KB=typeof document<"u",qB=function(){},ac=KB?b.useLayoutEffect:qB;function eu(e,n){if(e===n)return!0;
vendor: 13,752 bytes, line 524
524if(typeof e!=typeof n)return!1;if(typeof e=="function"&&e.toString()===n.toString())return!0;let t,i,a;if(e&&n&&typeof e=="object"){if(Array.isArray(e)){if(t=e.length,t!==n.length)return!1;for(i=t;i--!==0;)if(!eu(e[i],n[i]))return!1;return!0}if(a=Object.keys(e),t=a.length,t!==Object.keys(n).length)return!1;for(i=t;i--!==0;)if(!{}.hasOwnProperty.call(n,a[i]))return!1;for(i=t;i--!==0;){const o=a[i];if(!(o==="_owner"&&e.$$typeof)&&!eu(e[o],n[o]))return!1}return!0}return e!==e&&n!==n}function AS(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Ow(e,n){const t=AS(e);return Math.round(n*t)/t}function rg(e){const n=b.useRef(e);return ac(()=>{n.current=e}),n}function HB(e){e===void 0&&(e={});const{placement:n="bottom",strategy:t="absolute",middleware:i=[],platform:a,elements:{reference:o,floating:s}={},transform:l=!0,whileElementsMounted:d,open:c}=e,[u,h]=b.useState({x:0,y:0,strategy:t,placement:n,middlewareData:{},isPositioned:!1}),[g,m]=b.useState(i);eu(g,i)||m(i);const[p,f]=b.useState(null),[w,k]=b.useState(null),v=b.useCallback(D=>{D!==z.current&&(z.current=D,f(D))},[]),x=b.useCallback(D=>{D!==S.current&&(S.current=D,k(D))},[]),y=o||p,j=s||w,z=b.useRef(null),S=b.useRef(null),A=b.useRef(u),E=d!=null,C=rg(d),O=rg(a),T=rg(c),W=b.useCallback(()=>{if(!z.current||!S.current)return;const D={placement:n,strategy:t,middleware:g};O.current&&(D.platform=O.current),VB(z.current,S.current,D).then(M=>{const K={...M,isPositioned:T.current!==!1};F.current&&!eu(A.current,K)&&(A.current=K,Cl.flushSync(()=>{h(K)}))})},[g,n,t,O,T]);ac(()=>{c===!1&&A.current.isPositioned&&(A.current.isPositioned=!1,h(D=>({...D,isPositioned:!1})))},[c]);const F=b.useRef(!1);ac(()=>(F.current=!0,()=>{F.current=!1}),[]),ac(()=>{if(y&&(z.current=y),j&&(S.current=j),y&&j){if(C.current)return C.current(y,j,W);W()}},[y,j,W,C,E]);const L=b.useMemo(()=>({reference:z,floating:S,setReference:v,setFloating:x}),[v,x]),G=b.useMemo(()=>({reference:y,floating:j}),[y,j]),X=b.useMemo(()=>{const D={position:t,left:0,top:0};if(!G.floating)return D;const M=Ow(G.floating,u.x),K=Ow(G.floating,u.y);return l?{...D,transform:"translate("+M+"px, "+K+"px)",...AS(G.floating)>=1.5&&{willChange:"transform"}}:{position:t,left:M,top:K}},[t,l,G.floating,u.x,u.y]);return b.useMemo(()=>({...u,update:W,refs:L,elements:G,floatingStyles:X}),[u,W,L,G,X])}const UB=e=>{function n(t){return{}.hasOwnProperty.call(t,"current")}return{name:"arrow",options:e,fn(t){const{element:i,padding:a}=typeof e=="function"?e(t):e;return i&&n(i)?i.current!=null?Rw({element:i.current,padding:a}).fn(t):{}:i?Rw({element:i,padding:a}).fn(t):{}}}},GB=(e,n)=>({...FB(e),options:[e,n]}),$B=(e,n)=>({...RB(e),options:[e,n]}),ZB=(e,n)=>({...WB(e),options:[e,n]}),YB=(e,n)=>({...OB(e),options:[e,n]}),QB=(e,n)=>({..._B(e),options:[e,n]}),JB=(e,n)=>({...LB(e),options:[e,n]}),XB=(e,n)=>({...UB(e),options:[e,n]});var eM="Arrow",CS=b.forwardRef((e,n)=>{const{children:t,width:i=10,height:a=5,...o}=e;return r.jsx(Ue.svg,{...o,ref:n,width:i,height:a,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?t:r.jsx("polygon",{points:"0,0 30,0 15,10"})})});CS.displayName=eM;var nM=CS;function ES(e){const[n,t]=b.useState(void 0);return ki(()=>{if(e){t({width:e.offsetWidth,height:e.offsetHeight});const i=new ResizeObserver(a=>{if(!Array.isArray(a)||!a.length)return;const o=a[0];let s,l;if("borderBoxSize"in o){const d=o.borderBoxSize,c=Array.isArray(d)?d[0]:d;s=c.inlineSize,l=c.blockSize}else s=e.offsetWidth,l=e.offsetHeight;t({width:s,height:l})});return i.observe(e,{box:"border-box"}),()=>i.unobserve(e)}else t(void 0)},[e]),n}var vb="Popper",[NS,IS]=Tr(vb),[tM,PS]=NS(vb),TS=e=>{const{__scopePopper:n,children:t}=e,[i,a]=b.useState(null);return r.jsx(tM,{scope:n,anchor:i,onAnchorChange:a,children:t})};TS.displayName=vb;var DS="PopperAnchor",BS=b.forwardRef((e,n)=>{const{__scopePopper:t,virtualRef:i,...a}=e,o=PS(DS,t),s=b.useRef(null),l=zn(n,s);return b.useEffect(()=>{o.onAnchorChange(i?.current||s.current)}),i?null:r.jsx(Ue.div,{...a,ref:l})});BS.displayName=DS;var kb="PopperContent",[iM,rM]=NS(kb),MS=b.forwardRef((e,n)=>{const{__scopePopper:t,side:i="bottom",sideOffset:a=0,align:o="center",alignOffset:s=0,arrowPadding:l=0,avoidCollisions:d=!0,collisionBoundary:c=[],collisionPadding:u=0,sticky:h="partial",hideWhenDetached:g=!1,updatePositionStrategy:m="optimized",onPlaced:p,...f}=e,w=PS(kb,t),[k,v]=b.useState(null),x=zn(n,I=>v(I)),[y,j]=b.useState(null),z=ES(y),S=z?.width??0,A=z?.height??0,E=i+(o!=="center"?"-"+o:""),C=typeof u=="number"?u:{top:0,right:0,bottom:0,left:0,...u},O=Array.isArray(c)?c:[c],T=O.length>0,W={padding:C,boundary:O.filter(oM),altBoundary:T},{refs:F,floatingStyles:L,placement:G,isPositioned:X,middlewareData:D}=HB({strategy:"fixed",placement:E,whileElementsMounted:(...I)=>MB(...I,{animationFrame:m==="always"}),elements:{reference:w.anchor},middleware:[GB({mainAxis:a+A,alignmentAxis:s}),d&&$B({mainAxis:!0,crossAxis:!1,limiter:h==="partial"?ZB():void 0,...W}),d&&YB({...W}),QB({...W,apply:({elements:I,rects:de,availableWidth:he,availableHeight:Z})=>{const{width:ke,height:ce}=de.reference,be=I.floating.style;be.setProperty("--radix-popper-available-width",`${he}px`),be.setProperty("--radix-popper-available-height",`${Z}px`),be.setProperty("--radix-popper-anchor-width",`${ke}px`),be.setProperty("--radix-popper-anchor-height",`${ce}px`)}}),y&&XB({element:y,padding:l}),sM({arrowWidth:S,arrowHeight:A}),g&&JB({strategy:"referenceHidden",...W})]}),[M,K]=OS(G),Q=vi(p);ki(()=>{X&&Q?.()},[X,Q]);const $=D.arrow?.x,se=D.arrow?.y,le=D.arrow?.centerOffset!==0,[we,Re]=b.useState();return ki(()=>{k&&Re(window.getComputedStyle(k).zIndex)},[k]),r.jsx("div",{ref:F.setFloating,"data-radix-popper-content-wrapper":"",style:{...L,transform:X?L.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:we,"--radix-popper-transform-origin":[D.transformOrigin?.x,D.transformOrigin?.y].join(" "),...D.hide?.referenceHidden&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:r.jsx(iM,{scope:t,placedSide:M,onArrowChange:j,arrowX:$,arrowY:se,shouldHideArrow:le,children:r.jsx(Ue.div,{"data-side":M,"data-align":K,...f,ref:x,style:{...f.style,animation:X?void 0:"none"}})})})});MS.displayName=kb;var FS="PopperArrow",aM={top:"bottom",right:"left",bottom:"top",left:"right"},RS=b.forwardRef(function(n,t){const{__scopePopper:i,...a}=n,o=rM(FS,i),s=aM[o.placedSide];return r.jsx("span",{ref:o.onArrowChange,style:{position:"absolute",left:o.arrowX,top:o.arrowY,[s]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[o.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[o.placedSide],visibility:o.shouldHideArrow?"hidden":void 0},children:r.jsx(nM,{...a,ref:t,style:{...a.style,display:"block"}})})});RS.displayName=FS;function oM(e){return e!==null}var sM=e=>({name:"transformOrigin",options:e,fn(n){const{placement:t,rects:i,middlewareData:a}=n,s=a.arrow?.centerOffset!==0,l=s?0:e.arrowWidth,d=s?0:e.arrowHeight,[c,u]=OS(t),h={start:"0%",center:"50%",end:"100%"}[u],g=(a.arrow?.x??0)+l/2,m=(a.arrow?.y??0)+d/2;let p="",f="";return c==="bottom"?(p=s?h:`${g}px`,f=`${-d}px`):c==="top"?(p=s?h:`${g}px`,f=`${i.floating.height+d}px`):c==="right"?(p=`${-d}px`,f=s?h:`${m}px`):c==="left"&&(p=`${i.floating.width+d}px`,f=s?h:`${m}px`),{data:{x:p,y:f}}}});function OS(e){const[n,t="center"]=e.split("-");return[n,t]}var lM=TS,dM=BS,cM=MS,uM=RS,[Uu,qQ]=Tr("Tooltip",[IS]),Gu=IS(),_S="TooltipProvider",hM=700,cp="tooltip.open",[gM,wb]=Uu(_S),LS=e=>{const{__scopeTooltip:n,delayDuration:t=hM,skipDelayDuration:i=300,disableHoverableContent:a=!1,children:o}=e,s=b.useRef(!0),l=b.useRef(!1),d=b.useRef(0);return b.useEffect(()=>{const c=d.current;return()=>window.clearTimeout(c)},[]),r.jsx(gM,{scope:n,isOpenDelayedRef:s,delayDuration:t,onOpen:b.useCallback(()=>{window.clearTimeout(d.current),s.current=!1},[]),onClose:b.useCallback(()=>{window.clearTimeout(d.current),d.current=window.setTimeout(()=>s.current=!0,i)},[i]),isPointerInTransitRef:l,onPointerInTransitChange:b.useCallback(c=>{l.current=c},[]),disableHoverableContent:a,children:o})};LS.displayName=_S;var gl="Tooltip",[mM,$u]=Uu(gl),WS=e=>{const{__scopeTooltip:n,children:t,open:i,defaultOpen:a,onOpenChange:o,disableHoverableContent:s,delayDuration:l}=e,d=wb(gl,e.__scopeTooltip),c=Gu(n),[u,h]=b.useState(null),g=to(),m=b.useRef(0),p=s??d.disableHoverableContent,f=l??d.delayDuration,w=b.useRef(!1),[k,v]=ba({prop:i,defaultProp:a??!1,onChange:S=>{S?(d.onOpen(),document.dispatchEvent(new CustomEvent(cp))):d.onClose(),o?.(S)},caller:gl}),x=b.useMemo(()=>k?w.current?"delayed-open":"instant-open":"closed",[k]),y=b.useCallback(()=>{window.clearTimeout(m.current),m.current=0,w.current=!1,v(!0)},[v]),j=b.useCallback(()=>{window.clearTimeout(m.current),m.current=0,v(!1)},[v]),z=b.useCallback(()=>{window.clearTimeout(m.current),m.current=window.setTimeout(()=>{w.current=!0,v(!0),m.current=0},f)},[f,v]);return b.useEffect(()=>()=>{m.current&&(window.clearTimeout(m.current),m.current=0)},[]),r.jsx(lM,{...c,children:r.jsx(mM,{scope:n,contentId:g,open:k,stateAttribute:x,trigger:u,onTriggerChange:h,onTriggerEnter:b.useCallback(()=>{d.isOpenDelayedRef.current?z():y()},[d.isOpenDelayedRef,z,y]),onTriggerLeave:b.useCallback(()=>{p?j():(window.clearTimeout(m.current),m.current=0)},[j,p]),onOpen:y,onClose:j,disableHoverableContent:p,children:t})})};WS.displayName=gl;var up="TooltipTrigger",VS=b.forwardRef((e,n)=>{const{__scopeTooltip:t,...i}=e,a=$u(up,t),o=wb(up,t),s=Gu(t),l=b.useRef(null),d=zn(n,l,a.onTriggerChange),c=b.useRef(!1),u=b.useRef(!1),h=b.useCallback(()=>c.current=!1,[]);return b.useEffect(()=>()=>document.removeEventListener("pointerup",h),[h]),r.jsx(dM,{asChild:!0,...s,children:r.jsx(Ue.button,{"aria-describedby":a.open?a.contentId:void 0,"data-state":a.stateAttribute,...i,ref:d,onPointerMove:qe(e.onPointerMove,g=>{g.pointerType!=="touch"&&!u.current&&!o.isPointerInTransitRef.current&&(a.onTriggerEnter(),u.current=!0)}),onPointerLeave:qe(e.onPointerLeave,()=>{a.onTriggerLeave(),u.current=!1}),onPointerDown:qe(e.onPointerDown,()=>{a.open&&a.onClose(),c.current=!0,document.addEventListener("pointerup",h,{once:!0})}),onFocus:qe(e.onFocus,()=>{c.current||a.onOpen()}),onBlur:qe(e.onBlur,a.onClose),onClick:qe(e.onClick,a.onClose)})})});VS.displayName=up;var pM="TooltipPortal",[HQ,fM]=Uu(pM,{forceMount:void 0}),wo="TooltipContent",KS=b.forwardRef((e,n)=>{const t=fM(wo,e.__scopeTooltip),{forceMount:i=t.forceMount,side:a="top",...o}=e,s=$u(wo,e.__scopeTooltip);return r.jsx(fa,{present:i||s.open,children:s.disableHoverableContent?r.jsx(qS,{side:a,...o,ref:n}):r.jsx(bM,{side:a,...o,ref:n})})}),bM=b.forwardRef((e,n)=>{const t=$u(wo,e.__scopeTooltip),i=wb(wo,e.__scopeTooltip),a=b.useRef(null),o=zn(n,a),[s,l]=b.useState(null),{trigger:d,onClose:c}=t,u=a.current,{onPointerInTransitChange:h}=i,g=b.useCallback(()=>{l(null),h(!1)},[h]),m=b.useCallback((p,f)=>{const w=p.currentTarget,k={x:p.clientX,y:p.clientY},v=yM(k,w.getBoundingClientRect()),x=jM(k,v),y=SM(f.getBoundingClientRect()),j=AM([...x,...y]);l(j),h(!0)},[h]);return b.useEffect(()=>()=>g(),[g]),b.useEffect(()=>{if(d&&u){const p=w=>m(w,u),f=w=>m(w,d);return d.addEventListener("pointerleave",p),u.addEventListener("pointerleave",f),()=>{d.removeEventListener("pointerleave",p),u.removeEventListener("pointerleave",f)}}},[d,u,m,g]),b.useEffect(()=>{if(s){const p=f=>{const w=f.target,k={x:f.clientX,y:f.clientY},v=d?.contains(w)||u?.contains(w),x=!zM(k,s);v?g():x&&(g(),c())};return document.addEventListener("pointermove",p),()=>document.removeEventListener("pointermove",p)}},[d,u,s,c,g]),r.jsx(qS,{...e,ref:o})}),[vM,kM]=Uu(gl,{isInside:!1}),wM=o4("TooltipContent"),qS=b.forwardRef((e,n)=>{const{__scopeTooltip:t,children:i,"aria-label":a,onEscapeKeyDown:o,onPointerDownOutside:s,...l}=e,d=$u(wo,t),c=Gu(t),{onClose:u}=d;return b.useEffect(()=>(document.addEventListener(cp,u),()=>document.removeEventListener(cp,u)),[u]),b.useEffect(()=>{if(d.trigger){const h=g=>{g.target?.contains(d.trigger)&&u()};return window.addEventListener("scroll",h,{capture:!0}),()=>window.removeEventListener("scroll",h,{capture:!0})}},[d.trigger,u]),r.jsx(_u,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:o,onPointerDownOutside:s,onFocusOutside:h=>h.preventDefault(),onDismiss:u,children:r.jsxs(cM,{"data-state":d.stateAttribute,...c,...l,ref:n,style:{...l.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[r.jsx(wM,{children:i}),r.jsx(vM,{scope:t,isInside:!0,children:r.jsx(N4,{id:d.contentId,role:"tooltip",children:a||i})})]})})});KS.displayName=wo;var HS="TooltipArrow",xM=b.forwardRef((e,n)=>{const{__scopeTooltip:t,...i}=e,a=Gu(t);return kM(HS,t).isInside?null:r.jsx(uM,{...a,...i,ref:n})});xM.displayName=HS;function yM(e,n){const t=Math.abs(n.top-e.y),i=Math.abs(n.bottom-e.y),a=Math.abs(n.right-e.x),o=Math.abs(n.left-e.x);switch(Math.min(t,i,a,o)){case o:return"left";case a:return"right";case t:return"top";case i:return"bottom";default:throw new Error("unreachable")}}function jM(e,n,t=5){const i=[];switch(n){case"top":i.push({x:e.x-t,y:e.y+t},{x:e.x+t,y:e.y+t});break;case"bottom":i.push({x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t});break;case"left":i.push({x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t});break;case"right":i.push({x:e.x-t,y:e.y-t},{x:e.x-t,y:e.y+t});break}return i}
524function SM(e){const{top:n,right:t,bottom:i,left:a}=e;return[{x:a,y:n},{x:t,y:n},{x:t,y:i},{x:a,y:i}]}function zM(e,n){const{x:t,y:i}=e;let a=!1;for(let o=0,s=n.length-1;o<n.length;s=o++){const l=n[o],d=n[s],c=l.x,u=l.y,h=d.x,g=d.y;u>i!=g>i&&t<(h-c)*(i-u)/(g-u)+c&&(a=!a)}return a}function AM(e){const n=e.slice();return n.sort((t,i)=>t.x<i.x?-1:t.x>i.x?1:t.y<i.y?-1:t.y>i.y?1:0),CM(n)}function CM(e){if(e.length<=1)return e.slice();const n=[];for(let i=0;i<e.length;i++){const a=e[i];for(;n.length>=2;){const o=n[n.length-1],s=n[n.length-2];if((o.x-s.x)*(a.y-s.y)>=(o.y-s.y)*(a.x-s.x))n.pop();else break}n.push(a)}n.pop();const t=[];for(let i=e.length-1;i>=0;i--){const a=e[i];for(;t.length>=2;){const o=t[t.length-1],s=t[t.length-2];if((o.x-s.x)*(a.y-s.y)>=(o.y-s.y)*(a.x-s.x))t.pop();else break}t.push(a)}return t.pop(),n.length===1&&t.length===1&&n[0].x===t[0].x&&n[0].y===t[0].y?n:n.concat(t)}var EM=LS,NM=WS,IM=VS,US=KS;const xb=EM,GS=NM,$S=IM,yb=b.forwardRef(({className:e,sideOffset:n=4,...t},i)=>r.jsx(US,{ref:i,sideOffset:n,className:An("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...t}));yb.displayName=US.displayName;const me=e=>typeof e=="string",gs=()=>{let e,n;const t=new Promise((i,a)=>{e=i,n=a});return t.resolve=e,t.reject=n,t},_w=e=>e==null?"":String(e),PM=(e,n,t)=>{e.forEach(i=>{n[i]&&(t[i]=n[i])})},TM=/###/g,Lw=e=>e&&e.includes("###")?e.replace(TM,"."):e,Ww=e=>!e||me(e),Fs=(e,n,t)=>{const i=me(n)?n.split("."):n;let a=0;for(;a<i.length-1;){if(Ww(e))return{};const o=Lw(i[a]);!e[o]&&t&&(e[o]=new t),Object.prototype.hasOwnProperty.call(e,o)?e=e[o]:e={},++a}return Ww(e)?{}:{obj:e,k:Lw(i[a])}},Vw=(e,n,t)=>{const{obj:i,k:a}=Fs(e,n,Object);if(i!==void 0||n.length===1){i[a]=t;return}let o=n[n.length-1],s=n.slice(0,n.length-1),l=Fs(e,s,Object);for(;l.obj===void 0&&s.length;)o=`${s[s.length-1]}.${o}`,s=s.slice(0,s.length-1),l=Fs(e,s,Object),l?.obj&&typeof l.obj[`${l.k}.${o}`]<"u"&&(l.obj=void 0);l.obj[`${l.k}.${o}`]=t},DM=(e,n,t,i)=>{const{obj:a,k:o}=Fs(e,n,Object);a[o]=a[o]||[],a[o].push(t)},nu=(e,n)=>{const{obj:t,k:i}=Fs(e,n);if(t&&Object.prototype.hasOwnProperty.call(t,i))return t[i]},BM=(e,n,t)=>{const i=nu(e,t);return i!==void 0?i:nu(n,t)},ZS=(e,n,t)=>{for(const i in n)i!=="__proto__"&&i!=="constructor"&&(i in e?me(e[i])||e[i]instanceof String||me(n[i])||n[i]instanceof String?t&&(e[i]=n[i]):ZS(e[i],n[i],t):e[i]=n[i]);return e},Pi=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),MM={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},FM=e=>me(e)?e.replace(/[&<>"'\/]/g,n=>MM[n]):e;class RM{constructor(n){this.capacity=n,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(n){const t=this.regExpMap.get(n);if(t!==void 0)return t;const i=new RegExp(n);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(n,i),this.regExpQueue.push(n),i}}const OM=[" ",",","?","!",";"],_M=new RM(20),LM=(e,n,t)=>{n=n||"",t=t||"";const i=OM.filter(s=>!n.includes(s)&&!t.includes(s));if(i.length===0)return!0;const a=_M.getRegExp(`(${i.map(s=>s==="?"?"\\?":s).join("|")})`);let o=!a.test(e);if(!o){const s=e.indexOf(t);s>0&&!a.test(e.substring(0,s))&&(o=!0)}return o},hp=(e,n,t=".")=>{if(!e)return;if(e[n])return Object.prototype.hasOwnProperty.call(e,n)?e[n]:void 0;const i=n.split(t);let a=e;for(let o=0;o<i.length;){if(!a||typeof a!="object")return;let s,l="";for(let d=o;d<i.length;++d)if(d!==o&&(l+=t),l+=i[d],s=a[l],s!==void 0){if(["string","number","boolean"].includes(typeof s)&&d<i.length-1)continue;o+=d-o+1;break}a=s}return a},ml=e=>e?.replace(/_/g,"-"),WM={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,n){console?.[e]?.apply?.(console,n)}};class tu{constructor(n,t={}){this.init(n,t)}init(n,t={}){this.prefix=t.prefix||"i18next:",this.logger=n||WM,this.options=t,this.debug=t.debug}log(...n){return this.forward(n,"log","",!0)}warn(...n){return this.forward(n,"warn","",!0)}error(...n){return this.forward(n,"error","")}deprecate(...n){return this.forward(n,"warn","WARNING DEPRECATED: ",!0)}forward(n,t,i,a){return a&&!this.debug?null:(n=n.map(o=>me(o)?o.replace(/[\r\n\x00-\x1F\x7F]/g," "):o),me(n[0])&&(n[0]=`${i}${this.prefix} ${n[0]}`),this.logger[t](n))}create(n){return new tu(this.logger,{prefix:`${this.prefix}:${n}:`,...this.options})}clone(n){return n=n||this.options,n.prefix=n.prefix||this.prefix,new tu(this.logger,n)}}var gi=new tu;class Zu{constructor(){this.observers={}}on(n,t){return n.split(" ").forEach(i=>
vendor: 3,426 bytes, line 524
524{this.observers[i]||(this.observers[i]=new Map);const a=this.observers[i].get(t)||0;this.observers[i].set(t,a+1)}),this}off(n,t){if(this.observers[n]){if(!t){delete this.observers[n];return}this.observers[n].delete(t)}}once(n,t){const i=(...a)=>{t(...a),this.off(n,i)};return this.on(n,i),this}emit(n,...t){this.observers[n]&&Array.from(this.observers[n].entries()).forEach(([a,o])=>{for(let s=0;s<o;s++)a(...t)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(([a,o])=>{for(let s=0;s<o;s++)a(n,...t)})}}class Kw extends Zu{constructor(n,t={ns:["translation"],defaultNS:"translation"}){super(),this.data=n||{},this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(n){this.options.ns.includes(n)||this.options.ns.push(n)}removeNamespaces(n){const t=this.options.ns.indexOf(n);t>-1&&this.options.ns.splice(t,1)}getResource(n,t,i,a={}){const o=a.keySeparator!==void 0?a.keySeparator:this.options.keySeparator,s=a.ignoreJSONStructure!==void 0?a.ignoreJSONStructure:this.options.ignoreJSONStructure;let l;n.includes(".")?l=n.split("."):(l=[n,t],i&&(Array.isArray(i)?l.push(...i):me(i)&&o?l.push(...i.split(o)):l.push(i)));const d=nu(this.data,l);return!d&&!t&&!i&&n.includes(".")&&(n=l[0],t=l[1],i=l.slice(2).join(".")),d||!s||!me(i)?d:hp(this.data?.[n]?.[t],i,o)}addResource(n,t,i,a,o={silent:!1}){const s=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator;let l=[n,t];i&&(l=l.concat(s?i.split(s):i)),n.includes(".")&&(l=n.split("."),a=t,t=l[1]),this.addNamespaces(t),Vw(this.data,l,a),o.silent||this.emit("added",n,t,i,a)}addResources(n,t,i,a={silent:!1}){for(const o in i)(me(i[o])||Array.isArray(i[o]))&&this.addResource(n,t,o,i[o],{silent:!0});a.silent||this.emit("added",n,t,i)}addResourceBundle(n,t,i,a,o,s={silent:!1,skipCopy:!1}){let l=[n,t];n.includes(".")&&(l=n.split("."),a=i,i=t,t=l[1]),this.addNamespaces(t);let d=nu(this.data,l)||{};s.skipCopy||(i=JSON.parse(JSON.stringify(i))),a?ZS(d,i,o):d={...d,...i},Vw(this.data,l,d),s.silent||this.emit("added",n,t,i)}removeResourceBundle(n,t){this.hasResourceBundle(n,t)&&delete this.data[n][t],this.removeNamespaces(t),this.emit("removed",n,t)}hasResourceBundle(n,t){return this.getResource(n,t)!==void 0}getResourceBundle(n,t){return t||(t=this.options.defaultNS),this.getResource(n,t)}getDataByLanguage(n){return this.data[n]}hasLanguageSomeTranslations(n){const t=this.getDataByLanguage(n);return!!(t&&Object.keys(t)||[]).find(a=>t[a]&&Object.keys(t[a]).length>0)}toJSON(){return this.data}}var YS={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,n,t,i,a){return e.forEach(o=>{n=this.processors[o]?.process(n,t,i,a)??n}),n}};const QS=Symbol("i18next/PATH_KEY");function VM(){const e=[],n=Object.create(null);let t;return n.get=(i,a)=>(t?.revoke?.(),a===QS?e:(e.push(a),t=Proxy.revocable(i,n),t.proxy)),Proxy.revocable(Object.create(null),n).proxy}function ea(e,n){const{[QS]:t}=e(VM()),i=n?.keySeparator??".",a=n?.nsSeparator??":";if(t.length>1&&a){const o=n?.ns,s=Array.isArray(o)?o:null;if(s&&s.length>1&&s.slice(1).includes(t[0]))return`${t[0]}${a}${t.slice(1).join(i)}`}return t.join(i)}const ag=e=>!me(e)&&typeof e!="boolean"&&typeof e!="number";class iu extends Zu{constructor(n,t={}){super(),PM(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","
524i18nFormat","utils"],n,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=gi.create("translator"),this.checkedLoadedFor={}}changeLanguage(n){n&&(this.language=n)}exists(n,t={interpolation:{}}){const i={...t};if(n==null)return!1;const a=this.resolve(n,i);if(a?.res===void 0)return!1;const o=ag(a.res);return!(i.returnObjects===!1&&o)}extractFromKey(n,t){let i=t.nsSeparator!==void 0?t.nsSeparator:this.options.nsSeparator;i===void 0&&(i=":");const a=t.keySeparator!==void 0?t.keySeparator:this.options.keySeparator;let o=t.ns||this.options.defaultNS||[];const s=i&&n.includes(i),l=!this.options.userDefinedKeySeparator&&!t.keySeparator&&!this.options.userDefinedNsSeparator&&!t.nsSeparator&&!LM(n,i,a);if(s&&!l){const d=n.match(this.interpolator.nestingRegexp);if(d&&d.length>0)return{key:n,namespaces:me(o)?[o]:o};const c=n.split(i);(i!==a||i===a&&this.options.ns.includes(c[0]))&&(o=c.shift()),n=c.join(a)}return{key:n,namespaces:me(o)?[o]:o}}translate(n,t,i){let a=typeof t=="object"?{...t}:t;if(typeof a!="object"&&this.options.overloadTranslationOptionHandler&&(a=this.options.overloadTranslationOptionHandler(arguments)),typeof a=="object"&&(a={...a}),a||(a={}),n==null)return"";typeof n=="function"&&(n=ea(n,{...this.options,...a})),Array.isArray(n)||(n=[String(n)]),n=n.map(W=>typeof W=="function"?ea(W,{...this.options,...a}):String(W));const o=a.returnDetails!==void 0?a.returnDetails:this.options.returnDetails,s=a.keySeparator!==void 0?a.keySeparator:this.options.keySeparator,{key:l,namespaces:d}=this.extractFromKey(n[n.length-1],a),c=d[d.length-1];let u=a.nsSeparator!==void 0?a.nsSeparator:this.options.nsSeparator;u===void 0&&(u=":");const h=a.lng||this.language,g=a.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(h?.toLowerCase()==="cimode")return g?o?{res:`${c}${u}${l}`,usedKey:l,exactUsedKey:l,usedLng:h,usedNS:c,usedParams:this.getUsedParamsDetails(a)}:`${c}${u}${l}`:o?{res:l,usedKey:l,exactUsedKey:l,usedLng:h,usedNS:c,usedParams:this.getUsedParamsDetails(a)}:l;const m=this.resolve(n,a);let p=m?.res;const f=m?.usedKey||l,w=m?.exactUsedKey||l,k=["[object Number]","[object Function]","[object RegExp]"],v=a.joinArrays!==void 0?a.joinArrays:this.options.joinArrays,x=!this.i18nFormat||this.i18nFormat.handleAsObject,y=a.count!==void 0&&!me(a.count),j=iu.hasDefaultValue(a),z=y?this.pluralResolver.getSuffix(h,a.count,a):"",S=a.ordinal&&y?this.pluralResolver.getSuffix(h,a.count,{ordinal:!1}):"",A=y&&!a.ordinal&&a.count===0,E=A&&a[`defaultValue${this.options.pluralSeparator}zero`]||a[`defaultValue${z}`]||a[`defaultValue${S}`]||a.defaultValue;let C=p;x&&!p&&j&&(C=E);const O=ag(C),T=Object.prototype.toString.apply(C);if(x&&C&&O&&!k.includes(T)&&!(me(v)&&Array.isArray(C))){if(!a.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const W=this.options.returnedObjectHandler?this.options.returnedObjectHandler(f,C,{...a,ns:d}):`key '${l} (${this.language})' returned an object instead of string.`;return o?(m.res=W,m.usedParams=this.getUsedParamsDetails(a),m):W}if(s){const W=Array.isArray(C),F=W?[]:{},L=W?w:f;for(const G in C)if(Object.prototype.hasOwnProperty.call(C,G)){const X=`${L}${s}${G}`;j&&!p?F[G]=this.translate(X,{...a,defaultValue:ag(E)?E[G]:void 0,joinArrays:!1,ns:d}):F[G]=this.translate(X,{...a,joinArrays:!1,ns:d}),F[G]===X&&(F[G]=C[G])}p=F}}else if(x&&me(v)&&Array.isArray(p))p=p.join(v),p&&(p=this.extendTranslation(p,n,a,i));else{let W=!1,F=!1;!this.isValidLookup(p)&&j&&(W=!0,p=E),this.isValidLookup(p)||(F=!0,p=l);const G=(a.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&F?void 0:p,X=j&&E!==p&&this.options.updateMissing;if(F||W||X){if(this.logger.log(X?"updateKey":"missingKey",h,c,y&&!X?`${l}${this.pluralResolver.getSuffix(h,a.count,a)}`:l,X?E:p),s){const Q=this.resolve(l,{...a,keySeparator:!1});Q&&Q.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let D=[];const M=this.languageUtils.getFallbackCodes(this.options.fallbackLng,a.lng||this.language);if(this.options.saveMissingTo==="fallback"&&M&&M[0])for(let Q=0;Q<M.length;Q++)D.push(M[Q]);else this.options.saveMissingTo==="all"?D=this.languageUtils.toResolveHierarchy(a.lng||this.language):D.push(a.lng||this.language);const K=(Q,$,se)=>{const le=j&&se!==p?se:G;this.options.missingKeyHandler?this.options.missingKeyHandler(Q,c,$,le,X,a):this.backendConnector?.saveMissing&&this.backendConnector.saveMissing(Q,c,$,le,X,a),this.emit
vendor: 25,236 bytes, line 524
524("missingKey",Q,c,$,p)};this.options.saveMissing&&(this.options.saveMissingPlurals&&y?D.forEach(Q=>{const $=this.pluralResolver.getSuffixes(Q,a);A&&a[`defaultValue${this.options.pluralSeparator}zero`]&&!$.includes(`${this.options.pluralSeparator}zero`)&&$.push(`${this.options.pluralSeparator}zero`),$.forEach(se=>{K([Q],l+se,a[`defaultValue${se}`]||E)})}):K(D,l,E))}p=this.extendTranslation(p,n,a,m,i),F&&p===l&&this.options.appendNamespaceToMissingKey&&(p=`${c}${u}${l}`),(F||W)&&this.options.parseMissingKeyHandler&&(p=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${c}${u}${l}`:l,W?p:void 0,a))}return o?(m.res=p,m.usedParams=this.getUsedParamsDetails(a),m):p}extendTranslation(n,t,i,a,o){if(this.i18nFormat?.parse)n=this.i18nFormat.parse(n,{...this.options.interpolation.defaultVariables,...i},i.lng||this.language||a.usedLng,a.usedNS,a.usedKey,{resolved:a});else if(!i.skipInterpolation){i.interpolation&&this.interpolator.init({...i,interpolation:{...this.options.interpolation,...i.interpolation}});const d=me(n)&&(i?.interpolation?.skipOnVariables!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let c;if(d){const h=n.match(this.interpolator.nestingRegexp);c=h&&h.length}let u=i.replace&&!me(i.replace)?i.replace:i;if(this.options.interpolation.defaultVariables&&(u={...this.options.interpolation.defaultVariables,...u}),n=this.interpolator.interpolate(n,u,i.lng||this.language||a.usedLng,i),d){const h=n.match(this.interpolator.nestingRegexp),g=h&&h.length;c<g&&(i.nest=!1)}!i.lng&&a&&a.res&&(i.lng=this.language||a.usedLng),i.nest!==!1&&(n=this.interpolator.nest(n,(...h)=>o?.[0]===h[0]&&!i.context?(this.logger.warn(`It seems you are nesting recursively key: ${h[0]} in key: ${t[0]}`),null):this.translate(...h,t),i)),i.interpolation&&this.interpolator.reset()}const s=i.postProcess||this.options.postProcess,l=me(s)?[s]:s;return n!=null&&l?.length&&i.applyPostProcessor!==!1&&(n=YS.handle(l,n,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...a,usedParams:this.getUsedParamsDetails(i)},...i}:i,this)),n}resolve(n,t={}){let i,a,o,s,l;return me(n)&&(n=[n]),Array.isArray(n)&&(n=n.map(d=>typeof d=="function"?ea(d,{...this.options,...t}):d)),n.forEach(d=>{if(this.isValidLookup(i))return;const c=this.extractFromKey(d,t),u=c.key;a=u;let h=c.namespaces;this.options.fallbackNS&&(h=h.concat(this.options.fallbackNS));const g=t.count!==void 0&&!me(t.count),m=g&&!t.ordinal&&t.count===0,p=t.context!==void 0&&(me(t.context)||typeof t.context=="number")&&t.context!=="",f=t.lngs?t.lngs:this.languageUtils.toResolveHierarchy(t.lng||this.language,t.fallbackLng);h.forEach(w=>{this.isValidLookup(i)||(l=w,!this.checkedLoadedFor[`${f[0]}-${w}`]&&this.utils?.hasLoadedNamespace&&!this.utils?.hasLoadedNamespace(l)&&(this.checkedLoadedFor[`${f[0]}-${w}`]=!0,this.logger.warn(`key "${a}" for languages "${f.join(", ")}" won't get resolved as namespace "${l}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),f.forEach(k=>{if(this.isValidLookup(i))return;s=k;const v=[u];if(this.i18nFormat?.addLookupKeys)this.i18nFormat.addLookupKeys(v,u,k,w,t);else{let y;g&&(y=this.pluralResolver.getSuffix(k,t.count,t));const j=`${this.options.pluralSeparator}zero`,z=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(g&&(t.ordinal&&y.startsWith(z)&&v.push(u+y.replace(z,this.options.pluralSeparator)),v.push(u+y),m&&v.push(u+j)),p){const S=`${u}${this.options.contextSeparator||"_"}${t.context}`;v.push(S),g&&(t.ordinal&&y.startsWith(z)&&v.push(S+y.replace(z,this.options.pluralSeparator)),v.push(S+y),m&&v.push(S+j))}}let x;for(;x=v.pop();)this.isValidLookup(i)||(o=x,i=this.getResource(k,w,x,t))}))})}),{res:i,usedKey:a,exactUsedKey:o,usedLng:s,usedNS:l}}isValidLookup(n){return n!==void 0&&!(!this.options.returnNull&&n===null)&&!(!this.options.returnEmptyString&&n==="")}getResource(n,t,i,a={}){return this.i18nFormat?.getResource?this.i18nFormat.getResource(n,t,i,a):this.resourceStore.getResource(n,t,i,a)}getUsedParamsDetails(n={}){const t=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],i=n.replace&&!me(n.replace);let a=i?n.replace:n;if(i&&typeof n.count<"u"&&(a.count=n.count),this.options.interpolation.defaultVariables&&(a={...this.options.interpolation.defaultVariables,...a}),!i){a={...a};for(const o of t)delete a[o]}return a}static hasDefaultValue(n){const t="defaultValue";for(const i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&i.startsWith(t)&&n[i]!==void 0)return!0;return!1}}class qw{constructor(n){this.options=n,this.supportedLngs=this.options.supportedLngs||!1,this.logger=gi.create("languageUtils")}getScriptPartFromCode(n){if(n=ml(n),!n||!n.includes("-"))return null;const t=n.split("-");return t.length===2||(t.pop(),t[t.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(t.join("-"))}getLanguagePartFromCode(n){if(n=ml(n),!n||!n.includes("-"))return n;const t=n.split("-");return this.formatLanguageCode(t[0])}formatLanguageCode(n){if(me(n)&&n.includes("-")){let t;try{t=Intl.getCanonicalLocales(n)[0]}catch{}return t&&this.options.lowerCaseLng&&(t=t.toLowerCase()),t||(this.options.lowerCaseLng?n.toLowerCase():n)}return this.options.cleanCode||this.options.lowerCaseLng?n.toLowerCase():n}isSupportedCode(n){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(n=this.getLanguagePartFromCode(n)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.includes(n)}getBestMatchFromCodes(n){if(!n)return null;let t;return n.forEach(i=>{if(t)return;const a=this.formatLanguageCode(i);(!this.options.supportedLngs||this.isSupportedCode(a))&&(t=a)}),!t&&this.options.supportedLngs&&n.forEach(i=>{if(t)return;const a=this.getScriptPartFromCode(i);if(this.isSupportedCode(a))return t=a;const o=this.getLanguagePartFromCode(i);if(this.isSupportedCode(o))return t=o;t=this.options.supportedLngs.find(s=>s===o?!0:!s.includes("-")&&!o.includes("-")?!1:!!(s.includes("-")&&!o.includes("-")&&s.slice(0,s.indexOf("-"))===o||s.startsWith(o)&&o.length>1))}),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t}getFallbackCodes(n,t){if(!n)return[];if(typeof n=="function"&&(n=n(t)),me(n)&&(n=[n]),Array.isArray(n))return n;if(!t)return n.default||[];let i=n[t];return i||(i=n[this.getScriptPartFromCode(t)]),i||(i=n[this.formatLanguageCode(t)]),i||(i=n[this.getLanguagePartFromCode(t)]),i||(i=n.default),i||[]}toResolveHierarchy(n,t){const i=this.getFallbackCodes((t===!1?[]:t)||this.options.fallbackLng||[],n),a=[],o=s=>{s&&(this.isSupportedCode(s)?a.push(s):this.logger.warn(`rejecting language code not found in supportedLngs: ${s}`))};return me(n)&&(n.includes("-")||n.includes("_"))?(this.options.load!=="languageOnly"&&o(this.formatLanguageCode(n)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&o(this.getScriptPartFromCode(n)),this.options.load!=="currentOnly"&&o(this.getLanguagePartFromCode(n))):me(n)&&o(this.formatLanguageCode(n)),i.forEach(s=>{a.includes(s)||o(this.formatLanguageCode(s))}),a}}const Hw={zero:0,one:1,two:2,few:3,many:4,other:5},Uw={select:e=>e===1?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})};class KM{constructor(n,t={}){this.languageUtils=n,this.options=t,this.logger=gi.create("pluralResolver"),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(n,t={}){const i=ml(n==="dev"?"en":n),a=t.ordinal?"ordinal":"cardinal",o=JSON.stringify({cleanedCode:i,type:a});if(o in this.pluralRulesCache)return this.pluralRulesCache[o];let s;try{s=new Intl.PluralRules(i,{type:a})}catch{if(typeof Intl>"u")return this.logger.error("No Intl support, please use an Intl polyfill!"),Uw;if(!n.match(/-|_/))return Uw;const d=this.languageUtils.getLanguagePartFromCode(n);s=this.getRule(d,t)}return this.pluralRulesCache[o]=s,s}needsPlural(n,t={}){let i=this.getRule(n,t);return i||(i=this.getRule("dev",t)),i?.resolvedOptions().pluralCategories.length>1}getPluralFormsOfKey(n,t,i={}){return this.getSuffixes(n,i).map(a=>`${t}${a}`)}getSuffixes(n,t={}){let i=this.getRule(n,t);return i||(i=this.getRule("dev",t)),i?i.resolvedOptions().pluralCategories.sort((a,o)=>Hw[a]-Hw[o]).map(a=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:""}${a}`):[]}getSuffix(n,t,i={}){const a=this.getRule(n,i);return a?`${this.options.prepend}${i.ordinal?`ordinal${this.options.prepend}`:""}${a.select(t)}`:(this.logger.warn(`no plural rule found for: ${n}`),this.getSuffix("dev",t,i))}}const Gw=(e,n,t,i=".",a=!0)=>{let o=BM(e,n,t);return!o&&a&&me(t)&&(o=hp(e,t,i),o===void 0&&(o=hp(n,t,i))),o},og=e=>e.replace(/\$/g,"$$$$");class $w{constructor(n={}){this.logger=gi.create("interpolator"),this.options=n,this.format=n?.interpolation?.format||(t=>t),this.init(n)}init(n={}){n.interpolation||(n.interpolation={escapeValue:!0});const{escape:t,escapeValue:i,useRawValueToEscape:a,prefix:o,prefixEscaped:s,suffix:l,suffixEscaped:d,formatSeparator:c,unescapeSuffix:u,unescapePrefix:h,nestingPrefix:g,nestingPrefixEscaped:m,nestingSuffix:p,nestingSuffixEscaped:f,nestingOptionsSeparator:w,maxReplaces:k,alwaysFormat:v}=n.interpolation;this.escape=t!==void 0?t:FM,this.escapeValue=i!==void 0?i:!0,this.useRawValueToEscape=a!==void 0?a:!1,this.prefix=o?Pi(o):s||"{{",this.suffix=l?Pi(l):d||"}}",this.formatSeparator=c||",",this.unescapePrefix=u?"":h?Pi(h):"-",this.unescapeSuffix=this.unescapePrefix?"":u?Pi(u):"",this.nestingPrefix=g?Pi(g):m||Pi("$t("),this.nestingSuffix=p?Pi(p):f||Pi(")"),this.nestingOptionsSeparator=w||",",this.maxReplaces=k||1e3,this.alwaysFormat=v!==void 0?v:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const n=(t,i)=>t?.source===i?(t.lastIndex=0,t):new RegExp(i,"g");this.regexp=n(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=n(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=n(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(n,t,i,a){let o,s,l;const d=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},c=m=>{if(!m.includes(this.formatSeparator)){const k=Gw(t,d,m,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(k,void 0,i,{...a,...t,interpolationkey:m}):k}const p=m.split(this.formatSeparator),f=p.shift().trim(),w=p.join(this.formatSeparator).trim();return this.format(Gw(t,d,f,this.options.keySeparator,this.options.ignoreJSONStructure),w,i,{...a,...t,interpolationkey:f})};this.resetRegExp(),!this.escapeValue&&typeof n=="string"&&/\$t\([^)]*\{[^}]*\{\{/.test(n)&&this.logger.warn("nesting options string contains interpolated variables with escapeValue: false — if any of those values are attacker-controlled they can inject additional nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing it to t(), or keep escapeValue: true.");const u=a?.missingInterpolationHandler||this.options.missingInterpolationHandler,h=a?.interpolation?.skipOnVariables!==void 0?a.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:m=>og(m)},{regex:this.regexp,safeValue:m=>this.escapeValue?og(this.escape(m)):og(m)}].forEach(m=>{for(l=0;o=m.regex.exec(n);){const p=o[1].trim();if(s=c(p),s===void 0)if(typeof u=="function"){const w=u(n,o,a);s=me(w)?w:""}else if(a&&Object.prototype.hasOwnProperty.call(a,p))s="";else if(h){s=o[0];continue}else this.logger.warn(`missed to pass in variable ${p} for interpolating ${n}`),s="";else!me(s)&&!this.useRawValueToEscape&&(s=_w(s));const f=m.safeValue(s);if(n=n.replace(o[0],f),h?(m.regex.lastIndex+=s.length,m.regex.lastIndex-=o[0].length):m.regex.lastIndex=0,l++,l>=this.maxReplaces)break}}),n}nest(n,t,i={}){let a,o,s;const l=(d,c)=>{const u=this.nestingOptionsSeparator;if(!d.includes(u))return d;const h=d.split(new RegExp(`${Pi(u)}[ ]*{`));let g=`{${h[1]}`;d=h[0],g=this.interpolate(g,s);const m=g.match(/'/g),p=g.match(/"/g);((m?.length??0)%2===0&&!p||(p?.length??0)%2!==0)&&(g=g.replace(/'/g,'"'));try{s=JSON.parse(g),c&&(s={...c,...s})}catch(f){return this.logger.warn(`failed parsing options string in nesting for key ${d}`,f),`${d}${u}${g}`}return s.defaultValue&&s.defaultValue.includes(this.prefix)&&delete s.defaultValue,d};for(;a=this.nestingRegexp.exec(n);){let d=[];s={...i},s=s.replace&&!me(s.replace)?s.replace:s,s.applyPostProcessor=!1,delete s.defaultValue;const c=/{.*}/.test(a[1])?a[1].lastIndexOf("}")+1:a[1].indexOf(this.formatSeparator);if(c!==-1&&(d=a[1].slice(c).split(this.formatSeparator).map(u=>u.trim()).filter(Boolean),a[1]=a[1].slice(0,c)),o=t(l.call(this,a[1].trim(),s),s),o&&a[0]===n&&!me(o))return o;me(o)||(o=_w(o)),o||(this.logger.warn(`missed to resolve ${a[1]} for nesting ${n}`),o=""),d.length&&(o=d.reduce((u,h)=>this.format(u,h,i.lng,{...i,interpolationkey:a[1].trim()}),o.trim())),n=n.replace(a[0],o),this.regexp.lastIndex=0}return n}}const qM=e=>{let n=e.toLowerCase().trim();const t={};if(e.includes("(")){const i=e.split("(");n=i[0].toLowerCase().trim();const a=i[1].slice(0,-1);n==="currency"&&!a.includes(":")?t.currency||(t.currency=a.trim()):n==="relativetime"&&!a.includes(":")?t.range||(t.range=a.trim()):a.split(";").forEach(s=>{if(s){const[l,...d]=s.split(":"),c=d.join(":").trim().replace(/^'+|'+$/g,""),u=l.trim();t[u]||(t[u]=c),c==="false"&&(t[u]=!1),c==="true"&&(t[u]=!0),isNaN(c)||(t[u]=parseInt(c,10))}})}return{formatName:n,formatOptions:t}},Zw=e=>{const n={};return(t,i,a)=>{let o=a;a&&a.interpolationkey&&a.formatParams&&a.formatParams[a.interpolationkey]&&a[a.interpolationkey]&&(o={...o,[a.interpolationkey]:void 0});const s=i+JSON.stringify(o);let l=n[s];return l||(l=e(ml(i),a),n[s]=l),l(t)}},HM=e=>(n,t,i)=>e(ml(t),i)(n);class UM{constructor(n={}){this.logger=gi.create("formatter"),this.options=n,this.init(n)}init(n,t={interpolation:{}}){this.formatSeparator=t.interpolation.formatSeparator||",";const i=t.cacheInBuiltFormats?Zw:HM;this.formats={number:i((a,o)=>{const s=new Intl.NumberFormat(a,{...o});return l=>s.format(l)}),currency:i((a,o)=>{const s=new Intl.NumberFormat(a,{...o,style:"currency"});return l=>s.format(l)}),datetime:i((a,o)=>{const s=new Intl.DateTimeFormat(a,{...o});return l=>s.format(l)}),relativetime:i((a,o)=>{const s=new Intl.RelativeTimeFormat(a,{...o});return l=>s.format(l,o.range||"day")}),list:i((a,o)=>{const s=new Intl.ListFormat(a,{...o});return l=>s.format(l)})}}add(n,t){this.formats[n.toLowerCase().trim()]=t}addCached(n,t){this.formats[n.toLowerCase().trim()]=Zw(t)}format(n,t,i,a={}){if(!t||n==null)return n;const o=t.split(this.formatSeparator);if(o.length>1&&o[0].indexOf("(")>1&&!o[0].includes(")")&&o.find(l=>l.includes(")"))){const l=o.findIndex(d=>d.includes(")"));o[0]=[o[0],...o.splice(1,l)].join(this.formatSeparator)}return o.reduce((l,d)=>{const{formatName:c,formatOptions:u}=qM(d);if(this.formats[c]){let h=l;try{const g=a?.formatParams?.[a.interpolationkey]||{},m=g.locale||g.lng||a.locale||a.lng||i;h=this.formats[c](l,m,{...u,...a,...g})}catch(g){this.logger.warn(g)}return h}else this.logger.warn(`there was no format function for ${c}`);return l},n)}}const GM=(e,n)=>{e.pending[n]!==void 0&&(delete e.pending[n],e.pendingCount--)};let $M=class extends Zu{constructor(n,t,i,a={}){super(),this.backend=n,this.store=t,this.services=i,this.languageUtils=i.languageUtils,this.options=a,this.logger=gi.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=a.maxParallelReads||10,this.readingCalls=0,this.maxRetries=a.maxRetries>=0?a.maxRetries:5,this.retryTimeout=a.retryTimeout>=1?a.retryTimeout:350,this.state={},this.queue=[],this.backend?.init?.(i,a.backend,a)}queueLoad(n,t,i,a){const o={},s={},l={},d={};return n.forEach(c=>{let u=!0;t.forEach(h=>{const g=`${c}|${h}`;!i.reload&&this.store.hasResourceBundle(c,h)?this.state[g]=2:this.state[g]<0||(this.state[g]===1?s[g]===void 0&&(s[g]=!0):(this.state[g]=1,u=!1,s[g]===void 0&&(s[g]=!0),o[g]===void 0&&(o[g]=!0),d[h]===void 0&&(d[h]=!0)))}),u||(l[c]=!0)}),(Object.keys(o).length||Object.keys(s).length)&&this.queue.push({pending:s,pendingCount:Object.keys(s).length,loaded:{},errors:[],callback:a}),{toLoad:Object.keys(o),pending:Object.keys(s),toLoadLanguages:Object.keys(l),toLoadNamespaces:Object.keys(d)}}loaded(n,t,i){const a=n.split("|"),o=a[0],s=a[1];t&&this.emit("failedLoading",o,s,t),!t&&i&&this.store.addResourceBundle(o,s,i,void 0,void 0,{skipCopy:!0}),this.state[n]=t?-1:2,t&&i&&(this.state[n]=0);const l={};this.queue.forEach(d=>{DM(d.loaded,[o],s),GM(d,n),t&&d.errors.push(t),d.pendingCount===0&&!d.done&&(Object.keys(d.loaded).forEach(c=>{l[c]||(l[c]={});const u=d.loaded[c];u.length&&u.forEach(h=>{l[c][h]===void 0&&(l[c][h]=!0)})}),d.done=!0,d.errors.length?d.callback(d.errors):d.callback())}),this.emit("loaded",l),this.queue=this.queue.filter(d=>!d.done)}read(n,t,i,a=0,o=this.retryTimeout,s){if(!n.length)return s(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:n,ns:t,fcName:i,tried:a,wait:o,callback:s});return}this.readingCalls++;const l=(c,u)=>{if(this.readingCalls--,this.waitingReads.length>0){const h=this.waitingReads.shift();this.read(h.lng,h.ns,h.fcName,h.tried,h.wait,h.callback)}if(c&&u&&a<this.maxRetries){setTimeout(()=>{this.read(n,t,i,a+1,o*2,s)},o);return}s(c,u)},d=this.backend[i].bind(this.backend);if(d.length===2){try{const c=d(n,t);c&&typeof c.then=="function"?c.then(u=>l(null,u)).catch(l):l(null,c)}catch(c){l(c)}return}return d(n,t,l)}prepareLoading(n,t,i={},a){if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),a&&a();me(n)&&(n=this.languageUtils.toResolveHierarchy(n)),me(t)&&(t=[t]);const o=this.queueLoad(n,t,i,a);if(!o.toLoad.length)return o.pending.length||a(),null;o.toLoad.forEach(s=>{this.loadOne(s)})}load(n,t,i){this.prepareLoading(n,t,{},i)}reload(n,t,i){this.prepareLoading(n,t,{reload:!0},i)}loadOne(n,t=""){const i=n.split("|"),a=i[0],o=i[1];this.read(a,o,"read",void 0,void 0,(s,l)=>{s&&this.logger.warn(`${t}loading namespace ${o} for language ${a} failed`,s),!s&&l&&this.logger.log(`${t}loaded namespace ${o} for language ${a}`,l),this.loaded(n,s,l)})}saveMissing(n,t,i,a,o,s={},l=()=>{}){if(this.services?.utils?.hasLoadedNamespace&&!this.services?.utils?.hasLoadedNamespace(t)){this.logger.warn(`did not save key "${i}" as the namespace "${t}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(i==null||i==="")){if(this.backend?.create){const d={...s,isUpdate:o},c=this.backend.create.bind(this.backend);if(c.length<6)try{let u;c.length===5?u=c(n,t,i,a,d):u=c(n,t,i,a),u&&typeof u.then=="function"?u.then(h=>l(null,h)).catch(l):l(null,u)}catch(u){l(u)}else c(n,t,i,a,l,d)}!n||!n[0]||this.store.addResource(n[0],t,i,a)}}};const sg=()=>({debug:!1,initAsync:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:e=>{let n={};if(typeof e[1]=="object"&&(n=e[1]),me(e[1])&&(n.defaultValue=e[1]),me(e[2])&&(n.tDescription=e[2]),typeof e[2]=="object"||typeof e[3]=="object"){const t=e[3]||e[2];Object.keys(t).forEach(i=>{n[i]=t[i]})}return n},interpolation:{escapeValue:!0,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),Yw=e=>(me(e.ns)&&(e.ns=[e.ns]),me(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),me(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&!e.supportedLngs.includes("cimode")&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e),xd=()=>{},ZM=e=>{Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(t=>{typeof e[t]=="function"&&(e[t]=e[t].bind(e))})};class Rs extends Zu{constructor(n={},t){if(super(),this.options=Yw(n),this.services={},this.logger=gi,this.modules={external:[]},ZM(this),t&&!this.isInitialized&&!n.isClone){if(!this.options.initAsync)return this.init(n,t),this;setTimeout(()=>{this.init(n,t)},0)}}init(n={},t){this.isInitializing=!0,typeof n=="function"&&(t=n,n={}),n.defaultNS==null&&n.ns&&(me(n.ns)?n.defaultNS=n.ns:n.ns.includes("translation")||(n.defaultNS=n.ns[0]));const i=sg();this.options={...i,...this.options,...Yw(n)},this.options.interpolation={...i.interpolation,...this.options.interpolation},n.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=n.keySeparator),n.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=n.nsSeparator),typeof this.options.overloadTranslationOptionHandler!="function"&&(this.options.overloadTranslationOptionHandler=i.overloadTranslationOptionHandler);const a=c=>c?typeof c=="function"?new c:c:null;if(!this.options.isClone){this.modules.logger?gi.init(a(this.modules.logger),this.options):gi.init(null,this.options);let c;this.modules.formatter?c=this.modules.formatter:c=UM;const u=new qw(this.options);this.store=new Kw(this.options.resources,this.options);const h=this.services;h.logger=gi,h.resourceStore=this.store,h.languageUtils=u,h.pluralResolver=new KM(u,{prepend:this.options.pluralSeparator}),c&&(h.formatter=a(c),h.formatter.init&&h.formatter.init(h,this.options),this.options.interpolation.format=h.formatter.format.bind(h.formatter)),h.interpolator=new $w(this.options),h.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},h.backendConnector=new $M(a(this.modules.backend),h.resourceStore,h,this.options),h.backendConnector.on("*",(g,...m)=>{this.emit(g,...m)}),this.modules.languageDetector&&(h.languageDetector=a(this.modules.languageDetector),h.languageDetector.init&&h.languageDetector.init(h,this.options.detection,this.options)),this.modules.i18nFormat&&(h.i18nFormat=a(this.modules.i18nFormat),h.i18nFormat.init&&h.i18nFormat.init(this)),this.translator=new iu(this.services,this.options),this.translator.on("*",(g,...m)=>{this.emit(g,...m)}),this.modules.external.forEach(g=>{g.init&&g.init(this)})}if(this.format=this.options.interpolation.format,t||(t=xd),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const c=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);c.length>0&&c[0]!=="dev"&&(this.options.lng=c[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(c=>{this[c]=(...u)=>this.store[c](...u)}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(c=>{this[c]=(...u)=>(this.store[c](...u),this)});const l=gs(),d=()=>{const c=(u,h)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),l.resolve(h),t(u,h)};if((this.languages||this.isLanguageChangingTo)&&!this.isInitialized)return c(null,this.t.bind(this));this.changeLanguage(this.options.lng,c)};return this.options.resources||!this.options.initAsync?d():setTimeout(d,0),l}loadResources(n,t=xd){let i=t;const a=me(n)?n:this.language;if(typeof n=="function"&&(i=n),!this.options.resources||this.options.partialBundledLanguages){if(a?.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return i();const o=[],s=l=>{if(!l||l==="cimode")return;this.services.languageUtils.toResolveHierarchy(l).forEach(c=>{c!=="cimode"&&(o.includes(c)||o.push(c))})};a?s(a):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(d=>s(d)),this.options.preload?.forEach?.(l=>s(l)),this.services.backendConnector.load(o,this.options.ns,l=>{!l&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),i(l)})}else i(null)}reloadResources(n,t,i){const a=gs();return typeof n=="function"&&(i=n,n=void 0),typeof t=="function"&&(i=t,t=void 0),n||(n=this.languages),t||(t=this.options.ns),i||(i=xd),this.services.backendConnector.reload(n,t,o=>{a.resolve(),i(o)}),a}use(n){if(!n)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");
vendor: 3,156 bytes, line 524
524if(!n.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return n.type==="backend"&&(this.modules.backend=n),(n.type==="logger"||n.log&&n.warn&&n.error)&&(this.modules.logger=n),n.type==="languageDetector"&&(this.modules.languageDetector=n),n.type==="i18nFormat"&&(this.modules.i18nFormat=n),n.type==="postProcessor"&&YS.addPostProcessor(n),n.type==="formatter"&&(this.modules.formatter=n),n.type==="3rdParty"&&this.modules.external.push(n),this}setResolvedLanguage(n){if(!(!n||!this.languages)&&!["cimode","dev"].includes(n)){for(let t=0;t<this.languages.length;t++){const i=this.languages[t];if(!["cimode","dev"].includes(i)&&this.store.hasLanguageSomeTranslations(i)){this.resolvedLanguage=i;break}}!this.resolvedLanguage&&!this.languages.includes(n)&&this.store.hasLanguageSomeTranslations(n)&&(this.resolvedLanguage=n,this.languages.unshift(n))}}changeLanguage(n,t){this.isLanguageChangingTo=n;const i=gs();this.emit("languageChanging",n);const a=l=>{this.language=l,this.languages=this.services.languageUtils.toResolveHierarchy(l),this.resolvedLanguage=void 0,this.setResolvedLanguage(l)},o=(l,d)=>{d?this.isLanguageChangingTo===n&&(a(d),this.translator.changeLanguage(d),this.isLanguageChangingTo=void 0,this.emit("languageChanged",d),this.logger.log("languageChanged",d)):this.isLanguageChangingTo=void 0,i.resolve((...c)=>this.t(...c)),t&&t(l,(...c)=>this.t(...c))},s=l=>{!n&&!l&&this.services.languageDetector&&(l=[]);const d=me(l)?l:l&&l[0],c=this.store.hasLanguageSomeTranslations(d)?d:this.services.languageUtils.getBestMatchFromCodes(me(l)?[l]:l);c&&(this.language||a(c),this.translator.language||this.translator.changeLanguage(c),this.services.languageDetector?.cacheUserLanguage?.(c)),this.loadResources(c,u=>{o(u,c)})};return!n&&this.services.languageDetector&&!this.services.languageDetector.async?s(this.services.languageDetector.detect()):!n&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(s):this.services.languageDetector.detect(s):s(n),i}getFixedT(n,t,i,a){const o=a?.scopeNs,s=(l,d,...c)=>{let u;typeof d!="object"?u=this.options.overloadTranslationOptionHandler([l,d].concat(c)):u={...d},u.lng=u.lng||s.lng,u.lngs=u.lngs||s.lngs;const h=u.ns!==void 0&&u.ns!==null;u.ns=u.ns||s.ns,u.keyPrefix!==""&&(u.keyPrefix=u.keyPrefix||i||s.keyPrefix);const g={...this.options,...u};Array.isArray(o)&&!h&&(g.ns=o),typeof u.keyPrefix=="function"&&(u.keyPrefix=ea(u.keyPrefix,g));const m=this.options.keySeparator||".";let p;return u.keyPrefix&&Array.isArray(l)?p=l.map(f=>(typeof f=="function"&&(f=ea(f,g)),`${u.keyPrefix}${m}${f}`)):(typeof l=="function"&&(l=ea(l,g)),p=u.keyPrefix?`${u.keyPrefix}${m}${l}`:l),this.t(p,u)};return me(n)?s.lng=n:s.lngs=n,s.ns=t,s.keyPrefix=i,s}t(...n){return this.translator?.translate(...n)}exists(...n){return this.translator?.exists(...n)}setDefaultNamespace(n){this.options.defaultNS=n}hasLoadedNamespace(n,t={}){if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;
vendor: 4,493 bytes, line 524
524if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const i=t.lng||this.resolvedLanguage||this.languages[0],a=this.options?this.options.fallbackLng:!1,o=this.languages[this.languages.length-1];if(i.toLowerCase()==="cimode")return!0;const s=(l,d)=>{const c=this.services.backendConnector.state[`${l}|${d}`];return c===-1||c===0||c===2};if(t.precheck){const l=t.precheck(this,s);if(l!==void 0)return l}return!!(this.hasResourceBundle(i,n)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||s(i,n)&&(!a||s(o,n)))}loadNamespaces(n,t){const i=gs();return this.options.ns?(me(n)&&(n=[n]),n.forEach(a=>{this.options.ns.includes(a)||this.options.ns.push(a)}),this.loadResources(a=>{i.resolve(),t&&t(a)}),i):(t&&t(),Promise.resolve())}loadLanguages(n,t){const i=gs();me(n)&&(n=[n]);const a=this.options.preload||[],o=n.filter(s=>!a.includes(s)&&this.services.languageUtils.isSupportedCode(s));return o.length?(this.options.preload=a.concat(o),this.loadResources(s=>{i.resolve(),t&&t(s)}),i):(t&&t(),Promise.resolve())}dir(n){if(n||(n=this.resolvedLanguage||(this.languages?.length>0?this.languages[0]:this.language)),!n)return"rtl";try{const a=new Intl.Locale(n);if(a&&a.getTextInfo){const o=a.getTextInfo();if(o&&o.direction)return o.direction}}catch{}const t=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],i=this.services?.languageUtils||new qw(sg());return n.toLowerCase().indexOf("-latn")>1?"ltr":t.includes(i.getLanguagePartFromCode(n))||n.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(n={},t){const i=new Rs(n,t);return i.createInstance=Rs.createInstance,i}cloneInstance(n={},t=xd){const i=n.forkResourceStore;i&&delete n.forkResourceStore;const a={...this.options,...n,isClone:!0},o=new Rs(a);if((n.debug!==void 0||n.prefix!==void 0)&&(o.logger=o.logger.clone(n)),["store","services","language"].forEach(l=>{o[l]=this[l]}),o.services={...this.services},o.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},i){const l=Object.keys(this.store.data).reduce((d,c)=>(d[c]={...this.store.data[c]},d[c]=Object.keys(d[c]).reduce((u,h)=>(u[h]={...d[c][h]},u),d[c]),d),{});o.store=new Kw(l,a),o.services.resourceStore=o.store}if(n.interpolation){const d={...sg().interpolation,...this.options.interpolation,...n.interpolation},c={...a,interpolation:d};o.services.interpolator=new $w(c)}return o.translator=new iu(o.services,a),o.translator.on("*",(l,...d)=>{o.emit(l,...d)}),o.init(a,t),o.translator.options=a,o.translator.backendConnector.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},o}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const Rn=Rs.createInstance();Rn.createInstance;Rn.dir;Rn.init;Rn.loadResources;Rn.reloadResources;Rn.use;Rn.changeLanguage;Rn.getFixedT;Rn.t;Rn.exists;Rn.setDefaultNamespace;Rn.hasLoadedNamespace;Rn.loadNamespaces;Rn.loadLanguages;var YM={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};const QM=ga(YM);var JM=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function Qw(e){var n={type:"tag",name:"",voidElement:!1,attrs:{},children:[]},t=e.match(/<\/?([^\s]+?)[/\s>]/);if(t&&(n.name=t[1],(QM[t[1]]||e.charAt(e.length-2)==="/")&&(n.voidElement=!0),n.name.startsWith("!--"))){var i=e.indexOf("-->");return{type:"comment",comment:i!==-1?e.slice(4,i):""}}for(var a=new RegExp(JM),o=null;(o=a.exec(e))!==null;)if(o[0].trim())if(o[1]){var s=o[1].trim(),l=[s,""];s.indexOf("=")>-1&&(l=s.split("=")),n.attrs[l[0]]=l[1],a.lastIndex--}else o[2]&&(n.attrs[o[2]]=o[3].trim().substring(1,o[3].length-1));return n}var XM=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,eF=/^\s*$/,nF=Object.create(null);function JS(e,n){switch(n.type){case"text":return e+n.content;case"tag":return e+="<"+n.name+(n.attrs?function(t){var i=[];for(var a in t)i.push(a+'="'+t[a]+'"');return i.length?" "+i.join(" "):""}(n.attrs):"")+(n.voidElement?"/>":">"),n.voidElement?e:e+n.children.reduce(JS,"")+"</"+n.name+">";
vendor: 1,788 bytes, line 524
524case"comment":return e+"<!--"+n.comment+"-->"}}var tF={parse:function(e,n){n||(n={}),n.components||(n.components=nF);var t,i=[],a=[],o=-1,s=!1;if(e.indexOf("<")!==0){var l=e.indexOf("<");i.push({type:"text",content:l===-1?e:e.substring(0,l)})}return e.replace(XM,function(d,c){if(s){if(d!=="</"+t.name+">")return;s=!1}var u,h=d.charAt(1)!=="/",g=d.startsWith("<!--"),m=c+d.length,p=e.charAt(m);if(g){var f=Qw(d);return o<0?(i.push(f),i):((u=a[o]).children.push(f),i)}if(h&&(o++,(t=Qw(d)).type==="tag"&&n.components[t.name]&&(t.type="component",s=!0),t.voidElement||s||!p||p==="<"||t.children.push({type:"text",content:e.slice(m,e.indexOf("<",m))}),o===0&&i.push(t),(u=a[o-1])&&u.children.push(t),a[o]=t),(!h||t.voidElement)&&(o>-1&&(t.voidElement||t.name===d.slice(2,-1))&&(o--,t=o===-1?i:a[o]),!s&&p!=="<"&&p)){u=o===-1?i:a[o].children;var w=e.indexOf("<",m),k=e.slice(m,w===-1?void 0:w);eF.test(k)&&(k=" "),(w>-1&&o+u.length>=0||k!==" ")&&u.push({type:"text",content:k})}}),i},stringify:function(e){return e.reduce(function(n,t){return n+JS("",t)},"")}};const oc=(e,n,t,i)=>{const a=[t,{code:n,...i||{}}];if(e?.services?.logger?.forward)return e.services.logger.forward(a,"warn","react-i18next::",!0);ot(a[0])&&(a[0]=`react-i18next:: ${a[0]}`),e?.services?.logger?.warn?e.services.logger.warn(...a):console?.warn&&console.warn(...a)},Jw={},pl=(e,n,t,i)=>{ot(t)&&Jw[t]||(ot(t)&&(Jw[t]=new Date),oc(e,n,t,i))},XS=(e,n)=>()=>{if(e.isInitialized)n();else{const t=()=>{setTimeout(()=>{e.off("initialized",t)},0),n()};e.on("initialized",t)}},gp=(e,n,t)=>{e.loadNamespaces(n,XS(e,t))},Xw=(e,n,t,i)=>{if(ot(t)&&(t=[t]),e.options.preload&&e.options.preload.indexOf(n)>-1)return gp(e,t,i);t.forEach(a=>{e.options.ns.indexOf(a)<0&&e.options.ns.push(a)}),e.loadLanguages(n,XS(e,i))},iF=(e,n,t={})=>
524!n.languages||!n.languages.length?(pl(n,"NO_LANGUAGES","i18n.languages were undefined or empty",{languages:n.languages}),!0):n.hasLoadedNamespace(e,{lng:t.lng,precheck:(i,a)=>{if(t.bindI18n&&t.bindI18n.indexOf("languageChanging")>-1&&i.services.backendConnector.backend&&i.isLanguageChangingTo&&!a(i.isLanguageChangingTo,e))return!1}}),ot=e=>typeof e=="string",Fi=e=>typeof e=="object"&&e!==null,rF=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,aF={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},oF=e=>aF[e],ez=e=>e.replace(rF,oF);let mp={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:ez,transDefaultProps:void 0};const sF=(e={})=>{mp={...mp,...e}},jb=()=>mp;let nz;const lF=e=>{nz=e},Sb=()=>nz,sc=(e,n)=>{if(!e)return!1;const t=e.props?.children??e.children;return n?t.length>0:!!t},Ss=e=>{if(!e)return[];const n=e.props?.children??e.children;return e.props?.i18nIsDynamicList?sr(n):n},dF=e=>Array.isArray(e)&&e.every(b.isValidElement),sr=e=>Array.isArray(e)?e:[e],cF=(e,n)=>{const t={...n};return t.props={...n.props,...e.props},t},uF=e=>{const n={};if(!e)return n;const t=i=>{sr(i).forEach(o=>{ot(o)||(sc(o)?t(Ss(o)):Fi(o)&&!b.isValidElement(o)&&Object.assign(n,o))})};return t(e),n},pp=(e,n,t,i)=>{if(!e)return"";let a="";const o=sr(e),s=n?.transSupportBasicHtmlNodes?n.transKeepBasicHtmlNodesFor??[]:[];return o.forEach((l,d)=>{if(ot(l)){a+=`${l}`;return}if(b.isValidElement(l)){const{props:c,type:u}=l,h=Object.keys(c).length,g=s.indexOf(u)>-1,m=c.children;if(!m&&g&&!h){a+=`<${u}/>`;return}if(!m&&(!g||h)||c.i18nIsDynamicList){a+=`<${d}></${d}>`;return}if(g&&h<=1){const f=ot(m)?m:pp(m,n,t,i);a+=`<${u}>${f}</${u}>`;return}const p=pp(m,n,t,i);a+=`<${d}>${p}</${d}>`;return}if(l===null){oc(t,"TRANS_NULL_VALUE","Passed in a null value as child",{i18nKey:i});return}if(Fi(l)){const{format:c,...u}=l,h=Object.keys(u);if(h.length===1){const g=c?`${h[0]}, ${c}`:h[0];a+=`{{${g}}}`;return}oc(t,"TRANS_INVALID_OBJ","Invalid child - Object should only have keys {{ value, format }} (format is optional).",{i18nKey:i,child:l});return}oc(t,"TRANS_INVALID_VAR","Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.",{i18nKey:i,child:l})}),a},hF=(e,n=[],t={})=>{if(!e)return e;const i=Object.keys(t),a=[...n,...i];let o="",s=0;for(;s<e.length;)if(e[s]==="<"){let l=!1;const d=e.slice(s).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(d){const c=d[1];(/^\d+$/.test(c)||a.includes(c))&&(l=!0,o+=d[0],s+=d[0].length)}if(!l){const c=e.slice(s).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(c){const u=c[1];(/^\d+$/.test(u)||a.includes(u))&&(l=!0,o+=c[0],s+=c[0].length)}}l||(o+="&lt;",s+=1)}else o+=e[s],s+=1;return o},gF=(e,n,t,i,a,o,s)=>{if(t==="")return[];const l=a.transKeepBasicHtmlNodesFor||[],d=t&&new RegExp(l.map(v=>`<${v}`).join("|")).test(t);if(!e&&!n&&!d&&!s)return[t];const c=n??{},u=v=>{sr(v).forEach(y=>{ot(y)||(sc(y)?u(Ss(y)):Fi(y)&&!b.isValidElement(y)&&Object.assign(c,y)
524)})};u(e);const h=hF(t,l,c),g=tF.parse(`<0>${h}</0>`),m={...c,...o},p=(v,x,y)=>{const j=Ss(v),z=w(j,x.children,y);return dF(j)&&z.length===0||v.props?.i18nIsDynamicList?j:z},f=(v,x,y,j,z)=>{v.dummy?(v.children=x,y.push(b.cloneElement(v,{key:j},z?void 0:x))):y.push(...b.Children.map([v],S=>{if(S.type===b.Fragment||S.props?.i18nIsDynamicList!==void 0){const E={key:j};return S&&S.props&&Object.keys(S.props).forEach(C=>{C==="children"||C==="i18nIsDynamicList"||(E[C]=S.props[C])}),b.createElement(S.type,E,z?null:x)}const A={key:j};return S&&S.props&&Object.keys(S.props).forEach(E=>{E==="ref"||E==="children"||(A[E]=S.props[E])}),b.cloneElement(S,A,z?null:x)}))},w=(v,x,y)=>{const j=sr(v),z=sr(x),S={};return z.reduce((A,E,C)=>{const O=E.children?.[0]?.content&&i.services.interpolator.interpolate(E.children[0].content,m,i.language);if(E.type==="tag"){let T=j[parseInt(E.name,10)];!T&&n&&(T=n[E.name]),y.length===1&&!T&&(T=y[0][E.name]),T||(T={});const W={...E.attrs};s&&Object.keys(W).forEach(M=>{const K=W[M];ot(K)&&(W[M]=ez(K))});const F=Object.keys(W).length!==0?cF({props:W},T):T,L=b.isValidElement(F),G=L&&sc(E,!0)&&!E.voidElement,X=d&&Fi(F)&&F.dummy&&!L,D=Fi(n)&&Object.hasOwnProperty.call(n,E.name);if(ot(F)){const M=i.services.interpolator.interpolate(F,m,i.language);A.push(M)}else if(sc(F)||G){const M=p(F,E,y);f(F,M,A,C)}else if(X){const M=w(j,E.children,y);f(F,M,A,C)}else if(Number.isNaN(parseFloat(E.name)))if(D){const M=p(F,E,y);f(F,M,A,C,E.voidElement)}else if(a.transSupportBasicHtmlNodes&&l.indexOf(E.name)>-1)if(E.voidElement)A.push(b.createElement(E.name,{key:`${E.name}-${C}`}));else{const M=S[E.name]||0;S[E.name]=M+1;let K,Q=0;for(let le=0;le<j.length;le+=1){const we=j[le];if(b.isValidElement(we)&&we.type===E.name){if(Q===M){K=we;break}Q+=1}}const $=K?sr(Ss(K)):j,se=w($,E.children,y);A.push(b.createElement(E.name,{key:`${E.name}-${C}`},se))}else if(E.voidElement)A.push(`<${E.name} />`);else{const M=w(j,E.children,y);A.push(`<${E.name}>${M}</${E.name}>`)}else if(Fi(F)&&!L){const M=E.children[0]?O:null;M&&A.push(M)}else f(F,O,A,C,E.children.length!==1||!O)}else if(E.type==="text"){const T=a.transWrapTextNodes,W=typeof a.unescape=="function"?a.unescape:jb().unescape,F=s?W(i.services.interpolator.interpolate(E.content,m,i.language)):i.services.interpolator.interpolate(E.content,m,i.language);T?A.push(b.createElement(T,{key:`${E.name}-${C}`},F)):A.push(F)}return A},[])},k=w([{dummy:!0,children:e||[]}],g,sr(e||[]));return Ss(k[0])},tz=(e,n,t)=>{const i=e.key||n,a=b.cloneElement(e,{key:i});if(!a.props||!a.props.children||t.indexOf(`${n}/>`)<0&&t.indexOf(`${n} />`)<0)return a;function o(){return b.createElement(b.Fragment,null,a)}return b.createElement(o,{key:i})},mF=(e,n)=>e.map((t,i)=>tz(t,i,n)),pF=(e,n)=>{const t={};return Object.keys(e).forEach(i=>{Object.assign(t,{[i]:tz(e[i],i,n)})}),t},fF=(e,n,t,i)=>e?Array.isArray(e)?mF(e,n):Fi(e)?pF(e,n):(pl(t,"TRANS_INVALID_COMPONENTS",'<Trans /> "components" prop expects an object or array',{i18nKey:i}),null):null,bF=e=>!Fi(e)||Array.isArray(e)?!1:Object.keys(e).reduce((n,t)=>n&&Number.isNaN(Number.parseFloat(t)),!0);function vF({children:e,count:n,parent:t,i18nKey:i,context:a,tOptions:o={},values:s,defaults:l,components:d,ns:c,i18n:u,t:h,shouldUnescape:g,...m}){const p=u||Sb();if(!p)return pl(p,"NO_I18NEXT_INSTANCE","Trans: You need to pass in an i18next instance using i18nextReactModule",{i18nKey:i}),e;const f=h||p.t.bind(p)||(K=>K),w={...jb(),...p.options?.react};let k=c||f.ns||p.options?.defaultNS;k=ot(k)?[k]:k||["translation"];const{transDefaultProps:v}=w,x=v?.tOptions?{...v.tOptions,...o}:o,y=g??v?.shouldUnescape,j=v?.values?{...v.values,...s}:s,z=v?.components?{...v.components,...d}:d,S=pp(e,w,p,i),A=l||x?.defaultValue||S||w.transEmptyNodeValue||(typeof i=="function"?ea(i):i),{hashTransKey:E}=w,C=i||(E?E(S||A):S||A);p.options?.interpolation?.defaultVariables?s=j&&Object.keys(j).length>0?{...j,...p.options.interpolation.defaultVariables}:{...p.options.interpolation.defaultVariables}:s=j;const O=uF(e);O&&typeof O.count=="number"&&n===void 0&&(n=O.count);const T=s||n!==void 0&&!p.options?.interpolation?.alwaysFormat||!e?x.interpolation:{interpolation:{...x.interpolation,prefix:"#$?",suffix:"?$#"}},W={...x,context:a||x.context,count:n,...s,...T,defaultValue:A,ns:k};let F=C?f(C,W):A;F===C&&A&&(F=A);const L=fF(z,F,p,i);let G=L||e,X=null;bF(L)&&(X=L,G=e);const D=gF(G,X,F,p,w,W,y),M=t??w.defaultTransParent;return M?b.createElement(M,m,D):D}const kF={type:"3rdParty",init(e){sF(e.options.react),lF(e)}},iz=b.createContext();class wF{constructor(){this.usedNamespaces={}}
524addUsedNamespaces(n){n.forEach(t=>{this.usedNamespaces[t]||(this.usedNamespaces[t]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}function xF({children:e,count:n,parent:t,i18nKey:i,context:a,tOptions:o={},values:s,defaults:l,components:d,ns:c,i18n:u,t:h,shouldUnescape:g,...m}){const{i18n:p,defaultNS:f}=b.useContext(iz)||{},w=u||p||Sb(),k=h||w?.t.bind(w);return vF({children:e,count:n,parent:t,i18nKey:i,context:a,tOptions:o,values:s,defaults:l,components:d,ns:c||k?.ns||f||w?.options?.defaultNS,i18n:w,t:h,shouldUnescape:g,...m})}var rz={exports:{}},az={};/**
525 * @license React
526 * use-sync-external-store-shim.production.js
527 *
528 * Copyright (c) Meta Platforms, Inc. and affiliates.
529 *
530 * This source code is licensed under the MIT license found in the
531 * LICENSE file in the root directory of this source tree.
532 */var xo=b;function yF(e,n){return e===n&&(e!==0||1/e===1/n)||e!==e&&n!==n}var jF=typeof Object.is=="function"?Object.is:yF,SF=xo.useState,zF=xo.useEffect,AF=xo.useLayoutEffect,CF=xo.useDebugValue;function EF(e,n){var t=n(),i=SF({inst:{value:t,getSnapshot:n}}),a=i[0].inst,o=i[1];return AF(function(){a.value=t,a.getSnapshot=n,lg(a)&&o({inst:a})},[e,t,n]),zF(function(){return lg(a)&&o({inst:a}),e(function(){lg(a)&&o({inst:a})})},[e]),CF(t),t}function lg(e){var n=e.getSnapshot;e=e.value;try{var t=n();return!jF(e,t)}catch{return!0}}
532function NF(e,n){return n()}var IF=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?NF:EF;az.useSyncExternalStore=xo.useSyncExternalStore!==void 0?xo.useSyncExternalStore:IF;rz.exports=az;var PF=rz.exports;const TF=(e,n)=>{if(ot(n))return n;if(Fi(n)&&ot(n.defaultValue))return n.defaultValue;if(typeof e=="function")return"";if(Array.isArray(e)){const t=e[e.length-1];return typeof t=="function"?"":t}return e},DF={t:TF,ready:!1},BF=()=>()=>{},Y=(e,n={})=>{const{i18n:t}=n,{i18n:i,defaultNS:a}=b.useContext(iz)||{},o=t||i||Sb();o&&!o.reportNamespaces&&(o.reportNamespaces=new wF),o||pl(o,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");const s=b.useMemo(()=>({...jb(),...o?.options?.react,...n}),[o,n]),{useSuspense:l,keyPrefix:d}=s,c=a||o?.options?.defaultNS,u=ot(c)?[c]:c||["translation"],h=b.useMemo(()=>u,u);o?.reportNamespaces?.addUsedNamespaces?.(h);const g=b.useRef(0),m=b.useCallback(E=>{if(!o)return BF;const{bindI18n:C,bindI18nStore:O}=s,T=()=>{g.current+=1,E()};return C&&o.on(C,T),O&&o.store.on(O,T),()=>{C&&C.split(" ").forEach(W=>o.off(W,T)),O&&O.split(" ").forEach(W=>o.store.off(W,T))}},[o,s]),p=b.useRef(),f=b.useCallback(()=>{if(!o)return DF;const E=!!(o.isInitialized||o.initializedStoreOnce)&&h.every(L=>iF(L,o,s)),C=n.lng||o.language,O=g.current,T=p.current;if(T&&T.ready===E&&T.lng===C&&T.keyPrefix===d&&T.revision===O)return T;const F={t:o.getFixedT(C,s.nsMode==="fallback"?h:h[0],d,{scopeNs:h}),ready:E,lng:C,keyPrefix:d,revision:O};return p.current=F,F},[o,h,d,s,n.lng]),[w,k]=b.useState(0),{t:v,ready:x}=PF.useSyncExternalStore(m,f,f);b.useEffect(()=>{if(o&&!x&&!l){const E=()=>k(C=>C+1);n.lng?Xw(o,n.lng,h,E):gp(o,h,E)}},[o,n.lng,h,x,l,w]);const y=o||{},j=b.useRef(null),z=b.useRef(),S=E=>{const C=Object.getOwnPropertyDescriptors(E);C.__original&&delete C.__original;const O=Object.create(Object.getPrototypeOf(E),C);if(!Object.prototype.hasOwnProperty.call(O,"__original"))try{Object.defineProperty(O,"__original",{value:E,writable:!1,enumerable:!1,configurable:!1})}catch{}return O},A=b.useMemo(()=>{const E=y,C=E?.language;let O=E;E&&(j.current&&j.current.__original===E?z.current!==C?(O=S(E),j.current=O,z.current=C):O=j.current:(O=S(E),j.current=O,z.current=C));const T=!x&&!l?(...F)=>(pl(o,"USE_T_BEFORE_READY","useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t."),v(...F)):v,W=[T,O,x];return W.t=T,W.i18n=O,W.ready=x,W},[v,y,x,y.resolvedLanguage,y.language,y.languages]);if(o&&l&&!x)throw new Promise(E=>{const C=()=>E();n.lng?Xw(o,n.lng,h,C):gp(o,h,C)});return A},Yu="/assets/smartbooks-logo-C02Dr2MC.png",Qu="/assets/consolidatie-pnl-Dz62nX5_.png",oz="/assets/budget-pnl-DCjXAFg7.png",zb="/assets/cashflow-forecast-hero-Dvg7kGoW.png",lc=["virtualController","reporting","consolidation","budgetterenCashflow","close"],fp={reporting:po,consolidation:$i,budgetterenCashflow:Do,close:U2,virtualController:mo},MF={reporting:"rapporteren",consolidation:"consolideren",budgetterenCashflow:"budgetterenCashflow",close:"close",virtualController:"virtueleController"},dg=({code:e,className:n})=>e==="nl"?r.jsxs("svg",{viewBox:"0 0 9 6",className:n,preserveAspectRatio:"xMidYMid slice","aria-hidden":"true",children:[r.jsx("rect",{width:"9",height:"2",y:"0",fill:"#AE1C28"}),r.jsx("rect",{width:"9",height:"2",y:"2",fill:"#FFFFFF"}),r.jsx("rect",{width:"9",height:"2",y:"4",fill:"#21468B"})]}):e==="de"?r.jsxs("svg",{viewBox:"0 0 5 3",className:n,preserveAspectRatio:"xMidYMid slice","aria-hidden":"true",children:[r.jsx("rect",{width:"5",height:"1",y:"0",fill:"#000000"}),r.jsx("rect",{width:"5",height:"1",y:"1",fill:"#DD0000"}),r.jsx("rect",{width:"5",height:"1",y:"2",fill:"#FFCE00"})]}):r.jsxs("svg",{viewBox:"0 0 60 30",className:n,preserveAspectRatio:"xMidYMid slice","aria-hidden":"true",children:[r.jsx("clipPath",{id:"uk-clip",children:r.jsx("rect",{width:"60",height:"30"})}),r.jsxs("g",{clipPath:"url(#uk-clip)",children:[r.jsx("rect",{width:"60",height:"30",fill:"#012169"}),r.jsx("path",{d:"M0,0 L60,30 M60,0 L0,30",stroke:"#FFFFFF",strokeWidth:"6"}),r.jsx("path",{d:"M0,0 L60,30 M60,0 L0,30",stroke:"#C8102E",strokeWidth:"4",clipPath:"inset(0 0 0 0)"}),r.jsx("path",{d:"M30,0 V30 M0,15 H60",stroke:"#FFFFFF",strokeWidth:"10"}),r.jsx("path",{d:"M30,0 V30 M0,15 H60",stroke:"#C8102E",strokeWidth:"6"})]})]}),FF=W2("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),jn=b.forwardRef(({className:e,variant:n,size:t,asChild:i=!1,...a},o)=>{const s=i?r4:"button";return r.jsx(s,{className:An(FF({variant:n,size:t,className:e})),ref:o,...a}
532)});jn.displayName="Button";const RF="Locale slug source of truth. NL paths stay verbatim; EN paths are translated. Both fields are absolute paths (NL keeps no /en prefix; EN entries are written WITHOUT the /en prefix and are mounted under /en at runtime). DE mirrors EN — entries are absolute paths without the /de prefix; the prefix is added at runtime.",OF={artikelDetail:{nl:"/artikelen",en:"/articles",de:"/artikel"},klantervaringen:{nl:"/klant-ervaringen",en:"/customer-experiences",de:"/kundenberichten"},klantcase:{nl:"/klant-case",en:"/customer-cases",de:"/fallstudien"},videos:{nl:"/videos",en:"/videos",de:"/videos"},voorWie:{nl:"/voor-wie",en:"/audience",de:"/fuer-wen"}},_F={"Customer Stories":"klantervaringen","Case Studies":"klantcase",Videos:"videos"},LF={cfo:"cfo",controller:"controller",aandeelhouders:"shareholders",accountants:"accountants",stakeholders:"stakeholders"},Zi={$schema:RF,static:{index:{nl:"/",en:"/",de:"/"},functionaliteiten:{nl:"/functionaliteiten",en:"/functionalities",de:"/funktionen"},rapporteren:{nl:"/functionaliteiten/rapporteren",en:"/functionalities/reporting",de:"/funktionen/berichten"},consolideren:{nl:"/functionaliteiten/consolidatie",en:"/functionalities/consolidation",de:"/funktionen/konsolidieren"},budgetterenCashflow:{nl:"/functionaliteiten/budgetteren-cashflow",en:"/functionalities/cashflow-planning",de:"/funktionen/cashflow-planung"},close:{nl:"/functionaliteiten/maandafsluiten",en:"/functionalities/close",de:"/funktionen/monatsabschluss"},virtueleController:{nl:"/functionaliteiten/virtuele-controller",en:"/functionalities/virtual-controller",de:"/funktionen/ai-controller"},prijzen:{nl:"/prijzen",en:"/pricing",de:"/preise"},projecten:{nl:"/projecten",en:"/projects",de:"/projekte"},consulting:{nl:"/projecten/consulting",en:"/projects/consulting",de:"/projekte/consulting"},overOns:{nl:"/over-ons",en:"/about",de:"/ueber-uns"},contact:{nl:"/contact",en:"/contact",de:"/kontakt"},klantverhalen:{nl:"/klant-verhalen",en:"/client-stories",de:"/kundenreferenzen"},kenniscentrum:{nl:"/kenniscentrum",en:"/knowledge-center",de:"/wissenscenter"},vergelijkSoftware:{nl:"/artikelen/vergelijk-business-control-software",en:"/articles/compare-business-control-software",de:"/artikel/business-control-software-vergleich"},waaromSmartbooks:{nl:"/waarom-smartbooks",en:"/why-smartbooks",de:"/warum-smartbooks"},planDemo:{nl:"/demo",en:"/demo",de:"/demo"},webinar:{nl:"/webinar",en:"/webinar",de:"/webinar"},liveWebinar:{nl:"/live-webinar",en:"/live-webinar",de:"/live-webinar"},watIsNieuw:{nl:"/wat-is-nieuw",en:"/whats-new",de:"/neuigkeiten"},lpFinance:{nl:"/lp/finance-verdient-beter-dan-excel",en:"/lp/finance-deserves-better-than-excel",de:"/lp/finance-verdient-mehr-als-excel"},lpConsolidatieSoftware:{nl:"/consolidatie-software",en:"/consolidation-software",de:"/konsolidierungssoftware"},lpRapportageSoftware:{nl:"/rapportage-software",en:"/reporting-software",de:"/berichtssoftware"},lpVirtueleController:{nl:"/lp/virtuele-controller",en:"/lp/virtual-controller",de:"/lp/ai-controller"},productTour:{nl:"/product-tour",en:"/product-tour",de:"/produkt-tour"},onboarding:{nl:"/onboarding",en:"/onboarding",de:"/onboarding"},onboardingMeeting:{nl:"/gratis-pilot",en:"/free-pilot",de:"/kostenloser-pilot"},privacybeleid:{nl:"/privacybeleid",en:"/privacy-policy",de:"/datenschutz"},cookiebeleid:{nl:"/cookiebeleid",en:"/cookie-policy",de:"/cookie-richtlinie"},algemeneVoorwaarden:{nl:"/algemene-voorwaarden",en:"/terms-and-conditions",de:"/agb"},bedanktWebinar:{nl:"/bedankt-webinar",en:"/thank-you-webinar",de:"/danke-webinar"},bedanktWhitepaper:{nl:"/bedankt-whitepaper",en:"/thank-you-whitepaper",de:"/danke-whitepaper"},bedanktDemo:{nl:"/bedankt-demo",en:"/thank-you-demo",de:"/danke-demo"},bedanktContact:{nl:"/bedankt-contact",en:"/thank-you-contact",de:"/danke-kontakt"},quickbooksDisconnected:{nl:"/quickbooks-disconnected",en:"/quickbooks-disconnected",de:"/quickbooks-disconnected"},whitepapers:{nl:"/whitepapers",en:"/whitepapers",de:"/whitepapers"},integraties:{nl:"/integraties",en:"/integrations",de:"/integrationen"},integratieExact:{nl:"/integraties/exact-online-smartbooks",en:"/integrations/exact-online-smartbooks",de:"/integrationen/exact-online-smartbooks"},integratieQuickbooks:{nl:"/integraties/quickbooks-smartbooks",en:"/integrations/quickbooks-smartbooks",de:"/integrationen/quickbooks-smartbooks"},integratieTwinfield:{nl:"/integraties/twinfield-smartbooks",en:"/integrations/twinfield-smartbooks",de:"/integrationen/twinfield-smartbooks"},integratieAfas:{nl:"/integraties/afas-smartbooks",en:"/integrations/afas-smartbooks",de:"/integrationen/afas-smartbooks"},integratieExactGlobe:{nl:"/integraties/exact-globe-smartbooks",en:"/integrations/exact-globe-smartbooks",de:"/integrationen/exact-globe-smartbooks"},integratieOdoo:{nl:"/integraties/odoo-smartbooks",en:"/integrations/odoo-smartbooks",de:"/integrationen/o
532doo-smartbooks"},notFound:{nl:"/404",en:"/404",de:"/404"},aiKoppelingen:{nl:"/functionaliteiten/ai-koppelingen",en:"/functionalities/ai-connectors",de:"/funktionen/ki-konnektoren"}},dynamic:OF,articleCategoryBases:_F,roles:LF},WF=`---json
533{
534  "title": "13-Wochen-Cashflow-Planung: Ruhe im Kopf und auf dem Konto",
535  "metaTitle": "13-Wochen-Cashflow-Planung: Grip auf die Liquidität",
536  "slug": "13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening",
537  "date": "2025-07-07 14:36:00",
538  "category": "Articles",
539  "tags": [
540    "Cashflow",
541    "Prognose"
542  ],
543  "excerpt": "13-Wochen-Cashflow planen: Mit direkter und indirekter Cashflow-Planung erhalten Sie bis zu 13 Wochen im Voraus Grip auf Ihre Liquidität. Weniger Überraschungen, bessere Entscheidungen.",
544  "originalUrl": "https://smartbooks.ai/artikelen/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening/",
545  "meta": null
546}
547---
548<p>Cash is king. Das wissen CFOs seit Jahren. Doch in Zeiten wirtschaftlicher Unsicherheit ist Einblick in Ihre Liquidität kein Luxus mehr – er ist schlicht notwendig. Trotzdem arbeiten viele Organisationen noch mit indirekten Cashflow-Berechnungen oder selbstgebauten Excel-Modellen. Diese sind oft fehleranfällig, zeitaufwendig und liefern zu wenig Steuerungsinformation. Das geht besser.<br><br>Mit Smartbooks verfügen Sie über ein direktes und indirektes Cashflow-Modul, das Ihnen bis zu 13 Wochen im Voraus echten Einblick in Ihre Zahlungsströme gibt. So gewinnen Sie Ruhe – im Kopf und auf dem Konto.</p>
549
550
551
552<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2025/07/Afbeelding1-1024x641.png" alt="13-Wochen-Cashflow-Planung" class="wp-image-3028"/></figure>
553
554
555
556<h2 class="wp-block-heading">Direkt oder indirekt? Beides ist besser</h2>
557
558
559
560<p>Es gibt zwei Wege, Ihren Cashflow zu planen:<br><br>- Der indirekte Cashflow basiert auf Ihrer Gewinn- und Verlustrechnung, mit Korrekturen für Bilanzposten wie Forderungen, Vorräte und Abschreibungen. Praktisch für monatliche Berichte, aber weniger geeignet für die kurze Frist.<br>- Der direkte Cashflow betrachtet Ihre tatsächlichen Einnahmen und Ausgaben. Denken Sie an erwartete Kundenzahlungen, Gehälter, Umsatzsteuer und Miete. Diese Methode liefert deutlich schärferen Blick auf die kommenden Wochen.<br><br>Beide Methoden haben ihren Wert – und Smartbooks unterstützt beide. Vollständig integriert mit Ihrer Buchhaltung, ohne doppelten Aufwand.</p>
561
562
563
564<h2 class="wp-block-heading">So funktioniert es in der Praxis</h2>
565
566
567
568<p>Ein CFO einer Organisation mit fünf Gesellschaften nutzte jahrelang eine komplexe Excel-Datei für Cashflow-Prognosen. Jeden Monat dieselbe Mühe: Exporte, Formeln, Fehlermeldungen, unklare Fälligkeiten. Inzwischen ist das Team auf Smartbooks umgestiegen:</p>
569
570
571
572<p>- Täglicher, wöchentlicher oder monatlicher Einblick in Zahlungsströme<br>- Automatische Anbindung an Buchhaltungssysteme und offene Posten<br>- Manuelle Erfassung erwarteter Umsätze, die noch nicht fakturiert sind<br>- Eigene Pflege künftiger Zahlungen wie Gehälter, Umsatzsteuer und Leasingkosten<br>- Direkter Einblick in Spitzen und Täler – auch über Monats- und Quartalsgrenzen hinweg</p>
573
574
575
576<h2 class="wp-block-heading">Die Vorteile auf einen Blick</h2>
577
578
579
580<p>- Weniger Überraschungen: erkennen Sie rechtzeitig, wo Liquidität unter Druck gerät<br>- Bessere Entscheidungen: fundieren Sie Ihre Story gegenüber Bank, Aktionären oder Management<br>- Immer aktuell: jede Rechnung und Zahlung wird automatisch berücksichtigt</p>
581
582
583
584<h2 class="wp-block-heading">Cashflow = Vertrauen</h2>
585
586
587
588<p>Eine gute Cashflow-Planung geht über Kontrolle hinaus. Es geht um Vertrauen. Vertrauen in Ihre Zahlen. Vertrauen bei Geschäftsführung, Investoren und Team. Und am Ende: Vertrauen in sich selbst als Finance-Profi. Smartbooks hilft Ihnen, dieses Vertrauen einzulösen. Tag für Tag.</p>`,VF=`---json
589{
590  "title": "13-week cash flow planning: peace of mind for you and your bank account",
591  "metaTitle": "13-Week Cash Flow Planning for Better Liquidity",
592  "slug": "13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening",
593  "date": "2025-07-07 14:36:00",
594  "category": "Articles",
595  "tags": [
596    "cashflow",
597    "prognose"
598  ],
599  "excerpt": "13-week cash flow planning in Smartbooks gives you real grip on your liquidity, so you stay ahead of surprises and cash shortages every single week.",
600  "originalUrl": "https://smartbooks.ai/artikelen/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening/",
601  "meta": null
602}
603---
604<p>Cash is king. CFOs have known this for years. But in times of economic uncertainty, insight into your liquidity is no longer a luxury – it is a pure necessity. Yet many organizations still work with indirect cash flow calculations or self-built Excel models. These are often prone to errors, time-consuming, and offer insufficient control. There is a better way.<br><br>With Smartbooks, you have access to a direct and indirect cash flow module that gives you genuine insight into your cash flows up to 13 weeks ahead. This provides peace of mind – for both your head and your bank account.</p>
605
606
607
608<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2025/07/Afbeelding1-1024x641.png" alt="" class="wp-image-3028"/></figure>
609
610
611
612<h2 class="wp-block-heading">Direct or indirect? Both is better</h2>
613
614
615
616<p>There are two ways to plan your cash flow:<br><br>- Indirect cash flow is based on your profit and loss statement, with corrections for balance sheet items such as accounts receivable, inventory, and depreciation. Useful for monthly reporting, but less suitable for the short term.<br>- Direct cash flow looks at your actual receipts and expenditures. Think of expected customer payments, salaries, VAT payments, and rent. This method gives you a much sharper view of the coming weeks.<br><br>Both methods have their value – and Smartbooks supports both. Fully integrated 
616with your accounting, without double work.</p>
617
618
619
620<h2 class="wp-block-heading">How it works in practice</h2>
621
622
623
624<p>A CFO of an organization with five entities used a complex Excel file for cash flow forecasts for years. Every month it was the same struggle: exports, formulas, error messages, unclear timing. They have since switched to Smartbooks:</p>
625
626
627
628<p>- Daily, weekly, or monthly insight into cash flows<br>- Automatic integration with accounting software and outstanding items<br>- Manual entry of expected revenue that has not yet been invoiced<br>- Self-management of future payments such as salaries, VAT, and lease costs<br>- Immediate insight into peaks and troughs – even across the boundary between month and quarter</p>
629
630
631
632<h2 class="wp-block-heading">The benefits at a glance</h2>
633
634
635
636<p>- Fewer surprises: see well in advance where liquidity will come under pressure<br>- Better decision-making: substantiate your story to the bank, shareholders, or management<br>- Always up-to-date: every invoice or payment is automatically updated</p>
637
638
639
640<h2 class="wp-block-heading">Cash flow = confidence</h2>
641
642
643
644<p>Good cash flow planning goes beyond control. It's about confidence. Confidence in your figures. Confidence with your board, your investors, and your team. And ultimately: confidence in yourself as a finance professional. Smartbooks helps you deliver on that confidence. Every single day.</p>`,KF=`---json
645{
646  "title": "13-weken cashflowplanning: rust in je hoofd én op je bankrekening",
647  "metaTitle": "13-weken cashflow planning: grip op je liquiditeit",
648  "slug": "13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening",
649  "order": 5,
650  "date": "2025-07-07 14:36:00",
651  "category": "Articles",
652  "tags": [
653    "cashflow",
654    "prognose"
655  ],
656  "excerpt": "13 weken cashflow plannen: met directe en indirecte cashflowplanning krijg je tot 13 weken vooruit grip op je liquiditeit. Minder verrassingen, betere besluiten.",
657  "originalUrl": "https://smartbooks.ai/artikelen/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening/",
658  "meta": null,
659  "enSlug": "13-week-cashflow-planning-peace-of-mind"
660}
661---
662<p>Cash is king. Dat weten CFO’s al jaren. Maar in tijden van economische onzekerheid is inzicht in je liquiditeit geen luxe meer – het is pure noodzaak. Toch werken veel organisaties nog steeds met indirecte cashflowberekeningen of zelfgebouwde Excelmodellen. Die zijn vaak foutgevoelig, tijdrovend en bieden onvoldoende grip. Dat kan beter.<br><br>Met Smartbooks beschik je over een directe én indirecte cashflowmodule die je tot 13 weken vooruit écht inzicht geeft in je kasstromen. Zo krijg je rust – in je hoofd én op je bankrekening.</p>
663
664
665
666<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2025/07/Afbeelding1-1024x641.png" alt="" class="wp-image-3028"/></figure>
667
668
669
670<h2 class="wp-block-heading">Direct of indirect? Beide is beter</h2>
671
672
673
674<p>Er zijn twee manieren om je cashflow te plannen:<br><br>- Indirecte cashflow is gebaseerd op je winst-en-verliesrekening, met correcties voor balansposten zoals debiteuren, voorraden en afschrijvingen. Handig voor maandelijkse rapportages, maar minder geschikt voor de korte termijn.<br>- Directe cashflow kijkt naar je daadwerkelijke ontvangsten en uitgaven. Denk aan verwachte klantbetalingen, salarissen, btw-afdrachten en huur. Die methode geeft je veel scherper zicht op de komende weken.<br><br>Beide methoden hebben hun waarde – en Smartbooks ondersteunt ze allebei. Volledig geïntegreerd met je boekhouding, zonder dubbel werk.</p>
675
676
677
678<h2 class="wp-block-heading">Hoe het werkt in de praktijk</h2>
679
680
681
682<p>Een CFO van een organisatie met vijf entiteiten gebruikte jarenlang een complexe Excel-file voor cashflowprognoses. Elke maand opnieuw gedoe: exports, formules, foutmeldingen, onduidelijke timing. Inmiddels zijn ze overgestapt op Smartbooks:</p>
683
684
685
686<p>- Dagelijks, wekelijks of maandelijks inzicht in kasstromen<br>- Automatische koppeling met boekhoudpakketten en openstaande posten<br>- Handmatige invoer van verwachte omzet die nog niet is gefactureerd<br>- Zelf bijhouden van toekomstige betalingen zoals salarissen, btw en leasekosten<br>- Direct inzicht in pieken en dalen – ook over de grens tussen maand en kwartaal heen</p>
687
688
689
690<h2 class="wp-block-heading">De voordelen op een rij</h2>
691
692
693
694<p>- Minder verrassingen: zie ruim op tijd waar liquiditeit onder druk komt te staan<br>- Betere besluitvorming: onderbouw je verhaal naar bank, aandeelhouders of management<br>- Altijd up-to-date: elke factuur of betaling wordt automatisch meegenomen</p>
695
696
697
698<h2 class="wp-block-heading">Cashflow = vertrouwen</h2>
699
700
701
702<p>Een goede cashflowplanning gaat verder dan controle. Het gaat om vertrouwen. Vertrou
702wen in je cijfers. Vertrouwen bij je directie, je investeerders en je team. En uiteindelijk: vertrouwen in jezelf als finance professional. Smartbooks helpt je dat vertrouwen waar te maken. Elke dag opnieuw.</p>`,qF=`---json
703{
704  "title": "Accounting automation: which step to tackle first, and what it saves",
705  "slug": "accounting-automation",
706  "date": "2026-09-25 10:00:00",
707  "category": "Articles",
708  "tags": [
709    "Automatisering",
710    "Maandafsluiting",
711    "Integraties"
712  ],
713  "excerpt": "Accounting automation pays off most at the back of the chain. Which steps to automate first, and what that saves in close lead time.",
714  "originalUrl": "",
715  "metaTitle": "Accounting Automation: Where to Start, and Why"
716}
717---
718<p><strong>Accounting automation</strong> does not start with the supplier invoice. It starts with the steps that repeat identically every month: pulling source data, reconciling intercompany balances, consolidating and assembling the reporting pack. That is where most of the manual work sits, where the least judgement is required, and where close lead time drops fastest.</p>
719<p>For a controller running several entities this is a sequencing question rather than a tooling question. The input side of the ledger has usually been partly automated by the accounting package already, while the back of the chain &ndash; reconciling, consolidating, reporting &ndash; still runs on spreadsheets. Start there and you save days. Revisit invoice processing that already works and you save hours.</p>
720<h2>What accounting automation actually takes over</h2>
721<p>Break the record-to-report chain into its parts and seven steps remain. How much of each can be automated differs sharply.</p>
722<table>
723<thead><tr><th>Step</th><th>Can be automated</th><th>Stays manual</th></tr></thead>
724<tbody>
725<tr><td>Pulling source data from the ledgers</td><td>Fully</td><td>Monitoring that the connection still runs</td></tr>
726<tr><td>Reading and coding supplier invoices</td><td>Largely</td><td>New suppliers, capitalise or expense</td></tr>
727<tr><td>Matching bank transactions</td><td>Largely</td><td>Partial payments and payment differences</td></tr>
728<tr><td>Recurring monthly entries</td><td>Fully, rule based</td><td>New contracts, provisions, estimates</td></tr>
729<tr><td>Intercompany reconciliation and elimination</td><td>Largely</td><td>Explaining a remaining difference</td></tr>
730<tr><td>Consolidation</td><td>Fully</td><td>Ownership percentages and structural changes</td></tr>
731<tr><td>Assembling and distributing reports</td><td>Fully</td><td>Commentary and interpretation</td></tr>
732</tbody>
733</table>
734<p>Only two of those seven steps are really about bookkeeping. The other five are moving, matching and adding up data: work without judgement, which is exactly why it lends itself to automation. What happens at the input side with models is a separate topic, covered in <a href="/en/articles/ai-bookkeeping">AI bookkeeping</a>.</p>
735<h2>How to approach an accounting automation project</h2>
736<ol>
737<li><strong>Measure lead time per step first.</strong> For one full month, record when every step starts and when it finishes. Without that baseline you automate on instinct, and instinct almost always points at the most irritating step rather than the longest one.</li>
738<li><strong>Replace exports with connections.</strong> A monthly export from the accounting package is a manual step that quietly produces stale figures. Smartbooks refreshes data several times per hour from Exact Online, Twinfield, AFAS, Odoo, QuickBooks and Exact Globe, and shows per source when the last successful refresh happened. Each entity can sit on its own source system.</li>
739<li><strong>Standardise the chart of accounts before you consolidate.</strong> Unique ledger codes across all entities, identical subfolder codes for identical cost types, and at every level either subfolders or accounts, never both. Dull work you do once, and it makes every later step cheaper.</li>
740<li><strong>Capture intercompany relations in a matrix.</strong> On that basis, internal transactions are matched automatically, differences in amount or timing are flagged, and elimination entries are proposed. A transaction with a counterpart in an adjacent period is marked as partially matched &ndash; a timing difference, in other words, and no error.</li>
741<li><strong>Let consolidation follow period publication.</strong> Once the underlying entities publish their period, the consolidated set appears within minutes. You move from adding figures up to verifying them.</li>
742<li><strong>Fix the reporting pack in templates.</strong> One set of report definitions for every entity and for the consolidation. Rebuilding a spreadsheet each month is repetition, not automation.</li>
743<li><strong>Move the freed-up hours into analysis.</strong> Otherwise automation buys you an earlier deadline and no extra insight. See how the <a href="/en/articles/month-end-closing">month-end close</a> relates to the rest of the chain.</li>
744</ol>
745<h2>Example: closing a group of four entities</h2>
746<p>A neutral example of a group with four operating companies and a holding, with steps 2 through 6 above implemented. The figures illustrate proportions; they are not a customer result.</p>
747<table>
748<thead><tr><th>
748Step</th><th>Before</th><th>After</th></tr></thead>
749<tbody>
750<tr><td>Collecting figures from five ledgers</td><td>1.5 days</td><td>0 &ndash; continuous</td></tr>
751<tr><td>Intercompany reconciliation</td><td>1 day</td><td>2 hours</td></tr>
752<tr><td>Consolidation and elimination</td><td>1 day</td><td>minutes</td></tr>
753<tr><td>Assembling the reporting pack</td><td>1 day</td><td>0.5 hours</td></tr>
754<tr><td>Analysis and commentary</td><td>0.5 day</td><td>1.5 days</td></tr>
755<tr><td><strong>Total</strong></td><td><strong>5 days</strong></td><td><strong>2 days</strong></td></tr>
756</tbody>
757</table>
758<p>Look at the line above the total: analysis gets longer. That is the point. A close that drops from five days to two while analysis triples delivers more than a close that drops to a single day and leaves nobody looking at the numbers.</p>
759<h2>Limits and risks</h2>
760<ul>
761<li><strong>Data quality sets the ceiling.</strong> An automated chain processes a misposted entry just as diligently as a correct one. Automation accelerates the error too.</li>
762<li><strong>A broken connection breaks silently.</strong> Check the refresh status per source before every close. Authorisations expire, and a report built on three-week-old data looks exactly like a report built on current data.</li>
763<li><strong>Auditability.</strong> Your auditor will ask which entries were generated automatically and under which rule. Proposed eliminations should trace back to the underlying transactions, not to a balance.</li>
764<li><strong>AI commentary is a draft, never a conclusion.</strong> A model explaining a variance uses the same confident tone whether it is right or wrong. Always make the answer resolve back to the journal entries beneath it.</li>
765</ul>
766<h2>Pitfalls in accounting automation</h2>
767<ul>
768<li>Starting with invoice processing because it is the most visible step, while consolidation costs three times as many days.</li>
769<li>Doing everything at once, so that at the first discrepancy nobody knows which step caused it.</li>
770<li>Consolidating on a chart of accounts with duplicate ledger codes, then repairing the aggregation by hand every month.</li>
771<li>Filling in the intercompany matrix only halfway. Relations that are not mapped cannot be detected and return as an unexplained difference.</li>
772<li>Measuring success in hours saved instead of corrections booked after the close.</li>
773</ul>
774<h2>Frequently asked questions about accounting automation</h2>
775<h3>What should you automate first in accounting?</h3>
776<p>The step that costs the most days and requires the least judgement. In a group with several entities that is almost always collecting and consolidating figures, not invoice processing. Measure lead time per step for a month before choosing.</p>
777<h3>What is the difference between accounting automation and AI in bookkeeping?</h3>
778<p>Chain automation runs on fixed rules and connections: the same action, every month, without intervention. AI in bookkeeping proposes treatments in situations no rule covers, such as an invoice from an unknown supplier. In a mature finance function the two sit side by side.</p>
779<h3>Does automation remove the controller's role?</h3>
780<p>The role shifts. Adding up, rekeying and reconciling disappear; judgement on valuations, explanation of variances and accountability towards the board and the auditor remain. In practice the analytical part of the role grows, because figures arrive earlier.</p>
781<h3>How many entities do you need before automation pays off?</h3>
782<p>From two entities with transactions between them the arithmetic starts to work, because intercompany reconciliation and consolidation then recur every month. With a single entity the gain sits mainly in reporting templates and the link to the accounting package.</p>
783<p>Automation is a sequence rather than a project: first the steps without judgement, then the steps with judgement, and the freed-up hours into analysis. Read on about designing bookkeeping as a <a href="/en/articles/design-your-bookkeeping-process-as-and-end-2-end-process">record-to-report process</a>, or about what AI does to <a href="/en/articles/how-ai-will-change-month-end-closing-and-financial-reporting">month-end closing and financial reporting</a>.</p>
784`,HF=`---json
785{
786  "title": "Automatiseren van accountancy: welke stap eerst, en wat het scheelt",
787  "slug": "accountancy-automatiseren",
788  "enSlug": "accounting-automation",
789  "date": "2026-09-25 10:00:00",
790  "category": "Articles",
791  "tags": [
792    "Automatisering",
793    "Maandafsluiting",
794    "Integraties"
795  ],
796  "excerpt": "Automatiseren van accountancy levert het meest op aan de achterkant van de keten. Welke stappen eerst, en wat dat scheelt in doorlooptijd.",
797  "originalUrl": "",
798  "metaTitle": "Automatiseren accountancy: de juiste volgorde"
799}
800---
801<p><strong>Het automatiseren van accountancy</strong> begint niet bij de inkoopfactuur, maar bij de stappen die elke maand identiek terugkomen: brondata ophalen, intercompany aansluiten, consolideren en het rapportagepakket samenstellen. Daar zit het meeste handwerk en het minste oordeel, en daar wordt de doorlooptijd van de afsluiting dus het snelst korter.</p>
802<p>Voor een controller met meerdere entiteiten is dit vooral een volgordevraag, geen toolvraag. De invoerkant van de administratie is 
802in de meeste organisaties al deels geautomatiseerd door het boekhoudpakket zelf, terwijl de achterkant &ndash; aansluiten, consolideren, rapporteren &ndash; nog altijd in Excel gebeurt. Wie daar begint, wint dagen. Wie opnieuw naar de factuurverwerking kijkt terwijl die al draait, wint uren.</p>
803<h2>Wat automatiseren van accountancy concreet overneemt</h2>
804<p>Leg de record-to-report-keten uit elkaar en er blijven zeven stappen over. Per stap verschilt hoeveel er te automatiseren valt en wat er onvermijdelijk handwerk blijft.</p>
805<table>
806<thead><tr><th>Stap</th><th>Automatiseerbaar</th><th>Wat handwerk blijft</th></tr></thead>
807<tbody>
808<tr><td>Brondata ophalen uit de administraties</td><td>Volledig</td><td>Bewaken dat de koppeling nog loopt</td></tr>
809<tr><td>Inkoopfacturen lezen en coderen</td><td>Grotendeels</td><td>Nieuwe leveranciers, activeren of direct ten laste van het resultaat</td></tr>
810<tr><td>Bankmutaties afletteren</td><td>Grotendeels</td><td>Deelbetalingen en betaalverschillen</td></tr>
811<tr><td>Vaste maandboekingen</td><td>Volledig, met regels</td><td>Nieuwe contracten, voorzieningen, schattingen</td></tr>
812<tr><td>Intercompany aansluiten en elimineren</td><td>Grotendeels</td><td>De verklaring bij een verschil</td></tr>
813<tr><td>Consolideren</td><td>Volledig</td><td>Deelnemingspercentages en structuurwijzigingen</td></tr>
814<tr><td>Rapportage samenstellen en verspreiden</td><td>Volledig</td><td>Toelichting en duiding</td></tr>
815</tbody>
816</table>
817<p>Twee van de zeven stappen gaan echt over boekhouden. De overige vijf zijn data verplaatsen, aansluiten en optellen: werk zonder oordeel, en precies daarom geschikt om weg te automatiseren. Wat er aan de invoerkant met modellen gebeurt is een apart onderwerp; daarover gaat <a href="/artikelen/ai-boekhouden">AI boekhouden</a>.</p>
818<h2>Zo pak je het automatiseren van accountancy aan</h2>
819<ol>
820<li><strong>Meet eerst de doorlooptijd per stap.</strong> Noteer een maand lang per stap wanneer hij begint en wanneer hij klaar is. Zonder die nulmeting automatiseer je op gevoel, en het gevoel wijst bijna altijd naar de stap die het meest irriteert in plaats van naar de stap die het langst duurt.</li>
821<li><strong>Vervang exports door koppelingen.</strong> Een maandelijkse export uit het boekhoudpakket is een handmatige stap die stilletjes verouderde cijfers oplevert. Smartbooks haalt de data meerdere keren per uur op uit Exact Online, Twinfield, AFAS, Odoo, QuickBooks en Exact Globe, en toont per bron wanneer de laatste verversing is gelukt. Elke entiteit mag een eigen bronsysteem hebben.</li>
822<li><strong>Standaardiseer het rekeningschema voordat je consolideert.</strong> Unieke grootboekcodes over alle entiteiten, dezelfde subfoldercodes voor dezelfde soort kosten, en per niveau alleen subfolders of alleen rekeningen, niet allebei. Dit is saai werk dat je maar &eacute;&eacute;n keer doet en dat elke volgende stap goedkoper maakt.</li>
823<li><strong>Leg de intercompany-relaties vast in een matrix.</strong> Op basis daarvan worden onderlinge transacties automatisch gematcht, verschillen in bedrag of timing gesignaleerd en eliminatieboekingen voorgesteld. Een transactie die in de aangrenzende periode wel een tegenhanger heeft, wordt als gedeeltelijk gematcht gemarkeerd &ndash; een timingverschil dus, geen fout.</li>
824<li><strong>Laat de consolidatie volgen op het publiceren van de periode.</strong> Zodra de onderliggende entiteiten hun periode hebben gepubliceerd, rolt de geconsolideerde set er binnen enkele minuten uit. Je verschuift daarmee van optellen naar controleren.</li>
825<li><strong>Zet het rapportagepakket vast in sjablonen.</strong> E&eacute;n set rapportdefinities voor alle entiteiten en voor de consolidatie. Wie elke maand een Excel-bestand opnieuw opbouwt, automatiseert niets maar herhaalt zich.</li>
826<li><strong>Verplaats de vrijgekomen tijd naar analyse.</strong> Anders levert automatisering alleen een eerdere deadline op en geen beter inzicht. Zie ook hoe de <a href="/artikelen/maandafsluiting">maandafsluiting</a> zich verhoudt tot de rest van de keten.</li>
827</ol>
828<h2>Voorbeeld: de afsluiting van een groep met vier entiteiten</h2>
829<p>Een neutraal voorbeeld van een groep met vier werkmaatschappijen en een holding, waarbij stap 2 tot en met 6 hierboven zijn doorgevoerd. De cijfers zijn een illustratie van de verhoudingen, geen klantresultaat.</p>
830<table>
831<thead><tr><th>
831Stap</th><th>Voor</th><th>Na</th></tr></thead>
832<tbody>
833<tr><td>Cijfers verzamelen uit vijf administraties</td><td>1,5 dag</td><td>0 &ndash; continu</td></tr>
834<tr><td>Intercompany aansluiten</td><td>1 dag</td><td>2 uur</td></tr>
835<tr><td>Consolideren en elimineren</td><td>1 dag</td><td>enkele minuten</td></tr>
836<tr><td>Rapportagepakket samenstellen</td><td>1 dag</td><td>0,5 uur</td></tr>
837<tr><td>Analyse en toelichting</td><td>0,5 dag</td><td>1,5 dag</td></tr>
838<tr><td><strong>Totaal</strong></td><td><strong>5 dagen</strong></td><td><strong>2 dagen</strong></td></tr>
839</tbody>
840</table>
841<p>Let op de laatste regel voor het totaal: de analyse wordt juist langer. Dat is het punt. Een afsluiting die van vijf naar twee dagen gaat terwijl de analyse verdrievoudigt, levert meer op dan een afsluiting die naar &eacute;&eacute;n dag gaat en waarbij niemand meer naar de cijfers kijkt.</p>
842<h2>Grenzen en risico's</h2>
843<ul>
844<li><strong>Datakwaliteit bepaalt de bovengrens.</strong> Een geautomatiseerde keten rekent net zo hard door op een verkeerd geboekte post als op een juiste. Automatisering versnelt ook de fout.</li>
845<li><strong>Een koppeling die stilvalt, valt stil zonder geluid.</strong> Controleer voor elke afsluiting de verversingsstatus per bron. Autorisaties verlopen, en een rapport op data van drie weken oud ziet er precies zo uit als een rapport op actuele data.</li>
846<li><strong>Controleerbaarheid.</strong> Je accountant wil kunnen zien welke boeking automatisch is ontstaan en op basis van welke regel. Voorgestelde eliminaties horen herleidbaar te zijn tot de onderliggende transacties, niet tot een saldo.</li>
847<li><strong>AI-toelichtingen zijn concepten, geen conclusies.</strong> Een model dat een variantie verklaart, doet dat in dezelfde stellige toon als het gelijk heeft en als het ongelijk heeft. Laat het antwoord altijd terugslaan op de journaalposten eronder.</li>
848</ul>
849<h2>Valkuilen bij het automatiseren van accountancy</h2>
850<ul>
851<li>Beginnen bij de factuurverwerking omdat die het zichtbaarst is, terwijl de consolidatie drie keer zoveel dagen kost.</li>
852<li>Alles tegelijk aanpakken, waardoor je bij de eerste afwijking niet meer weet welke stap hem veroorzaakte.</li>
853<li>Consolideren op een rekeningschema met dubbele grootboekcodes, en vervolgens elke maand handmatig herstellen wat de aggregatie fout doet.</li>
854<li>De intercompany-matrix half invullen. Relaties die niet zijn gemapt, worden niet gedetecteerd en komen als onverklaard verschil terug.</li>
855<li>Succes meten in bespaarde uren in plaats van in het aantal correcties na de afsluiting.</li>
856</ul>
857<h2>Veelgestelde vragen over automatiseren van accountancy</h2>
858<h3>Wat kun je in de accountancy het beste als eerste automatiseren?</h3>
859<p>De stap die de meeste dagen kost en het minste oordeel vraagt. Bij een groep met meerdere entiteiten is dat vrijwel altijd het verzamelen en consolideren van cijfers, niet de factuurverwerking. Meet een maand lang de doorlooptijd per stap voordat je kiest.</p>
860<h3>Wat is het verschil tussen accountancy automatisering en AI in de boekhouding?</h3>
861<p>Automatisering van de keten werkt met vaste regels en koppelingen: dezelfde handeling, elke maand, zonder tussenkomst. AI in de boekhouding doet voorstellen in situaties waarvoor geen regel bestaat, zoals een factuur van een onbekende leverancier. In een volwassen finance-functie staan ze naast elkaar.</p>
862<h3>Verdwijnt het werk van de controller door automatisering?</h3>
863<p>Het werk verschuift. Het optellen, overtypen en aansluiten verdwijnt; de beoordeling van waarderingen, de verklaring van afwijkingen en de verantwoording naar directie en accountant blijven. In de praktijk groeit het analysedeel van het werk, omdat de cijfers eerder beschikbaar zijn.</p>
864<h3>Hoeveel entiteiten heb je nodig voordat automatisering loont?</h3>
865<p>Vanaf twee entiteiten met onderlinge transacties begint de rekensom te kloppen, omdat de intercompany-aansluiting en de consolidatie dan elke maand terugkomen. Bij &eacute;&eacute;n entiteit zit de winst vooral in de rapportagesjablonen en de koppeling met het boekhoudpakket.</p>
866<p>Automatisering is geen project maar een volgorde: eerst de stappen zonder oordeel, dan de stappen met oordeel, en de vrijgekomen tijd naar de analyse. Lees verder over het inrichten van de administratie als <a href="/artikelen/boekhouden-als-record-to-report-proces">record-to-report-proces</a>, of over wat AI doet met de <a href="/artikelen/hoe-ai-het-maandafsluitingsproces-en-financiele-rapportages-gaat-veranderen">maandafsluiting en financi&euml;le rapportages</a>.</p>
867`,UF=`---json
868{
869  "title": "ACE Company",
870  "slug": "ace-company",
871  "metaTitle": "Fallstudie ACE Company: Management-Reporting",
872  "date": "",
873  "category": "Customer Stories",
874  "tags": [
875    "Management-Reporting",
876    "Business Intelligence",
877    "Finanz-Insights"
878  ],
879  "excerpt": "Mit Smartbooks hat ACE Company unübersichtliche Spreadsheets durch klares Management-Reporting mit wertvollen Business-Insights ersetzt.",
880  "originalUrl": "",
881  "meta": {
882    "type_bedrijf": "Consultancy",
883    "naam_medewerker": "Arthur Willigenburg",
884    "functie_medewerker": "Managing Partner, ACE Company"
885  }
886}
887---
888<p>Mit Smartbooks haben wir unsere unübersichtlichen Tabellenkalkulationen durch klares Management-Reporting mit echten Erkenntnissen ersetzt.</p>`,GF=`---json
889{
890  "title": "ACE Company",
891  "metaTitle": "ACE Company Case: Management Reporting",
892  "slug": "ace-company",
893  "date": "",
894  "category": "Customer Stories",
895  "tags": [
896    "Management Reporting",
897    "Business Intelligence",
898    "Financial Insights"
899  ],
900  "excerpt": "With Smartbooks, we replaced our cluttered spreadsheets with clear management reporting and valuable business insights.",
901  "originalUrl": "",
902  "meta": {
903    "type_bedrijf": "Consultancy"
904  }
905}
906---
907<p>With Smartbooks, we have replaced our cluttered spreadsheets with clear management reporting and valuable insights</p>`,$F=`---json
908{
909  "title": "ACE Company",
910  "metaTitle": "Klantcase ACE Company: managementrapportage",
911  "slug": "ace-company",
912  "order": 45,
913  "date": "2023-11-29 21:13:00",
914  "category": "Customer Stories",
915  "tags": [],
916  "excerpt": "Met Smartbooks hebben we onze onoverzichtelijke spreadsheets vervangen door een duidelijke managementrapportage met waardevolle inzichten",
917  "originalUrl": "https://smartbooks.ai/klantervaringen/ace-company/",
918  "meta": {
919    "type_bedrijf": "Strategisch adviesbureau financiële sector",
920    "naam_medewerker": "Arthur Willigenburg",
921    "functie_medewerker": "Managing Partner",
922    "logo_bedrijf": "320"
923  },
924  "enSlug": "ace-company"
925}
926---
927<p>Met Smartbooks hebben we onze onoverzichtelijke spreadsheets vervangen door een duidelijke managementrapportage met waardevolle inzichten</p>`,ZF=`---json
928{
929  "title": "Effizienz und Wirksamkeit im Reporting und in der Analyse",
930  "slug": "achieving-efficiency-and-effectiveness-in-financial-planning-analysis",
931  "metaTitle": "Reporting und Analyse: Best-in-Class FP&A",
932  "date": "2024-04-18 13:50:03",
933  "category": "Articles",
934  "tags": [
935    "Analyse",
936    "Planung"
937  ],
938  "excerpt": "Finanzreporting und Analyse verbessern: Lernen Sie von Best-in-Class-Organisationen und werden Sie schneller und wirksamer.",
939  "originalUrl": "https://smartbooks.ai/artikelen/achieving-efficiency-and-effectiveness-in-financial-planning-analysis/",
940  "meta": null
941}
942---
943<p>Verbessern Sie Ihr Finanzreporting und Ihre Analyse — indem Sie von Best-in-Class-Organisationen lernen.</p>
944
945<hr />
946
947<p>Bei Monatsberichten — insbesondere bei der Bewertung der Vormonatsergebnisse — zählen Präzision, Relevanz und Geschwindigkeit. Als Finance Manager wollen Sie nicht nur wertvolle Erkenntnisse für Managementgespräche liefern, sondern Ihre Arbeit auch schnell und schlau erledigen. Dieser doppelte Fokus auf Wirksamkeit und Effizienz ist das Fundament erfolgreicher Financial Planning &amp; Analysis (FP&amp;A).</p>
948
949<p><strong>Wirksamkeit</strong> heißt: die richtigen Dinge tun. Dem Management wertvolle Erkenntnisse liefern, die eine solide Basis für strategische Gespräche und Entscheidungen sind.</p>
950
951<p><strong>Effizienz</strong> heißt: die Dinge auf die richtige Weise tun — schlau, kostengünstig und zeitgerecht.</p>
952
953<p>Das <strong>Value Grid</strong> beschreibt vier Reifegrade in FP&amp;A:</p>
954
955<ul>
956<li><strong>Langsam und wirkungslos</strong>: Prozesse führen weder schnell zu Ergebnissen noch zu viel Nutzen. Von hier aus braucht es einen Verbesserungsweg. Wer nach Exzellenz strebt, arbeitet in den oberen Quadranten.</li>
957<li><strong>Schnell, aber wenig Mehrwert</strong>: Ergebnisse sind schnell verfügbar und einigermaßen korrekt — aber ohne Tiefe oder bedeutungsvolle Analyse. Effizient, aber der fehlende Mehrwert trägt kaum zu besseren Entscheidungen bei.</li>
958<li><strong>Das „Excel-Monster“</strong>: Fokus auf detaillierte Analyse und Einsichten — ohne die Werkzeuge zu optimieren. Spreadsheets bieten Flexibilität und niedrige Kosten, sind aber fehleranfällig und stark von einzelnen Personen abhängig. Viele nützliche Informationen — der Prozess ist aber zeitaufwendig und kraftraubend.</li>
959<li><strong>Best-in-Class</strong>: Der ideale Quadrant vereint schnelle, intelligente FP&amp;A-Ausführung mit robusten Tools. Ein FP&amp;A-Tool muss sich nahtlos in die Buchhaltung integrieren und alle funktionalen Anforderungen erfüllen: Reporting, Analyse, Konsolidierung, Cashflow, Budget und Forec
959ast. Hier sind Sie schnell, präzise und wirksam.</li>
960</ul>
961
962<figure class="wp-block-image aligncenter size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/04/Afbeelding3-1-1024x554.png" alt="FP&A Value Grid" class="wp-image-2510"/></figure>
963
964<p>Der Weg zu Best-in-Class kennt zwei mögliche Routen — abhängig davon, wo Sie heute stehen. In unserem <strong>Best-Practice-Paper</strong> bieten wir einen Rahmen zur Bestimmung Ihres Reifegrads.</p>
965
966<p>Smartbooks unterstützt Ihre Entwicklung zu Best-in-Class — mit Empfehlungen und optimaler Nutzung während Onboarding und Training.</p>
967
968<p>Mehr zum optimalen End-to-End-Prozess <strong>Plan-to-Perform</strong> oder <strong>Record-to-Report</strong> in unseren weiteren Blogs.</p>
969
970<hr />`,YF=`---json
971{
972  "title": "Efficiency and Effectiveness in Reporting and Analysis",
973  "metaTitle": "Financial Reporting and Analysis: Best-in-Class FP&A",
974  "slug": "achieving-efficiency-and-effectiveness-in-financial-planning-analysis",
975  "date": "",
976  "category": "Articles",
977  "tags": [
978    "Financial Planning",
979    "Performance Management",
980    "Reporting",
981    "Business Intelligence"
982  ],
983  "excerpt": "Financial reporting and analysis: learn how Best-in-Class organizations become both faster and more effective.",
984  "originalUrl": "",
985  "meta": {
986    "type_bedrijf": "Financial Services",
987    "naam_medewerker": "...",
988    "functie_medewerker": "...",
989    "logo_bedrijf": "..."
990  }
991}
992---
993<p>Improve your financial reporting and analysis by learning from Best-in-Class organizations.</p>
994
995
996
997<hr class="\\">`,QF=`---json
998{
999  "title": "Efficiëntie en Effectiviteit bij rapporteren en analyseren",
1000  "metaTitle": "Financiële rapportage en analyse: best-in-class FP&A",
1001  "slug": "achieving-efficiency-and-effectiveness-in-financial-planning-analysis",
1002  "order": 35,
1003  "date": "2024-04-18 13:50:03",
1004  "category": "Articles",
1005  "tags": [
1006    "Analyseren",
1007    "Planning"
1008  ],
1009  "excerpt": "Financiële rapportage en analyse verbeteren: leer van Best-in-Class organisaties en word sneller én effectiever.",
1010  "originalUrl": "https://smartbooks.ai/artikelen/achieving-efficiency-and-effectiveness-in-financial-planning-analysis/",
1011  "meta": null,
1012  "enSlug": "achieving-efficiency-and-effectiveness-in-financial-planning-analysis"
1013}
1014---
1015<p>Verbeter je financiële rapportage en analyse door te leren van Best-in-Class organisaties.</p>
1016
1017
1018
1019<hr class="wp-block-separator has-alpha-channel-opacity"/>
1020
1021
1022
1023<p>In de wereld van maandrapportages, met name bij het beoordelen van de bedrijfsresultaten van de voorgaande maand, zijn precisie, relevantie en snelheid van groot belang. Als financieel manager is je doel niet alleen om waardevolle inzichten te delen in managementbesprekingen, maar ook om je werk snel en slim uit te voeren. Deze dubbele focus op effectiviteit en efficiëntie vormt de basis voor succesvolle financiële planning en analyse (FP&amp;A).</p>
1024
1025
1026
1027<p><strong>Effectiviteit</strong> gaat over de juiste dingen doen. Dit betekent dat je waardevolle inzichten levert aan het managementteam, die een solide basis bieden voor strategische gesprekken en beslissingen die het bedrijf vooruithelpen.</p>
1028
1029
1030
1031<p><strong>Efficiëntie</strong> richt zich op de dingen op de juiste manier doen. Het draait om slimme, kosteneffectieve en tijdige uitvoering van taken.</p>
1032
1033
1034
1035<p>De <strong>Value Grid</strong> beschrijft vier fasen van FP&amp;A-volwassenheid:</p>
1036
1037
1038
1039<ul class="wp-block-list">
1040<li><strong>Traag en Ineffectief</strong>: Deze positie kenmerkt zich door processen die niet snel to resultaat leiden, maar ook niet echt veel nuttig informatie opleveren. Het is belangrijk om vanaf dit punt een weg naar verbetering in te zetten. Bedrijven die naar excellentie streven, bevinden zich in de hogere kwadranten.</li>
1041
1042
1043
1044<li><strong>Snel maar Weinig toegevoegde waarde</strong>: In deze positie zijn de resultaten snel beschikbaar en redelijk accuraat, maar het ontbreekt aan diepgang of een betekenisvolle analyse. Hoewel het geheel vrij efficiëntie wordt uitgevoerd opgemerkt, draagt het gebrek aan nuttige inzichten weinig bij aan beter inzicht of betere besluitvorming.</li>
1045
1046
1047
1048<li><strong>Het 'Excel-monster'</strong>: Hier ligt de focus op gedetailleerde analyse en het genereren van inzichten zonder de ondersteunende tools te optimaliseren. Hoewel spreadsheets flexibiliteit en lage kosten bieden, kunnen hun foutgevoeligheid en afhankelijkheid van de maker de automatisering en efficiëntie van het FP&amp;A-proces belemmeren. Hier lever je dus veel nuttige informatie, maar het proces om dat te doen is tijdrovend en kost ook relatief veel moeite van de medewerkers.</li>
1049
1050
1051
1052<li><strong>Best-in-Class</strong>: Dit ideale kwadrant staat voor een combinatie van snelle, intelligente FP&amp;A-uitvoering, ondersteund door robuuste tools. Bij het kiezen van een FP&amp;A-tool moet je ervoor zorgen dat deze naadloos integreert met je boekhoudsysteem en voldoet aan alle functionele eisen, zoals rapportage, analyse, consolidatie, cashflowbeheer, budgettering en prognoses. Hier ben je dus zowel snel, accuraat en nuttig als finance team. </li>
1053</ul>
1054
1055
1056
1057<figure class="wp-block-image aligncenter size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/04/Afbeelding3-1-1024x554.png" alt="" class="wp-image-2510"/></figure>
1058
1059
1060
1061<p>De beweging maken naar Best-in-Class betekent dat je twee mogelijke routes kunt bewandelen om van suboptimale FP&amp;A-praktijken naar topprestaties te komen, afhankelijk van waar je jezelf momenteel bevindt. In onze <strong>Best Practice paper</strong> bieden we een kader dat je helpt om je huidige volwassenheidsniveau te beoordelen. </p>
1062
1063
1064
1065<p>Smartbooks kan helpen om je FP&amp;A-proces te verbeteren en je te laten groeien naar Best-in-Class prestaties; we doen voorstellen voor best practices en optimaal gebruik van onze oplossing tijdens onboarding en training.</p>
1066
1067
1068
1069<p>Als je meer informatie wilt over hoe je het optimale <strong>Plan-to-Perform</strong>
1069 end-to-end proces of <strong>Record-to-Report</strong> kunt ontwerpen, kun je dit lezen in onze blogs.</p>
1070
1071
1072
1073<hr class="wp-block-separator has-alpha-channel-opacity"/>`,JF=`---json
1074{
1075  "title": "AI bookkeeping: what it takes over and what stays with the controller",
1076  "slug": "ai-bookkeeping",
1077  "date": "2026-09-21 10:00:00",
1078  "category": "Articles",
1079  "tags": [
1080    "AI",
1081    "Automatisering",
1082    "Maandafsluiting"
1083  ],
1084  "excerpt": "AI bookkeeping handles invoice capture, posting suggestions and bank matching. What does it mean for control and the month-end close?",
1085  "originalUrl": "",
1086  "metaTitle": "AI bookkeeping: what it automates and what it can't"
1087}
1088---
1089<p><strong>AI bookkeeping</strong> means an AI model takes over the repetitive steps in the ledger: reading invoices, suggesting postings, matching bank transactions and flagging unusual entries. Judgement about what is correct, the close and accountability for the numbers stay with people.</p>
1090<p>For a controller, the question is not whether AI will reach the ledger, but what it does to the quality of the figures you steer on. If data entry speeds up while review stays the same, the bottleneck simply moves to the month-end close. Business owners and freelancers searching for this term mostly need a tool that processes receipts. This article looks at it from the other side: what changes for reporting, control and the reliability of the numbers.</p>
1091<h2>What AI bookkeeping takes over, and what it doesn't</h2>
1092<p>Start by separating two concepts. <strong>Automated bookkeeping</strong> runs on fixed rules: a bank rule that posts the same rent to the same account every month, or an integration that imports sales invoices from the order system. <strong>AI bookkeeping</strong> goes a step further. The model learns from past postings and can suggest a treatment for an invoice it has never seen. Rules are predictable but brittle; a model is flexible but not infallible.</p>
1093<p>Tasks where AI already does solid work:</p>
1094<ul>
1095<li><strong>Invoice capture.</strong> Extracting supplier, invoice date, amounts and VAT from a PDF, even with an unfamiliar layout.</li>
1096<li><strong>Posting suggestions.</strong> Proposing the GL account, cost centre and VAT code based on how similar invoices were booked before.</li>
1097<li><strong>Bank reconciliation.</strong> Matching payments to open items, even when the description does not match exactly.</li>
1098<li><strong>Anomaly detection.</strong> A posting to an unusual account, a duplicate invoice or an amount outside the usual pattern.</li>
1099</ul>
1100<p>What AI does not take over: deciding whether spend should be capitalised, allocating a two-year contract across periods, estimating a provision and making tax choices. Those require knowledge of the business that is not in the transactions. And responsibility for the numbers does not move to the model.</p>
1101<h2>How to approach AI bookkeeping as a controller</h2>
1102<ol>
1103<li><strong>Map the process.</strong> List the steps from incoming invoice to report, and note for each step how long it takes and how often something goes wrong. Automate first what takes a lot of time and little judgement.</li>
1104<li><strong>Check what your accounting system already offers.</strong> Many packages now include invoice capture and posting suggestions. Switch those on before adding a separate tool; every extra integration is another place where data can go stale or leak.</li>
1105<li><strong>Set an approval threshold.</strong> Suggestions above a certain amount, on balance sheet accounts or for a new supplier always need human approval. Below that threshold the model may post, with sample checks.</li>
1106<li><strong>Clean up the chart of accounts.</strong> A model learns from history. If three accounts hold the same type of cost, it learns three different habits.</li>
1107<li><strong>Move review to the back end.</strong> When entry gets faster, analysis during the close needs to get sharper: variance analysis against budget and prior period, and a check on postings outside the usual pattern.</li>
1108<li><strong>Measure the outcome.</strong> Track how many suggestions are accepted unchanged and how many corrections are still needed after the close. That second number says more about quality than speed does.</li>
1109</ol>
1110<h2>A practical example</h2>
1111<p>A neutral example of how tasks split during the month-end close of a group with three entities:</p>
1112<table>
1113<thead><tr><th>
1113Task</th><th>Who or what</th><th>Why</th></tr></thead>
1114<tbody>
1115<tr><td>Reading and coding purchase invoices</td><td>AI, with an approval threshold</td><td>Repetitive, and posting history is available</td></tr>
1116<tr><td>Bank reconciliation</td><td>AI and fixed rules</td><td>Pattern recognition on description and amount</td></tr>
1117<tr><td>Recurring entries such as rent and depreciation</td><td>Fixed rules</td><td>Predictable, no model needed</td></tr>
1118<tr><td>Accruals and provisions</td><td>Controller</td><td>Judgement and knowledge of contracts</td></tr>
1119<tr><td>Intercompany reconciliation</td><td>Fixed rules, controller for differences</td><td>Exact work, but differences need an explanation</td></tr>
1120<tr><td>Variance analysis and commentary</td><td>AI for the first draft, controller reviews</td><td>Fast draft, context comes from people</td></tr>
1121</tbody>
1122</table>
1123<p>The second half of the gain sits in the analysis after posting. A question you can put to an AI assistant working on your financial data:</p>
1124<blockquote><p>Which cost lines deviate more than 10% from budget in September, per entity, and which postings sit behind them?</p></blockquote>
1125<p>A useful answer lists the lines, the difference in euros and percent, and the underlying journal entries. That lets you check whether a variance is real or just a posting to the wrong account. In Smartbooks, the AI Controller does this on live data from the connected ledgers: it answers questions in plain language and shows the journal entries behind every figure. Without that traceability, an AI answer is a claim, not an analysis.</p>
1126<h2>Limits and risks of AI bookkeeping</h2>
1127<ul>
1128<li><strong>Data quality.</strong> A model repeats the errors in its history. If a cost type was booked to the wrong account for years, that becomes the suggestion.</li>
1129<li><strong>Auditability.</strong> Your auditor will need to see who or what created a posting and on what basis. Record which postings a model suggested and who approved them.</li>
1130<li><strong>Privacy.</strong> Invoices and transactions contain personal and customer data. Check where the data is processed and whether the vendor uses it to train models. Some organisations deliberately choose a European provider for that reason.</li>
1131<li><strong>Confident mistakes.</strong> A language model gives a wrong answer in the same assured tone as a right one. A variance explanation can sound convincing and still point to the wrong cause.</li>
1132</ul>
1133<h2>Pitfalls</h2>
1134<ul>
1135<li>Automating everything at once, so you can no longer tell which step causes an error.</li>
1136<li>Setting the approval threshold so low that nobody really reviews the suggestions anymore.</li>
1137<li>Running AI on a messy chart of accounts and expecting the model to create structure.</li>
1138<li>Measuring speed instead of the number of corrections after the close.</li>
1139<li>Adding a separate AI tool next to the accounting system without deciding who owns and monitors the integration.</li>
1140</ul>
1141<h2>Frequently asked questions about AI bookkeeping</h2>
1142<h3>Can AI take over bookkeeping completely?</h3>
1143<p>No. AI takes over repetitive entry and matching, but not judgement on valuation, period allocation and tax choices. Someone who understands the numbers and signs off on them is still required.</p>
1144<h3>What is the difference between automated bookkeeping and AI bookkeeping?</h3>
1145<p>Automated bookkeeping uses fixed rules you set up yourself, such as a bank rule for monthly rent. AI bookkeeping learns from past postings and can suggest a treatment where no rule exists. In practice you use both side by side.</p>
1146<h3>Is AI for accountants the same as AI for controllers?</h3>
1147<p>Not quite. An accounting firm mainly uses AI to process and review many client ledgers efficiently. A controller uses it to speed up the close and explain variances faster within one organisation or group.</p>
1148<h3>What data does AI need to post correctly?</h3>
1149<p>A clean posting history of at least a year, a consistent chart of accounts and stable cost centres. The fewer exceptions in the history, the more reliable the suggestions.</p>
1150<p>AI in the ledger takes time out of data entry; the value only appears once that time goes into analysis. Read on about how AI will change <a href="/en/articles/how-ai-will-change-month-end-closing-and-financial-reporting">month-end closing and financial reporting</a>, how to design your <a href="/en/articles/design-your-bookkeeping-process-as-and-end-2-end-process">bookkeeping process end to end</a>, or what an <a href="/en/articles/ai-controller">AI controller</a> does in daily practice.</p>
1151`,XF=`---json
1152{
1153  "title": "AI boekhouden: wat het overneemt en wat bij de controller blijft",
1154  "slug": "ai-boekhouden",
1155  "enSlug": "ai-bookkeeping",
1156  "date": "2026-09-21 10:00:00",
1157  "category": "Articles",
1158  "tags": [
1159    "AI",
1160    "Automatisering",
1161    "Maandafsluiting"
1162  ],
1163  "excerpt": "AI boekhouden neemt factuurverwerking, boekingsvoorstellen en afletteren over. Wat betekent dat voor de controle en de maandafsluiting?",
1164  "originalUrl": "",
1165  "metaTitle": "AI boekhouden: wat het overneemt en wat niet"
1166}
1167---
1168<p><strong>AI boekhouden</strong> betekent dat een AI-model de repeterende stappen in de administratie overneemt: facturen lezen, boekingsvoorstellen doen, bankmutaties afletteren en afwijkende posten signaleren. Het oordeel over wat juist is, de afsluiting en de verantwoording van de cijfers blijven bij de mens.</p>
1169<p>Voor een controller is de vraag niet of AI in de boekhouding komt, maar wat het doet met de kwaliteit van de cijfers waarop je stuurt. Wordt de voorkant van de administratie sneller terwijl de controle gelijk blijft, dan verschuift het knelpunt naar de maandafsluiting. Wie als ondernemer of zzp'er zoekt, wil vooral een pakket dat bonnetjes verwerkt. Dit artikel kijkt vanaf de andere kant: wat verandert er voor rapportage, controle en de betrouwbaarheid van de cijfers.</p>
1170<h2>Wat AI boekhouden concreet overneemt, en wat niet</h2>
1171<p>Het helpt om eerst twee begrippen uit elkaar te halen. <strong>Geautomatiseerd boekhouden</strong> werkt met vaste regels: een bankregel die elke maand dezelfde huur op dezelfde rekening zet, of een koppeling die verkoopfacturen uit het ordersysteem inleest. <strong>AI boekhouden</strong> gaat een stap verder. Het model leert van eerdere boekingen en doet ook een voorstel bij een factuur die het nog niet eerder zag. Regels zijn voorspelbaar maar breekbaar; een model is flexibel maar niet foutloos.</p>
1172<p>Taken waarin AI nu al goed werk levert:</p>
1173<ul>
1174<li><strong>Factuurherkenning.</strong> Leverancier, factuurdatum, bedragen en btw uit een pdf halen, ook bij een afwijkende opmaak.</li>
1175<li><strong>Boekingsvoorstellen.</strong> Grootboekrekening, kostenplaats en btw-code voorstellen op basis van hoe vergelijkbare facturen eerder zijn geboekt.</li>
1176<li><strong>Bankafletteren.</strong> Betalingen koppelen aan openstaande posten, ook als de omschrijving niet exact overeenkomt.</li>
1177<li><strong>Afwijkingen signaleren.</strong> Een boeking op een ongebruikelijke rekening, een dubbel ingelezen factuur of een bedrag dat buiten het gebruikelijke patroon valt.</li>
1178</ul>
1179<p>Wat AI niet overneemt: de beoordeling of een uitgave geactiveerd moet worden, de peri
1179odetoerekening van een contract dat over twee jaar loopt, de inschatting van een voorziening en de fiscale keuzes. Daarvoor is kennis van de onderneming nodig die niet in de transacties staat. En de verantwoordelijkheid voor de cijfers verschuift niet naar het model.</p>
1180<h2>Zo pak je AI boekhouden aan als controller</h2>
1181<ol>
1182<li><strong>Breng het proces in kaart.</strong> Zet de stappen van inkomende factuur tot rapportage onder elkaar en noteer per stap hoeveel tijd ze kost en hoe vaak er iets misgaat. Automatiseer eerst wat veel tijd kost en weinig oordeel vraagt.</li>
1183<li><strong>Kijk wat je pakket al kan.</strong> Veel boekhoudpakketten hebben factuurherkenning en boekingsvoorstellen inmiddels ingebouwd. Zet die eerst aan voordat je een losse tool toevoegt; elke extra koppeling is een extra plek waar data kan verouderen of weglekken.</li>
1184<li><strong>Leg een drempel vast.</strong> Laat voorstellen boven een bepaald bedrag, op balansrekeningen of bij een nieuwe leverancier altijd door een mens accorderen. Onder die drempel mag het model boeken, met steekproefsgewijze controle.</li>
1185<li><strong>Ruim het rekeningschema op.</strong> Een model leert van de historie. Staan er drie rekeningen voor dezelfde soort kosten, dan leert het drie verschillende gewoontes.</li>
1186<li><strong>Verplaats de controle naar achteren.</strong> Gaat de invoer sneller, dan moet de analyse in de maandafsluiting scherper: variantieanalyse tegen budget en vorige periode, en een check op boekingen die buiten het patroon vallen.</li>
1187<li><strong>Meet het resultaat.</strong> Houd bij hoeveel voorstellen ongewijzigd worden overgenomen en hoeveel correcties er na de afsluiting nog nodig zijn. Dat laatste getal zegt meer over de kwaliteit dan de snelheid.</li>
1188</ol>
1189<h2>Voorbeeld uit de praktijk</h2>
1190<p>Een neutraal voorbeeld van hoe de taken zich verdelen in de maandafsluiting van een groep met drie entiteiten:</p>
1191<table>
1192<thead><tr><th>Taak</th><th>Wie of wat</th><th>Waarom</th></tr></thead>
1193<tbody>
1194<tr><td>Inkoopfacturen lezen en coderen</td><td>AI, met accordeerdrempel</td><td>Repeterend, en de boekingshistorie is beschikbaar</td></tr>
1195<tr><td>Bankmutaties afletteren</td><td>AI en vaste regels</td><td>Patroonherkenning op omschrijving en bedrag</td></tr>
1196<tr><td>Vaste maandboekingen zoals huur en afschrijving</td><td>Vaste regels</td><td>Voorspelbaar, geen model nodig</td></tr>
1197<tr><td>Overlopende posten en voorzieningen</td><td>Controller</td><td>Oordeel en kennis van contracten</td></tr>
1198<tr><td>Intercompany aansluiten</td><td>Vaste regels, controller bij verschillen</td><td>Exact werk, maar verschillen vragen uitleg</td></tr>
1199<tr><td>Variantieanalyse en toelichting</td><td>AI als eerste versie, controller beoordeelt</td><td>Snel concept, context komt van de mens</td></tr>
1200</tbody>
1201</table>
1202<p>Het tweede deel van de winst zit in de analyse na de boeking. Een vraag die je aan een AI-assistent op je financiële data kunt stellen:</p>
1203<blockquote><p>Welke kostenposten wijken in september meer dan 10% af van het budget, per entiteit, en welke boekingen zitten daarachter?</p></blockquote>
1204<p>Een bruikbaar antwoord noemt de posten, het verschil in euro's en procenten, en de onderliggende journaalposten. Dan kun je nagaan of een afwijking echt is of gewoon een boeking op de verkeerde rekening. In Smartbooks doet de AI Controller dit op de live data uit de gekoppelde administraties: hij beantwoordt vragen in gewone taal en toont bij elk getal de journaalposten erachter. Zonder die herleidbaarheid is een AI-antwoord een bewering, geen analyse.</p>
1205<h2>Grenzen en risico's van AI boekhouden</h2>
1206<ul>
1207<li><strong>Datakwaliteit.</strong> Een model herhaalt de fouten uit de historie. Is een kostensoort jarenlang op de verkeerde rekening geboekt, dan wordt dat het voorstel.</li>
1208<li><strong>Controleerbaarheid.</strong> Je accountant wil kunnen zien wie of wat een boeking heeft gemaakt en op basis waarvan. Leg vast welke boekingen door een model zijn voorgesteld en wie ze heeft geaccordeerd.</li>
1209<li><strong>Privacy.</strong> Facturen en transacties bevatten persoons- en klantgegevens. Ga na waar de data wordt verwerkt en of de leverancier ze gebruikt om modellen te trainen. Sommige organisaties kiezen daarom bewust voor een Europese aanbieder.</li>
1210<li><strong>Fouten met zelfvertrouwen.</strong> Een taalmodel geeft een verkeerd antwoord in dezelfde stellige toon als een goed antwoord. Een toelichting op een variantie kan overtuigend klinken en toch naar de verkeerde oorzaak wijzen.</li>
1211</ul>
1212<h2>Valkuilen</h2>
1213<ul>
1214<li>Alles tegelijk automatiseren, waardoor je niet meer weet welke stap een fout veroorzaakt.</li>
1215<li>De accordeerdrempel zo laag zetten dat niemand de voorstellen nog echt bekijkt.</li>
1216<li>AI loslaten op een rommelig rekeningschema en verwachten dat het model zelf structuur aanbrengt.</li>
1217<li>Snelheid meten in plaats van het aantal correcties na de afsluiting.</li>
1218<li>Een losse AI-tool naast het boekhoudpakket zetten zonder te regelen wie de koppeling beheert en bewaakt.</li>
1219</ul>
1220<h2>Veelgestelde vragen over AI boekhouding</h2>
1221<h3>Kan AI de boekhouding volledig overnemen?</h3>
1222<p>Nee. AI neemt repeterende invoer en matching over, maar niet het oordeel over waarderingen, periodetoerekening en fiscale keuzes. Er blijft altijd iemand nodig die de cijfers begrijpt en ervoor tekent.</p>
1223<h3>Wat is het verschil tussen geautomatiseerd boekhouden en AI boekhouden?</h3>
1224<p>Geautomatiseerd boekhouden werkt met vaste regels die je zelf instelt, zoals een bankregel voor de maandelijkse huur. AI boekhouden leert van eerdere boekingen en doet ook een voorstel in situaties waarvoor geen regel bestaat. In de praktijk gebruik je beide naast elkaar.</p>
1225<h3>Is AI voor accountants hetzelfde als AI voor controllers?</h3>
1226<p>Niet helemaal. Een accountantskantoor zet AI vooral in om veel administraties efficiënt te verwerken en te controleren. Een controller gebruikt het om de maandafsluiting te versnellen en afwijkingen sneller te verklaren binnen één organisatie of groep.</p>
1227<h3>Welke data heeft AI nodig om goed te boeken?</h3>
1228<p>Een schone boekingshistorie van minstens een jaar, een consistent rekeningschema en vaste kostenplaatsen. Hoe minder uitzonderingen in de historie, hoe betrouwbaarder de voorstellen.</p>
1229<p>AI in de administratie haalt tijd uit de invoer; de waarde ontstaat pas als die tijd naar analyse gaat. Lees verder over hoe AI de <a href="/artikelen/hoe-ai-het-maandafsluitingsproces-en-financiele-rapportages-gaat-veranderen">maandafsluiting en financiële rapportages verandert</a>, hoe je de administratie opzet als <a href="/artikelen/boekhouden-als-record-to-report-proces">record-to-report-proces</a>, of wat een <a href="/artikelen/ai-controller">AI controller</a> in de dagelijkse praktijk doet.</p>
1230`,eR=`---json
1231{
1232  "title": "Der AI-Controller: Was AI in Smartbooks für Ihr Finance-Team leistet",
1233  "slug": "ai-controller",
1234  "metaTitle": "AI-Controller: So arbeitet AI in Smartbooks",
1235  "date": "2026-07-09 10:00:00",
1236  "category": "Articles",
1237  "tags": [
1238    "AI",
1239    "Business Control",
1240    "Finanzkonsolidierung",
1241    "Forecast",
1242    "Reporting"
1243  ],
1244  "excerpt": "Von Intercompany-Mismatches bis Forecasts und Reporting: So macht der AI-Controller in Smartbooks die Arbeit von Finance-Teams schneller und schärfer.",
1245  "originalUrl": "",
1246  "meta": null
1247}
1248---
1249<h1>Der <strong>AI-Controller</strong>: Was AI in Smartbooks für Ihr Finance-Team leistet</h1>
1250<p>Die Rolle des <strong>AI-Controllers</strong> beginnt dort, wo es hakt: Berichte schauen zurück, die Geschäftsleitung will nach vorn. Daten sind reichlic
1250h vorhanden — aber jede Frage bedeutet Export, Pivot und einen halben Tag Arbeit. Budgetabweichungen über Abteilungen hinweg fallen erst auf, wenn es zu spät ist. Und gleichzeitig kämpft der objektive Wächter der Zahlen um dieselben Stunden wie der strategische Businesspartner, den das Management eigentlich verlangt. Meistens gewinnt der Wächter.</p>
1251<p>Genau hier setzt der AI-Controller von Smartbooks an: kein generischer Chatbot, sondern AI, die direkt auf Ihren eigenen Zahlen arbeitet — bis auf Transaktionsebene. In diesem Artikel zeigen wir pro Schmerzpunkt, was das konkret bedeutet.</p>
1252<h2>Kontrollieren: von IC-Mismatches bis Fehlbuchungen</h2>
1253<p>Das ist die Wächterrolle — und lässt sich besonders gut automatisieren.</p>
1254<h3>Intercompany-Abstimmung, die über reines Matching hinausgeht</h3>
1255<p>Die meisten Konsolidierungslösungen finden IC-Transaktionen. Smartbooks AI geht einen Schritt weiter: findet nicht nur die Abweichungen, sondern schlägt direkt Folgemaßnahmen vor. Fehlt eine Gegenbuchung in einer Tochtergesellschaft? Steckt eine Wechselkursdifferenz dahinter? Die AI analysiert und sagt Ihnen, was zu tun ist — statt Sie durch Journale mehrerer Entitäten wühlen zu lassen.</p>
1256<h3>Anomalie-Erkennung in Ihren Daten</h3>
1257<p>Fehlbuchungen fallen oft erst spät auf. Der AI-Controller scannt Ihre Daten auf Abweichungen: Buchungen, die nicht zum Muster eines Kontos passen, unerwartete Beträge, plötzlich verdoppelte Kostenpositionen. Auch abteilungs- und entitätsübergreifende Budgetabweichungen kommen früh ans Licht — nicht erst zur Quartalsanalyse. So finden Sie Fehler vor dem Abschluss, nicht danach.</p>
1258<h2>Analysieren: Antworten ohne vorher Berichte zu bauen</h2>
1259<h3>Ad-hoc-Einblicke bis auf Transaktionsebene</h3>
1260<p>„Wie hoch waren die Marketingkosten pro Entität in Q2, und warum steigen sie?“ Früher hieß das: Bericht bauen oder Export ziehen. Jetzt stellen Sie die Frage. Die AI durchsucht Ihre Zahlen, drilled bei Bedarf bis auf Transaktionsebene und liefert eine begründete Antwort. Der Weg von Daten zu Rat sind Minuten statt Nachmittage.</p>
1261<h3>Fragen auf konsolidierter Ebene stellen</h3>
1262<p>Weil Smartbooks Transaktionen auf konsolidierter Ebene bereitstellt, können Sie Fragen über die gesamte Gruppe hinweg stellen. Wie viel Umsatz macht Kunde X über alle Entitäten? Welche Lieferanten werden von mehreren Töchtern genutzt? Der AI-Controller antwortet direkt gruppenweit.</p>
1263<h2>Planen: Budgets, Forecasts und Szenarien</h2>
1264<h3>Unterstützung bei Budgets und Forecasts</h3>
1265<p>Budgetierung bleibt Menschensache — der AI-Controller denkt mit. Er hilft beim Aufbau des Planungsmodells, erkennt Trends und Muster in historischen Daten und schlägt vor, wo Budget oder Forecast wahrscheinlich anzupassen sind. Sie setzen die Annahmen; die AI sorgt dafür, dass Sie nicht bei null anfangen.</p>
1266<h3>Investitionen und Finanzierungen durchrechnen</h3>
1267<p>Steht eine Investition oder neue Finanzierung an? Der AI-Controller rechnet Ad-hoc-Fragen auf Ihrer bestehenden Projektion durch. Was macht ein Kredit über eine halbe Million mit Ihrer Liquidität? Ist die Maschinen-Investition angesichts der erwarteten Cashflows tragfähig? Sie erhalten die Durchrechnung auf Ihren eigenen Zahlen — nicht auf generischen Annahmen.</p>
1268<h3>Die richtigen Metriken für Ihre Organisation</h3>
1269<p>Welche KPIs sind für Ihr Unternehmen wirklich relevant? Der AI-Controller hilft, die richtigen Metriken zu definieren — passend zu Branche, Geschäftsmodell und den Fragen Ihres Managements — und richtet sie direkt in Smartbooks ein.</p>
1270<h2>Produzieren: Berichte und Dokumente</h2>
1271<h3>Neue Berichte erstellen</h3>
1272<p>Beschreiben Sie, was Sie sehen möchten — etwa eine GuV je Kostenstelle im Vergleich zum Budget — und der AI-Controller baut den Bericht für Sie. Feinanpassungen bleiben jederzeit möglich.</p>
1273<h3>PowerPoints, Excel-Modelle und Word-Dokumente</h3>
1274<p>Zahlen sind erst nützlich, wenn sie beim richtigen Publikum landen. Der AI-Controller erstellt aus Ihren Smartbooks-Daten direkt Board-Präsentationen, Excel-Analysen oder Word-Monatsberichte — ohne manuelles Übertippen und ohne veraltete Versionen.</p>
1275<h2>Wie funktioniert der AI-Controller?</h2>
1276<p>Der AI-Controller arbeitet am besten aus Smartbooks selbst heraus. Dort hat er den vollständigen Kontext Ihrer Organisation: Entitäten, Struktur, Dimensionen — kombiniert mit Prompts, die Smartbooks speziell für Finance-Arbeit optimiert hat. Sie müssen nichts über Ihre Buchhaltung erklären; die AI weiß es bereits. Lieber aus Ihrer eigenen AI-Umgebung? Ihre Smartbooks-Daten sind über eine MCP-Anbindung an Claude erreichbar.</p>
1277<h2>Vom Wächter zum Businesspartner</h2>
1278<p>Der AI-Controller ersetzt den Controller nicht — aber er übernimmt Sucharbeit, Handarbeit und Bauarbeit. Damit löst er auch den Spagat: Die Wächterrolle wird weitgehend automatisiert, sodass der Controller Zeit für die Rolle gewinnt, die das Management eigentlich einfordert — die des strategischen Businesspartners. Der Controller behält die Regie: bewerten, steuern, entscheiden. Fragen, die früher einen Tag kosteten, sind in Minuten beantwortet. Abweichungen, die erst beim Audit auffielen, kommen bereits zum Monatsabschluss ans Licht.</p>
1279<h2>Häufig gestellte Fragen zum AI-Controller</h2>
1280<p><strong>Was ist ein AI-Controller?</strong><br />Ein AI-Controller ist AI-Funktionalität, die die Arbeit eines Financial Controllers unter
1280stützt: von Intercompany-Abstimmung und Anomalie-Erkennung bis Forecasting und Reporting. In Smartbooks arbeitet die AI direkt auf Ihren Finanzdaten — bis auf Transaktionsebene.</p>
1281<p><strong>Ersetzt AI den Financial Controller?</strong><br />Nein. Die AI übernimmt repetitive Such- und Bauarbeit; Beurteilung, Interpretation und Entscheidung bleiben beim Controller. AI macht das Fach schneller und analytischer — nicht überflüssig.</p>
1282<p><strong>Wie hilft AI dem Controller, mehr Businesspartner zu sein?</strong><br />Indem sie Kontrollarbeit automatisiert: Abstimmungen, Anomalien, Berichtsbau. Die gewonnene Zeit fließt in Analyse, Szenarien und strategische Beratung.</p>
1283<p><strong>Auf welchen Daten arbeitet der AI-Controller von Smartbooks?</strong><br />Auf Ihren Daten in Smartbooks: Hauptbuch, Transaktionen, Budgets, Projektionen und konsolidierte Zahlen über alle Entitäten hinweg. Also Ihre echten Zahlen — keine generischen Benchmarks.</p>
1284<h2>Selbst sehen, was der AI-Controller kann?</h2>
1285<p><a href="/de/demo">Vereinbaren Sie eine Demo</a> und stellen Sie Ihre erste Frage an Ihre eigenen Zahlen.</p>`,nR=`---json
1286{
1287  "title": "The AI controller: what AI in Smartbooks does for your finance team",
1288  "slug": "ai-controller",
1289  "excerpt": "From intercompany mismatches to forecasts and reports: discover how the AI controller in Smartbooks makes finance teams faster and sharper.",
1290  "metaTitle": "AI Controller: How AI Works in Smartbooks",
1291  "date": "2026-07-09 10:00:00",
1292  "category": "Articles",
1293  "tags": [
1294    "AI",
1295    "Business Control",
1296    "Financial Consolidation",
1297    "Forecast",
1298    "Reporting"
1299  ],
1300  "originalUrl": ""
1301}
1302---
1303<h1>The <strong>AI controller</strong>: what AI in Smartbooks does for your finance team</h1>
1304<p>The <strong>AI controller</strong> steps in exactly where the role is under pressure: reports look backward while management wants to look ahead. There is more data than ever, but every question means an export, a pivot table and an afternoon of work. Budget deviations across departments only surface once the damage is done. And meanwhile, the objective watchdog guarding the numbers competes for the same hours as the strategic business partner management actually asks for. The watchdog usually wins.</p>
1305<p>That's exactly where the AI controller in Smartbooks comes in: not a chatbot giving generic answers, but AI that works directly on your own numbers, down to transaction level. In this article, we show per pain point what that means in practice.</p>
1306<h2>Checking: from IC mismatches to incorrect bookings</h2>
1307<p>This is the watchdog role, and it's exactly the part that automates best.</p>
1308<h3>Intercompany reconciliation that goes beyond matching</h3>
1309<p>Most consolidation software can detect intercompany transactions. Smartbooks AI goes a step further: it doesn't just find the mismatches, it also suggests next steps. Is a counter-booking missing at a subsidiary? Is there a currency difference in play? The AI analyzes the difference and tells you what needs to happen to resolve it, instead of leaving you to dig through journal entries across multiple entities.</p>
1310<h3>Anomaly detection in your data</h3>
1311<p>Incorrect bookings often only surface when it's too late. The AI controller scans your data for deviations: entries that don't fit the pattern of a GL account, amounts that stand out, or cost lines that suddenly double. Budget deviations across departments and entities also surface early, not just at the quarterly review. Practical checks become simple too, such as verifying whether all invoices were actually sent. You catch errors before the close, not after.</p>
1312<h2>Analyzing: answers without building a report first</h2>
1313<p>This is where the shift happens from looking backward to working data-driven.</p>
1314<h3>Ad-hoc insights down to transaction level</h3>
1315<p>&ldquo;What were the marketing costs per entity in Q2, and why are they rising?&rdquo; A question like that used to mean building a report or running an export. Now you just ask. The AI digs through your numbers, drills down to transaction level where needed, and comes back with a substantiated answer. Have a question but no report yet? That's no longer a blocker. The distance between data and advice shrinks from afternoons to minutes.</p>
1316<h3>
1316Asking questions at consolidated level</h3>
1317<p>Because Smartbooks has transactions available at consolidated level, you can ask questions about your entire organization in one go. How much revenue does customer X generate across all entities combined? Which suppliers are used by multiple subsidiaries? Where you previously had to line up exports from multiple administrations side by side, the AI controller gives you the group-wide answer directly.</p>
1318<h2>Planning: budgets, forecasts and scenarios</h2>
1319<p>From describing what happened to calculating what's ahead.</p>
1320<h3>Help with budgets and forecasts</h3>
1321<p>Budgeting remains human work, but the AI controller thinks along with you. It helps set up your planning and business models, recognizes trends and patterns in your historical data, and suggests where your budget or forecast likely needs adjusting. You decide the assumptions and fill in the numbers; the AI makes sure you never start from a blank sheet.</p>
1322<h3>Calculating investments and loans against your projection</h3>
1323<p>Is management considering an investment or new financing? The AI controller works through ad-hoc questions based on your existing projection. What does a half-million loan do to your liquidity? Is that machine purchase justified given expected cash flows? You get a calculation on your own numbers, not on assumptions from a generic model. This is exactly the terrain where the controller makes the difference as a business partner.</p>
1324<h3>The right metrics for your organization</h3>
1325<p>Which KPIs actually matter for your business? The AI controller helps determine the metrics that are relevant for your organization, fitting your industry, business model and the questions your management asks. You then set those metrics up directly in Smartbooks, so they appear in every report.</p>
1326<h2>Producing: reports and documents</h2>
1327<h3>Creating new reports</h3>
1328<p>Setting up a new report no longer has to go through the configurator alone. Describe what you want to see, for example a P&amp;L per cost center compared against budget, and the AI controller builds the report for you. You can always fine-tune it afterwards.<
1328/p>
1329<h3>PowerPoints, Excel models and Word documents</h3>
1330<p>Numbers are only useful when they land with the right people. The AI controller uses your Smartbooks data to create board presentations, Excel models for further analysis, or Word documents such as a monthly report. No more manually retyping figures, and no more errors from outdated versions.</p>
1331<h2>How does the AI controller work?</h2>
1332<p>The AI controller works best from within Smartbooks itself. There, the AI has the full context of your organization at hand: your entities, structure and dimensions, combined with prompts that Smartbooks has tuned specifically for finance work. You don't have to explain how your administration is set up; the AI already knows. Prefer working from your own AI environment? Your Smartbooks data can also be accessed through an MCP connection with Claude.</p>
1333<h2>From watchdog to business partner</h2>
1334<p>The AI controller doesn't replace the controller, but takes over the searching, the manual work and the building. In doing so, it also resolves the squeeze: the watchdog role is largely automated, freeing up time for the role management actually asks for, that of strategic business partner. The controller stays in charge: reviewing, adjusting and deciding. The difference is speed and depth. Questions that used to take a day are answered in minutes. Differences that used to surface at the audit come to light at month-end close.</p>
1335<h2>Frequently asked questions about the AI controller</h2>
1336<p><strong>What is an AI controller?</strong><br />An AI controller is AI functionality that supports the work of a financial controller: from intercompany reconciliation and anomaly detection to forecasting and reporting. In Smartbooks, the AI works directly on your own financial data, down to transaction level.</p>
1337<p><strong>Will AI replace the financial controller?</strong><br />No. The AI takes over repetitive searching and building work, but the controller remains responsible for judgment, interpretation and decision-making. AI makes the profession faster and more analytical, not obsolete.</p>
1338<p><strong>How does AI help the controller become more of a business partner?</strong><br />By automating the control work: reconciliations, flagging deviations, building reports. The time freed up can go to analysis, scenarios and strategic advice to management.</p>
1339<p><strong>What data does the Smartbooks AI controller work on?</strong><br />The data in your Smartbooks environment: general ledger, transactions, budgets, projections and consolidated figures across all your entities. The AI looks at your actual numbers, not at generic benchmarks.</p>
1340<h2>Want to see the AI controller in action?</h2>
1341<p><a href="/en/demo">Book a demo</a> and ask your first question to your own numbers.</p>`,tR=`---json
1342{
1343  "title": "De AI controller: wat AI in Smartbooks voor je finance team doet",
1344  "slug": "ai-controller",
1345  "order": 54,
1346  "metaTitle": "AI controller: zo werkt AI in Smartbooks",
1347  "date": "2026-07-09 10:00:00",
1348  "category": "Articles",
1349  "tags": [
1350    "AI",
1351    "Business Control",
1352    "Consolidatie",
1353    "Forecast",
1354    "Rapportage"
1355  ],
1356  "excerpt": "Van intercompany mismatches tot forecasts en rapportages: ontdek hoe de AI controller in Smartbooks het werk van finance teams sneller en scherper maakt.",
1357  "originalUrl": "",
1358  "enSlug": "ai-controller"
1359}
1360---
1361<h1>De <strong>AI controller</strong>: wat AI in Smartbooks voor je finance team doet</h1>
1362<p>De rol van de <strong>AI controller</strong> begint waar het knelt: rapportages kijken terug, terwijl de directie vooruit wil. Er is meer data dan ooit, maar elke vraag betekent een export, een draaitabel en een middag werk. Budgetafwijkingen over afdelingen heen vallen pas op als het kwaad al is geschied. En ondertussen vecht de objectieve waakhond die de cijfers bewaakt om dezelfde uren als de strategische businesspartner waar het management eigenlijk om vraagt. Meestal wint de waakhond.</p>
1363<p>Precies daar komt de AI controller van Smartbooks binnen: geen chatbot die algemene antwoorden geeft, maar AI die direct op je eigen cijfers werkt, tot op transactieniveau. In dit artikel laten we per pijnpunt zien wat dat in de praktijk betekent.</p>
1364<h2>Controleren: van IC-mismatches tot foutieve boekingen</h2>
1365<p>Dit is de waakhondrol, en juist die laat zich het best automatiseren.</p>
1366<h3>Intercompany reconciliatie die verder gaat dan matchen</h3>
1367<p>De meeste consolidatiesoftware kan intercompany transacties opsporen. Smartbooks AI gaat een stap verder: het vindt niet alleen de mismatches, maar stelt ook direct vervolgstappen voor. Ontbreekt er een tegenboeking bij een dochterentiteit? Zit er een koersverschil in? De AI analyseert het verschil en vertelt je wat er moet gebeuren om het op te lossen, in plaats van dat je zelf door journaalposten van meerdere entiteiten moet spitten.</p>
1368<h3>Anomaliedetectie in je data</h3>
1369<p>Foutieve boekingen vallen vaak pas op als het te laat is. De AI controller scant je data op afwijkingen: boekingen die niet passen bij het patroon van een grootboekrekening, bedragen die uit de toon vallen, of kostenposten die opeens verdubbelen. Ook budgetafwijkingen over afdelingen en entiteiten heen komen vroeg boven water, niet pas bij de kwartaalanalyse. En praktische controles worden eenvoudig, zoals checken of alle facturen daadwerkelijk verzonden zijn. Zo haal je fouten eruit v&oacute;&oacute;r de afsluiting, niet erna.</p>
1370<h2>Analyseren: antwoorden zonder eerst een rapport te bouwen</h2>
1371<p>Hier zit de omslag van terugkijken naar datagedreven werken.</p>
1372<h3>Ad-hoc inzichten tot op transactieniveau</h3>
1373<p>&ldquo;Wat waren de marketingkosten per entiteit in Q2, en waarom stijgen ze?&rdquo; Voor zo'n vraag moest je vroeger een rapportage bouwen of een export draaien. Nu stel je de vraag gewoon. De AI spit je cijfers door, drillt door tot op transactieniveau waar nodig, en komt terug met een onderbouwd antwoord. Heb je een vraag maar nog geen rapportage? Dan is dat geen blokkade meer. De afstand tussen data en advies wordt zo minuten in plaats van middagen.</p>
1374<h3>Vragen stellen op geconsolideerd niveau</h3>
1375<p>Omdat Smartbooks transacties op geconsolideerd niveau beschikbaar heeft, kun je vragen stellen over je hele organisatie in &eacute;&eacute;n keer. Hoeveel omzet doet klant X over alle entiteiten samen? Welke leveranciers gebruiken meerdere dochters? Waar voorheen exports uit meerdere administraties naast elkaar gelegd moesten worden, geeft de AI controller direct het groepsbrede antwoord.</p>
1376<h2>Plannen: budgetten, forecasts en scenario's</h2>
1377<p>Van beschrijven wat er gebeurd is, naar doorrekenen wat er gaat gebeuren.</p>
1378<h3>Hulp bij budgetten en forecasts</h3>
1379<p>Budgetteren blijft mensenwerk, maar de AI controller denkt mee. Hij helpt bij het opzetten van je planningsmodel en businessmodel, herkent trends en patronen in je historische data, en geeft suggesties waar je budget of forecast waarschijnlijk bijgesteld moet worden. Jij bepaalt de aannames en vult de cijfers in; de AI zorgt dat je niet vanaf een leeg vel begint.</p>
1380<h3>Investeringen en leningen doorrekenen op je projectie</h3>
1381<p>Overweegt de directie een investering of een nieuwe financiering? De AI controller rekent ad-hoc vraagstukken door op basis van je bestaande projectie. Wat doet een lening van een half miljoen met je liquiditeit? Is die machine-aanschaf verantwoord gegeven de verwachte kasstromen? Je krijgt een doorrekening op je eigen cijfers, niet op aannames uit een generiek model. Dit is bij uitstek het terrein waar de controller als businesspartner het verschil maakt.</p>
1382<h3>De juiste metrics voor jouw organisatie</h3>
1383<p>Welke KPI's zijn eigenlijk relevant voor jouw bedrijf? De AI controller helpt bij het bepalen van de metrics die er voor jouw organisatie toe doen, passend bij je branche, businessmodel en de vragen die je management stelt. Die metrics zet je vervolgens direct in Smartbooks op, zodat ze in elke ra
1383pportage terugkomen.</p>
1384<h2>Produceren: rapportages en documenten</h2>
1385<h3>Nieuwe rapportages aanmaken</h3>
1386<p>Een nieuwe rapportage opzetten hoeft niet meer via de configurator alleen. Beschrijf wat je wilt zien, bijvoorbeeld een P&amp;L per kostenplaats met vergelijking ten opzichte van budget, en de AI controller bouwt de rapportage voor je op. Aanpassen kan daarna altijd nog.</p>
1387<h3>PowerPoints, Excel-modellen en Word-documenten</h3>
1388<p>Cijfers zijn pas nuttig als ze bij de juiste mensen landen. De AI controller maakt op basis van je Smartbooks-data direct presentaties voor de boardmeeting, Excel-modellen voor verdere analyse of Word-documenten zoals een maandrapportage. Geen handmatig overtypen van cijfers meer, en dus ook geen fouten door verouderde versies.</p>
1389<h2>Hoe werkt de AI controller?</h2>
1390<p>De AI controller werkt het beste vanuit Smartbooks zelf. Daar heeft de AI de volledige context van je organisatie bij de hand: je entiteiten, structuur en dimensies, gecombineerd met prompts die door Smartbooks specifiek zijn afgestemd op financewerk. Je hoeft dus niets uit te leggen over hoe je administratie in elkaar zit; de AI weet het al. Werk je liever vanuit je eigen AI-omgeving? Je Smartbooks-data is ook te benaderen via een MCP-koppeling met Claude.</p>
1391<h2>Van waakhond naar businesspartner</h2>
1392<p>De AI controller vervangt de controller niet, maar neemt het zoekwerk, het handwerk en het bouwwerk over. Daarmee lost hij ook de spagaat op: de waakhondrol wordt grotendeels geautomatiseerd, zodat de controller tijd overhoudt voor de rol waar het management &eacute;cht om vraagt: die van strategische businesspartner. De controller houdt de regie: beoordelen, bijsturen en beslissen. Het verschil zit in snelheid en diepgang. Vragen die eerst een dag kostten, zijn in minuten beantwoord. Verschillen die eerst pas bij de audit opvielen, komen bij de maandafsluiting al boven water.</p>
1393<h2>Veelgestelde vragen over de AI controller</h2>
1394<p><strong>Wat is een AI controller?</strong><br />Een AI controller is AI-functionaliteit die het werk van een financial controller ondersteunt: van intercompany reconciliatie en anomaliedetectie tot forecasting en rapportage. In Smartbooks werkt de AI direct op je eigen financi&euml;le data, tot op transactieniveau.</p>
1395<p><strong>Vervangt AI de financial controller?</strong><br />Nee. De AI neemt repetitief zoek- en bouwwerk over, maar de controller blijft verantwoordelijk voor beoordeling, interpretatie en besluitvorming. AI maakt het vak sneller en analytischer, niet overbodig.</p>
1396<p><strong>Hoe helpt AI de controller om meer businesspartner te zijn?</strong><br />Door het controlewerk te automatiseren: reconciliaties, afwijkingen signaleren, rapportages bouwen. De tijd die daarmee vrijkomt kan naar analyse, scenario's en strategisch advies aan het management.</p>
1397<p><strong>Op welke data werkt de AI controller van Smartbooks?</strong><br />Op de data in je Smartbooks-omgeving: grootboek, transacties, budgetten, projecties en geconsolideerde cijfers over al je entiteiten. De AI kijkt dus naar jouw werkelijke cijfers, niet naar algemene benchmarks.</p>
1398<h2>Zelf zien wat de AI controller kan?</h2>
1399<p><a href="/demo">Plan een demo</a> en stel je eerste vraag aan je eigen cijfers.</p>`,iR=`---json
1400{
1401  "title": "KI-gestützte Analyse von Gewinn- und Verlustberichten",
1402  "slug": "ai-supported-analyse-van-verlies-winst-rapportages",
1403  "metaTitle": "Gewinn- und Verlustanalyse mit KI in Smartbooks",
1404  "date": "2024-12-04 13:10:22",
1405  "category": "Articles",
1406  "tags": [
1407    "Implementierung"
1408  ],
1409  "excerpt": "Gewinn- und Verlustanalyse mit KI: Smartbooks erkennt automatisch mögliche Buchungsfehler und Abweichungen in Ihren GuV-Berichten.",
1410  "originalUrl": "https://smartbooks.ai/artikelen/ai-supported-analyse-van-verlies-winst-rapportages/",
1411  "meta": null
1412}
1413---
1414<p>Smartbooks führt ab 1. Dezember neue Funktionalität ein, mit der Nutzer mithilfe Künstlicher Intelligenz mögliche Buchungsfehler und Abweichungen von typischen Buchungsmustern erkennen können.</p>
1415
1416<p>Die KI analysiert die Jahresübersicht und generiert Hinweise, die auf Abweichungen von erwarteten Mustern hindeuten. Ein Beispiel aus unserer Demo-Umgebung sehen Sie unten.</p>
1417
1418<figure class="wp-block-image size-full"><img src="https://smartbooks.ai/wp-content/uploads/2024/12/AI-findings.png" alt="KI-Findings in Smartbooks" class="wp-image-2778"/></figure>
1419
1420<p>In den KI-Einstellungen können Sie Informationen über Ihre Organisation hinterlegen, damit die Analyse Kontext hat. In unserer Demo geben wir z. B. an, dass die Organisation stabil wächst und Umsätze aus Beratungsstunden stammen. Die Kosten sind relativ konstant. Diese Angaben nimmt die KI in Analyse und Findings mit auf.</p>
1421
1422<p>Die Finanzdaten werden von OpenAI gelesen und für Analysen und Empfehlungen verwendet. OpenAI weiß nicht, von welcher Organisation die Daten stammen.</p>
1423
1424<p>Melden Sie sich bei Fragen zu dieser Funktion. Wir arbeiten weiter an der Integration von KI in Smartbooks — 2025 folgen weitere Updates.</p>
1425
1426<p>Alle Admin-User können die KI-Findings in Smartbooks über folgende Menüs aktivieren.</p>
1427
1428<figure class="wp-block-image size-full"><img src="https://smartbooks.ai/wp-content/uploads/2024/12/AI-settings.png" alt="KI-Einstellungen in Smartbooks" class="wp-image-2779"/></figure>
1429
1430<p>
1430Gehen Sie im linken Menü zu Settings → General.</p>
1431<p>Aktivieren Sie „Enabled“ und tragen Sie optional Informationen zur Organisation ein, damit die KI mehr Kontext hat und Analysen sowie Empfehlungen noch relevanter werden.</p>
1432<p>Vergessen Sie nicht, rechts oben auf Save zu klicken.</p>
1433<p>Öffnen Sie anschließend die Gewinn- und Verlustrechnung und klicken Sie auf das KI-Symbol oben in Smartbooks.</p>
1434<p>Rechts erscheint das KI-Findings-Panel. Unter jeder Empfehlung gibt es einen Highlight-Button, der die Zahlen zeigt, auf denen die Empfehlung basiert.</p>
1435<p>Ein Browser-Refresh löst eine neue Analyse aus.</p>`,rR=`---json
1436{
1437  "title": "AI-supported analysis of Profit & Loss reports",
1438  "metaTitle": "Profit & Loss Analysis with AI in Smartbooks",
1439  "slug": "ai-supported-analyse-van-verlies-winst-rapportages",
1440  "date": "",
1441  "category": "Articles",
1442  "tags": [
1443    "AI",
1444    "Profit & Loss",
1445    "Financial Reporting",
1446    "Automation"
1447  ],
1448  "excerpt": "Profit and loss analysis with AI: Smartbooks automatically detects potential bookkeeping errors and pattern deviations in your P&L reports.",
1449  "originalUrl": "",
1450  "meta": {
1451    "type_bedrijf": "Fintech / SaaS"
1452  }
1453}
1454---
1455<p>As of December 1, Smartbooks is launching new functionality that allows users to identify potential accounting errors and deviations in bookkeeping patterns using Artificial Intelligence.</p>
1456
1457<p>AI analyzes the annual overview and generates comments explaining that a deviation from expected patterns has been detected. See an example from our demo administration below.</p>
1458
1459<figure class="`,aR=`---json
1460{
1461  "title": "AI-supported analyse van Verlies & Winst rapportages",
1462  "metaTitle": "Winst- en verliesanalyse met AI in Smartbooks",
1463  "slug": "ai-supported-analyse-van-verlies-winst-rapportages",
1464  "order": 13,
1465  "date": "2024-12-04 13:10:22",
1466  "category": "Articles",
1467  "tags": [
1468    "Implementatie"
1469  ],
1470  "excerpt": "Winst- en verliesanalyse met AI: Smartbooks detecteert automatisch mogelijke boekhoudfouten en afwijkingen in je verlies- en winstrapportages.",
1471  "originalUrl": "https://smartbooks.ai/artikelen/ai-supported-analyse-van-verlies-winst-rapportages/",
1472  "meta": null,
1473  "enSlug": "ai-supported-analysis-of-profit-loss-reports"
1474}
1475---
1476<p>Smartbooks lanceert per 1 december nieuwe functionaliteit waarmee gebruikers met behulp van Artificial Intelligence mogelijke boekhoudfouten en afwijkingen in boekhoudpatronen kunnen zien.</p>
1477
1478
1479
1480<p>AI analyseert het jaaroverzicht en genereert opmerkingen die toelichten dat er een afwijking op verwachte patronen is gedetecteerd. Zie een voorbeeld van onze demo-administratie hieronder.</p>
1481
1482
1483
1484<figure class="wp-block-image size-full"><img src="https://smartbooks.ai/wp-content/uploads/2024/12/AI-findings.png" alt="" class="wp-image-2778"/></figure>
1485
1486
1487
1488<p>Je kunt in de AI-settings informatie over de organisatie toevoegen, zodat de AI-analyse deze informatie kan gebruiken. In dit geval van deze demo-administratie zeggen we bijvoorbeeld dat de organisatie gestaag groeit en dat de inkomsten afkomstig zijn van consultancy uren. Daarnaast zijn de kosten redelijk constant. Deze input neemt AI dan mee in de analyse en gegenereerde findings.</p>
1489
1490
1491
1492<p>De financiële data wordt door OpenAI gelezen en gebruikt om analyses en aanbevelingen te maken. OpenAI weet niet van welke organisatie deze gegevens afkomstig zijn.</p>
1493
1494
1495
1496<p>Laat ons weten als je vragen hebt over deze functionaliteit. We gaan verder met het integreren van AI binnen Smartbooks en verdere updates volgen in 2025.</p>
1497
1498
1499
1500<p>Alle admin-gebruikers kunnen in Smartbooks via de volgende schermen de functie aanzetten om met behulp van AI gegenereerde <em>findings</em> te zien.</p>
1501
1502
1503
1504<figure class="wp-block-image size-full"><img src="https://smartbooks.ai/wp-content/uploads/2024/12/AI-settings.png" alt="" class="wp-image-2779"/></figure>
1505
1506
1507
1508<p>Ga in het menu aan de linkerkant naar Settings -&gt; General</p>
1509
1510
1511
1512<p>Selecteer het vakje bij ‘Enabled’ en vul eventueel informatie over de organisatie in om AI meer context te geven, zodat analyses en aanbevelingen nog relevanter worden.</p>
1513
1514
1515
1516<p>Vergeet niet om op Save (rechts bovenin) te drukken.</p>
1517
1518
1519
1520<p>Ga nu naar Winst &amp; Verlies en klik op het AI-icoontje dat nu bovenin het Smartbooks scherm staat.</p>
1521
1522
1523
1524<p>Aan de rechterkant verschijnt een AI-findings scherm. Onder de aanbevelingen is een highlight-knop. Deze laat zien welke getallen de basis vormen voor deze aanbeveling.</p>
1525
1526
1527
1528<p>Druk op refresh van de browser om AI opnieuw te laten kijken naar de cijfers.</p>`,oR=`---json
1529{
1530  "title": "Ist KI reif genug für ernsthafte Finance-Aufgaben?",
1531  "slug": "ai-voor-serieuze-business-control-finance-taken",
1532  "metaTitle": "KI im Finance: Reif für ernsthafte Aufgaben?",
1533  "date": "2025-11-04 16:11:47",
1534  "category": "Articles",
1535  "tags": [
1536    "KI",
1537    "Alex",
1538    "Best Practices",
1539    "Business Controller"
1540  ],
1541  "excerpt": "KI im Finance entwickelt sich rasant – aber ist sie reif für ernsthafte Aufgaben? Erfahren Sie, wie Sie KI heute schon zuverlässig für Business Control einsetzen.",
1542  "originalUrl": "https://smartbooks.ai/artikelen/ai-voor-serieuze-business-control-finance-taken/",
1543  "meta": null
1544}
1545---
1546<p>Die Entwicklungen im Bereich KI überraschen uns nahezu täglich. So gibt es inzwischen KI-Schauspielerinnen und Nachrichtensprecher, die kaum noch vom Original zu unterscheiden sind. KI findet ihren Weg in immer mehr Fachgebiete – und es ist klar, dass sich auch die Finance-Funktion grundlegend verändern wird.</p>
1547
1548
1549
1550<p>Viele Organisationen setzen KI bereits ein, um die Finanzbuchhaltung effizienter und genauer zu machen. Aber ist KI auch reif genug, um komplexere Business-Control-Aufgaben zu übernehmen? Können Sie KI heute schon zuverlässig und konsistent für folgende Aufgaben einsetzen:</p>
1551
1552
1553
1554<ul class="wp-block-list">
1555<li>Prüfung der Zahlen und Monatsabschluss</li>
1556
1557
1558
1559<li>Durchführung von Abweichungsanalysen und Erklärungen</li>
1560
1561
1562
1563<li>Erstellung monatlicher Management-Reports</li>
1564
1565
1566
1567<li>Erstellung einer direkten 13-Wochen-Cashflow-Prognose</li>
1568
1569
1570
1571<li>Beantwortung von Ad-hoc-Fragen</li>
1572
1573
1574
1575<li>Proaktive Beratung des Business</li>
1576</ul>
1577
1578
1579
1580<p>Viele Finance-Profis experimentieren mit KI, um solche Aufgaben zu unterstützen. Dabei zeigt sich schnell, dass es noch Einschränkungen gibt. KI halluziniert manchmal (erfindet Dinge) und die Ergebnisse sind nicht immer konsistent – stellen Sie dieselbe komplexe Frage dreimal und Sie erhalten drei unterschiedliche Antworten. Zudem hat KI nicht von selbst Zugriff auf alle relevanten Informationen, wie den Unternehmenskontext, den Mitarbeitende kennen, der aber nirgendwo in Systemen erfasst ist.</p>
1581
1582
1583
1584<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2025/04/Stappen-naar-Virtuele-AI-Business-Controller-1024x468.jpg" alt="Schritte zum KI-Business-Controller" class="wp-image-3079"/></figure>
1585
1586
1587
1588<p class="has-medium-font-size"><strong>Schritt 1 – Bringen Sie die Basis-Datenquellen in Ordnung</strong></p>
1589
1590
1591
1592<p>Eine KI ist nur so gut wie die Daten und Informationen, die ihr zur Verfügung stehen. Sorgen Sie also dafür, dass Ihre Finanzbuchhaltung und andere relevante Datenquellen zuverlässig, vollständig und aktuell sind.</p>
1593
1594
1595
1596<p>Wenn das bei Ihnen noch nicht der Fall ist, fangen Sie dort an. Ohne solide Basisdaten kann ein Business Controller seine Arbeit nicht gut machen – und eine KI ebenso wenig.</p>
1597
1598
1599
1600<p>Fehlt Ihnen die passende Expertise? Ziehen Sie einen Fractional CFO auf Zeit in Betracht. Wir helfen Ihnen bei Bedarf gerne, jemanden zu finden, der zu Ihrer Organisation passt.</p>
1601
1602
1603
1604<p>Eine solide Datengrundlage ist die Voraussetzung, um den nächsten Schritt – das Strukturieren und Anreichern der Daten – effektiv umsetzen zu können.</p>
1605
1606
1607
1608<p class="has-medium-font-size"><strong>Schritt 2 – Strukturieren, prüfen und anreichern Sie die Daten</strong></p>
1609
1610
1611
1612<p>Die Daten in der Finanzbuchhaltung reichen für einen Business Controller selten aus, um seine Arbeit gut zu machen. Deshalb entstehen in vielen Finance-Abteilungen unzählige Excel-Dateien, um Daten zu strukturieren und anzureichern. Das ist verständlich, aber nicht ideal.</p>
1613
1614
1615
1616<p>Wenn Sie KI effektiv und zuverlässig einsetzen möchten, muss sie Zugriff auf gut strukturierte und angereicherte Daten haben. Fragmentierte Excel-Dateien sind dafür keine geeignete Lösung. Was Sie brauchen, ist eine professionelle Finance-Plattform, die Daten zusammenführt, prüft und ergänzt – unter anderem mit:</p>
1617
1618
1619
1620<ul class="wp-block-list">
1621<li>
1621Nicht-finanziellen KPIs (wie Umsatz pro FTE oder Stückzahlen pro Produkt)</li>
1622
1623
1624
1625<li>Standardisierten Zwischensummen und Kennzahlen (z. B. Bruttomarge, EBIT, Marge pro Produktgruppe)</li>
1626
1627
1628
1629<li>Konsolidierten Ergebnissen und Intercompany-Eliminierungen</li>
1630
1631
1632
1633<li>Geschäftsmodell-Logik und Budgets (für Abweichungsanalysen und Prognosen)</li>
1634
1635
1636
1637<li>Unternehmenskontext, etwa historischen Abweichungserklärungen</li>
1638</ul>
1639
1640
1641
1642<p>Ein gutes System automatisiert einen großen Teil dieses Prozesses. Denken Sie an das Zusammenführen von Datenquellen, die Konsolidierung mehrerer Gesellschaften und die Erstellung einer Business-P&amp;L, Bilanz und Cashflow (meist anders als im Buchhaltungssystem). Auch der Monatsabschluss lässt sich mithilfe von KI weitgehend automatisieren.</p>
1643
1644
1645
1646<p>Wenn Sie diesen Schritt sauber aufsetzen, legen Sie das Fundament für Schritt 3: den tatsächlichen Einsatz von KI in Ihren Business-Control-Prozessen.</p>
1647
1648
1649
1650<p class="has-medium-font-size"><strong>Schritt 3 – Setzen Sie KI klug und selektiv ein</strong></p>
1651
1652
1653
1654<p>Manche halten KI für ein Wundermittel: eine komplexe Frage stellen, und das System liefert von selbst eine gute Antwort. In der Praxis funktioniert das nur bei einfachen Aufgaben. Für komplexere Business-Control-Tätigkeiten braucht es einen durchdachteren Ansatz.</p>
1655
1656
1657
1658<p>KI ist nicht für jedes Problem die richtige Lösung. Bilden Sie deshalb zuerst den Prozess der jeweiligen Finance-Aufgabe ab. Sie werden feststellen, dass manche Schritte exakt und rechnerisch sind – die automatisiert man besser mit klassischer Logik. Andere Schritte erfordern Informationen und Kontext, die in Systemen nicht vorhanden sind; dort ist ein Human-in-the-Loop nötig.</p>
1659
1660
1661
1662<p>Übrig bleiben Schritte, in denen KI tatsächlich die beste Lösung bietet. Aber auch dann ist es meist nicht effektiv, ein ganzes Problem mit einem einzigen Prompt zu lösen. Höhere Qualität und Zuverlässigkeit erreichen Sie, indem Sie eine Aufgabe in mehrere einfachere Prompts zerlegen, zum Beispiel:</p>
1663
1664
1665
1666<ol start="1" class="wp-block-list">
1667<li><strong>Frage prüfen:</strong> Ist die Frage eindeutig? Wenn nicht, um Klärung bitten.</li>
1668
1669
1670
1671<li><strong>Informationsbedarf bestimmen:</strong> Welche Daten werden für die Antwort benötigt?</li>
1672
1673
1674
1675<li><strong>Frage beantworten:</strong> Antwort auf Basis der verfügbaren Daten formulieren.</li>
1676
1677
1678
1679<li><strong>Ergebnis prüfen:</strong> Antwort auf Konsistenz und Halluzinationen kontrollieren.</li>
1680</ol>
1681
1682
1683
1684<p>Wenn Sie KI so einsetzen, erhöhen Sie Zuverlässigkeit, Überprüfbarkeit und Konsistenz deutlich.</p>
1685
1686
1687
1688<p class="has-medium-font-size"><strong>Wie setzen Sie das in der Praxis um?</strong></p>
1689
1690
1691
1692<p>Mit diesen drei Schritten wissen Sie, was nötig ist – aber wie bringen Sie das in die Praxis? Es gibt heute diverse bezahlbare, generische Daten-, Integrations- und KI-Lösungen. Damit können Sie im Prinzip alles selbst aufbauen, etwa indem Sie Power BI, n8n und OpenAI kombinieren. Diese generischen Tools sind dank ihrer Skalierung zwar relativ günstig, doch Projekt- und Wartungskosten steigen schnell und es kostet viel Zeit, alles zuverlässig zum Laufen zu bringen und zu halten.</p>
1693
1694
1695
1696<p>Ein deutlich schnellerer, einfacherer und am Ende günstigerer Ansatz ist die Wahl einer spezialisierten Lösung. Solche Tools sind in der Anschaffung aufgrund ihrer kleineren Skalierung oft teurer als generische Alternativen, das amortisiert sich aber leicht durch kaum vorhandene Aufsatz- und Wartungskosten. Zudem bietet ein spezialisiertes Tool deutlich mehr Mehrwert für den Business Controller, als Sie mit generischen Tools selbst realisieren könnten.</p>
1697
1698
1699
1700<p class="has-medium-font-size"><strong>Die Rolle von Smartbooks.ai</strong></p>
1701
1702
1703
1704<p><strong>Smartbooks.ai</strong> ist ein spezialisiertes Tool, das sich vollständig auf Schritt 2 und 3 konzentriert: das Strukturieren, Prüfen und Anreichern von Daten sowie den intelligenten Einsatz von KI im Finance. So helfen wir Finance-Teams, KI als festen Bestandteil ihres Business-Control-Prozesses zu nutzen.</p>
1705
1706
1707
1708<p>Möchten Sie mehr darüber erfahren, wie wir das umsetzen? Vereinbaren Sie einen Termin mit uns – wir beantworten gerne alle Ihre Fragen.</p>`,sR=`---json
1709{
1710  "title": "Is AI Mature Enough for Serious Finance Tasks?",
1711  "slug": "ai-for-serious-business-control-finance-tasks",
1712  "metaTitle": "AI in finance: mature enough for serious tasks?",
1713  "date": "",
1714  "category": "Articles",
1715  "tags": [
1716    "AI",
1717    "Business Control",
1718    "Financial Planning",
1719    "Digital Transformation"
1720  ],
1721  "excerpt": "AI in finance is evolving rapidly, but is it ready for high-stakes tasks? Discover how to reliably deploy AI for business control today and what it requires.",
1722  "originalUrl": "",
1723  "meta": {
1724    "type_bedrijf": "Finance & Technology"
1725  }
1726}
1727---
1728<p>Developments in the field of AI surprise us almost daily. For instance, AI actresses and news anchors are appearing who are barely distinguishable from real people. AI is finding its w
1728ay into more and more professional fields-and it is clear that the finance function will also change fundamentally.</p>
1729
1730<p>Many organizations are already using AI to make financial administration more efficient and accurate. But is AI also mature enough to take over more complex business control activities? Can you already use AI reliably and consistently for tasks such as:</p>
1731
1732<ul class="`,lR=`---json
1733{
1734  "title": "Is AI al volwassen genoeg voor serieuze finance taken?",
1735  "slug": "ai-voor-serieuze-business-control-finance-taken",
1736  "order": 4,
1737  "metaTitle": "AI in finance: al volwassen voor serieuze taken?",
1738  "date": "2025-11-04 16:11:47",
1739  "category": "Articles",
1740  "tags": [
1741    "AI",
1742    "Alex",
1743    "Best Practices",
1744    "Business Controller"
1745  ],
1746  "excerpt": "AI in finance ontwikkelt razendsnel, maar is het al klaar voor serieuze finance taken? Ontdek hoe je AI vandaag al betrouwbaar inzet voor business control.",
1747  "originalUrl": "https://smartbooks.ai/artikelen/ai-voor-serieuze-business-control-finance-taken/",
1748  "meta": null,
1749  "enSlug": "ai-for-serious-business-control-finance-tasks"
1750}
1751---
1752<p>De ontwikkelingen op het gebied van AI verrassen ons nog bijna dagelijks. Zo verschijnen er inmiddels AI-actrices en nieuwslezers die nauwelijks van echt te onderscheiden zijn. AI vindt zijn weg in steeds meer vakgebieden - en het is duidelijk dat ook de finance functie fundamenteel zal veranderen.</p>
1753
1754
1755
1756<p>Veel organisaties zetten AI al in om de financiële administratie efficiënter en nauwkeuriger te maken. Maar is AI ook volwassen genoeg om complexere business control-werkzaamheden over te nemen? Kun je AI al betrouwbaar en consistent inzetten voor taken als:</p>
1757
1758
1759
1760<ul class="wp-block-list">
1761<li>Controleren van de cijfers en afsluiten van de maand</li>
1762
1763
1764
1765<li>Uitvoeren van variantieanalyses en geven van verklaringen</li>
1766
1767
1768
1769<li>Opstellen van maandelijkse managementrapportages</li>
1770
1771
1772
1773<li>Maken van een directe 13-weekse cashflowprognose</li>
1774
1775
1776
1777<li>Beantwoorden van ad-hoc vragen</li>
1778
1779
1780
1781<li>Geven van proactief advies aan de business</li>
1782</ul>
1783
1784
1785
1786<p>Veel finance professionals experimenteren met AI om dit soort taken te ondersteunen. Daarbij blijkt al snel dat er nog beperkingen zijn. AI hallucineert soms nog (verzint dingen) en de resultaten zijn niet altijd consistent - stel drie keer dezelfde complexe vraag, en je krijgt drie verschillende antwoorden. Bovendien heeft AI niet vanzelf toegang tot alle relevante informatie, zoals de bedrijfscontext die medewerkers wel kennen maar die niet in systemen is vastgelegd. </p>
1787
1788
1789
1790<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2025/04/Stappen-naar-Virtuele-AI-Business-Controller-1024x468.jpg" alt="" class="wp-image-3079"/></figure>
1791
1792
1793
1794<p class="has-medium-font-size"><strong>Stap 1 - Breng de basisdatabronnen op orde</strong></p>
1795
1796
1797
1798<p>Een AI is slechts zo goed als de data en informatie die beschikbaar is. Zorg dus dat je financiële administratie en andere relevante databronnen betrouwbaar, volledig en up-to-date zijn.</p>
1799
1800
1801
1802<p>Als dat bij jullie nog niet het geval is, begin dan daar. Zonder goede basisdata kan een business controller het werk niet goed doen - en een AI ook niet.</p>
1803
1804
1805
1806<p>Heb je niet de juiste expertise in huis om dit op te zetten? Overweeg dan het tijdelijk inhuren van een fractional CFO. Wij kunnen je desgewenst helpen bij het vinden van iemand die goed bij jouw organisatie past.</p>
1807
1808
1809
1810<p>Een solide datagrondslag is de voorwaarde om de volgende stap - het structureren en verrijken van de data - effectief te kunnen uitvoeren.</p>
1811
1812
1813
1814<p class="has-medium-font-size"><strong>Stap 2 - Structureer, controleer en verrijk de data</strong></p>
1815
1816
1817
1818<p>De data in de financiële administratie is voor een business controller zelden voldoende om zijn werk goed te doen. Daarom ontstaan er op veel financeafdelingen talloze Excel-bestanden om data te structureren en verrijken. Dat is begrijpelijk, maar niet ideaal.</p>
1819
1820
1821
1822<p>Wil je AI effectief en betrouwbaar inzetten, dan moet deze toegang hebben tot goed gestructureerde en verrijkte data. Gefragmenteerde Excels zijn daarvoor geen geschikte oplossing. Wat je nodig hebt is een professioneel financeplatform dat data samenbrengt, controleert en aanvult met onder andere:</p>
1823
1824
1825
1826<ul class="wp-block-list">
1827<li>Niet-financiële KPI’s (zoals omzet per FTE of aantallen per product)</li>
1828
1829
1830
1831<li>Gestandaardiseerde subtotalen en ratio’s (bijv. brutomarge, EBIT, marge per productgroep)</li>
1832
1833
1834
1835<li>Geconsolideerde resultaten en intercompany-eliminaties</li>
1836
1837
1838
1839<li>Businessmodellogica en budgetten (voor variantieanalyses en prognoses)</li>
1840
1841
1842
1843<li>Bedrijfscontext, zoals historische variantieverklaringen</li>
1844</ul>
1845
1846
1847
1848<p>Een goed systeem automatiseert een groot deel van dit proces. Denk aan het combineren van databronnen, het consolideren van meerdere BV’s en het opstellen van een business-P&amp;L, balans en cashflow (meestal anders dan in het boekhoudsysteem). Zelfs de maandafsluiting 
1848kan grotendeels, met behulp van AI, geautomatiseerd worden.</p>
1849
1850
1851
1852<p>Door deze stap goed in te richten, leg je de basis voor stap 3: het daadwerkelijk toepassen van AI binnen je businesscontrolprocessen.</p>
1853
1854
1855
1856<p class="has-medium-font-size"><strong>Stap 3 - Pas AI slim en selectief toe</strong></p>
1857
1858
1859
1860<p>Sommige mensen zien AI als een wondertool: stel een complexe vraag, en het systeem komt vanzelf met een goed antwoord. In de praktijk werkt dat alleen bij eenvoudige taken. Voor complexere businesscontrolactiviteiten is een meer doordachte aanpak nodig.</p>
1861
1862
1863
1864<p>AI is niet de juiste oplossing voor elk probleem. Breng daarom eerst het proces van de betreffende financetaak in kaart. Je zult merken dat sommige stappen exact en rekenkundig zijn - die kun je beter met traditionele logica automatiseren. Andere stappen vereisen informatie en context die niet in systemen beschikbaar zijn; daar heb je een human-in-the-loop nodig.</p>
1865
1866
1867
1868<p>Dan blijven er stappen over waar AI wél de beste oplossing biedt. Maar ook dan is het meestal niet effectief om met één enkele prompt het hele probleem op te lossen. Vaak bereik je een hogere kwaliteit en betrouwbaarheid door een taak op te delen in meerdere eenvoudigere prompts, bijvoorbeeld:</p>
1869
1870
1871
1872<ol start="1" class="wp-block-list">
1873<li><strong>Controleer de vraag:</strong> Is de vraag duidelijk? Zo niet, vraag om toelichting.</li>
1874
1875
1876
1877<li><strong>Bepaal de informatiebehoefte:</strong> Welke data is nodig om te kunnen antwoorden?</li>
1878
1879
1880
1881<li><strong>Beantwoord de vraag:</strong> Gebruik de beschikbare data om een antwoord te formuleren.</li>
1882
1883
1884
1885<li><strong>Controleer het resultaat:</strong> Controleer het antwoord op consistentie en hallucinaties.</li>
1886</ol>
1887
1888
1889
1890<p>Door AI op deze manier in te zetten, verhoog je de betrouwbaarheid, controleerbaarheid en consistentie aanzienlijk.</p>
1891
1892
1893
1894<p class="has-medium-font-size"><strong>Hoe pas je dit toe in de praktijk?</strong></p>
1895
1896
1897
1898<p>Met deze drie stappen weet je wat er nodig is - maar hoe breng je dit nu in de praktijk? Er zijn tegenwoordig diverse betaalbare generieke data-, integratie- en AI-oplossingen beschikbaar. Daarmee kun je in principe alles zelf opzetten, bijvoorbeeld door Power BI, n8n en OpenAI te combineren. Hoewel deze generieke tools dankzij hun schaal relatief goedkoop zijn, lopen de project- en onderhoudskosten dan snel op en kost het veel tijd om alles goed werkend te krijgen en te houden.</p>
1899
1900
1901
1902<p>Een veel snellere, eenvoudigere en uiteindelijk goedkopere aanpak is het kiezen voor een gespecialiseerde oplossing. Deze tools zijn door hun kleinere schaal in aanschaf vaak duurder dan generieke alternatieven, maar dat verdien je gemakkelijk terug doordat je nauwelijks opstart- en onderhoudskosten hebt. Daarnaast biedt een gespecialiseerde tool veel meer toegevoegde waarde voor de business controller dan je zelf zou kunnen realiseren met generieke tools.</p>
1903
1904
1905
1906<p class="has-medium-font-size"><strong>De rol van Smartbooks.ai</strong></p>
1907
1908
1909
1910<p><strong>Smartbooks.ai</strong> is een gespecialiseerde tool die zich volledig richt op stap 2 en 3: het structureren, controleren en verrijken van data, en het slim toepassen van AI binnen finance. Zo helpen wij finance teams om AI als structureel onderdeel van hun businesscontrolproces te gebruiken.</p>
1911
1912
1913
1914<p>Wil je meer weten over hoe wij hieraan invulling geven, plan dan een afspraak met ons in - we beantwoorden graag al je vragen.</p>
1915
1916
1917
1918<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns3076_118aba-78"></div>
1919
1920
1921
1922<p></p>`,dR=`---json
1923{
1924  "title": "Lernen Sie Alex kennen, den KI-Business-Controller",
1925  "slug": "alex-virtuele-business-controller",
1926  "metaTitle": "Alex: der KI-Business-Controller für Finance",
1927  "date": "2025-12-12 09:38:41",
1928  "category": "Videos",
1929  "tags": [
1930    "KI",
1931    "Alex",
1932    "Analyse",
1933    "Best Practices",
1934    "Business Controller",
1935    "Konsolidierung",
1936    "Monatsabschluss",
1937    "Reporting"
1938  ],
1939  "excerpt": "Alex, der KI-Business-Controller, unterstützt Ihr Finance-Team bei vielen Prozessen — von Analyse und Reporting bis Monatsabschluss.",
1940  "originalUrl": "https://smartbooks.ai/videos/alex-virtuele-business-controller/",
1941  "meta": null
1942}
1943---
1944<p>
1944Sehen Sie sich dieses 3-minütige Video an und lernen Sie Alex kennen, den KI-Business-Controller.</p>
1945
1946
1947
1948<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2023/11/Alex-introductie-video.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Alex%20Introductie-Kort-Snel.mp4"></video></figure>`,cR=`---json
1949{
1950  "title": "Meet Alex, the virtual business controller",
1951  "slug": "alex-virtual-business-controller",
1952  "metaTitle": "Alex: the virtual business controller for finance",
1953  "date": "",
1954  "category": "Videos",
1955  "tags": [
1956    "AI",
1957    "Automation",
1958    "Financial Planning",
1959    "Business Control"
1960  ],
1961  "excerpt": "Alex, the virtual business controller, can assist with many of your financial processes.",
1962  "originalUrl": "",
1963  "meta": {
1964    "type_bedrijf": "Fintech",
1965    "naam_medewerker": "Alex",
1966    "functie_medewerker": "Virtual Business Controller"
1967  }
1968}
1969---
1970<p>Watch this 3-minute video and meet Alex, the virtual business controller</p>
1971
1972
1973
1974<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
1975<iframe title="Meet Alex" width="500" height="281" src="https://www.youtube.com/embed/55m5WfLlsQY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
1976</div></figure>`,uR=`---json
1977{
1978  "title": "Maak kennis met Alex, de virtuele business controller",
1979  "slug": "alex-virtuele-business-controller",
1980  "order": 3,
1981  "metaTitle": "Alex: de virtuele business controller voor finance",
1982  "date": "2025-12-12 09:38:41",
1983  "category": "Videos",
1984  "tags": [
1985    "AI",
1986    "Alex",
1987    "Analyseren",
1988    "Best Practices",
1989    "Business Controller",
1990    "Consolideren",
1991    "Maandafsluiting",
1992    "Rapporteren"
1993  ],
1994  "excerpt": "Alex de virtuele business controller kan helpen bij veel van jullie financiële processen.",
1995  "originalUrl": "https://smartbooks.ai/videos/alex-virtuele-business-controller/",
1996  "meta": null,
1997  "enSlug": "alex-virtual-business-controller"
1998}
1999---
2000<p>Bekijk deze video van 3 minuten en maak kennis met Alex, de virtuele business controller</p>
2001
2002
2003
2004<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2023/11/Alex-introductie-video.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Alex%20Introductie-Kort-Snel.mp4"></video></figure>
2005
2006
2007
2008
2009<div class="wp-block-kadence-column kadence-column3146_fd32a2-78"><div class="kt-inside-inner-col">
2010<figure class="wp-block-kadence-image kb-image3146_bc9486-3a size-full kb-image-is-ratio-size"><div class="kb-is-ratio-image kb-image-ratio-land43"><img src="https://smartbooks.ai/wp-content/uploads/2023/12/shutterstock_1919479694.jpg" alt="" class="kb-img wp-image-1108"/></div></figure>
2011</div></div>
2012
2013
2014
2015<div class="wp-block-kadence-column kadence-column3146_b6b0d9-a1"><div class="kt-inside-inner-col">
2016<p class="has-medium-font-size">Bekijk het on-demand webinar:</p>
2017
2018
2019
2020<h2 class="kt-adv-heading3146_432ac7-5a wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading3146_432ac7-5a">'Rapporteren, plannen en consolideren in 20% van de tijd'</h2>
2021
2022
2023
2024<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns3146_056f4e-27"></div>
2025</div></div>`,hR=`---json
2026{
2027  "title": "Anove",
2028  "slug": "anove",
2029  "metaTitle": "Kundenreferenz Anove: Finanzierungsstrategie mit Szenarioplanung",
2030  "date": "",
2031  "category": "Customer Stories",
2032  "tags": [
2033    "SaaS-Financials",
2034    "Finanzierungsstrategie",
2035    "Smartbooks Planung"
2036  ],
2037  "excerpt": "Das SaaS-Planungsmodul von Smartbooks hilft Anove, eine belastbare Finanzierungsstrategie mit einer verlässlichen Mehrjahresperspektive zu formulieren.",
2038  "originalUrl": "",
2039  "meta": {
2040    "type_bedrijf": "Cybersecurity & Governance",
2041    "naam_medewerker": "Yuri Bobbert",
2042    "functie_medewerker": "CEO & Co-Founder, Anove",
2043    "logo_bedrijf": "anove-logo.png"
2044  }
2045}
2046---
2047<p>Das SaaS-Planungsmodul von Smartbooks hat uns geholfen, unsere Finanzierungsstrategie zu definieren. Wenn man mit den verschiedenen Treiber
2047n experimentiert, sieht man sofort die Auswirkungen auf unseren kurz- und langfristigen Finanzierungsbedarf. So können wir unseren Stakeholdern eine verlässlichere und strukturiertere Mehrjahresperspektive geben.</p>`,gR=`---json
2048{
2049  "title": "Anove",
2050  "metaTitle": "Anove Customer Story: Financing Strategy with Scenario Planning",
2051  "slug": "anove",
2052  "date": "",
2053  "category": "Customer Stories",
2054  "tags": [
2055    "SaaS Financials",
2056    "Financing Strategy",
2057    "Smartbooks Planning"
2058  ],
2059  "excerpt": "Smartbooks' SaaS planning module helped us define our financing strategy with a reliable multi-year outlook for stakeholders.",
2060  "originalUrl": "",
2061  "meta": {
2062    "type_bedrijf": "Cybersecurity & Governance",
2063    "naam_medewerker": "Management",
2064    "functie_medewerker": "Finance",
2065    "logo_bedrijf": "anove-logo.png"
2066  }
2067}
2068---
2069<p>Smartbooks' SaaS planning module has helped us define our financing strategy. By experimenting with the various drivers, you immediately see the impact on our short- and long-term financing needs. This allows us to provide our stakeholders with a more reliable and organized multi-year outlook.</p>`,mR=`---json
2070{
2071  "title": "Anove",
2072  "metaTitle": "Klantcase Anove: financieringsstrategie met scenarioplanning",
2073  "slug": "anove",
2074  "order": 36,
2075  "date": "2024-03-06 16:08:08",
2076  "category": "Customer Stories",
2077  "tags": [],
2078  "excerpt": "De SAAS planningsmodule van Smartbooks hielp ons bij het bepalen van onze financieringsstrategie met een betrouwbaar meerjarenbeeld.",
2079  "originalUrl": "https://smartbooks.ai/klantervaringen/anove/",
2080  "meta": {
2081    "type_bedrijf": "Cybersecurity software",
2082    "naam_medewerker": "Yuri Bobbert",
2083    "functie_medewerker": "CEO Co-founder",
2084    "logo_bedrijf": "1486"
2085  },
2086  "enSlug": "anove"
2087}
2088---
2089<p>De SAAS planningsmodule van Smartbooks heeft ons geholpen bij het bepalen van onze financiering strategie. Door met de verschillende drivers te experimenteren zie je direct wat dit voor invloed heeft op onze korte en lange termijn financieringsbehoefte. Hiermee geven we bij onze stakeholders een betrouwbaarder en overzichtelijk meerjarenbeeld.</p>`,pR=`---json
2090{
2091  "title": "Modernisierung der Finance-Funktion mit KI",
2092  "slug": "artificial-intelligence",
2093  "metaTitle": "Finance-Funktion mit KI modernisieren",
2094  "date": "2023-12-14 13:33:41",
2095  "category": "Articles",
2096  "tags": [],
2097  "excerpt": "Die Finance-Funktion mit KI modernisieren: Wie KI Ihre Finanzplanung und -analyse schneller und präziser macht.",
2098  "originalUrl": "https://smartbooks.ai/artikelen/artificial-intelligence/",
2099  "meta": null
2100}
2101---
2102<p><strong>Die Finance-Funktion mit KI modernisieren</strong></p>
2103
2104<p>In dieser sich schnell verändernden Welt revolutioniert Künstliche Intelligenz (KI), wie Organisationen ihre Financial Planning &amp; Analysis (FP&amp;A) betreiben. Mit KI gewinnen Unternehmen tiefere Einblicke, verbessern ihre Entscheidungen und machen ihren Betrieb effizienter. In diesem Beitrag zeigen wir, wie KI FP&amp;A verändert — mit zwei praktischen Beispielen.</p>
2105
2106<h3>KI in FP&amp;A: ein Gamechanger</h3>
2107<p>KI hebt Finanzplanung und -analyse auf ein neues Niveau, indem Routineaufgaben automatisiert, riesige Datenmengen verarbeitet und Finanzergebnisse präzise prognostiziert werden. Finance-Profis können sich stärker auf strategische Aufgaben und Wertschöpfung konzentrieren — ein Wettbewerbsvorteil. Die Integration von KI in FP&amp;A-Prozesse ermöglicht Echtzeit-Analysen, prädiktive Modelle und Szenarien — die Finanzplanung wird schneller und flexibler gegenüber Marktveränderungen.</p>
2108
2109<figure class="wp-block-image aligncenter size-full"><img src="https://smartbooks.ai/wp-content/uploads/2023/11/smartbooks-07_Budget-in-20pct-of-time.jpg" alt="KI in Finanzplanung und Analyse" class="wp-image-2028"/></figure>
2110
2111<h3>Beispiel 1: Prädiktives Cashflow-Management</h3>
2112<p>KI-Algorithmen analysieren historische Cashflow-Daten und berücksichtigen Variablen wie Saisonalität, Zahlungszyklen und wirtschaftliche Rahmenbedingungen. Aus den Prognosen künftiger Zahlungsströme lassen sich fundiertere Entscheidungen zu Investitionen, Ausgaben und Liquidität treffen. Dieser proaktive Ansatz sichert Kassenreserven und finanzielle Stabilität.</p>
2113
2114<h3>
2114Beispiel 2: Automatisierte Budgetierung</h3>
2115<p>KI kann auch für automatisierte Budgetierung eingesetzt werden. KI-Tools analysieren historische Finanzdaten und erstellen darauf präzise Prognosen. Externe Faktoren — Konjunkturindikatoren, Branchentrends — werden einbezogen. Automatisierte Budgetierung reduziert manuelle Arbeit, verbessert die Genauigkeit und lässt Unternehmen schneller auf erwartete Ergebnisse reagieren.</p>
2116
2117<h3>Beispiel 3: Analyse der Monatsergebnisse</h3>
2118<p>KI unterstützt die Analyse monatlicher Finanzergebnisse. Durch Scannen der GuV kann KI zentrale Abweichungen gegenüber Vormonaten oder Budget identifizieren, prozentuale Veränderungen berechnen und mögliche Ursachen benennen. Menschliche Kontrolle bleibt essenziell, um sicherzustellen, dass Analysen präzise sind und Stakeholdern echten Mehrwert liefern.</p>
2119
2120<h3>Fazit</h3>
2121<p>Die Integration von KI in FP&amp;A ist mehr als ein Trend — sie ist eine strategische Notwendigkeit für Unternehmen, die wachsen und resilient bleiben wollen. Wer KI nutzt, prognostiziert genauer, managt Risiken besser und verbessert seine Entscheidungsprozesse — die Basis für nachhaltigen Erfolg.</p>
2122
2123<p>Mit Smartbooks integrieren Unternehmen KI-Modelle und -Analysen nahtlos in ihre Finanzprozesse.</p>`,fR=`---json
2124{
2125  "title": "Modernizing the Finance Function with AI",
2126  "metaTitle": "Modernizing the Finance Function with AI",
2127  "slug": "artificial-intelligence",
2128  "date": "2023-12-14 13:33:41",
2129  "category": "Articles",
2130  "tags": [],
2131  "excerpt": "Modernizing the finance function with AI: how AI makes your financial planning and analysis faster and more accurate.",
2132  "originalUrl": "https://smartbooks.ai/artikelen/artificial-intelligence/",
2133  "meta": null
2134}
2135---
2136<p><strong>Modernizing the finance function with AI</strong></p>
2137
2138
2139
2140<p>In this rapidly changing world, Artificial Intelligence (AI) is revolutionizing how organizations handle their financial planning and analysis (FP&amp;A). With the power of AI, companies can gain deeper insights, improve their decision-making, and make their operations more efficient. In this blog, we discuss how AI is changing FP&amp;A and explore two practical examples of its application.</p>
2141
2142
2143
2144<h3 class="wp-block-heading">AI in FP&amp;A: A Game Changer</h3>
2145
2146
2147
2148<p>AI takes financial planning and analysis to a higher level by automating routine tasks, processing enormous amounts of data, and forecasting financial results with a high degree of accuracy. This allows financial professionals to focus on strategic tasks and value creation, providing a competitive advantage. By integrating AI into FP&amp;A processes, real-time analysis, predictive modeling, and scenario analysis become possible, making financial planning faster and more flexible in responding to market changes.</p>
2149
2150
2151
2152<figure class="wp-block-image aligncenter size-full"><img src="https://smartbooks.ai/wp-content/uploads/2023/11/smartbooks-07_Budget-in-20pct-of-time.jpg" alt="" class="wp-image-2028"/></figure>
2153
2154
2155
2156<h3 class="wp-block-heading">Example 1: Predictive Cash Flow Management</h3>
2157
2158
2159
2160<p>A practical example of AI in FP&amp;A is predictive cash flow management. AI algorithms can analyze historical cash flow data, taking into account variables such as seasonal trends, payment cycles, and economic conditions. By forecasting future cash flows, companies can make better-informed decisions regarding investments, expenses, and liquidity management. This proactive approach helps companies optimize cash reserves and ensure their financial stability.</p>
2161
2162
2163
2164<h3 class="wp-block-heading">Example 2: Automated Budgeting</h3>
2165
2166
2167
2168<p>AI can also be deployed for automated budgeting. AI tools can analyze historical financial data and generate accurate budget forecasts based on that data. External factors, such as economic indicators and industry trends, are also taken into account. This provides a more complete picture of an organization's financial health. Automated budgeting reduces manual work, improves accuracy, and enables companies to quickly adjust their strategies based on expected financial performance.</p>
2169
2170
2171
2172<h3 class="wp-block-heading">Example 3: Analysis of Monthly Results</h3>
2173
2174
2175
2176<p>AI can also assist in analyzing monthly financial results. By scanning profit and loss statements, AI can identify the primary variances compared to previous months or budgets. It can also calculate percentage changes and suggest potential causes for these variances. While AI can take a lot of work off your hands here, human oversight is essential to ensure that the analyses are accurate and truly add value for stakeholders.</p>
2177
2178
2179
2180<h3 class="wp-block-heading">Conclusion</h3>
2181
2182
2183
2184<p>The integration of AI in FP&amp;A is not just a trend but a strategic necessity for companies that want to grow and remain resilient in a competitive market. By leveraging AI, companies can produce more accurate financial forecasts, manage risks better, and improve their decision-making processes. Ultimately, this contributes to sustainable success.</p>
2185
2186
2187
2188<p>With Smartbooks, companies can seamlessly integrate AI models and analyses into their financial processes to benefit from the advantages of modern technology.</p>
2189
2190
2191
2192<p></p>`,bR=`---json
2193{
2194  "title": "Modernisering van de Finance functie met AI",
2195  "metaTitle": "Finance functie moderniseren met AI",
2196  "slug": "artificial-intelligence",
2197  "order": 38,
2198  "date": "2023-12-14 13:33:41",
2199  "category": "Articles",
2200  "tags": [],
2201  "excerpt": "De finance functie moderniseren met AI: hoe AI je financiële planning en analyse sneller en nauwkeuriger maakt.",
2202  "originalUrl": "https://smartbooks.ai/artikelen/artificial-intelligence/",
2203  "meta": null,
2204  "enSlug": "artificial-intelligence"
2205}
2206---
2207<p><strong>De finance functie moderniseren met AI</strong></p>
2208
2209
2210
2211<p>In deze snel veranderende wereld zorgt Artificial Intelligence (AI) voor een revolutie in hoe organisaties hun financiële planning en analyse (FP&amp;A) uitvoeren. Met de kracht van AI kunnen bedrijven diepere inzichten verwerven, hun besluitvorming verbeteren en hu
2211n operaties efficiënter maken. In deze blog bespreken we hoe AI FP&amp;A verandert en verkennen we twee praktische voorbeelden van de toepassing ervan.</p>
2212
2213
2214
2215<h3 class="wp-block-heading">AI in FP&amp;A: Een Game Changer</h3>
2216
2217
2218
2219<p>AI tilt financiële planning en analyse naar een hoger niveau door routinetaken te automatiseren, enorme hoeveelheden data te verwerken en financiële resultaten met een hoge mate van nauwkeurigheid te voorspellen. Hierdoor kunnen financiële professionals zich richten op strategische taken en waardecreatie, wat een concurrentievoordeel oplevert. Door AI te integreren in FP&amp;A-processen, worden real-time analyses, voorspellende modellen en scenarioanalyses mogelijk, waardoor de financiële planning sneller en flexibeler wordt om te reageren op marktveranderingen.</p>
2220
2221
2222
2223<figure class="wp-block-image aligncenter size-full"><img src="https://smartbooks.ai/wp-content/uploads/2023/11/smartbooks-07_Budget-in-20pct-of-time.jpg" alt="" class="wp-image-2028"/></figure>
2224
2225
2226
2227<h3 class="wp-block-heading">Voorbeeld 1: Voorspellend Cashflowbeheer</h3>
2228
2229
2230
2231<p>Een praktisch voorbeeld van AI in FP&amp;A is voorspellend cashflowbeheer. AI-algoritmes kunnen historische cashflowgegevens analyseren, rekening houdend met variabelen zoals seizoensgebonden trends, betalingscycli en economische omstandigheden. Door toekomstige kasstromen te voorspellen, kunnen bedrijven beter onderbouwde beslissingen nemen over investeringen, uitgaven en het beheer van liquiditeit. Deze proactieve aanpak helpt bedrijven om kasreserves te optimaliseren en hun financiële stabiliteit te waarborgen.</p>
2232
2233
2234
2235<h3 class="wp-block-heading">Voorbeeld 2: Geautomatiseerde Budgettering</h3>
2236
2237
2238
2239<p>AI kan ook worden ingezet voor geautomatiseerde budgettering. AI-tools kunnen historische financiële gegevens analyseren en op basis daarvan nauwkeurige budgetprognoses maken. Hierbij worden ook externe factoren, zoals economische indicatoren en trends in de sector, meegenomen. Dit zorgt voor een completer beeld van de financiële gezondheid van een organisatie. Geautomatiseerde budgettering vermindert handmatig werk, verbetert de nauwkeurigheid en stelt bedrijven in staat hun strategieën snel aan te passen op basis van verwachte financiële prestaties.</p>
2240
2241
2242
2243<h3 class="wp-block-heading">Voorbeeld 3: Analyse van Maandelijkse Resultaten</h3>
2244
2245
2246
2247<p>AI kan ook helpen bij het analyseren van maandelijkse financiële resultaten. Door winst- en verliesrekeningen te scannen, kan AI de belangrijkste afwijkingen ten opzichte van vorige maanden of budgetten identificeren. Het kan ook de procentuele veranderingen berekenen en mogelijke oorzaken voor de afwijkingen aandragen. Hoewel AI hierbij veel werk uit handen kan nemen, is menselijke controle essentieel om te waarborgen dat de analyses accuraat zijn en daadwerkelijk waarde toevoegen voor de stakeholders.</p>
2248
2249
2250
2251<h3 class="wp-block-heading">Conclusie</h3>
2252
2253
2254
2255<p>De integratie van AI in FP&amp;A is niet alleen een trend, maar een strategische noodzaak voor bedrijven die willen groeien en veerkrachtig willen blijven in een competitieve markt. Door AI te benutten, kunnen bedrijven nauwkeurigere financiële voorspellingen doen, beter omgaan met risico’s en hun besluitvormingsprocessen verbeteren. Dit draagt uiteindelijk bij aan duurzaam succes.</p>
2256
2257
2258
2259<p>Met Smartbooks kunnen bedrijven AI-modellen en -analyses naadloos integreren in hun financiële processen om zo te profiteren van de voordelen van moderne technologie.</p>
2260
2261
2262
2263<p></p>`,vR=`---json
2264{
2265  "title": "Best Practices im Finanzreporting",
2266  "slug": "best-practices-in-rapportages",
2267  "metaTitle": "Finanzreporting: Best Practices und KPIs",
2268  "date": "2023-12-14 13:33:15",
2269  "category": "Articles",
2270  "tags": [],
2271  "excerpt": "Best Practices im Finanzreporting: welche Zahlen und Kennzahlen zeigen, ob Ihr Unternehmen auf Kurs ist oder wo Sie eingreifen sollten.",
2272  "originalUrl": "https://smartbooks.ai/artikelen/best-practices-in-rapportages/",
2273  "meta": null
2274}
2275---
2276<p>Best Practices im Finanzreporting beginnen mit den richtigen Zahlen und Kennzahlen. Auf welche wollen Sie regelmäßig schauen, um zu wissen, ob das Unternehmen auf Kurs ist oder wo Sie eingreifen müssen? Auf Basis unserer Erfahrung wollen Sie u. a. folgende Informationen schnell und verlässlich einsehen:</p>
2277
2278<ul>
2279<li>Wie hoch ist das EBITDA heute — und die Erwartung zum Jahresende?</li>
2280<li>
2280Wie hoch ist das EBITDA als Prozentsatz vom Umsatz?</li>
2281<li>Wie stark wächst der Umsatz gegenüber dem Vorjahr?</li>
2282<li>Wie hoch ist Ihr DSO (wie viele Umsatztage bei Debitoren offen)?</li>
2283<li>Wie hoch ist Ihr DIO (wie viele Monate Bestand liegt im Lager)?</li>
2284<li>Wie hoch ist Ihr DPO (wie schnell bezahlen Sie Ihre Kreditoren im Schnitt)?</li>
2285<li>Ist der Kontostand ausreichend — oder brauchen Sie in der nächsten Periode Kredit?</li>
2286<li>Wie viel Umsatzsteuer müssen Sie periodisch abführen, ist sie auf dem Konto verfügbar?</li>
2287<li>Wie hoch ist die Verschuldung zum Jahresende, und wann ist sie getilgt?</li>
2288<li>Wie viel Dividende können Sie dieses Jahr ausschütten — und wie viel in den Folgejahren?</li>
2289<li>Wie viel Ertragsteuer wird dieses Jahr fällig (inkl. Verlustvortrag)?</li>
2290<li>Wissen Sie, wie viel Ihr Unternehmen wert ist (auf Basis Ihres 3-Jahres-Plans)?</li>
2291<li>Wissen Sie, welche Umsätze und Gewinne Sie in den nächsten 3 Jahren erwarten?</li>
2292</ul>
2293
2294<p>Smartbooks zieht automatisch alle relevanten Daten aus Ihrer Buchhaltung und stellt sie in klaren Berichten und Übersichten dar. Alle Erkenntnisse sind jederzeit aktuell verfügbar.</p>`,kR=`---json
2295{
2296  "title": "Best practices in reporting",
2297  "metaTitle": "Financial Reporting: Best Practices and KPIs",
2298  "slug": "best-practices-in-reporting",
2299  "date": "",
2300  "category": "Articles",
2301  "tags": [
2302    "reporting",
2303    "KPIs",
2304    "financial management",
2305    "EBITDA",
2306    "business intelligence"
2307  ],
2308  "excerpt": "Financial reporting best practices: which figures and ratios reveal whether your company is on track or needs intervention.",
2309  "originalUrl": ""
2310}
2311---
2312<p>Financial reporting best practices start with the right figures and ratios. Which should you monitor periodically to know if your company is on track or if intervention is required? Based on our experience, you would want quick and reliable access to the following information:</p>
2313
2314<ul>
2315<li>Current EBITDA and the year-end forecast</li>
2316
2317<li>EBITDA as a percentage of revenue</li>
2318
2319<li>Year-on-year revenue growth</li>
2320
2321<li>DSO (Days Sales Outstanding: how many days of revenue are outstanding in accounts receivable)</li>
2322
2323<li>DIO (Days Inventory Outstanding: how many months of stock do you have on hand)</li>
2324
2325<li>DPO (Days Payable Outstanding: how quickly you pay your creditors on average)</li>
2326
2327<li>Whether you have sufficient bank balances or require credit in the coming period</li>
2328
2329<li>How much VAT you must remit periodically and whether that cash is available</li>
2330
2331<li>The total debt at year-end and the scheduled repayment timeline</li>
2332
2333<li>How much dividend you can distribute this year and the projections for following years</li>
2334
2335<li>Expected corporate income tax for the current year (including loss carry-forwards)</li>
2336
2337<li>The valuation of your company (based on your 3-year plan)</li>
2338
2339<li>Projected revenue and profit for the next 3 years</li>
2340</ul>
2341
2342<p>Smartbooks automatically extracts all relevant data from your accounting system and presents it in simple reports and overviews. All insights are always up-to-date and available.</p>`,wR=`---json
2343{
2344  "title": "Best practices in rapportages",
2345  "metaTitle": "Financiële rapportage: best practices en KPI's",
2346  "slug": "best-practices-in-rapportages",
2347  "order": 39,
2348  "date": "2023-12-14 13:33:15",
2349  "category": "Articles",
2350  "tags": [],
2351  "excerpt": "Financiële rapportage best practices: welke getallen en ratio’s laten zien of je bedrijf op koers ligt of ingrijpen nodig is.",
2352  "originalUrl": "https://smartbooks.ai/artikelen/best-practices-in-rapportages/",
2353  "meta": null,
2354  "enSlug": "best-practices-in-reporting"
2355}
2356---
2357<p>Financiële rapportage best practices beginnen bij de juiste getallen en ratio’s. Naar welke wil je periodiek kijken om te weten of het bedrijf op koers ligt of dat je ergens moet ingrijpen? Gebaseerd op onze ervaring zou je o.a. de volgende informatie snel en betrouwbaar willen inzien:</p>
2358
2359
2360
2361<ul>
2362<li>Wat is de EBITDA vandaag en wat is de verwachting voor einde jaar</li>
2363
2364
2365
2366<li>Wat is de EBITDA als percentage van de omzet</li>
2367
2368
2369
2370<li>Wat is de groei van de omzet ten opzichte van het vorige jaar</li>
2371
2372
2373
2374<li>Wat is je DSO (hoeveel dagen omzet heb je bij debiteuren uitstaan)</li>
2375
2376
2377
2378<li>Wat is je DIO (voor hoeveel maanden heb je in voorraad)</li>
2379
2380
2381
2382<li>Wat is je DPO (hoe snel betaal je gemiddeld je crediteuren)</li>
2383
2384
2385
2386<li>Weet je of je voldoende banksaldo hebt, of heb je krediet nodig de komende periode</li>
2387
2388
2389
2390<li>Hoeveel BTW moet je periodiek afdragen en heb je dat beschikbaar op de bank</li>
2391
2392
2393
2394<li>Hoeveel schuld is er aan het einde van het jaar en weet je wanneer die is afgelost</li>
2395
2396
2397
2398<li>Hoeveel dividend kun je dit jaar uitkeren en hoeveel zal dat in de volgende jaren zijn</li>
2399
2400
2401
2402<li>Hoeveel winstbelasting moet je dit jaar gaan betalen (inclusief verliescompensatie)</li>
2403
2404
2405
2406<li>Weet je hoeveel je bedrijf waard is (op basis van je 3 jaren plan)</li>
2407
2408
2409
2410<li>Weet je hoeveel omzet en winst je de komende 3 jaren gaat maken</li>
2411</ul>
2412
2413
2414
2415<p>Onze <a href="/rapportage-software">financiële rapportage software</a> haalt automatisch alle relevante gegevens uit je boekhouding en presenteert deze in eenvoudige rapportages en overzichten. Alle inzichten zijn altijd up-to-date en beschikbaar.</p>`,xR=`---json
2416{
2417  "title": "Buchhaltung als Record-to-Report-Prozess",
2418  "slug": "boekhouden-als-record-to-report-proces",
2419  "metaTitle": "Record-to-Report-Prozess: Buchhaltung end-to-end",
2420  "date": "2024-09-30 14:35:51",
2421  "category": "Articles",
2422  "tags": [],
2423  "excerpt": "Record-to-Report: Gestalten Sie Ihre Buchhaltung als End-to-End-Prozess für schnelle, verlässliche Monatsberichte.",
2424  "originalUrl": "https://smartbooks.ai/artikelen/boekhouden-als-record-to-report-proces/",
2425  "meta": null
2426}
2427---
2428<h3>Gestalten Sie Ihren Buchhaltungsprozess als End-to-End-Prozess für schnelle und verlässliche Monatsberichte.</h3>
2429
2430<p>Die Idee hinter einem End-to-End- (E2E-) Prozess ist ein vollständiger Blick auf die Unternehmensergebnisse — mit Fokus auf jedem Schritt von Anfang bis Ende. Der Ansatz steigert Effizienz, verbessert Ergebnisse und sorgt für Zielausrichtung. Wesentliche Vorteile:</p>
2431
2432<ul>
2433<li><strong>Gestraffter Betrieb</strong>: Überflüssige Schritte entfallen; Fokus auf wertschöpfende Aktivitäten senkt Kosten und erhöht Produktivität.</li>
2434<li><strong>Mehr Transparenz</strong>: Ineffizienzen, Engpässe und Verbesserungspotenziale werden sichtbar.</li>
2435<li><strong>Bessere Zusammenarbeit</strong>: Inputs, Outputs und Übergaben zwischen Abteilungen sind klar definiert.</li>
2436</ul>
2437
2438<p>Ein spezifischer Best-Practice-E2E-Prozess ist Record-to-Report (R2R). Er zielt auf die Optimierung buchhalterischer Aktivitäten für schnelle, verlässliche und aussagekräftige Finanzberichte.</p>
2439
2440<h3>Den Record-to-Report-Prozess entwerfen</h3>
2441
2442<p>Fünf zentrale Schritte eines R2R-Prozesses:</p>
2443
2444<ol>
2445<li><strong>Finanztransaktionen erfassen</strong>: Alle Transaktionen in einem modernen Finanz- oder ERP-System festhalten — idealerweise als SaaS, integrierbar mit anderer Software. Möglichst ein Kontenplan und standardisierte Verfahren für alle Entitäten. Mit dem Finance-Team abstimmen, wie Transaktionen zeitgerecht und präzise gebucht werden.</li>
2446<li><strong>Monatliche Aktivitäten definieren</strong>: Alle nötigen Daten aktuell und regelkonform bereitstellen. Finanzdaten mit KPIs kombinieren — Umsatz pro Land, Marge je Produktgruppe usw.</li>
2447<li><strong>Intercompany-Transaktionen verarbeiten</strong>: Interne Kosten und Erträge auf separaten Konten führen. Korrekturen im System vornehmen — eine Wahrheit für alle Transaktionen.</li>
2448<li><strong>Finanzergebnisse analysieren</strong>: Vergleich mit Budget/Forecast, Ursachenanalyse bei Abweichungen.</li>
2449<li><strong>Klar berichten</strong>: Tabellen, Grafiken und KPIs für einen deutlichen Status. Unterschiedliche Berichtsformate für interne und externe Nutzung.</li>
2450</ol>
2451
2452<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/09/r2r-1024x683.png" alt="Record-to-Report Prozess" class="wp-image-2500"/></figure>
2453
2454<h3>Voraussetzungen für den R2R-Prozess</h3>
2455
2456<p>Erfolg beginnt mit einem starken Fundament: einem kompetenten Team. Know-how und Erfahrung sind essenziell für einen verlässlichen Buchhaltungsprozess.</p>
2457
2458<p>Zusätzlich unverzichtbar: ein modernes Finanzsystem. Diese Technologie ist das Rückgrat des R2R-Prozesses und liefert Werkzeuge für solide Finanzoperationen, Analyse und Reporting — für Präzision, Effizienz und fundierte Entscheidungen.</p>
2459
2460<p>Genauso wichtig: Datenqualität. Präzise, zeitnahe und relevante Daten sind lebenswichtig. Zu wenige oder falsche Daten frustrieren den Prozess; zu viele Daten erzeugen unnötigen Aufwand und suggerieren Vollständigkeit ohne echten Mehrwert. Fokus daher auf Top-KPIs und maßgeschneiderte Berichte.</p>
2461
2462<h3>Fazit</h3>
2463
2464<p>Ein gut gestalteter Record-to-Report-Prozess ist essenziell für jede Finance-Abteilung. Er verlangt kompetente Menschen, moderne Technologie und hochwertige Daten. Ihren Reifegrad bewerten Sie mit unserer Best-Practice-Guide zum Download.</p>
2465
2466<p>Mehr erfahren? Sehen Sie unser Webinar oder die kurze Demo zum Monatsabschluss: <a href="/de/videos/maandafsluiting-demo">Monatsabschluss-Demo</a>.</p>`,yR=`---json
2467{
2468  "title": "Accounting as a Record-to-Report Process",
2469  "metaTitle": "Record-to-Report Process: Accounting End-to-End",
2470  "slug": "design-your-bookkeeping-process-as-and-end-2-end-process",
2471  "date": "",
2472  "category": "Articles",
2473  "tags": [
2474    "Accounting",
2475    "R2R",
2476    "Financial Reporting",
2477    "Process Optimization"
2478  ],
2479  "excerpt": "Record-to-Report: discover how the R2R process forms the backbone of modern financial administration, from transaction to reporting.",
2480  "originalUrl": "",
2481  "meta": {
2482    "type_bedrijf": "Financial Software",
2483    "naam_medewerker": "Internal Editor",
2484    "functie_medewerker": "Financial Specialist",
2485    "logo_bedrijf": "logo.svg"
2486  }
2487}
2488---
2489<h3 class="text-h3">What is Record-to-Report (R2R)?</h3><p>The Record-to-Report process encompasses all steps required to collect, process, and present financial data. It is the bridge between daily bookkeeping and the strategic insights needed to steer a business. By approaching accounting as an integrated R2R process, organizations gain greater control over their financial reporting and compliance.</p><h3 class="text-h3">The Cycle of Financial Reliability</h3><p>A typical R2R process starts with recording transactions, followed by the peri
2489od-end close, and concludes with the generation of financial statements and analysis. Modern SaaS solutions automate these steps, reducing manual errors and accelerating the closing cycle, allowing finance teams to focus on value-added advisory roles rather than data entry.</p>`,jR=`---json
2490{
2491  "title": "Boekhouden als Record to Report-proces",
2492  "metaTitle": "Record to Report-proces: boekhouden end-to-end",
2493  "slug": "boekhouden-als-record-to-report-proces",
2494  "order": 23,
2495  "date": "2024-09-30 14:35:51",
2496  "category": "Articles",
2497  "tags": [],
2498  "excerpt": "Record to Report: ontwerp je boekhoudproces als end-to-end proces voor snelle, betrouwbare maandelijkse financiële rapportages.",
2499  "originalUrl": "https://smartbooks.ai/artikelen/boekhouden-als-record-to-report-proces/",
2500  "meta": null,
2501  "enSlug": "design-your-bookkeeping-process-as-and-end-2-end-process"
2502}
2503---
2504<h3 class="kt-adv-heading2499_1f0b95-cb wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2499_1f0b95-cb">Ontwerp je boekhoudproces als een end-to-end proces voor snelle en betrouwbare maandelijkse financiële rapportages.</h3>
2505
2506
2507
2508<p>Het idee achter een end-to-end (E2E) proces is om een volledig overzicht te bieden van de bedrijfsresultaten, met de nadruk op elke stap van het proces, van begin tot eind. Deze aanpak helpt om de efficiëntie te verhogen, prestaties te verbeteren en ervoor te zorgen dat elke stap aansluit bij de doelen van het bedrijf. De belangrijkste voordelen van een E2E-benadering zijn:</p>
2509
2510
2511
2512<ul class="wp-block-list">
2513<li><strong>Gestroomlijnde bedrijfsvoering</strong>: Door onnodige stappen te schrappen en de focus te leggen op activiteiten die waarde toevoegen, kunnen bedrijven hun processen vereenvoudigen, kosten verlagen en de productiviteit verhogen.</li>
2514
2515
2516
2517<li><strong>Verhoogde transparantie</strong>: Door het proces van begin tot eind te analyseren, worden inefficiënties, knelpunten en verbeterpunten makkelijker opgespoord.</li>
2518
2519
2520
2521<li><strong>Betere samenwerking</strong>: Een E2E-aanpak bevordert de samenwerking tussen afdelingen, doordat de input, output en overdrachtspunten duidelijk zijn gedefinieerd.</li>
2522</ul>
2523
2524
2525
2526<p>Een specifiek end-to-end proces dat wordt gezien als een Best Practice is het Record-to-Report (R2R) proces. Dit proces richt zich op het optimaliseren van boekhoudkundige activiteiten om snelle, betrouwbare en nuttige financiële rapportages te kunnen maken.</p>
2527
2528
2529
2530<h3 class="wp-block-heading">Het Record-to-Report-proces ontwerpen</h3>
2531
2532
2533
2534<p>Wat houdt Record-to-Report precies in, en hoe ontwerp en voer je het uit? Hier zijn de vijf belangrijkste stappen van een R2R-proces:</p>
2535
2536
2537
2538<ol class="wp-block-list">
2539<li><strong>Vastleggen van financiële transacties</strong>: Zorg ervoor dat alle financiële transacties worden vastgelegd in een modern financieel- of ERP-systeem, bij voorkeur in een SaaS-oplossing die kan communiceren met andere software. Gebruik, indien mogelijk, één rekeningschema en gestandaardiseerde procedures voor alle entiteiten in je bedrijf. Stem met het financiële team af hoe transacties tijdig en nauwkeurig geregistreerd moeten worden.</li>
2540
2541
2542
2543<li><strong>Definieer maandelijkse activiteiten</strong>: Zorg ervoor dat alle noodzakelijke gegevens beschikbaar en bijgewerkt zijn volgens de boekhoudregels en bedrijfsnormen. Combineer financiële gegevens met belangrijke KPI’s, zoals omzet per land of marge per productgroep, afhankelijk van je bedrijf.</li>
2544
2545
2546
2547<li><strong>Verwerk intercompany-transacties</strong>: Registreer alle interne kosten en inkomsten op aparte rekeningen binnen het financiële systeem. Breng eventuele correcties aan in het systeem, zodat er één bron van waarheid is voor alle transacties en aanpassingen.</li>
2548
2549
2550
2551<li><strong>Analyseer de financiële resultaten</strong>: Vergelijk de resultaten met het budget of de prognoses en onderzoek de oorzaken van eventuele afwijkingen.</li>
2552
2553
2554
2555<li><strong>Rapporteer op een duidelijke manier</strong>: Maak gebruik van tabellen, grafieken en KPI’s om de huidige stand van zaken in het bedrijf helder te presenteren. Zorg voor verschillende rapportageformaten en details, afgestemd op zowel intern als extern gebruik.</li>
2556</ol>
2557
2558
2559
2560<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/09/r2r-1024x683.png" alt="" class="wp-image-2500"/></figure>
2561
2562
2563
2564<h3 class="wp-block-heading">Vereisten voor het Record-to-Report-proces</h3>
2565
2566
2567
2568<p>Het succes van een R2R-proces begint met een sterk fundament: een bekwaam team. De kennis en ervaring van je medewerkers zijn essentieel om een betrouwbaar boekhoudproces goed uit te voeren.</p>
2569
2570
2571
2572<p>Daarnaast is een geavanceerd financieel systeem onmisbaar. Deze technologie vormt de ruggengraat van het R2R-proces en biedt de benodigde tools voor solide financiële operaties, analyses en rapportages. Met de juiste systemen kunnen bedrijven nauwkeurigheid waarborgen, efficiënter werken en beter onderbouwde beslissingen nemen.</p>
2573
2574
2575
2576<p>Een ander cruciaal ingrediënt is de kwaliteit van de data. Nauwkeurige, tijdige en relevante gegevens zijn van levensbelang voor het R2R-proces. Te weinig of verkeerde data kunnen het proces frustreren. Aan de andere kant kan te veel data zorgen voor onnodig extra werk en een schijn van volledigheid geven zonder de echte waarde te verhogen. Daarom is het belangrijk om te focussen op topniveau KPI’s en op maat gemaakte financiële rapportages.</p>
2577
2578
2579
2580<h3 class="wp-block-heading">Conclusie</h3>
2581
2582
2583
2584<p>Kortom, een goed ontworpen en uitgevoerd Record-to-Report-proces is essentieel voor iedere financiële afdeling. Het vereist deskundige mensen, moderne technologie en hoogwaardige gegevens. Je kunt jouw financiële volwassenheid beoordelen met onze downloadbare gids met best practices.</p>
2585
2586
2587
2588<p>Wil je meer weten? Bekijk dan ons webinar voor een overzicht van onze software en hoe wij je kunnen helpen. Of bekijk deze korte demo over maandafsluiting: <a href="/videos/maandafsluiting-demo">Maandafsluiten demo</a>  </p>
2589
2590
2591
2592<p></p>`,SR=`---json
2593{
2594  "title": "Break-Even Point Calculation: Formula, Worked Example and Margin of Safety",
2595  "slug": "break-even-point-calculation",
2596  "date": "2026-09-18 10:00:00",
2597  "category": "Articles",
2598  "tags": [
2599    "Planning",
2600    "Budgetteren",
2601    "Forecast"
2602  ],
2603  "excerpt": "Break-even point calculation in revenue terms: the formula, a worked example, the margin of safety and the pitfalls controllers run into.",
2604  "originalUrl": "",
2605  "metaTitle": "Break-Even Point Calculation: Formula and Example"
2606}
2607---
2608<p>A <strong>break-even point calculation</strong> in revenue terms divides fixed costs by the contribution margin ratio: <strong>break-even revenue = fixed costs &divide; (1 &minus; variable costs &divide; revenue)</strong>. The result is the level of revenue at which operating profit is exactly zero. Every euro of revenue above it adds to profit; every euro below it deepens the loss.</p>
2609<p>For a controller or CFO, that number is first and foremost a stress test of the budget. If budgeted revenue sits only a few percent above break-even, the plan is more fragile than the profit line suggests: one weak quarter or a price concession to a single large customer pushes the result below zero. The gap between expected revenue and break-even revenue, the margin of safety, therefore says more about the risk in a plan than budgeted profit does. It also shows what an extra permanent hire, a second site or a rent increase really costs: not the amount itself, but the revenue needed to earn it back.</p>
2610<h2>What is the break-even point?</h2>
2611<p>The break-even point is the level of activity at which the contribution margin exactly covers fixed costs. Contribution margin is what remains of revenue after variable costs: the costs that move with volume, such as cost of goods sold, subcontracted work, freight and sales commission. Fixed costs, such as salaries of permanent staff, rent, softw
2611are and depreciation, stay the same within a normal range regardless of how much you sell.</p>
2612<p>The point can be expressed in two units. Break-even revenue states it in euros; break-even units states it as a number of products sold. For a company with hundreds of SKUs, hourly rates or subscriptions, the revenue version is the only one that works, because there is no single selling price.</p>
2613<p>Do not confuse contribution margin with <a href="/en/articles/gross-margin-calculation">gross margin</a>. Gross margin only deducts cost of goods sold. Contribution margin deducts all variable costs, including freight, payment fees and commission that sit below the gross margin line in the income statement. Working from gross margin produces a break-even point that is too low.</p>
2614<h2>The break-even point calculation formula</h2>
2615<p><strong>Contribution margin ratio = (revenue &minus; variable costs) &divide; revenue</strong></p>
2616<p><strong>Break-even revenue = fixed costs &divide; contribution margin ratio</strong></p>
2617<ol>
2618<li>Choose the period. A year is common, but with seasonal patterns a monthly break-even point calculation is needed as well.</li>
2619<li>Classify every cost account as variable or fixed. Do this per general ledger account and document the choice, so the split is identical next year.</li>
2620<li>Calculate the contribution margin as a percentage of revenue.</li>
2621<li>Divide fixed costs by that ratio.</li>
2622<li>Compare the result with budgeted or expected revenue. The difference, divided by expected revenue, is the margin of safety.</li>
2623</ol>
2624<h2>Worked example: break-even point calculation for a distributor</h2>
2625<p>A wholesale distributor with its own delivery service closes the year with the following figures.</p>
2626<table>
2627<thead><tr><th>Item</th><th>
2627Amount</th></tr></thead>
2628<tbody>
2629<tr><td>Revenue</td><td>&euro;6,000,000</td></tr>
2630<tr><td>Cost of goods sold</td><td>&euro;3,300,000</td></tr>
2631<tr><td>Freight, packaging and sales commission</td><td>&euro;600,000</td></tr>
2632<tr><td><strong>Variable costs</strong></td><td><strong>&euro;3,900,000</strong></td></tr>
2633<tr><td><strong>Contribution margin</strong></td><td><strong>&euro;2,100,000</strong></td></tr>
2634<tr><td>Personnel costs</td><td>&euro;1,150,000</td></tr>
2635<tr><td>Premises</td><td>&euro;240,000</td></tr>
2636<tr><td>Other fixed costs</td><td>&euro;220,000</td></tr>
2637<tr><td>Depreciation</td><td>&euro;140,000</td></tr>
2638<tr><td><strong>Fixed costs</strong></td><td><strong>&euro;1,750,000</strong></td></tr>
2639<tr><td><strong>Operating profit</strong></td><td><strong>&euro;350,000</strong></td></tr>
2640</tbody>
2641</table>
2642<p>The contribution margin ratio is 2,100,000 &divide; 6,000,000 = 35%. Break-even revenue is then 1,750,000 &divide; 0.35 = <strong>&euro;5,000,000</strong>. The margin of safety is (6,000,000 &minus; 5,000,000) &divide; 6,000,000 = <strong>16.7%</strong>: revenue can fall by a sixth before the result turns negative.</p>
2643<p>Leave depreciation out, because it is not a cash expense, and you get the cash break-even point: 1,610,000 &divide; 0.35 = &euro;4,600,000. Below that level the business is burning cash, not just reporting a loss. For a company with a tight <a href="/en/articles/cash-budget">cash budget</a>, that is the number that matters.</p>
2644<p>The example also shows how sensitive the point is to price. If the distributor cuts all prices by 3% at the same volume, revenue drops to &euro;5,820,000 while variable costs stay the same. The contribution margin ratio falls to 33.0%, break-even revenue rises to just over &euro;5.3 million, and operating profit drops from &euro;350,000 to &euro;170,000. A 3% discount costs more than half the profit.</p>
2645<h2>Break-even revenue or break-even units?</h2>
2646<p>If you sell a single product or a narrow range with similar prices, you can also express the point in units:</p>
2647<p><strong>Break-even units = fixed costs &divide; (selling price per unit &minus; variable cost per unit)</strong></p>
2648<p>With a selling price of &euro;50, variable costs of &euro;32.50 per unit and the same &euro;1,750,000 in fixed costs, that comes to 1,750,000 &divide; 17.50 = 100,000 units. Multiply by the selling price and you are back at &euro;5,000,000: the two formulas are the same calculation in a different unit. With a broad range, the product mix shifts the average per unit all the time, and the revenue version is more reliable.</p>
2649<h2>How to interpret the result</h2>
2650<p>There is no general benchmark for break-even revenue; the number only means something next to expected revenue. Look at the margin of safety instead. As a rough guide:</p>
2651<ul>
2652<li><strong>Below 10%:</strong> fragile. Losing a mid-sized customer or a few percent of price pressure takes the result below zero.</li>
2653<li><strong>10% to 25%:</strong> common for trading and manufacturing companies with a normal cost structure.</li>
2654<li><strong>Above 25%:</strong> comfortable, though the absolute level of fixed costs still deserves attention.</li>
2655</ul>
2656<p>These bands are indicative and depend heavily on the cost structure. A SaaS company or a manufacturer with heavy machinery has high fixed and low variable costs. Its break-even point is high, but above that point profit rises quickly, because most of every additional euro of revenue drops through to the bottom line. A trading company with thin margins has the opposite profile: a low break-even point, but little profit per additional euro. Compare your own trend above all. A break-even point that rises faster than revenue three years in a row means fixed costs are out of step.</p>
2657<h2>Pitfalls in break-even point calculation</h2>
2658<ul>
2659<li><strong>Treating all personnel costs as fixed.</strong> Temporary staff, agency workers and overtime move with volume. Count them as fixed and the break-even point comes out too high.</li>
2660<li><strong>Using gross margin instead of contribution margin.</strong> Variable costs below the gross margin line, such as freight and commission, drop out of the sum and the break-even point comes out too low.</li>
2661<li><strong>Dividing an annual figure by twelve.</strong> In a seasonal business, revenue in some months sits structurally below the monthly break-even point. That is fine as long as liquidity absorbs it, but it has to be in the plan.</li>
2662<li><strong>Treating fixed costs as permanently fixed.</strong> Fixed costs are fixed within a capacity. Once volume outgrows what the current team and warehouse can handle, the break-even point jumps.</li>
2663<li><strong>Including intercompany revenue.</strong> In a group with internal deliveries, intercompany sales inflate both revenue and variable costs. Calculate at consolidated level, after elimination.</li>
2664</ul>
2665<h2>Frequently asked questions about the break-even point</h2>
2666<h3>How do you do a break-even point calculation?</h3>
2667<p>Divide fixed costs by the contribution margin ratio, which is revenue minus all variable costs, expressed as a percentage of revenue. With &euro;1,750,000 in fixed costs and a contribution margin of 35%, the break-even point is &euro;5,000,000 in revenue. To express it in units instead, divide fixed costs by the contribution margin per unit.</p>
2668<h3>What is the difference between break-even revenue and break-even units?</h3>
2669<p>Break-even revenue gives the turning point in euros, break-even units gives it as a number of products. Both lead to the same point as long as there is one selling price. With a broad product range or in services, only the revenue version is usable.</p>
2670<h3>What is a break-even analysis?</h3>
2671<p>A break-even analysis determines the revenue at which costs are exactly covered, and how that point shifts when price, variable costs or fixed costs change. It is a simple form of scenario anal
2671ysis: you work out what a price cut, a new site or a rent increase does to the minimum revenue required.</p>
2672<h3>Is depreciation included in the break-even point?</h3>
2673<p>In the standard break-even point, yes, because depreciation is a fixed cost. To find the revenue at which the business stops losing cash, leave it out and calculate the cash break-even point. That figure is lower, but it ignores the eventual replacement of the assets.</p>
2674<h2>Break-even in your budget and forecast</h2>
2675<p>A one-off break-even point calculation for the annual accounts is simple. Seeing the number every month next to actual revenue and the forecast is not, because the split between fixed and variable costs then lives in a separate spreadsheet. In Smartbooks you create two subfolders in the account structure, <em>Variable costs</em> and <em>Fixed costs</em>, and drag the cost accounts into them; each subfolder forms its subtotal automatically. You set up the contribution margin and the break-even point as metrics with a formula that references those subfolders, and a dynamic addition places them directly below the right line in the income statement. Copy the budget into a forecast and the formulas carry over, so you only adjust the assumptions that differ. The projection, which combines the closed months with the budget or forecast, puts expected full-year revenue alongside it.</p>
2676<p>How budget and <a href="/en/articles/the-difference-between-planning-budgeting-and-forecasting">forecast</a> relate to each other is covered in the <a href="/en/knowledge-center">knowledge center</a>, or see how <a href="/en/functionalities/cashflow-planning">budgeting and cash flow planning</a> work in Smartbooks.</p>
2677`,zR=`---json
2678{
2679  "title": "Break-even omzet berekenen: formule, rekenvoorbeeld en veiligheidsmarge",
2680  "slug": "break-even-omzet-berekenen",
2681  "enSlug": "break-even-point-calculation",
2682  "date": "2026-09-18 10:00:00",
2683  "category": "Articles",
2684  "tags": [
2685    "Planning",
2686    "Budgetteren",
2687    "Forecast"
2688  ],
2689  "excerpt": "Break-even omzet berekenen: de formule met dekkingsbijdrage, een uitgewerkt rekenvoorbeeld, de veiligheidsmarge en de valkuilen voor controllers.",
2690  "originalUrl": "",
2691  "metaTitle": "Break-even omzet berekenen: formule en rekenvoorbeeld"
2692}
2693---
2694<p><strong>Break-even omzet berekenen</strong> doe je door de vaste kosten te delen door de dekkingsbijdrage als percentage van de omzet: <strong>break-even omzet = vaste kosten &divide; (1 &minus; variabele kosten &divide; omzet)</strong>. De uitkomst is het omzetniveau waarop het resultaat precies nul is. Elke euro omzet daarboven draagt bij aan de winst, elke euro eronder vergroot het verlies.</p>
2695<p>Voor een controller of CFO is dat getal vooral een toets op de begroting. Ligt de begrote omzet maar een paar procent boven het break-evenpunt, dan is het plan kwetsbaarder dan het winstcijfer doet vermoeden: een tegenvallend kwartaal of een prijsconcessie aan één grote klant duwt het resultaat onder nul. De afstand tussen de verwachte omzet en het break-evenpunt, de veiligheidsmarge, zegt daarom meer over het risico in een plan dan de begrote winst zelf. En hij laat zien wat een extra vaste kracht, een tweede vestiging of een huurverhoging werkelijk kost: niet het bedrag zelf, maar de omzet die je nodig hebt om het terug te verdienen.</p>
2696<h2>Wat is de break-even omzet?</h2>
2697<p>De break-even omzet is de omzet waarbij de dekkingsbijdrage precies gelijk is aan de vaste kosten. De dekkingsbijdrage is wat er van de omzet overblijft na aftrek van de variabele kosten: de kosten die meebewegen met het volume, zoals inkoopwaarde, uitbesteed werk, vracht en verkoopprovisie. De vaste kosten, zoals salarissen van vast personeel, huur, software en afschrijvingen, blijven binnen een normale bandbreedte gelijk, wat je ook verkoopt.</p>
2698<p>De termen <em>break-evenpunt</em>, <em>break-even point</em> en <em>kritiek punt</em> slaan op hetzelfde omslagpunt. Het verschil zit in de eenheid: de omzetvariant drukt het uit in euro's, de break-even afzet in aantallen producten. Voor een bedrijf met honderden artikelen, uurtarieven of abonnementen is de omzetvariant de enige die werkt, omdat er geen enkelvoudige verkoopprijs bestaat.</p>
2699<p>Verwar de dekkingsbijdrage niet met de <a href="/artikelen/brutomarge-berekenen">brutomarge</a>. De brutomarge trekt alleen de inkoopwaarde van de omzet af. De dekkingsbijdrage trekt álle variabele kosten af, dus ook vracht, betalingskosten en provisie die in de winst- en verliesre
2699kening onder de brutomarge staan. Wie met de brutomarge rekent, komt op een te laag break-evenpunt uit.</p>
2700<h2>De formule om de break-even omzet te berekenen</h2>
2701<p><strong>Dekkingsbijdrage % = (omzet &minus; variabele kosten) &divide; omzet</strong></p>
2702<p><strong>Break-even omzet = vaste kosten &divide; dekkingsbijdrage %</strong></p>
2703<ol>
2704<li>Kies de periode. Een jaar is gebruikelijk, maar bij seizoensinvloeden wil je ook per maand de break-even omzet berekenen.</li>
2705<li>Deel elke kostenrekening in als variabel of vast. Doe dat per grootboekrekening en leg de keuze vast, zodat de indeling volgend jaar hetzelfde is.</li>
2706<li>Bereken de dekkingsbijdrage als percentage van de omzet.</li>
2707<li>Deel de vaste kosten door dat percentage.</li>
2708<li>Zet de uitkomst naast de begrote of verwachte omzet. Het verschil, gedeeld door de verwachte omzet, is de veiligheidsmarge.</li>
2709</ol>
2710<h2>Rekenvoorbeeld: break-even omzet berekenen voor een groothandel</h2>
2711<p>Een groothandel met een eigen bezorgdienst sluit het jaar af met de volgende cijfers.</p>
2712<table>
2713<thead><tr><th>Post</th><th>Bedrag</th></tr></thead>
2714<tbody>
2715<tr><td>Omzet</td><td>&euro; 6.000.000</td></tr>
2716<tr><td>Inkoopwaarde van de omzet</td><td>&euro; 3.300.000</td></tr>
2717<tr><td>Vracht, verpakking en verkoopprovisie</td><td>&euro; 600.000</td></tr>
2718<tr><td><strong>Variabele kosten</strong></td><td><strong>&euro; 3.900.000</strong></td></tr>
2719<tr><td><strong>Dekkingsbijdrage</strong></td><td><strong>&euro; 2.100.000</strong></td></tr>
2720<tr><td>Personeelskosten</td><td>&euro; 1.150.000</td></tr>
2721<tr><td>Huisvesting</td><td>&euro; 240.000</td></tr>
2722<tr><td>Overige vaste kosten</td><td>&euro; 220.000</td></tr>
2723<tr><td>Afschrijvingen</td><td>&euro; 140.000</td></tr>
2724<tr><td><strong>Vaste kosten</strong></td><td><strong>&euro; 1.750.000</strong></td></tr>
2725<tr><td><strong>Bedrijfsresultaat</strong></td><td><strong>&euro; 350.000</strong></td></tr>
2726</tbody>
2727</table>
2728<p>De dekkingsbijdrage is 2.100.000 &divide; 6.000.000 = 35%. Het break-evenpunt ligt dan op 1.750.000 &divide; 0,35 = <strong>&euro; 5.000.000</strong> omzet. De veiligheidsmarge is (6.000.000 &minus; 5.000.000) &divide; 6.000.000 = <strong>16,7%</strong>: de omzet kan een zesde dalen voordat het resultaat negatief wordt.</p>
2729<p>Laat je de afschrijvingen buiten beschouwing omdat ze geen kasuitgave zijn, dan krijg je het kasmatige break-evenpunt: 1.610.000 &divide; 0,35 = &euro; 4.600.000. Onder dat niveau teert de onderneming in op haar liquide middelen, niet alleen op haar resultaat. Voor een bedrijf met een krappe <a href="/artikelen/liquiditeitsbegroting-maken">liquiditeitsbegroting</a> is dat het getal dat ertoe doet.</p>
2730<p>Het voorbeeld laat ook zien hoe gevoelig het punt is voor de prijs. Verlaagt de groothandel alle prijzen met 3% bij gelijk volume, dan daalt de omzet naar &euro; 5.820.000 terwijl de variabele kosten gelijk blijven. De dekkingsbijdrage zakt naar 33,0%, het break-evenpunt stijgt naar ruim &euro; 5,3 miljoen en het bedrijfsresultaat daalt van &euro; 350.000 naar &euro; 170.000. Drie procent korting kost ruim de helft van de winst.</p>
2731<h2>Break-even omzet of break-even afzet?</h2>
2732<p>Verkoop je één product of een klein assortiment met vergelijkbare prijzen, dan kun je het omslagpunt ook in stuks uitdrukken:</p>
2733<p><strong>Break-even afzet = vaste kosten &divide; (verkoopprijs per stuk &minus; variabele kosten per stuk)</strong></p>
2734<p>Bij een verkoopprijs van &euro; 50, variabele kosten van &euro; 32,50 per stuk en dezelfde &euro; 1.750.000 aan vaste kosten is dat 1.750.000 &divide; 17,50 = 100.000 stuks. Vermenigvuldigd met de verkoopprijs kom je weer op &euro; 5.000.000 uit: de twee formules zijn dezelfde rekensom in een andere eenheid. Bij een breed assortiment verschuift de productmix het gemiddelde per stuk voortdurend, en dan is de omzetvariant betrouwbaarder.</p>
2735<h2>Wat zegt de uitkomst?</h2>
2736<p>Een algemene norm voor het break-evenpunt bestaat niet; het getal is alleen zinvol naast de verwachte omzet. Kijk daarom naar de veiligheidsmarge. Als grove richting:</p>
2737<ul>
2738<li><strong>Onder 10%:</strong> kwetsbaar. Een middelgrote klant verliezen of een paar procent prijsdruk brengt het resultaat onder nul.</li>
2739<li><strong>10% tot 25%:</strong> gangbaar voor handels- en productiebedrijven met een normale kostenstructuur.</li>
2740<li><strong>Boven 25%:</strong> ruim, maar kijk ook naar het absolute niveau van de vaste kosten.</li>
2741</ul>
2742<p>Die grenzen zijn richtinggevend en hangen sterk af van de kostenstructuur. Een SaaS-bedrijf of een productiebedrijf met zware machines heeft veel vaste en weinig variabele kosten. Daar ligt het break-evenpunt hoog, maar boven dat punt stijgt de winst snel, omdat elke extra euro omzet voor het grootste deel naar het resultaat gaat. Een handelsbedrijf met dunne marges heeft het omgekeerde profiel: een laag break-evenpunt, maar weinig resultaat per extra euro. Vergelijk daarom vooral de eigen ontwikkeling. Een break-evenpunt dat drie jaar op rij sneller stijgt dan de omzet betekent dat de vaste kosten uit de pas lopen.</p>
2743<h2>Valkuilen als je de break-even omzet berekent</h2>
2744<ul>
2745<li><strong>Personeelskosten automatisch als vast aanmerken.</strong> Flexkrachten, uitzendkrachten en overuren bewegen mee met het volume. Tel je ze bij de vaste kosten, dan komt het break-evenpunt te hoog uit.</li>
2746<li><strong>Rekenen met de brutomarge in plaats van de dekkingsbijdrage.</strong> Variabele kosten onder de brutomargeregel, zoals vracht en provisie, verdwijnen dan uit de som en het break-evenpunt komt te laag uit.</li>
2747<li><strong>
2747Een jaarcijfer door twaalf delen.</strong> Bij seizoenswerk ligt de omzet in sommige maanden structureel onder het maandelijkse break-evenpunt. Dat is geen probleem zolang de liquiditeit het opvangt, maar het moet wel in de planning staan.</li>
2748<li><strong>Vaste kosten als eeuwig vast behandelen.</strong> Vaste kosten zijn vast binnen een capaciteit. Groeit het volume boven wat het huidige team en magazijn aankunnen, dan maakt het break-evenpunt een sprong.</li>
2749<li><strong>Intercompany-omzet meetellen.</strong> In een groep met onderlinge leveringen blaast interne omzet zowel de omzet als de variabele kosten op. Reken op geconsolideerd niveau, na eliminatie.</li>
2750</ul>
2751<h2>Veelgestelde vragen over de break-even omzet</h2>
2752<h3>Hoe bereken je de break-even omzet?</h3>
2753<p>Om de break-even omzet te berekenen deel je de vaste kosten door de dekkingsbijdrage als percentage van de omzet. De dekkingsbijdrage is de omzet minus alle variabele kosten. Bij &euro; 1.750.000 vaste kosten en een dekkingsbijdrage van 35% ligt het break-evenpunt op &euro; 5.000.000 omzet.</p>
2754<h3>Wat is het verschil tussen break-even omzet en break-even afzet?</h3>
2755<p>De omzetvariant geeft het omslagpunt in euro's, de afzetvariant in aantallen producten. Beide leveren hetzelfde punt op zolang er één verkoopprijs is. Bij een breed assortiment of bij dienstverlening is alleen de omzetvariant bruikbaar.</p>
2756<h3>Wat is een break-even analyse?</h3>
2757<p>Een break-even analyse bepaalt bij welke omzet de kosten precies gedekt zijn, en hoe dat punt verschuift als de prijs, de variabele kosten of de vaste kosten veranderen. Het is een eenvoudige vorm van scenarioanalyse: je rekent door wat een prijsverlaging, een nieuwe vestiging of een huurverhoging doet met de omzet die minimaal nodig is.</p>
2758<h3>Tellen afschrijvingen mee in het break-evenpunt?</h3>
2759<p>In het gewone break-evenpunt wel, want afschrijvingen zijn vaste kosten. Wil je weten bij welke omzet de onderneming geen geld verliest, dan laat je ze weg en reken je het kasmatige break-evenpunt uit. Dat ligt lager, maar houdt geen rekening met de vervanging van de activa.</p>
2760<h2>Het break-evenpunt in je begroting en forecast</h2>
2761<p>Eén keer de break-even omzet berekenen voor de jaarrekening is eenvoudig. Het getal elke maand naast de actuele omzet en de forecast zien is dat niet, omdat de indeling in vaste en variabele kosten dan in een apart rekenblad leeft. In Smartbooks maak je in de rekeningstructuur twee subfolders, <em>Variabele kosten</em> en <em>Vaste kosten</em>, en sleep je de kostenrekeningen erin; elke subfolder vormt automatisch het subtotaal. De dekkingsbijdrage en het break-evenpunt leg je vast als metrics met een formule die naar die subfolders verwijst, en met een dynamische toevoeging zet je ze direct onder de juiste regel in de winst- en verliesrekening. Kopieer je de begroting naar een forecast, dan gaan de formules mee en pas je alleen de aannames aan die verschillen. De projectie, die de gerealiseerde maanden aanvult met de begroting of forecast, zet de verwachte jaaromzet ernaast.</p>
2762<p>Hoe begroting en <a href="/artikelen/het-verschil-tussen-plannen-budgetteren-en-forecasten">forecast</a> zich tot elkaar verhouden lees je in het <a href="/kenniscentrum">kenniscentrum</a>, of bekijk hoe <a href="/functionaliteiten/budgetteren-cashflow">budgetteren en cashflowplanning</a> in Smartbooks werken.</p>
2763`,AR=`---json
2764{
2765  "title": "Gross Margin Calculation: Formula, Example and Benchmarks",
2766  "slug": "gross-margin-calculation",
2767  "date": "2026-09-09 10:00:00",
2768  "category": "Articles",
2769  "tags": [
2770    "Analyse",
2771    "Rapportage",
2772    "Business Control",
2773    "KPI"
2774  ],
2775  "excerpt": "The gross margin calculation divides gross profit by revenue. Formula, worked example, margin versus markup and sector benchmarks for controllers.",
2776  "originalUrl": "",
2777  "metaTitle": "Gross Margin Calculation: Formula and Example"
2778}
2779---
2780<p>The <strong>gross margin calculation</strong> subtracts the cost of goods sold from revenue and divides the difference by that same revenue: <strong>gross margin % = (revenue &minus; cost of goods sold) &divide; revenue &times; 100</strong>. The outcome shows how much of every euro of revenue is left to cover fixed costs and profit.</p>
2781<p>For a controller the percentage is rarely the end of the analysis. Gross margin is the first line in the profit and loss statement where a pricing agreement, a supply contract or a shift in the product mix becomes visible. Losing two percentage points on five million in revenue costs a hundred thous
2781and euro of operating result, and no overhead saving recovers that within a quarter. The margin therefore belongs on the table every month, split by product group or entity, rather than once a year at audit time.</p>
2782<h2>What gross margin measures</h2>
2783<p>Gross margin is the difference between revenue and the costs directly attributable to that revenue, expressed as a percentage of revenue. In absolute euros the same difference is called gross profit. The terms <em>gross margin</em>, <em>gross profit margin</em> and <em>gross profit percentage</em> are used interchangeably and point to the same ratio.</p>
2784<p>What sits inside cost of goods sold differs by company. A distributor typically counts only the purchase value of the goods sold plus inbound freight. A manufacturer adds direct materials, direct labour and sometimes machine hours. A services firm uses the direct hourly cost of billable staff. That boundary is a choice, not a rule &mdash; but it has to stay identical across years and across entities, or you are comparing two different things.</p>
2785<p>Do not confuse gross margin with the profitability measures further down the statement. <a href="/en/articles/ebitda-calculation">EBITDA</a> also deducts operating costs, and the net profit margin behind <a href="/en/articles/return-on-equity-and-assets">return on equity and assets</a> additionally accounts for interest, depreciation and tax.</p>
2786<h2>The gross margin calculation formula</h2>
2787<p><strong>Gross profit = revenue &minus; cost of goods sold</strong></p>
2788<p><strong>Gross margin % = gross profit &divide; revenue &times; 100</strong></p>
2789<ol>
2790<li>Take net revenue for the period: gross revenue less credit notes, discounts and returns. Sales discounts belong above the margin line, never below it.</li>
2791<li>Determine the cost of goods sold. This is not what you purchased during the period but what you sold: opening inventory plus purchases &minus; closing inventory.</li>
2792<li>Subtract the cost of goods sold from net revenue. What remains is gross profit in euros.</li>
2793<li>Divide gross profit by net revenue and multiply by 100.</li>
2794<li>Repeat per product group, customer segment or entity. A single group percentage hides exactly the shift you are looking for.</li>
2795</ol>
2796<h2>Gross margin calculation example</h2>
2797<p>A technical distributor with its own installation arm and a portfolio of service contracts closes the year with the following figures.</p>
2798<table>
2799<thead><tr><th>Product group</th><th>Revenue</th><th>Cost of goods sold</th><th>Gross profit</th><th>Gross margin</th></tr></thead>
2800<tbody>
2801<tr><td>Traded goods</td><td>&euro; 2,400,000</td><td>&euro; 1,680,000</td><td>&euro; 720,000</td><td>30.0%</td></tr>
2802<tr><td>Installation projects</td><td>&euro; 1,500,000</td><td>&euro; 900,000</td><td>&euro; 600,000</td><td>40.0%</td></tr>
2803<tr><td>Service contracts</td><td>&euro; 600,000</td><td>&euro; 150,000</td><td>&euro; 450,000</td><td>75.0%</td></tr>
2804<tr><td><strong>Total</strong></td><td><strong>&euro; 4,500,000</strong></td><td><strong>&euro; 2,730,000</strong></td><td><strong>&euro; 1,770,000</strong></td><td><strong>39.3%</strong></td></tr>
2805</tbody>
2806</table>
2807<p>1,770,000 &divide; 4,500,000 &times; 100 = <strong>39.3%</strong>. That group figure has no economic reality of its own: it is the weighted average of three models with margins between 30 and 75 percent. If trade revenue grows by half a million next year and everything else stays flat, the total margin drops to 38.4% without a single contract being renegotiated.</p>
2808<h2>Margin versus markup</h2>
2809<p>A purchase price of &euro; 100 and a selling price of &euro; 125 gives a markup of 25% on cost, but a margin of 20% on the sale. Anyone who mixes up the two structurally under-prices.</p>
2810<p><strong>Margin = markup &divide; (1 + markup)</strong> and conversely <strong>markup = margin &divide; (1 &minus; margin)</strong>. A target margin of 40% therefore requires a markup of 66.7% on the purchase price, not of 40%.</p>
2811<p>Sales teams almost always think in markup and reporting almost always speaks in margin. Record which of the two drives the price list and which drives the report, and put the conversion in the quotation template instead of in a salesperson's head.</p>
2812<h2>What is a good gross margin?</h2>
2813<p>There is no universal benchmark, because the percentage is largely set by the business model and by where you draw the cost of sales line. As a rough order of magnitude:</p>
2814<ul>
2815<li><strong>Wholesale and distribution:</strong> 15% to 25%.</li>
2816<li><strong>Manufacturing and assembly:</strong> 25% to 40%.</li>
2817<li><strong>Installation, construction and projects:</strong> 20% to 35%.</li>
2818<li><strong>Professional services:</strong> 40% to 60%.</li>
2819<li><strong>Software and SaaS:</strong> 70% to 85%.</li>
2820</ul>
2821<p>Treat these ranges as indicative rather than normative: they move by sector, by year and by cost definition. The two comparisons that always carry meaning are your own trend over twelve months and the margin on the same product group at direct competitors. A margin that slips half a percentage point for three consecutive quarters is a problem even when the absolute level still beats the sector.</p>
2822<h2>Price, mix and purchasing</h2>
2823<p>A margin variance has four practical causes, and separating them out before drawing conclusions from the total pays off:</p>
2824<ul>
2825<li><strong>Price effect:</strong> the selling price fell, usually through discounts or tender pressure.</li>
2826<li><strong>Purchasing effect:</strong> the cost of goods rose while the price list stayed put.</li>
2827<li><strong>Mix effect:</strong> revenue shifted between product groups, as in the example above.</li>
2828<li><strong>Volume effect:</strong> moves gross profit in euros but leaves the percentage untouched &mdash; unless volume rebates move along with it.</li>
2829</ul>
2830<p>Only the price and purchasing effects justify an intervention on pricing. Under a mix effect the margin per product group has not moved at all, and the conversation belongs with commercial steering instead. Running the gross margin calculation per product group rather than at group level makes that distinction visible immediately.</p>
2831<h2>Pitfalls in the gross margin calculation</h2>
2832<ul>
2833<li><strong>Using purchases instead of the cost of goods sold.</strong> Without the inventory movement the monthly margin follows the purchasing rhythm and says nothing.</li>
2834<li><strong>A cost definition that differs per entity.</strong> If inbound freight sits in cost of sales in one entity and in overhead in another, the consolidated percentage is meaningless.</li>
2835<li><strong>Leaving intercompany revenue in.</strong> In a group with internal deliveries the internal margin counts twice until <a href="/en/functionalities/consolidation">consolidation</a> eliminates it.</li>
2836<li><strong>Volume rebates that only land in December.</strong> An annual rebate that is not accrued monthly depresses eleven months and artificially lifts the twelfth.</li>
2837<li><strong>Keeping direct labour out of cost of sales.</strong> In projects and services the real margin then disappears into personnel costs and you steer on a percentage that only covers materials.</li>
2838</ul>
2839<h2>Frequently asked questions</h2>
2840<h3>How does the gross margin calculation work?</h3>
2841<p>
2841Subtract the cost of goods sold from net revenue and divide the result by that net revenue, then multiply by 100. Use the cost of what was actually sold, including the inventory movement, rather than the total of supplier invoices.</p>
2842<h3>What is the difference between gross profit and gross margin?</h3>
2843<p>Gross profit is an amount in euros; gross margin is that same amount as a percentage of revenue. A growing company can combine rising gross profit with a falling margin, which is precisely the signal that volume is masking price pressure.</p>
2844<h3>What is the difference between gross margin and net profit margin?</h3>
2845<p>Gross margin looks only at the costs tied directly to revenue. Net profit margin also deducts operating expenses, interest, depreciation and tax. A high gross margin alongside a thin net margin points to an overweight overhead structure rather than to a commercial problem.</p>
2846<h3>Is a higher gross margin always better?</h3>
2847<p>No. A high margin on a small volume yields less gross profit than a thin margin on a large volume; fixed costs are paid with euros, not with percentages. Always read the margin together with the absolute amount and with inventory turnover.</p>
2848<h2>Margin in your monthly reporting</h2>
2849<p>The arithmetic is simple; producing it reliably every month, per product group and across all entities, is not. In Smartbooks you create a "Gross Margin" subfolder in the account structure and drag the revenue and cost of sales accounts into it, so the subtotal is formed automatically. The percentage is added as a metric and placed with a dynamic addition directly beneath that line in the profit and loss statement, at consolidated level as well. The cost centre selector in the report configuration then shows the same margin per product group or location, without building a second report.</p>
2850<p>More formulas and benchmarks from this series are in the <a href="/en/knowledge-center">knowledge center</a>, or see how <a href="/en/functionalities/reporting">reporting</a> is structured.</p>
2851`,CR=`---json
2852{
2853  "title": "Brutomarge berekenen: formule, rekenvoorbeeld en sectornormen",
2854  "slug": "brutomarge-berekenen",
2855  "enSlug": "gross-margin-calculation",
2856  "date": "2026-09-09 10:00:00",
2857  "category": "Articles",
2858  "tags": [
2859    "Analyse",
2860    "Rapportage",
2861    "Business Control",
2862    "KPI"
2863  ],
2864  "excerpt": "Brutomarge berekenen: de formule, een rekenvoorbeeld per productgroep, het verschil tussen marge en opslag en gangbare sectornormen.",
2865  "originalUrl": "",
2866  "metaTitle": "Brutomarge berekenen: formule en rekenvoorbeeld"
2867}
2868---
2869<p><strong>Brutomarge berekenen</strong> doe je door de inkoopwaarde van de omzet af te trekken van de omzet en het verschil te delen door diezelfde omzet: <strong>brutomarge % = (omzet &minus; inkoopwaarde van de omzet) &divide; omzet &times; 100</strong>. De uitkomst laat zien hoeveel van elke euro omzet overblijft om de vaste kosten en de winst mee te dekken.</p>
2870<p>Voor een controller is dat percentage zelden het eindpunt van de analyse. De brutomarge is de eerste regel in de winst- en verliesrekening waar een prijsafspraak, een inkoopcontract of een verschuiving in de productmix zichtbaar wordt. Twee procentpunt margeverlies op vijf miljoen omzet kost honderdduizend euro resultaat, en geen enkele bezuiniging op de overhead haalt dat binnen een kwartaal terug. Daarom hoort de marge elke maand op tafel te liggen, uitgesplitst naar productgroep of entiteit, en niet pas bij de jaarrekening.</p>
2871<h2>Wat is brutomarge?</h2>
2872<p>De brutomarge is het verschil tussen de omzet en de kosten die direct aan die omzet zijn toe te rekenen, uitgedrukt als percentage van de omzet. In absolute euro's heet datzelfde verschil de brutowinst. De termen <em>brutomarge</em>, <em>brutowinstmarge</em> en <em>bruto winstpercentage</em> worden door elkaar gebruikt en slaan in de praktijk op hetzelfde kengetal.</p>
2873<p>Wat er precies in de kostprijs zit, verschilt per onderneming. Een handelsbedrijf rekent doorgaans alleen de inkoopwaarde van de verkochte goederen plus de inkomende vracht. Een productiebedrijf telt daar directe materialen, directe uren en soms machine-uren bij op. Een dienstverlener werkt met de directe uurkosten van het uitvoerende personeel. Die afbakening is een keuze, geen wet &mdash; maar hij moet over de jaren en tussen entiteiten identiek blijven, anders vergelijk je twee verschillende dingen.</p>
2874<p>Verwar de brutomarge niet met de winstgevendheidsmaatstaven verderop in de winst- en verliesre
2874kening. <a href="/artikelen/ebitda-berekenen">EBITDA</a> trekt ook de operationele kosten af, en de nettowinstmarge die je bij het <a href="/artikelen/rentabiliteit-berekenen">berekenen van de rentabiliteit</a> gebruikt houdt bovendien rekening met rente, afschrijvingen en belastingen.</p>
2875<h2>De formule om de brutomarge te berekenen</h2>
2876<p><strong>Brutowinst = omzet &minus; inkoopwaarde van de omzet</strong></p>
2877<p><strong>Brutomarge % = brutowinst &divide; omzet &times; 100</strong></p>
2878<ol>
2879<li>Neem de netto-omzet over de periode: de bruto omzet minus creditnota's, kortingen en retouren. Verkoopkortingen horen boven de margeregel, niet eronder.</li>
2880<li>Bepaal de inkoopwaarde van de omzet. Dat is niet wat je in de periode hebt ingekocht, maar wat je hebt verkocht: beginvoorraad plus inkopen &minus; eindvoorraad.</li>
2881<li>Trek de inkoopwaarde van de omzet af van de netto-omzet. Wat overblijft is de brutowinst in euro's.</li>
2882<li>Deel de brutowinst door de netto-omzet en vermenigvuldig met 100.</li>
2883<li>Herhaal de rekensom per productgroep, klantsegment of entiteit. Eén concernpercentage verbergt precies de verschuiving die je zoekt.</li>
2884</ol>
2885<h2>Rekenvoorbeeld: brutomarge berekenen per productgroep</h2>
2886<p>Een technische groothandel met een eigen installatietak en een portefeuille servicecontracten sluit het jaar af met de volgende cijfers.</p>
2887<table>
2888<thead><tr><th>Productgroep</th><th>Omzet</th><th>Inkoopwaarde</th><th>Brutowinst</th><th>Brutomarge</th></tr></thead>
2889<tbody>
2890<tr><td>Handelsgoederen</td><td>&euro; 2.400.000</td><td>&euro; 1.680.000</td><td>&euro; 720.000</td><td>30,0%</td></tr>
2891<tr><td>Installatieprojecten</td><td>&euro; 1.500.000</td><td>&euro; 900.000</td><td>&euro; 600.000</td><td>40,0%</td></tr>
2892<tr><td>Servicecontracten</td><td>&euro; 600.000</td><td>&euro; 150.000</td><td>&euro; 450.000</td><td>75,0%</td></tr>
2893<tr><td><strong>Totaal</strong></td><td><strong>&euro; 4.500.000</strong></td><td><strong>&euro; 2.730.000</strong></td><td><strong>&euro; 1.770.000</strong></td><td><strong>39,3%</strong></td></tr>
2894</tbody>
2895</table>
2896<p>1.770.000 &divide; 4.500.000 &times; 100 = <strong>39,3%</strong>. Dat concerncijfer bestaat niet als bedrijfseconomische werkelijkheid: het is het gewogen gemiddelde van drie modellen met marges van 30 tot 75 procent. Groeit de handelsomzet volgend jaar met een half miljoen en blijft de rest gelijk, dan zakt de totale marge naar 38,4% zonder dat er één contract is heronderhandeld.</p>
2897<h2>Marge of opslag: het verschil dat het vaakst misgaat</h2>
2898<p>Een inkoopprijs van &euro; 100 en een verkoopprijs van &euro; 125 levert een opslag van 25% op de inkoop op, maar een marge van 20% op de verkoop. Wie die twee door elkaar haalt, calculeert structureel te laag.</p>
2899<p><strong>Marge = opslag &divide; (1 + opslag)</strong> en omgekeerd <strong>opslag = marge &divide; (1 &minus; marge)</strong>. Een gewenste marge van 40% vraagt dus om een opslag van 66,7% op de inkoopprijs, niet van 40%.</p>
2900<p>In de commerciële organisatie wordt bijna altijd in opslag gedacht en in de rapportage in marge. Leg vast welke van de twee de prijslijst stuurt en welke het rapport, en zet de omrekening in de calculatiesheet in plaats van in het hoofd van de verkoper.</p>
2901<h2>Wat is een goede brutomarge?</h2>
2902<p>Er bestaat geen algemene norm, omdat het percentage grotendeels wordt bepaald door het verdienmodel en door de plek waar je de grens van de kostprijs legt. Als grove ordegrootte:</p>
2903<ul>
2904<li><strong>Groothandel en distributie:</strong> 15% tot 25%.</li>
2905<li><strong>Productie en assemblage:</strong> 25% tot 40%.</li>
2906<li><strong>Installatie, bouw en projecten:</strong> 20% tot 35%.</li>
2907<li><strong>Zakelijke dienstverlening:</strong> 40% tot 60%.</li>
2908<li><strong>Software en SaaS:</strong> 70% tot 85%.</li>
2909</ul>
2910<p>Behandel deze bandbreedtes als richtinggevend, niet als norm: ze verschuiven per branche, per jaar en per definitie van de kostprijs. De twee vergelijkingen die wél altijd iets zeggen zijn de eigen ontwikkeling over twaalf maanden en de marge op dezelfde productgroep bij directe concurrenten. Een marge die drie kwartalen op rij een half procentpunt zakt is een probleem, ook als het absolute niveau nog boven de branche ligt.</p>
2911<h2>Prijs, mix en inkoop: waar de verandering vandaan komt</h2>
2912<p>Een margeverschil heeft in de praktijk vier oorzaken, en het loont om die uit elkaar te trekken voordat je conclusies verbindt aan het totaal:</p>
2913<ul>
2914<li><strong>Prijseffect:</strong> de verkoopprijs is gedaald, meestal door kortingen of aanbestedingsdruk.</li>
2915<li><strong>Inkoopeffect:</strong> de kostprijs is gestegen zonder dat de prijslijst is aangepast.</li>
2916<li><strong>Mixeffect:</strong> de omzetverdeling over de productgroepen is verschoven, zoals in het rekenvoorbeeld hierboven.</li>
2917<li><strong>Volume-effect:</strong> raakt de brutowinst in euro's wel, maar het percentage niet &mdash; tenzij staffelkortingen of inkoopbonussen meebewegen.</li>
2918</ul>
2919<p>Alleen bij het prijs- en het inkoopeffect is ingrijpen op de prijsstelling logisch. Bij een mixeffect is de marge per productgroep gewoon gelijk gebleven en gaat het gesprek over commerciële sturing, niet over prijzen. Wie de brutomarge berekent per productgroep in plaats van op concernniveau, ziet dat onderscheid meteen.</p>
2920<h2>
2920Valkuilen bij het brutomarge berekenen</h2>
2921<ul>
2922<li><strong>Rekenen met inkopen in plaats van met de inkoopwaarde van de omzet.</strong> Zonder de voorraadmutatie springt de maandmarge mee met het inkoopritme en zegt hij niets.</li>
2923<li><strong>Een kostprijsdefinitie die per entiteit verschilt.</strong> Zit de inkomende vracht bij de één in de kostprijs en bij de ander in de overhead, dan is het geconsolideerde percentage betekenisloos.</li>
2924<li><strong>Intercompany-omzet laten staan.</strong> In een groep met onderlinge leveringen telt de interne marge dubbel mee tot de <a href="/functionaliteiten/consolidatie">consolidatie</a> hem elimineert.</li>
2925<li><strong>Inkoopbonussen die pas in december binnenkomen.</strong> Een jaarbonus die niet maandelijks wordt opgebouwd, drukt elf maanden de marge en tilt de twaalfde kunstmatig op.</li>
2926<li><strong>Directe uren buiten de kostprijs houden.</strong> Bij projecten en dienstverlening verdwijnt de echte marge dan in de personeelskosten en stuur je op een percentage dat alleen over materiaal gaat.</li>
2927</ul>
2928<h2>Veelgestelde vragen over brutomarge</h2>
2929<h3>Hoe moet je de brutomarge berekenen?</h3>
2930<p>Trek de inkoopwaarde van de omzet af van de netto-omzet en deel het resultaat door die netto-omzet. Vermenigvuldig met 100 voor een percentage. Gebruik de inkoopwaarde van wat er is verkocht, dus inclusief de voorraadmutatie, en niet het totaal aan inkoopfacturen.</p>
2931<h3>Wat is het verschil tussen brutowinst en brutomarge?</h3>
2932<p>De brutowinst is een bedrag in euro's, de brutomarge is datzelfde bedrag als percentage van de omzet. Een groeiend bedrijf kan een stijgende brutowinst combineren met een dalende marge; dat is precies het signaal dat volume de prijsdruk maskeert.</p>
2933<h3>Wat is het verschil tussen brutomarge en nettowinstmarge?</h3>
2934<p>De brutomarge kijkt alleen naar de kosten die direct aan de omzet hangen. De nettowinstmarge trekt daarnaast de operationele kosten, rente, afschrijvingen en belastingen af. Een hoge brutomarge bij een dunne nettomarge wijst op een te zware overheadstructuur, niet op een commercieel probleem.</p>
2935<h3>Is een hogere brutomarge altijd beter?</h3>
2936<p>Nee. Een hoge marge op een klein volume levert minder brutowinst op dan een dunne marge op een groot volume; de vaste kosten worden betaald met euro's, niet met percentages. Beoordeel de marge daarom altijd samen met het absolute bedrag en met de omloopsnelheid van de voorraad.</p>
2937<h2>De marge elke maand in je rapportage</h2>
2938<p>De rekensom is eenvoudig; hem elke maand betrouwbaar, per productgroep en over alle entiteiten heen op tafel krijgen is dat niet. In Smartbooks maak je in de rekeningstructuur een subfolder "Brutomarge" waar je de omzet- en kostprijsrekeningen in sleept, zodat het subtotaal automatisch wordt gevormd. Het percentage voeg je toe als metric en plaats je met een dynamische toevoeging direct onder die regel in de winst- en verliesrekening, ook op geconsolideerd niveau. Via de kostenplaatsselector in de rapportinstellingen bekijk je vervolgens dezelfde marge per productgroep of vestiging, zonder een tweede rapport te bouwen.</p>
2939<p>Meer formules en normen uit deze reeks staan in het <a href="/kenniscentrum">kenniscentrum</a>, of bekijk hoe de <a href="/functionaliteiten/rapporteren">rapportage</a> is opgebouwd.</p>
2940`,ER=`---json
2941{
2942  "title": "Budgetierungs-Demo – 5 Min",
2943  "slug": "budgetteren-demo",
2944  "metaTitle": "Budgetierungssoftware Demo",
2945  "date": "2024-10-07 12:33:11",
2946  "category": "Videos",
2947  "tags": [
2948    "Planung"
2949  ],
2950  "excerpt": "Budgetierungssoftware in Aktion: Demovideo, das zeigt, wie Sie mit Smartbooks einfacher und smarter budgetieren.",
2951  "originalUrl": "https://smartbooks.ai/videos/budgetteren-demo/",
2952  "meta": null
2953}
2954---
2955<p>Diese Demovideo-Tour zeigt, wie Sie mit Smartbooks einfacher und smarter budgetieren.</p>
2956
2957<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/Budgetteren.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Budgetteren%20Demo.mp4"></video></figure>`,NR=`---json
2958{
2959  "title": "Budgeting demo - 5 min",
2960  "metaTitle": "Budgeting Software Demo",
2961  "slug": "budgeting-demo",
2962  "date": "",
2963  "category": "Videos",
2964  "tags": [
2965    "Budgeting",
2966    "Financial Software",
2967    "Smartbooks Demo",
2968    "Forecasting"
2969  ],
2970  "excerpt": "Budgeting software in action: demo video showing how to budget easier and smarter with Smartbooks.",
2971  "originalUrl": "",
2972  "meta": {
2973    "type_bedrijf": "SaaS",
2974    "naam_medewerker": "Alex Johnson",
2975    "functie_medewerker": "Product Specialist",
2976    "logo_bedrijf": "https://example.com/logo.png"
2977  }
2978}
2979---
2980<figure class="wp-block-video"><video controls src="https://example.com/demo.mp4"></video></figure><p>In this short demo, we show you how our budgeting module helps you gain a real-time grip on your finances. Discover how to create forecasts, manage department budgets, and use automated reporting to save time every month.</p>`,IR=`---json
2981{
2982  "title": "Budgetteren demo - 5 min",
2983  "metaTitle": "Budgetteringssoftware demo",
2984  "slug": "budgetteren-demo",
2985  "order": 20,
2986  "date": "2024-10-07 12:33:11",
2987  "category": "Videos",
2988  "tags": [
2989    "Planning"
2990  ],
2991  "excerpt": "Budgetteringssoftware in actie: demovideo die laat zien hoe je makkelijker en slimmer budgetteert met Smartbooks.",
2992  "originalUrl": "https://smartbooks.ai/videos/budgetteren-demo/",
2993  "meta": null,
2994  "enSlug": "budgeting-demo"
2995}
2996---
2997<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/Budgetteren.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Budgetteren%20Demo.mp4"></video></figure>
2998
2999
3000
3001<p></p>
3002
3003
3004
3005
3006<div class="wp-block-kadence-column kadence-column2633_8ea2e8-6a"><div class="kt-inside-inner-col">
3007<figure class="wp-block-kadence-image kb-image2633_735e84-ab size-full kb-image-is-ratio-size"><div class="kb-is-ratio-image kb-image-ratio-land43"><img src="https://smartbooks.ai/wp-content/uploads/2023/12/shutterstock_1919479694.jpg" alt="" class="kb-img wp-image-1108"/></div></figure>
3008</div></div>
3009
3010
3011
3012<div class="wp-block-kadence-column kadence-column2633_f0e4ef-33"><div class="kt-inside-inner-col">
3013<p class="has-medium-font-size">Bekijk het on-demand webinar:</p>
3014
3015
3016
3017<h2 class="kt-adv-heading2633_034ff1-2e wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2633_034ff1-2e">'Rapporteren, plannen en consolideren in 20% van de tijd'</h2>
3018
3019
3020
3021<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns2633_1746b9-7b"></div>
3022</div></div>`,PR=`---json
3023{
3024  "title": "Cash Conversion Cycle Formula: DSO, DIO and DPO Explained",
3025  "slug": "cash-conversion-cycle-formula",
3026  "date": "2026-09-30 10:00:00",
3027  "category": "Articles",
3028  "tags": [
3029    "Rapporteren",
3030    "Forecast",
3031    "Budgetteren"
3032  ],
3033  "excerpt": "The cash conversion cycle formula is DSO + DIO - DPO. A worked example, sector benchmarks and the fastest lever to shorten your cycle.",
3034  "originalUrl": "",
3035  "metaTitle": "Cash Conversion Cycle Formula: Calculation and Norms"
3036}
3037---
3038<p>The <strong>cash conversion cycle formula</strong> is DSO + DIO &minus; DPO: days sales outstanding plus days inventory outstanding, minus days payables outstanding. The result shows how many days cash stays locked up between paying a supplier and collecting from a customer.</p>
3039<p>For a controller this is a financing question rather than an academic ratio. Every day in the cycle is a day of revenue the company funds itself: at annual revenue of &euro; 12 million, one day costs roughly &euro; 33,000 in liquidity. That is the difference with <a href="/en/articles/working-capital">working capital</a>, which expresses the same position in euros. Days are the better unit for comparison, because they adjust for growth by themselves.</p>
3040<h2>What the cash conversion cycle formula measures</h2>
3041<p>The cash conversion cycle, also called the cash-to-cash cycle or the cash conversion period, measures the throughput time of working c
3041apital in days. It has three components:</p>
3042<ul>
3043<li><strong>DSO</strong> (days sales outstanding): the average number of days between invoicing and payment. The calculation, the countback method and sector norms are covered in <a href="/en/articles/dso-calculation">DSO calculation</a>.</li>
3044<li><strong>DIO</strong> (days inventory outstanding): the average number of days inventory sits on the balance sheet before it is sold. For project-based companies, work in progress belongs here as well.</li>
3045<li><strong>DPO</strong> (days payables outstanding): the average number of days taken before a supplier gets paid. This is the only component that shortens the cycle instead of extending it.</li>
3046</ul>
3047<p>DSO and DIO together form the operating cycle: the time a euro needs to travel through inventory and receivables and turn back into cash. Subtracting supplier credit leaves exactly the part the company finances on its own.</p>
3048<h2>The cash conversion cycle formula step by step</h2>
3049<p><strong>Cash conversion cycle = DSO + DIO &minus; DPO</strong></p>
3050<p>Each component follows the same pattern: a balance sheet position divided by a flow, multiplied by the number of days in the period.</p>
3051<ol>
3052<li><strong>DSO = (accounts receivable &divide; revenue) &times; days.</strong> Strip VAT out of the receivables balance, since the revenue below it is recorded net of VAT.</li>
3053<li><strong>DIO = (inventory &divide; cost of goods sold) &times; days.</strong> Never against revenue: inventory is carried at cost, so the denominator has to be at cost as well. Otherwise the gross margin ends up inside the ratio.</li>
3054<li><strong>DPO = (accounts payable &divide; cost of goods sold) &times; days.</strong> Strip VAT here too, and include only purchasing that actually runs through accounts payable.</li>
3055<li>Add DSO and DIO, then subtract DPO. Use the same period and the same basis for all three, or the formula compares apples with pears inside itself.</li>
3056</ol>
3057<p>With growth or seasonality, use the average of opening and closing balances instead of the closing balance alone. Measuring on closing balances during fast growth mostly measures the growth.</p>
3058<h2>Worked example</h2>
3059<p>A wholesaler with annual revenue of &euro; 12,000,000 and cost of goods sold of &euro; 8,400,000 applies the cash conversion cycle formula over a full year of 365 days. All balance sheet positions are net of VAT.</p>
3060<table>
3061<thead><tr><th>Position</th><th>
3061Amount</th><th>Result</th></tr></thead>
3062<tbody>
3063<tr><td>Accounts receivable</td><td>&euro; 1,480,000</td><td>DSO 45.0 days</td></tr>
3064<tr><td>Inventory</td><td>&euro; 1,380,000</td><td>DIO 60.0 days</td></tr>
3065<tr><td>Accounts payable</td><td>&euro; 690,000</td><td>DPO 30.0 days</td></tr>
3066<tr><td><strong>Cash conversion cycle</strong></td><td>&mdash;</td><td><strong>75.0 days</strong></td></tr>
3067</tbody>
3068</table>
3069<p>45.0 + 60.0 &minus; 30.0 = <strong>75 days</strong>, roughly two and a half months of revenue financed internally. At &euro; 33,000 per day, about &euro; 2.5 million sits locked in working capital.</p>
3070<p>Suppose procurement moves supplier terms from 30 to 45 days and inventory comes down by eight days: 45.0 + 52.0 &minus; 45.0 = 52 days. Twenty-three days shorter, releasing more than &euro; 750,000 in cash without adding a single euro of margin.</p>
3071<h2>What counts as a good outcome?</h2>
3072<p>There is no absolute benchmark; the result follows the business model. The only meaningful comparison is against your own history and against companies running a comparable model.</p>
3073<ul>
3074<li><strong>Retail and hospitality:</strong> often negative. Inventory turns within days, customers pay immediately and suppliers are paid after thirty or forty days. The customer funds the operation.</li>
3075<li><strong>Professional services:</strong> almost no inventory, so the cycle is effectively DSO minus DPO. Thirty to fifty days is common.</li>
3076<li><strong>Wholesale and manufacturing:</strong> sixty to a hundred days is normal, with the largest share sitting in DIO.</li>
3077<li><strong>Construction and project work:</strong> work in progress makes the cycle long and volatile. Milestone billing and down payments are the only real levers.</li>
3078</ul>
3079<p>A negative outcome is therefore no arithmetic error at all, but a feature of the model. Judge the twelve-month trend alongside the <a href="/en/articles/quick-ratio-calculation">quick ratio</a>, which shows whether short-term coverage holds up.</p>
3080<h2>Which of the three levers moves fastest?</h2>
3081<p>In theory DPO is the cheapest lever, since paying later costs nothing. In practice it is the hardest. Dutch B2B contracts may stipulate sixty days at most, and since 1 July 2022 large companies may no longer agree terms beyond thirty days with SME suppliers. Stretching terms unilaterally also forfeits early payment discounts and supplier goodwill.</p>
3082<p>DSO delivers real results fastest, because part of the delay sits in your own process: the days between delivery and the invoice going out count in full. An aging analysis shows immediately whether the increase comes from a handful of large customers or from the whole portfolio.</p>
3083<p>DIO is usually the largest component and the slowest to move. Reducing inventory touches procurement, sales and delivery reliability, and the effect only becomes visible after a quarter or two. Start with the product groups that turn over slowest, rather than the ones carrying the highest value.</p>
3084<h2>Pitfalls</h2>
3085<ul>
3086<li><strong>VAT on one side only.</strong> Receivables and payables are carried gross on the balance sheet, while revenue and cost of goods sold are net. At 21% that structurally inflates the number of days by 21%.</li>
3087<li><strong>Measuring DIO or DPO against revenue.</strong> Both belong against cost of goods sold. Using revenue compresses the days by exactly the gross margin percentage and makes the result incomparable with any sector series.</li>
3088<li><strong>Ignoring work in progress.</strong> In construction and project companies most of the pre-financing sits under work in progress rather than inventory. Leave it out and the cycle looks dozens of days shorter than it is.</li>
3089<li><strong>Including intercompany positions.</strong> Current account balances between group entities carry no real payment term and distort a consolidated measurement completely. Filter them out before consolidating.</li>
3090<li><strong>Celebrating a decline that is only a shift.</strong> Factoring, early payment discounts and stretched supplier terms shorten the cycle immediately, yet merely move the financing elsewhere. Always read a decline alongside gross margin and interest cost.</li>
3091</ul>
3092<h2>Frequently asked questions</h2>
3093<h3>What is the cash conversion cycle formula?</h3>
3094<p>DSO + DIO &minus; DPO. Days sales outstanding plus days inventory outstanding, minus days payables outstanding. The outcome is a number of days rather than an amount, which makes it comparable across periods and across entities of different sizes.</p>
3095<h3>How do you calculate it in Excel?</h3>
3096<p>Set up five monthly columns: receivables, inventory, payables, revenue and cost of goods sold, all net of VAT. Derive DSO, DIO and DPO next to them and add a sixth column for the cycle itself. The twelve-month trend says far more than any single month.</p>
3097<h3>Is a negative cash conversion cycle good?</h3>
3098<p>For a retailer or a subscription business, negative is normal and healthy: customers pay before suppliers have to be paid. For a manufacturer with long lead times the same figure would suggest suppliers are structurally paid late. The outcome only makes sense next to the business model.</p>
3099<h3>How does it differ from the operating cycle?</h3>
3100<p>The operating cycle is DSO plus DIO and covers the time from purchase to cash collection. Subtracting DPO leaves only the portion the company finances itself.</p>
3101<h2>From ratio to monthly steering</h2>
3102<p>The cycle changes daily, yet in many organisations it gets calculated once a year for the annual accounts. That is far too late to act on. Smartbooks shows the aging analysis for receivables and payables per entity and consolidated, with intercompany relations filtered out, and lets you drive planned receivables and payables from DSO and DPO metrics. Working capital then moves along with the revenue plan and the cash flow forecast rolls out of the same model, putting the cycle in the same <a href="/en/functionalities/reporting">reporting set</a> as the result.</p>
3103<p>Start with twelve months of history on a fixed basis and read the cash conversion cycle formula alongside the adjacent ratios: <a href="/en/articles/cash-flow-calculation">cash flow calculation</a> for the cash flow itself, and <a href="/en/articles/13-week-cashflow-planning-peace-of-mind">13-week cashflow planning</a> for the short term.</p>
3104`,TR=`---json
3105{
3106  "title": "Cash conversion cycle berekenen: formule en voorbeeld",
3107  "slug": "cash-conversion-cycle",
3108  "enSlug": "cash-conversion-cycle-formula",
3109  "date": "2026-09-30 10:00:00",
3110  "category": "Articles",
3111  "tags": [
3112    "Rapporteren",
3113    "Forecast",
3114    "Budgetteren"
3115  ],
3116  "excerpt": "De cash conversion cycle berekenen: de formule DSO + DIO - DPO, een rekenvoorbeeld, sectornormen en de knop die het snelst kas vrijmaakt.",
3117  "originalUrl": "",
3118  "metaTitle": "Cash conversion cycle: formule, norm en voorbeeld"
3119}
3120---
3121<p><strong>De cash conversion cycle</strong> is het aantal dagen tussen het betalen van je leverancier en het ontvangen van het geld van je klant. Je rekent hem uit als DSO + DIO &minus; DPO: debiteurendagen plus voorraaddagen, min crediteurendagen.</p>
3122<p>Voor een controller is dat geen academisch kengetal maar een financieringsvraag. Elke dag in de cyclus is een dag omzet die de onderneming zelf voorfinanciert: bij een jaaromzet van &euro; 12 miljoen kost elke dag ongeveer &euro; 33.000 aan liquiditeit. Het verschil met <a href="/artikelen/werkkapitaal-berekenen">werkkapitaal berekenen</a> zit in de eenheid. Werkkapitaal drukt dezelfde positie uit in euro's, de cash conversion cycle in dagen &mdash; en dagen corrigeren vanzelf voor groei, waardoor ze over de tijd en tussen entiteiten wel vergelijkbaar blijven.</p>
3123<h2>Wat is de cash conversion cycle?</h2>
3124<p>
3124De cash conversion cycle, ook wel geldconversiecyclus, cash conversion period of cash-to-cash cycle, meet de doorlooptijd van het werkkapitaal in dagen. Hij bestaat uit drie schakels:</p>
3125<ul>
3126<li><strong>DSO</strong> (days sales outstanding, debiteurentermijn): het aantal dagen tussen factuur en ontvangst. Hoe je dat getal opbouwt en welke norm erbij hoort, staat in <a href="/artikelen/dso-berekenen">DSO berekenen</a>.</li>
3127<li><strong>DIO</strong> (days inventory outstanding, voorraaddagen): het aantal dagen dat een artikel gemiddeld op voorraad ligt voordat het wordt verkocht. Bij projectbedrijven hoort het onderhanden werk hier ook in.</li>
3128<li><strong>DPO</strong> (days payables outstanding, crediteurentermijn): het aantal dagen dat je zelf neemt voordat je een leverancier betaalt. Dit is de enige schakel die de cyclus verkort in plaats van verlengt.</li>
3129</ul>
3130<p>DSO en DIO samen heten de operating cycle: de tijd die een euro nodig heeft om via voorraad en debiteur weer geld te worden. Daar gaat het leverancierskrediet vanaf, en wat overblijft is precies het deel dat de onderneming zelf financiert.</p>
3131<h2>De formule om de cash conversion cycle te berekenen</h2>
3132<p><strong>Cash conversion cycle = DSO + DIO &minus; DPO</strong></p>
3133<p>De drie componenten reken je elk op dezelfde manier uit: een balanspost gedeeld door een stroomgrootheid, maal het aantal dagen in de periode.</p>
3134<ol>
3135<li><strong>DSO = (debiteuren &divide; omzet) &times; dagen.</strong> Haal de btw uit het debiteurensaldo, want de omzet eronder staat exclusief btw.</li>
3136<li><strong>DIO = (voorraad &divide; kostprijs van de omzet) &times; dagen.</strong> Niet tegen de omzet: voorraad staat tegen inkoopwaarde op de balans, dus de noemer moet ook tegen inkoopwaarde staan. Anders komt de marge in het getal terecht.</li>
3137<li><strong>DPO = (crediteuren &divide; kostprijs van de omzet) &times; dagen.</strong> Ook hier de btw eruit, en alleen de inkoop die daadwerkelijk via crediteuren loopt.</li>
3138<li>Tel DSO en DIO op en trek DPO eraf. Gebruik voor alle drie dezelfde periode en dezelfde grondslag, anders vergelijk je appels met peren binnen je eigen formule.</li>
3139</ol>
3140<p>Neem bij groei of seizoensinvloed het gemiddelde van de begin- en eindstand van de balansposten in plaats van alleen de eindstand. Meet je op eindstanden terwijl de omzet hard groeit, dan meet je vooral die groei.</p>
3141<h2>Rekenvoorbeeld</h2>
3142<p>Een groothandel met een jaaromzet van &euro; 12.000.000 en een kostprijs van de omzet van &euro; 8.400.000 wil de cash conversion cycle berekenen over een heel jaar, dus over 365 dagen. Alle balans
3142posten staan exclusief btw.</p>
3143<table>
3144<thead><tr><th>Post</th><th>Bedrag</th><th>Uitkomst</th></tr></thead>
3145<tbody>
3146<tr><td>Debiteuren</td><td>&euro; 1.480.000</td><td>DSO 45,0 dagen</td></tr>
3147<tr><td>Voorraad</td><td>&euro; 1.380.000</td><td>DIO 60,0 dagen</td></tr>
3148<tr><td>Crediteuren</td><td>&euro; 690.000</td><td>DPO 30,0 dagen</td></tr>
3149<tr><td><strong>Cash conversion cycle</strong></td><td>&mdash;</td><td><strong>75,0 dagen</strong></td></tr>
3150</tbody>
3151</table>
3152<p>45,0 + 60,0 &minus; 30,0 = <strong>75 dagen</strong>. De onderneming financiert dus ongeveer twee en een halve maand omzet zelf voor. Tegen &euro; 33.000 per dag ligt er zo'n &euro; 2,5 miljoen vast in werkkapitaal.</p>
3153<p>Stel dat inkoop de betalingstermijn bij leveranciers van 30 naar 45 dagen brengt en de voorraad met acht dagen omlaag gaat: 45,0 + 52,0 &minus; 45,0 = 52 dagen. Drieentwintig dagen korter, oftewel ruim &euro; 750.000 die vrijkomt zonder dat er een euro marge bij hoeft.</p>
3154<h2>Wat is een goede cash conversion cycle?</h2>
3155<p>Een absolute norm bestaat niet; de uitkomst hangt volledig aan het businessmodel. De enige zinvolle vergelijking is die met de eigen historie en met ondernemingen die hetzelfde model draaien.</p>
3156<ul>
3157<li><strong>Retail en horeca:</strong> vaak negatief. De voorraad is binnen dagen verkocht, de klant rekent direct af en de leverancier wordt pas na dertig of veertig dagen betaald. De afnemer financiert de operatie.</li>
3158<li><strong>Zakelijke dienstverlening:</strong> nauwelijks voorraad, dus de cyclus is in de praktijk DSO min DPO. Dertig tot vijftig dagen is gangbaar.</li>
3159<li><strong>Groothandel en productie:</strong> zestig tot honderd dagen is normaal, met het grootste deel in DIO.</li>
3160<li><strong>Bouw en projecten:</strong> het onderhanden werk maakt de cyclus lang en grillig. Termijnfacturatie en aanbetalingen zijn hier de enige echte knop.</li>
3161</ul>
3162<p>Een negatieve uitkomst is dus geen rekenfout maar een kenmerk van het model. Beoordeel het getal nooit los: leg de trend over twaalf maanden naast de <a href="/artikelen/quick-ratio-berekenen">quick ratio</a>, die laat zien of er op korte termijn ook genoeg dekking is.</p>
3163<h2>Welke van de drie knoppen draait het snelst?</h2>
3164<p>In theorie is DPO de goedkoopste knop: later betalen kost niets. In de praktijk is het de lastigste. Contractueel mag in Nederland in B2B maximaal zestig dagen worden afgesproken, en grote ondernemingen mogen met mkb-leveranciers sinds 1 juli 2022 niet langer dan dertig dagen overeenkomen. Eenzijdig oprekken kost bovendien betalingskorting en leveranciersgoodwill.</p>
3165<p>DSO levert het snelst echt resultaat op, omdat een deel van de vertraging in het eigen proces zit: de dagen tussen levering en verzonden factuur tellen volledig mee. Een ouderdomsanalyse laat direct zien of de oploop uit een paar grote klanten komt of uit de hele portefeuille.</p>
3166<p>DIO is meestal de grootste post en tegelijk de traagste. Voorraad saneren raakt inkoop, verkoop en leveringsbetrouwbaarheid, en het effect is pas na een of twee kwartalen zichtbaar. Begin daarom bij de artikelgroepen met de laagste omloopsnelheid, niet bij die met de hoogste waarde.</p>
3167<h2>Valkuilen</h2>
3168<ul>
3169<li><strong>Btw aan een kant.</strong> Debiteuren en crediteuren staan inclusief btw op de balans, omzet en kostprijs eronder niet. Bij 21% levert dat structureel 21% te veel dagen op.</li>
3170<li><strong>DIO of DPO tegen de omzet rekenen.</strong> Beide horen tegen de kostprijs van de omzet. Rekenen tegen de omzet drukt de dagen met precies het margepercentage en maakt de uitkomst onvergelijkbaar met elke branchereeks.</li>
3171<li><strong>Onderhanden werk vergeten.</strong> Bij project- en bouwbedrijven staat het grootste deel van de voorfinanciering niet onder voorraad maar onder onderhanden werk. Laat je die post weg, dan lijkt de cyclus tientallen dagen korter dan hij is.</li>
3172<li><strong>Intercompany-posities meenemen.</strong> Rekening-courantverhoudingen tussen groepsmaatschappijen hebben geen echte betaaltermijn en vertekenen een geconsolideerde meting volledig. Filter ze eruit voordat je consolideert.</li>
3173<li><strong>
3173Een daling vieren die een verschuiving is.</strong> Factoring, betaalkorting en het oprekken van leverancierstermijnen verkorten de cyclus direct, maar verplaatsen de financiering alleen. Beoordeel een daling altijd naast de brutomarge en de rentelast.</li>
3174</ul>
3175<h2>Veelgestelde vragen over de cash conversion cycle</h2>
3176<h3>Wat zegt de cash conversion cycle?</h3>
3177<p>Hij zegt hoeveel dagen geld vastzit tussen de betaling aan de leverancier en de ontvangst van de klant. Hoe hoger het getal, hoe meer werkkapitaal nodig is om dezelfde omzet te draaien. Tien dagen eraf maakt bij een omzet van &euro; 12 miljoen ongeveer &euro; 330.000 aan kas vrij.</p>
3178<h3>Hoe kun je de cash conversion cycle berekenen in Excel?</h3>
3179<p>Zet per maand vijf kolommen neer: debiteuren, voorraad, crediteuren, omzet en kostprijs van de omzet, alle vijf exclusief btw. Reken daarnaast DSO, DIO en DPO uit en tel die in een zesde kolom op tot de cyclus. De trend over twaalf maanden zegt meer dan elke losse maand.</p>
3180<h3>Is een negatieve cash conversion cycle goed?</h3>
3181<p>Voor een retailer of een abonnementsbedrijf is negatief normaal en gezond: de klant betaalt voordat de leverancier betaald moet worden. Voor een productiebedrijf met een lange doorlooptijd zou hetzelfde getal betekenen dat leveranciers structureel te laat worden betaald. De uitkomst is pas te beoordelen naast het businessmodel.</p>
3182<h3>Wat is het verschil met de operating cycle?</h3>
3183<p>De operating cycle is DSO plus DIO en meet de tijd van inkoop tot ontvangst van het geld. Daar gaat DPO nog van af, zodat alleen het deel overblijft dat de onderneming zelf financiert.</p>
3184<h2>Van kengetal naar maandelijkse sturing</h2>
3185<p>De cyclus verandert elke dag, terwijl hij in veel organisaties alleen bij de jaarrekening wordt uitgerekend. Dat is te laat om er nog iets aan te doen. Smartbooks toont de ouderdomsanalyse van debiteuren en crediteuren per entiteit en geconsolideerd, met de mogelijkheid intercompany-relaties weg te filteren, en laat je debiteuren en crediteuren in de planning aan een DSO- en DPO-metric hangen. Daardoor beweegt het werkkapitaal automatisch mee met de omzetprognose en rolt de kasstroom uit hetzelfde model. Zo staan de doorlooptijden in dezelfde <a href="/functionaliteiten/rapporteren">rapportageset</a> als het resultaat.</p>
3186<p>Begin met twaalf maanden historie op een vaste grondslag en leg daar de aangrenzende kengetallen naast: <a href="/artikelen/cashflow-berekenen">cashflow berekenen</a> voor de kasstroom zelf en de <a href="/artikelen/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening">13-weken cashflowplanning</a> voor de korte termijn. De rest van de set staat in het <a href="/kenniscentrum">kenniscentrum</a>.</p>
3187`,DR=`---json
3188{
3189  "title": "Cash flow calculation: formula, methods and example",
3190  "slug": "cash-flow-calculation",
3191  "metaTitle": "Cash flow calculation: formula and worked example",
3192  "date": "2026-09-02 10:00:00",
3193  "category": "Articles",
3194  "tags": [
3195    "Reporting",
3196    "Forecasting",
3197    "Budgeting"
3198  ],
3199  "excerpt": "Cash flow calculation explained: the formula for operating and free cash flow, a worked example, benchmarks and the pitfalls that distort it.",
3200  "originalUrl": ""
3201}
3202---
3203<p>A <strong>cash flow calculation</strong> converts net profit into money by adjusting for items that never touched the bank: net profit plus depreciation, minus the increase in working capital, minus capital expenditure, plus the balance of financing. The result is what the business actually generated or consumed during the period.</p>
3204<p>For a controller that is a different number from profit, and usually the more important one. A company can report an excellent result and still run dry, because the growth ended up in receivables and inventory. Profit allocates revenue and cost to a period; cash flow is what happens on the bank statement.</p>
3205<h2>Which cash flow are you measuring?</h2>
3206<p>Cash flow is not a single figure. A cash flow statement has three levels, and most confusion comes from two peo
3206ple meaning different ones.</p>
3207<ul>
3208<li><strong>Operating cash flow</strong> &ndash; the money the operation itself produces, after correcting for the movement in working capital. This is the level banks and investors look at.</li>
3209<li><strong>Investing cash flow</strong> &ndash; purchases and disposals of tangible and intangible fixed assets and of participations.</li>
3210<li><strong>Financing cash flow</strong> &ndash; new and repaid loans, capital contributions and dividends paid.</li>
3211</ul>
3212<p>On top of these sits <strong>free cash flow</strong>: operating cash flow minus the investment needed to maintain capacity. That is what remains for repayment, dividend and acquisitions, which is why it drives valuations and bank covenants.</p>
3213<h2>The cash flow calculation formula</h2>
3214<p><strong>Operating cash flow = net profit + depreciation and other non-cash items &minus; increase in working capital</strong></p>
3215<p><strong>Free cash flow = operating cash flow &minus; investment in fixed assets</strong></p>
3216<ol>
3217<li>Start from net profit after tax in the profit and loss account.</li>
3218<li>Add back the non-cash items: depreciation, amortisation, movements in provisions and unrealised exchange rate differences.</li>
3219<li>Correct for the movement in working capital. Rising receivables and inventory consume cash, while rising payables release it. The mechanics are set out in <a href="/en/articles/working-capital">working capital</a>.</li>
3220<li>Deduct investments in fixed assets and add the proceeds of any disposals.</li>
3221<li>Add the financing balance: new borrowings less repayments, dividends and capital movements.</li>
3222<li>Close with the reconciliation: the three cash flows together must equal the movement in cash between the opening and closing balance sheet. If they do not, a balance sheet movement is missing or counted twice.</li>
3223</ol>
3224<h2>Worked example</h2>
3225<p>A manufacturing company closes the financial year with the following figures.</p>
3226<table>
3227<thead><tr><th>Item</th><th>
3227Amount</th></tr></thead>
3228<tbody>
3229<tr><td>Net profit after tax</td><td>&euro; 620,000</td></tr>
3230<tr><td>Depreciation</td><td>&euro; 240,000</td></tr>
3231<tr><td>Increase in receivables</td><td>&minus; &euro; 180,000</td></tr>
3232<tr><td>Increase in inventory</td><td>&minus; &euro; 60,000</td></tr>
3233<tr><td>Increase in payables</td><td>&euro; 95,000</td></tr>
3234<tr><td><strong>Operating cash flow</strong></td><td><strong>&euro; 715,000</strong></td></tr>
3235<tr><td>Investment in machinery</td><td>&minus; &euro; 310,000</td></tr>
3236<tr><td><strong>Free cash flow</strong></td><td><strong>&euro; 405,000</strong></td></tr>
3237<tr><td>Loan repayment</td><td>&minus; &euro; 150,000</td></tr>
3238<tr><td>Dividend paid</td><td>&minus; &euro; 100,000</td></tr>
3239<tr><td><strong>Movement in cash</strong></td><td><strong>&euro; 155,000</strong></td></tr>
3240</tbody>
3241</table>
3242<p>Profit is &euro; 620,000, yet only &euro; 155,000 lands in the bank. The gap of &euro; 465,000 has nothing to do with trading: &euro; 145,000 went into working capital, &euro; 310,000 into machinery and &euro; 250,000 to the lender and the shareholder, while the &euro; 240,000 of depreciation cost no money at all.</p>
3243<h2>Direct and indirect cash flow calculation</h2>
3244<p>Two routes lead to the same answer. The <strong>direct method</strong> adds up actual receipts and payments, usually from bank movements and open items in the sales and purchase ledgers. It is accurate at weekly level and forms the basis of a <a href="/en/articles/13-week-cashflow-planning-peace-of-mind">13-week cash flow plan</a>, but it demands an administration in which every payment can be traced to a category.</p>
3245<p>The <strong>indirect method</strong> starts from the result and the balance sheet movements, exactly as above. It reconciles to the annual accounts by construction, which is why external reporting standardises on it. Smartbooks works this way: the cash flow statement is built from the profit and loss results and the balance sheet movements between two periods, so the historical view follows the ledger automatically. Forecasting uses the same logic. You plan the profit and loss account and the balance sheet, let the result flow into equity through the profit reserves, and make cash the balancing item for all remaining balance sheet movements. Tie receivables and payables to a DSO or DPO metric and working capital moves with the plan on its own.</p>
3246<h2>When is the outcome good enough?</h2>
3247<p>There is no fixed threshold as there is for the current ratio, but three tests hold up in practice.</p>
3248<ul>
3249<li><strong>Operating cash flow against net profit.</strong> Over several years operating cash flow should exceed profit, if only because depreciation is added back. Structurally below it means profit is being funded out of working c
3249apital.</li>
3250<li><strong>Cash conversion.</strong> Operating cash flow divided by EBITDA sits roughly between 80% and 100% for a stable business. Fast growers and project-driven companies run below that; how the denominator is built up is covered in <a href="/en/articles/ebitda-calculation">EBITDA calculation</a>.</li>
3251<li><strong>Free cash flow across the cycle.</strong> A single year of negative free cash flow is normal when a major replacement investment falls due. Three consecutive years is not, unless the company is deliberately growing on debt and the lender knows it.</li>
3252</ul>
3253<p>Always test the outcome against your own loan documentation as well. Covenants such as net debt to EBITDA or a minimum debt service coverage differ by bank, by sector and by financing round; there is no universal rule of thumb.</p>
3254<h2>Pitfalls</h2>
3255<ul>
3256<li><strong>Reading EBITDA as cash.</strong> EBITDA ignores working capital, capital expenditure, interest and tax &ndash; the four items that separate a good year from a liquidity problem.</li>
3257<li><strong>Taking balance sheet movements at face value.</strong> A balance sheet in foreign currency carries translation differences that are not cash flows, and neither are revaluations or disposals. Include them and the statement still balances, but it measures something other than cash.</li>
3258<li><strong>Consolidating without eliminations.</strong> Intercompany current accounts create group-level cash flows that never existed.</li>
3259<li><strong>Counting cash in a subsidiary as available.</strong> Without a cash pool, or under dividend restrictions, that balance is out of reach for the holding company.</li>
3260<li><strong>Looking backwards only.</strong> A cash flow statement explains the past. Steering needs a forward-looking <a href="/en/articles/cash-budget">cash budget</a> alongside it.</li>
3261</ul>
3262<h2>Frequently asked questions</h2>
3263<h3>How do you make a cash flow calculation from annual accounts?</h3>
3264<p>Take net profit from the profit and loss account, add back depreciation and other non-cash items, and correct for the movements between the opening and closing balance sheet. That is the indirect method. The outcome must equal the difference in cash between the two balance sheets, and that reconciliation is your check.</p>
3265<h3>What is the difference between cash flow and profit?</h3>
3266<p>
3266Profit allocates revenue and cost to the period they belong to, regardless of when payment occurs. Cash flow measures the payment itself. An invoice on thirty-day terms is profit today and money a month from now.</p>
3267<h3>Is EBITDA the same as cash flow?</h3>
3268<p>No. EBITDA is operating profit before depreciation and therefore a rough proxy at best. It contains no working capital movements, no capital expenditure, no interest and no tax, and those are precisely the items that decide what remains in the bank.</p>
3269<h3>How often should a cash flow calculation be made?</h3>
3270<p>Monthly, at the close, as a standard part of the reporting pack. A cash flow statement that appears only with the annual accounts arrives too late to act on.</p>
3271<p>Start at the month-end close: put one page next to the profit and loss account showing the three cash flows and the reconciliation to the bank balance. If you would rather not repeat that work by hand every month, see how <a href="/en/functionalities/cashflow-planning">budgeting and cash flow planning</a> come together in one model, or browse the <a href="/en/knowledge-center">knowledge center</a> for the neighbouring ratios.</p>
3272`,BR=`---json
3273{
3274  "title": "Cashflow berekenen: formule, methodes en rekenvoorbeeld",
3275  "slug": "cashflow-berekenen",
3276  "metaTitle": "Cashflow berekenen: formule, methodes en voorbeeld",
3277  "date": "2026-09-02 10:00:00",
3278  "category": "Articles",
3279  "tags": [
3280    "Rapporteren",
3281    "Forecast",
3282    "Budgetteren"
3283  ],
3284  "excerpt": "Cashflow berekenen: de formule voor operationele en vrije kasstroom, met rekenvoorbeeld, normen en de valkuilen die het beeld vertekenen.",
3285  "originalUrl": "",
3286  "enSlug": "cash-flow-calculation"
3287}
3288---
3289<p><strong>Cashflow berekenen</strong> doe je door het nettoresultaat te corrigeren voor posten die geen geld kosten en voor de mutaties in de balans: nettowinst plus afschrijvingen, min de toename van het werkkapitaal, min de investeringen, plus het saldo van de financiering. De uitkomst is het bedrag dat een onderneming in een periode werkelijk heeft overgehouden of verbruikt.</p>
3290<p>Voor een controller is dat een ander getal dan de winst, en meestal het belangrijkere. Een onderneming kan een uitstekend resultaat rapporteren en tegelijk leeglopen, omdat de groei volledig in debiteuren en voorraad gaat zitten. Winst is een toerekening over perioden; kasstroom is wat er op de bankrekening gebeurt.</p>
3291<h2>Welke cashflow bereken je?</h2>
3292<p>Cashflow is geen enkelvoudig begrip. Een kasstroomoverzicht kent drie niveaus, en de meeste misverstanden ontstaan doordat twee mensen een ander niveau bedoelen.</p>
3293<ul>
3294<li><strong>Operationele kasstroom</strong> &ndash; het geld dat de bedrijfsvoering zelf oplevert, na correctie voor de mutatie in het werkkapitaal. Dit is het niveau waar een bank en een investeerder naar kijken.</li>
3295<li><strong>Investeringskasstroom</strong> &ndash; aankopen en verkopen van materi&euml;le en immateri&euml;le vaste activa en van deelnemingen.</li>
3296<li><strong>Financieringskasstroom</strong> &ndash; opgenomen en afgeloste leningen, kapitaalstortingen en uitgekeerd dividend.</li>
3297</ul>
3298<p>Daarnaast is er de <strong>vrije kasstroom</strong>: de operationele kasstroom min de investeringen die nodig zijn om de capaciteit in stand te houden. Dat is het bedrag dat overblijft voor aflossing, dividend en overnames, en daarmee het getal dat in waarderingen en in bankconvenanten opduikt.</p>
3299<h2>De formule om de cashflow te berekenen</h2>
3300<p><strong>Operationele kasstroom = nettowinst + afschrijvingen en overige niet-kasposten &minus; toename werkkapitaal</strong></p>
3301<p><strong>Vrije kasstroom = operationele kasstroom &minus; investeringen in vaste activa</strong></p>
3302<ol>
3303<li>Begin bij het nettoresultaat na belasting uit de winst-en-verliesrekening.</li>
3304<li>Tel de niet-kasposten erbij op: afschrijvingen, amortisatie, mutaties in voorzieningen en ongerealiseerde koersverschillen.</li>
3305<li>Corrigeer voor de mutatie in het werkkapitaal. Een toename van debiteuren en voorraden kost geld, een toename van crediteuren levert het juist op. De opbouw daarvan staat in <a href="/artikelen/werkkapitaal-berekenen">werkkapitaal berekenen</a>.</li>
3306<li>Trek de investeringen in vaste activa af en tel de opbrengst van de
3306sinvesteringen erbij op.</li>
3307<li>Tel het saldo van de financiering erbij: opgenomen leningen minus aflossingen, dividend en kapitaalmutaties.</li>
3308<li>Sluit af met de controle: de som van de drie kasstromen hoort exact gelijk te zijn aan de mutatie van de liquide middelen tussen begin- en eindbalans. Klopt dat niet, dan mist er een balansmutatie of staat er een post dubbel.</li>
3309</ol>
3310<h2>Rekenvoorbeeld</h2>
3311<p>Een productiebedrijf sluit het boekjaar af met de volgende cijfers.</p>
3312<table>
3313<thead><tr><th>Post</th><th>Bedrag</th></tr></thead>
3314<tbody>
3315<tr><td>Nettowinst na belasting</td><td>&euro; 620.000</td></tr>
3316<tr><td>Afschrijvingen</td><td>&euro; 240.000</td></tr>
3317<tr><td>Toename debiteuren</td><td>&minus; &euro; 180.000</td></tr>
3318<tr><td>Toename voorraden</td><td>&minus; &euro; 60.000</td></tr>
3319<tr><td>Toename crediteuren</td><td>&euro; 95.000</td></tr>
3320<tr><td><strong>Operationele kasstroom</strong></td><td><strong>&euro; 715.000</strong></td></tr>
3321<tr><td>Investeringen in machines</td><td>&minus; &euro; 310.000</td></tr>
3322<tr><td><strong>Vrije kasstroom</strong></td><td><strong>&euro; 405.000</strong></td></tr>
3323<tr><td>Aflossing lening</td><td>&minus; &euro; 150.000</td></tr>
3324<tr><td>Uitgekeerd dividend</td><td>&minus; &euro; 100.000</td></tr>
3325<tr><td><strong>Mutatie liquide middelen</strong></td><td><strong>&euro; 155.000</strong></td></tr>
3326</tbody>
3327</table>
3328<p>De winst bedraagt &euro; 620.000, maar er komt &euro; 155.000 bij op de bank. Dat verschil van &euro; 465.000 zit niet in de exploitatie: &euro; 145.000 gaat naar werkkapitaal, &euro; 310.000 naar machines en &euro; 250.000 naar de bank en de aandeelhouder, terwijl de afschrijving van &euro; 240.000 juist geen geld heeft gekost.</p>
3329<h2>Direct of indirect de cashflow berekenen</h2>
3330<p>Twee routes leiden naar dezelfde uitkomst. De <strong>directe methode</strong> telt de werkelijke ontvangsten en betalingen op, meestal vanuit de bankmutaties en de openstaande posten van debiteuren en crediteuren. Die route is nauwkeurig op weekniveau en het uitgangspunt van een <a href="/artikelen/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening">13-weken cashflowplanning</a>, maar vraagt een administratie waarin elke betaling herleidbaar is naar een categorie.</p>
3331<p>De <strong>indirecte methode</strong> vertrekt vanuit het resultaat en de balansmutaties, precies zoals hierboven. Ze sluit per definitie aan op de jaarrekening en is daarom de standaard in de externe verslaggeving. Smartbooks rekent langs deze weg: het cashflowoverzicht wordt opgebouwd uit de resultaten en de balansmutaties tussen twee perioden, zodat het historische overzicht meebeweegt met de administratie. Voor een prognose geldt dezelfde logica: je plant de winst-en-verliesrekening en de balans, laat het resultaat via de winstreserve in het eigen vermogen landen en maakt de liquide middelen de sluitpost van alle overige balansmutaties. Hang je debiteuren en crediteuren aan een DSO- of DPO-metric, dan beweegt het werkkapitaal automatisch mee met het plan.</p>
3332<h2>Wanneer is de uitkomst goed?</h2>
3333<p>Er bestaat geen harde norm zoals bij de current ratio, maar drie toetsen werken in de praktijk.</p>
3334<ul>
3335<li><strong>Operationele kasstroom tegenover nettowinst.</strong> Over meerdere jaren hoort de operationele kasstroom hoger te liggen dan de winst, alleen al omdat de afschrijving erbij komt. Ligt hij structureel lager, dan wordt de winst gefinancierd met werkkapitaal.</li>
3336<li><strong>Cash conversion.</strong> De operationele kasstroom gedeeld door de EBITDA ligt bij een stabiel bedrijf grofweg tussen 80% en 100%. Groeiers en projectgedreven bedrijven zitten daar structureel onder; hoe je die noemer opbouwt staat in <a href="/artikelen/ebitda-berekenen">EBITDA berekenen</a>.</li>
3337<li><strong>Vrije kasstroom over de cyclus.</strong> E&eacute;n jaar met een negatieve vrije kasstroom is bij een grote vervangingsinvestering normaal. Drie jaar op rij niet, tenzij de onderneming bewust groeit op vreemd vermogen en de financier dat weet.</li>
3338</ul>
3339<p>Toets de uitkomst daarnaast altijd tegen je eigen leningdocumentatie. Convenanten als net debt / EBITDA of een minimale debt service coverage verschillen per bank, per branche en per financieringsronde; een algemene vuistregel bestaat er niet.</p>
3340<h2>Valkuilen</h2>
3341<ul>
3342<li><strong>EBITDA lezen als kasstroom.</strong> EBITDA negeert werkkapitaal, investeringen, rente en belasting &ndash; precies de vier posten die het verschil maken tussen een goed jaar en een liquiditeitsprobleem.</li>
3343<li><strong>Balansmutaties zonder correctie overnemen.</strong> Een balans in vreemde valuta bevat koersverschillen die geen geldstroom zijn, en herwaarderingen en desinvesteringen evenmin. Reken je die mee, dan sluit het overzicht wel, maar meet je iets anders dan kasstroom.</li>
3344<li><strong>Consolideren zonder eliminaties.</strong> Rekening-courantverhoudingen tussen groepsmaatschappijen leveren op groepsniveau kasstromen op die er niet zijn.</li>
3345<li><strong>Kas in een dochter als vrij beschikbaar tellen.</strong> Zonder cashpool, of bij dividendrestricties, staat dat saldo niet ter beschikking van de holding.</li>
3346<li><strong>Alleen achteruit kijken.</strong> Een kasstroomoverzicht verklaart het verleden. Voor sturing hoort er een <a href="/artikelen/liquiditeitsbegroting-maken">liquiditeitsbegroting</a> naast te liggen die vooruit kijkt.</li>
3347</ul>
3348<h2>Veelgestelde vragen</h2>
3349<h3>Hoe kun je de cashflow berekenen uit een jaarrekening?</h3>
3350<p>
3350Neem het nettoresultaat uit de winst-en-verliesrekening, tel de afschrijvingen en overige niet-kasposten erbij op en corrigeer met de mutaties tussen de begin- en de eindbalans. Dat is de indirecte methode. De uitkomst moet exact gelijk zijn aan het verschil in liquide middelen tussen beide balansen; die aansluiting is meteen je controle.</p>
3351<h3>Wat is het verschil tussen cashflow en winst?</h3>
3352<p>Winst rekent opbrengsten en kosten toe aan de periode waarin ze thuishoren, ongeacht wanneer er betaald wordt. Cashflow meet het moment van betalen zelf. Een factuur met dertig dagen krediet is vandaag winst en pas over een maand geld op de rekening.</p>
3353<h3>Is EBITDA hetzelfde als cashflow?</h3>
3354<p>Nee. EBITDA is het operationele resultaat v&oacute;&oacute;r afschrijvingen en daarmee hooguit een ruwe benadering. Er zitten geen werkkapitaalmutaties, investeringen, rente of belasting in, terwijl juist die posten bepalen wat er onderaan de streep op de bankrekening overblijft.</p>
3355<h3>Hoe vaak moet je de cashflow berekenen?</h3>
3356<p>Maandelijks bij de afsluiting, als vast onderdeel van de rapportage. Een kasstroomoverzicht dat alleen bij de jaarrekening verschijnt, komt te laat om er nog een beslissing op te baseren.</p>
3357<p>Begin bij de maandafsluiting: zet naast de winst-en-verliesrekening &eacute;&eacute;n pagina met de drie kasstromen en de aansluiting op het banksaldo. Wil je die berekening niet elke maand met de hand herhalen, bekijk dan hoe <a href="/functionaliteiten/budgetteren-cashflow">budgetteren en cashflowplanning</a> in &eacute;&eacute;n model samenkomen, of blader door het <a href="/kenniscentrum">kenniscentrum</a> voor de aangrenzende kengetallen.</p>
3358`,MR=`---json
3359{
3360  "title": "Konsolidierungs-Demo – 3:30 Min",
3361  "slug": "consolideren-demo",
3362  "metaTitle": "Konsolidieren ohne Excel: Demo",
3363  "date": "2024-10-06 12:33:11",
3364  "category": "Videos",
3365  "tags": [
3366    "Konsolidieren"
3367  ],
3368  "excerpt": "Konsolidieren ohne Excel: Demovideo, das zeigt, wie Sie mit Smartbooks die Konsolidierung vollständig automatisieren und mehr Einblick auf Konzernebene erhalten.",
3369  "originalUrl": "https://smartbooks.ai/videos/consolideren-demo/",
3370  "meta": null
3371}
3372---
3373<p>Konsolidieren ohne Excel: Diese Demovideo-Tour zeigt, wie Sie mit Smartbooks die Konsolidierung vollständig automatisieren und mehr Einblick auf Konzernebene gewinnen.</p>
3374
3375<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/Consolideren.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Consolideren%20Demo.mp4"></video></figure>`,FR=`---json
3376{
3377  "title": "Consolidation demo - 3:30 min",
3378  "metaTitle": "Consolidation Without Excel: Demo",
3379  "slug": "consolideren-demo",
3380  "date": "",
3381  "category": "Videos",
3382  "tags": [
3383    "Consolidation",
3384    "Automation",
3385    "Reporting",
3386    "Demo"
3387  ],
3388  "excerpt": "Consolidation without Excel: demo video showing how to fully automate consolidation with Smartbooks while gaining deeper insights at group level.",
3389  "originalUrl": "",
3390  "meta": {
3391    "type_bedrijf": "SaaS"
3392  }
3393}
3394---
3395<figure class="wp-block-video"><video controls src="https://example.com/demo.mp4"></video></figure><p>In this video, we demonstrate how Smartbooks simplifies the complex process of financial consolidation. Discover how to eliminate manual errors and generate real-time group reports with ease.</p>`,RR=`---json
3396{
3397  "title": "Consolideren demo - 3:30 min",
3398  "metaTitle": "Consolideren zonder Excel: demo",
3399  "slug": "consolideren-demo",
3400  "order": 21,
3401  "date": "2024-10-06 12:33:11",
3402  "category": "Videos",
3403  "tags": [
3404    "Consolideren"
3405  ],
3406  "excerpt": "Consolideren zonder Excel: demovideo die laat zien hoe je met Smartbooks de consolidatie volledig automatiseert en meer inzicht krijgt op geconsolideerd niveau.",
3407  "originalUrl": "https://smartbooks.ai/videos/consolideren-demo/",
3408  "meta": null,
3409  "enSlug": "consolidating-demo"
3410}
3411---
3412<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/Consolideren.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Consolideren%20Demo.mp4"></video></figure>
3413
3414
3415
3416<p></p>
3417
3418
3419
3420
3421<div class="wp-block-kadence-column kadence-column2638_211d39-e9"><div class="kt-inside-inner-col">
3422<figure class="wp-block-kadence-image kb-image2638_a20467-02 size-full kb-image-is-ratio-size"><div class="kb-is-ratio-image kb-image-ratio-land43"><img src="https://smartbooks.ai/wp-content/uploads/2023/12/shutterstock_1919479694.jpg" alt="" class="kb-img wp-image-1108"/></div></figure>
3423</div></div>
3424
3425
3426
3427<div class="wp-block-kadence-column kadence-column2638_22b26b-63"><div class="kt-inside-inner-col">
3428<p class="has-medium-font-size">Bekijk het on-demand webinar:</p>
3429
3430
3431
3432<h2 class="kt-adv-heading2638_ad4f1d-db wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2638_ad4f1d-db">'Rapporteren, plannen en consolideren in 20% van de tijd'</h2>
3433
3434
3435
3436<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns2638_008685-95"></div>
3437</div></div>`,OR=`---json
3438{
3439  "title": "Accounts payable management: DPO, norms and pitfalls",
3440  "slug": "accounts-payable-management",
3441  "date": "2026-10-02 10:00:00",
3442  "category": "Articles",
3443  "tags": [
3444    "Rapporteren",
3445    "Forecast",
3446    "Automatisering"
3447  ],
3448  "excerpt": "Accounts payable management in practice: the DPO formula, a payables aging example, legal payment terms and what deferral really costs.",
3449  "originalUrl": "",
3450  "metaTitle": "Accounts Payable Management: DPO, Terms and Aging"
3451}
3452---
3453<p><strong>Accounts payable management</strong> is the control of outgoing payments: which supplier invoices are open, when they fall due, and in what rhythm they get paid. The metric underneath it is DPO, days payable outstanding: the payables balance divided by the purchase volume that runs through supplier invoices, multiplied by the days in the period.</p>
3454<p>For a controller this is the cheapest source of funding available. Supplier credit carries no interest as long as the agreed term is respected, and every extra day taken beyond that term does have a price &mdash; a forfeited early payment discount, statutory late payment interest, or lost priority with a supplier who is short on stock. None of that appears on the invoice. It mirrors the incoming side: what <a href="/en/articles/accounts-receivable-automation">accounts receivable automation</a>
3454 does for collections, this does for disbursements.</p>
3455<h2>What accounts payable management covers</h2>
3456<p>Accounts payable management covers four things that are often owned separately: agreeing payment terms per supplier, capturing purchase invoices completely and on time, monitoring open items against their due date, and deciding the payment moment. The first two usually sit with the AP department, the last two with finance.</p>
3457<p>That split matters. Invoice processing describes the administration; accounts payable management describes the steering. A flawless invoice flow produces no extra cash runway while nobody decides the payment moment, and the sharpest payment policy achieves nothing if a quarter of the invoices reach the system only after their due date. In euros the position sits in <a href="/en/articles/working-capital">working capital</a>, under current liabilities; in days it sits in DPO.</p>
3458<h2>The DPO formula behind payables control</h2>
3459<p><strong>DPO = (accounts payable &divide; purchases running through supplier invoices) &times; days in the period</strong></p>
3460<ol>
3461<li><strong>Strip VAT out of the payables balance.</strong> The balance sheet carries that figure including VAT while the cost base underneath excludes it. At 21% that alone inflates DPO by a fifth.</li>
3462<li><strong>Define the denominator precisely.</strong> Only purchases and costs that actually pass along a supplier invoice. Payroll, depreciation and interest charges never touch payables.</li>
3463<li><strong>Pick the period and the day count.</strong> 365 for a full year, the actual day count for a month. Do not switch basis halfway through a series.</li>
3464<li><strong>Average the balance when volumes move.</strong> With a growing or seasonal purchase pattern, take the average of opening and closing payables; otherwise the measure mostly tracks growth.</li>
3465<li><strong>Put the result next to the weighted average contractual term.</strong> That is the only comparison that says anything about quality.</li>
3466</ol>
3467<p>DPO is also the third leg of the <a href="/en/articles/cash-conversion-cycle-formula">cash conversion cycle</a>, alongside receivable days and inventory days. There it is one component of three; here it is the subject itself. For the receivables side of the same arithmetic, see <a href="/en/articles/dso-calculation">DSO calculation</a>.</p>
3468<h2>Worked example: DPO and a payables aging</h2>
3469<p>A wholesaler buys &euro; 6,000,000 excluding VAT per year through supplier invoices. The payables balance at the reporting date is &euro; 895,400 including VAT, or &euro; 740,000 excluding.</p>
3470<p>740,000 &divide; 6,000,000 &times; 365 = <strong>45.0 days</strong>. The weighted average contractual term is 30 days. Fifteen days therefore sit between agreement and practice, and they appear in no contract at all. An aging analysis of the open items shows where they are:</p>
3471<table>
3472<thead><tr><th>Bucket</th><th>
3472Amount</th><th>Share</th></tr></thead>
3473<tbody>
3474<tr><td>Current (not yet due)</td><td>&euro; 612,000</td><td>68.4%</td></tr>
3475<tr><td>1&ndash;30 days overdue</td><td>&euro; 198,400</td><td>22.2%</td></tr>
3476<tr><td>31&ndash;60 days overdue</td><td>&euro; 61,000</td><td>6.8%</td></tr>
3477<tr><td>61&ndash;90 days overdue</td><td>&euro; 15,000</td><td>1.7%</td></tr>
3478<tr><td>Over 90 days overdue</td><td>&euro; 9,000</td><td>1.0%</td></tr>
3479<tr><td><strong>Total open</strong></td><td><strong>&euro; 895,400</strong></td><td><strong>100%</strong></td></tr>
3480</tbody>
3481</table>
3482<p>Overdue amounts to &euro; 283,400, close to a third of the balance. Most of that sits in the first bucket and is a question of rhythm: invoices that slip just past their due date into the next payment run. The &euro; 9,000 beyond ninety days is different. An invoice rarely ages that far through a payment decision; almost always it reflects a dispute, a missing purchase order, or a credit note that was never processed.</p>
3483<h2>What counts as a healthy DPO?</h2>
3484<p>No industry benchmark exists to hold a DPO against, and that is not a gap in the statistics: the outcome follows by definition from what was agreed. A procurement team that negotiated sixty days should show a higher DPO than one paying on thirty. The comparison that does work is against your own weighted average contractual term.</p>
3485<ul>
3486<li><strong>Around the agreed term plus a few days of processing:</strong> the function does what it should.</li>
3487<li><strong>Clearly higher:</strong> payment is structurally late. That is risk rather than funding policy, priced in late payment interest and a deteriorating standing with the supplier.</li>
3488<li><strong>Clearly lower:</strong> payment runs early and free credit is given away. Defensible only when an early payment discount is captured in return.</li>
3489</ul>
3490<p>The legal ceiling is firm. Across the EU, the Late Payment Directive sets thirty days as the default term; business parties may agree up to sixty days, and longer only where that is not grossly unfair to the creditor. In the Netherlands a large company may not agree a term beyond thirty days with an SME supplier: since 1 July 2022 a longer term is void, thirty days applies instead, and statutory commercial interest runs from day thirty-one. That interest tracks the ECB refinancing rate plus eight percentage points. Check the contract and the standing of both parties, because the ceiling follows from those.</p>
3491<h2>Is paying later actually free?</h2>
3492<p>No, and the price can be calculated. Take a supplier offering 2% off for payment within ten days against a net term of thirty. Letting that discount lapse means buying twenty extra days of credit for 2% of the invoice amount.</p>
3493<p><strong>Annualised cost = (discount &divide; (100 &minus; discount)) &times; (365 &divide; (net term &minus; discount term))</strong></p>
3494<p>(2 &divide; 98) &times; (365 &divide; 20) = <strong>37.2% per year</strong>. Policy is therefore a choice per supplier: those offering a discount into a fixed run inside the discount window, the rest on the due date. Where no discount applies, using the agreed term in full is free money.</p>
3495<h2>Pitfalls in accounts payable management</h2>
3496<ul>
3497<li><strong>VAT on one side of the fraction.</strong> Payables carry VAT on the balance sheet while the purchase costs underneath do not. At 21% that produces a DPO structurally a fifth too high.</li>
3498<li><strong>Invoices still outside the ledger.</strong> Goods received, invoice in transit or stuck in an approval step: the payables balance understates, DPO looks shorter than reality, and the aging misses the item entirely. Measure the lead time from receipt to posting as well.</li>
3499<li><strong>An aging built on posting date.</strong> An analysis driven by posting date instead of due date wrongly drops invoices on a sixty-day term into an overdue bucket.</li>
3500<li><strong>Intercompany positions left in.</strong> Current account balances between group entities have no real due date and distort any consolidated measurement. Filter them out before the group figure reaches a report.</li>
3501<li><strong>Deferral presented as saving.</strong> Paying later shifts outgoing cash into the next month without reducing cost. Once a discount lapses or late payment interest starts running, it costs more than the facility it replaces.</li>
3502</ul>
3503<h2>Frequently asked questions about accounts payable management</h2>
3504<h3>What does accounts payable management include?</h3>
3505<p>Agreeing payment terms per supplier, processing purchase invoices, monitoring open items against their due date, and deciding the payment moment. The first two are administration, the last two are steering.</p>
3506<h3>How do you calculate days payable outstanding?</h3>
3507<p>Divide the payables balance excluding VAT by the purchase volume running through supplier invoices, then multiply by the days in the peri
3507od. At &euro; 740,000 payables against &euro; 6,000,000 of annual purchases, that gives 45 days.</p>
3508<h3>What is the legal payment term for suppliers?</h3>
3509<p>Thirty days where nothing was agreed. EU business parties may agree up to sixty days, and longer only where that is not grossly unfair. Between a large company and an SME supplier in the Netherlands, thirty days is the maximum and a longer term is void.</p>
3510<h3>How does this differ from accounts payable processing?</h3>
3511<p>Processing captures and records supplier invoices; management decides when they are paid and watches the age of the balance. In many organisations the first is solid and the second belongs to nobody.</p>
3512<h2>From invoice flow to monthly control</h2>
3513<p>The reporting rhythm you want for accounts payable management is monthly rather than annual: DPO against the agreed term, the overdue share of the aging, and the lead time from receipt to posting. Smartbooks shows the aging analysis for both receivables and payables in five due-date buckets, per entity and consolidated, with the option to filter intercompany relations out of the totals; every cell opens the underlying invoices. In planning you attach payables to a DPO metric, so the cash flow rolls out of the same model. That places both sides of the balance in the same <a href="/en/functionalities/reporting">reporting set</a> as the result.</p>
3514<p>Start with twelve months of DPO on a fixed basis and the weighted contractual term beside it: that gap is the entire agenda. For the surrounding cash view, see <a href="/en/articles/cash-flow-calculation">cash flow calculation</a>. The rest of the series sits in the <a href="/en/knowledge-center">knowledge center</a>.</p>
3515`,_R=`---json
3516{
3517  "title": "Crediteurenbeheer: de DPO, de norm en de valkuilen",
3518  "slug": "crediteurenbeheer",
3519  "enSlug": "accounts-payable-management",
3520  "date": "2026-10-02 10:00:00",
3521  "category": "Articles",
3522  "tags": [
3523    "Rapporteren",
3524    "Forecast",
3525    "Automatisering"
3526  ],
3527  "excerpt": "Crediteurenbeheer in de praktijk: de DPO-formule, een ouderdomsanalyse met echte bedragen, de wettelijke betaaltermijn en wat uitstel kost.",
3528  "originalUrl": "",
3529  "metaTitle": "Crediteurenbeheer: DPO, betaaltermijn en aging"
3530}
3531---
3532<p><strong>Crediteurenbeheer</strong> is het sturen van de uitgaande betalingen: welke leveranciersfacturen openstaan, wanneer ze vervallen en in welk ritme ze betaald worden. Het kengetal eronder is de DPO of crediteurentermijn, en die reken je uit als de crediteurenstand gedeeld door de inkoopwaarde die via crediteuren loopt, maal het aantal dagen in de periode.</p>
3533<p>Voor een controller is dit geen administratieve routine maar de goedkoopste financieringsbron die er is. Leverancierskrediet kost geen rente zolang de afgesproken termijn gerespecteerd wordt. Elke dag die de onderneming daar ongevraagd bij pakt kost wel iets &mdash; betalingskorting, handelsrente of voorrang bij een leverancier met te weinig voorraad &mdash; alleen staat die prijs nergens op een factuur. Het is het spiegelbeeld van de inkomende kant: wat <a href="/artikelen/debiteurenbeheer-automatiseren">debiteurenbeheer automatiseren</a> doet voor de ontvangsten, doet dit voor de uitgaven.</p>
3534<h2>Wat is crediteurenbeheer?</h2>
3535<p>Crediteurenbeheer omvat vier dingen die in de praktijk vaak los van elkaar belegd zijn: het vastleggen van de betaalcondities per leverancier, het tijdig en volledig verwerken van inkoopfacturen, het bewaken van de openstaande posten op vervaldatum, en het bepalen van het betaalmoment. De eerste twee liggen meestal bij de crediteurenadministratie, de laatste twee bij finance.</p>
3536<p>Dat onderscheid doet ertoe. Crediteurenadministratie beschrijft de verwerking; crediteurenbeheer beschrijft de sturing. Een foutloos verwerkte factuurstroom levert geen enkele dag extra kasruimte op zolang niemand het betaalmoment bepaalt, en het scherpste betaalbeleid haalt niets uit als een kwart van de facturen pas na de vervaldatum in het systeem staat. In euro's staat de positie in het <a href="/artikelen/werkkapitaal-berekenen">werkkapitaal</a>, bij de kortlopende schulden; in dagen staat hij in de DPO.</p>
3537<h2>De formule onder crediteurenbeheer: de DPO</h2>
3538<p><strong>DPO = (crediteuren &divide; inkoopwaarde via crediteuren) &times; aantal dagen in de periode</strong></p>
3539<ol>
3540<li><strong>Haal de btw uit de crediteurenstand.</strong> Op de balans staat het saldo inclusief btw, de inkoopkosten eronder exclusief. Bij 21% levert dat anders structureel een vijfde te veel dagen op.</li>
3541<li><strong>Bepaal de noemer scherp.</strong> Alleen de inkoop- en kostenstroom die daadwerkelijk langs een leveranciersfactuur komt. Loonkosten, afschrijvingen en rentelasten horen er niet in.</li>
3542<li><strong>Kies de periode en het aantal dagen.</strong> 365 bij een jaar, het werkelijke aantal dagen bij een maand. Wissel niet halverwege een reeks van grondslag.</li>
3543<li><strong>Neem het gemiddelde bij groei.</strong> Bij een groeiende of seizoensgevoelige inkoopstroom het gemiddelde van de begin- en eindstand, anders meet je vooral die groei.</li>
3544<li><strong>Leg de uitkomst naast de gewogen gemiddelde contractuele termijn.</strong> Dat is de enige vergelijking die iets zegt over de kwaliteit van het beheer.</li>
3545</ol>
3546<p>De DPO is ook de derde schakel in de <a href="/artikelen/cash-conversion-cycle">cash conversion cycle</a>, naast de debiteuren- en voorraaddagen. Daar is hij een component; hier is hij het onderwerp. Voor de debiteurenkant van dezelfde rekensom: <a href="/artikelen/dso-berekenen">DSO berekenen</a>.</p>
3547<h2>Rekenvoorbeeld: DPO en ouderdomsanalyse</h2>
3548<p>Een groothandel koopt per jaar voor &euro; 6.000.000 exclusief btw in via leveranciersfacturen. De crediteurenstand op balansdatum is &euro; 895.400 inclusief btw, oftewel &euro; 740.000 exclusief.</p>
3549<p>740.000 &divide; 6.000.000 &times; 365 = <strong>45,0 dagen</strong>. De gewogen gemiddelde contractuele termijn is 30 dagen. Er zitten dus vijftien dagen tussen afspraak en praktijk die in geen enkel contract staan. De ouderdomsanalyse van de openstaande posten laat zien waar ze zitten:</p>
3550<table>
3551<thead><tr><th>
3551Ouderdom</th><th>Bedrag</th><th>Aandeel</th></tr></thead>
3552<tbody>
3553<tr><td>Niet vervallen</td><td>&euro; 612.000</td><td>68,4%</td></tr>
3554<tr><td>1&ndash;30 dagen vervallen</td><td>&euro; 198.400</td><td>22,2%</td></tr>
3555<tr><td>31&ndash;60 dagen vervallen</td><td>&euro; 61.000</td><td>6,8%</td></tr>
3556<tr><td>61&ndash;90 dagen vervallen</td><td>&euro; 15.000</td><td>1,7%</td></tr>
3557<tr><td>Ouder dan 90 dagen</td><td>&euro; 9.000</td><td>1,0%</td></tr>
3558<tr><td><strong>Totaal openstaand</strong></td><td><strong>&euro; 895.400</strong></td><td><strong>100%</strong></td></tr>
3559</tbody>
3560</table>
3561<p>Vervallen is &euro; 283.400, bijna een derde van het saldo. Het grootste deel daarvan zit in de eerste emmer en is een ritmekwestie: facturen die net over de vervaldatum heen in de volgende betaalrun belanden. De &euro; 9.000 ouder dan negentig dagen is dat niet. Zo oud wordt een factuur zelden door een betaalkeuze; dat is bijna altijd een geschil, een ontbrekende inkooporder of een creditnota die nooit is verwerkt.</p>
3562<h2>Wat is een goede crediteurentermijn?</h2>
3563<p>Een branchenorm om een DPO naast te leggen bestaat niet, en dat is geen gebrek aan statistiek: de uitkomst volgt per definitie uit wat is afgesproken. Wie zestig dagen heeft bedongen hoort een hogere DPO te hebben dan wie op dertig dagen betaalt. De vergelijking die wel werkt is die met de eigen gewogen gemiddelde contractuele termijn.</p>
3564<ul>
3565<li><strong>Rond de afgesproken termijn plus enkele dagen verwerkingstijd:</strong> het beheer doet wat het moet doen.</li>
3566<li><strong>Duidelijk hoger:</strong> er wordt structureel te laat betaald. Dat is geen financieringsbeleid maar een risico, met handelsrente en een verslechterende positie bij de leverancier als prijs.</li>
3567<li><strong>Duidelijk lager:</strong> er wordt te vroeg betaald en gratis krediet weggegeven. Dat is alleen verdedigbaar als er betalingskorting tegenover staat.</li>
3568</ul>
3569<p>De juridische bovengrens is in Nederland wel hard. Is er niets afgesproken, dan geldt een wettelijke betaaltermijn van dertig dagen. Zakelijke partijen mogen tot zestig dagen overeenkomen en langer alleen als dat niet kennelijk onbillijk is tegenover de schuldeiser. Tussen een grote onderneming en een mkb-leverancier is dertig dagen sinds 1 juli 2022 het maximum: een langere afspraak is nietig, er geldt dan dertig dagen en de wettelijke handelsrente loopt vanaf dag eenendertig. Die rente hangt aan de ECB-rente plus acht procentpunt.</p>
3570<h2>Is later betalen gratis?</h2>
3571<p>Nee, en de prijs is te becijferen. Neem een leverancier die 2% korting geeft bij betaling binnen tien dagen en anders dertig dagen hanteert. Die korting laten lopen betekent twintig dagen extra krediet kopen voor 2% van het factuurbedrag.</p>
3572<p><strong>Jaarkosten = (korting &divide; (100 &minus; korting)) &times; (365 &divide; (betaaltermijn &minus; kortingstermijn))</strong></p>
3573<p>(2 &divide; 98) &times; (365 &divide; 20) = <strong>37,2% op jaarbasis</strong>. Het beleid is daarmee een keuze per leverancier: wie korting geeft in een vaste run binnen de kortingstermijn, de rest op de vervaldatum. Staat er geen korting tegenover, dan is de termijn volledig benutten gratis geld.</p>
3574<h2>Valkuilen in het crediteurenbeheer</h2>
3575<ul>
3576<li><strong>Btw aan een kant van de breuk.</strong> Crediteuren staan inclusief btw op de balans, de inkoopkosten eronder exclusief. Bij 21% geeft dat een DPO die structureel een vijfde te hoog is.</li>
3577<li><strong>Facturen die nog niet geboekt zijn.</strong> Goederen ontvangen, factuur nog onderweg of in een goedkeuringsstap: de crediteurenstand is te laag, de DPO lijkt korter dan hij is en de ouderdomsanalyse mist de post. Meet daarom ook de doorlooptijd van ontvangst tot boeking.</li>
3578<li><strong>Een ouderdomsanalyse op boekdatum.</strong> Een aging die van de boekdatum uitgaat in plaats van de vervaldatum zet facturen met een termijn van zestig dagen onterecht in een vervallen emmer.</li>
3579<li><strong>Intercompany-posities meetellen.</strong> Rekening-courantverhoudingen tussen groepsmaatschappijen hebben geen echte vervaldatum en vertekenen elke geconsolideerde meting. Filter ze eruit voordat het groepsgetal in een rapportage belandt.</li>
3580<li><strong>Uitstel als besparing presenteren.</strong> Later betalen schuift de uitgaande kasstroom naar de volgende maand maar verlaagt geen kosten. Valt er korting weg of gaat de handelsrente lopen, dan 
3580is het duurder dan de faciliteit die het moet vervangen.</li>
3581</ul>
3582<h2>Veelgestelde vragen over crediteurenbeheer</h2>
3583<h3>Wat valt er onder crediteurenbeheer?</h3>
3584<p>Het vastleggen van betaalcondities per leverancier, het verwerken van inkoopfacturen, het bewaken van de openstaande posten op vervaldatum en het bepalen van het betaalmoment. De eerste twee zijn administratie, de laatste twee sturing.</p>
3585<h3>Hoe bereken je de crediteurentermijn?</h3>
3586<p>Deel de crediteurenstand exclusief btw door de inkoopwaarde die via crediteuren loopt en vermenigvuldig met het aantal dagen in de periode. Bij &euro; 740.000 crediteuren en &euro; 6.000.000 jaarinkoop komt daar 45 dagen uit.</p>
3587<h3>Wat is de wettelijke betaaltermijn voor leveranciers?</h3>
3588<p>Zonder afspraak dertig dagen. Zakelijke partijen mogen tot zestig dagen overeenkomen en langer alleen als dat niet kennelijk onbillijk is. Spreekt een grote onderneming iets af met een mkb-leverancier, dan is dertig dagen het maximum en is een langere termijn nietig.</p>
3589<h3>Wat is het verschil met crediteurenadministratie?</h3>
3590<p>De administratie verwerkt en registreert de leveranciersfacturen; het beheer bepaalt wanneer ze worden betaald en bewaakt de ouderdom van het saldo. In veel organisaties is het eerste op orde en het tweede bij niemand belegd.</p>
3591<h2>Van factuurstroom naar maandelijkse sturing</h2>
3592<p>Het patroon dat je wilt zien is maandelijks, niet jaarlijks: de DPO naast de afgesproken termijn, het vervallen deel van de aging, en de doorlooptijd van ontvangst tot boeking. Smartbooks toont de ouderdomsanalyse van debiteuren en crediteuren in vijf vervalemmers, per entiteit en geconsolideerd, met de mogelijkheid intercompany-relaties uit de totalen te filteren; vanuit elke cel open je de onderliggende facturen. In de planning hang je de crediteuren aan een DPO-metric, zodat de kasstroom uit hetzelfde model rolt. Daarmee staan debiteuren en crediteurenbeheer in dezelfde <a href="/functionaliteiten/rapporteren">rapportageset</a> als het resultaat.</p>
3593<p>Begin bij twaalf maanden DPO op een vaste grondslag met de gewogen contractuele termijn ernaast: dat verschil is de hele agenda. Voor de kasstroom eromheen: <a href="/artikelen/cashflow-berekenen">cashflow berekenen</a> en de <a href="/artikelen/liquiditeitsbegroting-maken">liquiditeitsbegroting</a>. De rest van de reeks staat in het <a href="/kenniscentrum">kenniscentrum</a>.</p>
3594`,LR=`---json
3595{
3596  "title": "Current Ratio berechnen: Formel, Richtwert und Beispiel",
3597  "slug": "current-ratio-berekenen",
3598  "metaTitle": "Current Ratio berechnen: Formel und Richtwert",
3599  "date": "2026-08-18 10:00:00",
3600  "category": "Articles",
3601  "tags": [
3602    "Analyse",
3603    "Cashflow",
3604    "Business Control",
3605    "KPI"
3606  ],
3607  "excerpt": "Current Ratio berechnen: Formel, Rechenbeispiel mit Bilanzposten, gesunde Richtwerte und der Unterschied zur Quick Ratio.",
3608  "originalUrl": ""
3609}
3610---
3611<h1>Current Ratio berechnen: <strong>Formel, Richtwert und Beispiel</strong></h1>
3612<p>Die <strong>Current Ratio</strong> berechnen Sie, indem Sie das Umlaufvermögen durch die kurzfristigen Verbindlichkeiten teilen. Sie ist die bekannteste Liquiditätskennzahl und zeigt, ob ein Unternehmen seine innerhalb eines Jahres fälligen Verpflichtungen bedienen kann.</p>
3613<p>Für Controller ist die Current Ratio der schnellste Blick auf das Working Capital: Vorräte, Forderungen und Kasse in einer einzigen Zahl &mdash; fester Bestandteil jedes Monatsberichts und vieler Bankcovenants.</p>
3614<h2>Die Formel</h2>
3615<p><strong>Current Ratio = Umlaufvermögen / kurzfristige Verbindlichkeiten</strong></p>
3616<ol>
3617<li>Umlaufvermögen addieren: Vorräte, Forderungen, sonstige Forderungen, liquide Mittel.</li>
3618<li>Kurzfristige Verbindlichkeiten addieren: Lieferanten, Steuern, Kontokorrent, weitere Verpflichtungen bis zwölf Monate.</li>
3619<li>Umlaufvermögen durch kurzfristige Verbindlichkeiten teilen.</li>
3620</ol>
3621<h2>Rechenbeispiel</h2>
3622<p>Umlaufvermögen 900.000 &euro; (Vorräte 300.000 &euro;, Forderungen 450.000 &euro;, Kasse 150.000 &euro;), kurzfristige Verbindlichkeiten 600.000 &euro;.</p>
3623<p>Current Ratio = 900.000 / 600.000 = <strong>1,5</strong>.</p>
3624<h2>Was ist ein guter Richtwert?</h2>
3625<p>Ein Wert zwischen <strong>1,5 und 2</strong> gilt in der Regel als gesund. Unter 1 übersteigen die kurzfristigen Verbindlichkeiten das Umlaufvermögen &mdash; es besteht Liquiditätsrisiko. Deutlich über 2 deutet auf zu viel gebundenes 
3625Kapital in Vorräten und Forderungen hin.</p>
3626<h2>Current Ratio und Quick Ratio</h2>
3627<p><strong>Quick Ratio = (Umlaufvermögen &minus; Vorräte) / kurzfristige Verbindlichkeiten</strong></p>
3628<p>Im Beispiel: (900.000 &minus; 300.000) / 600.000 = 1,0. Nutzen Sie beide Kennzahlen und ergänzen Sie sie um eine wöchentliche <a href="/de/funktionen/cashflow-planung">Liquiditätsplanung</a>.</p>
3629<h2>Current Ratio verbessern</h2>
3630<ul>
3631<li><strong>Zahlungsziele verkürzen:</strong> schneller fakturieren, konsequent mahnen.</li>
3632<li><strong>Vorräte senken:</strong> weniger Kapital in langsam drehenden Artikeln.</li>
3633<li><strong>Kurzfristig in langfristig umschulden.</strong></li>
3634<li><strong>Gewinne einbehalten:</strong> Kasseposition stärken.</li>
3635</ul>
3636<h2>Häufige Fragen</h2>
3637<p><strong>Wie berechnet man die Current Ratio?</strong><br />Umlaufvermögen geteilt durch kurzfristige Verbindlichkeiten; beide Größen stammen aus der Bilanz.</p>
3638<p><strong>Unterschied zur Quick Ratio?</strong><br />Die Quick Ratio lässt Vorräte außen vor und ist damit strenger.</p>
3639<p><strong>Was bedeutet ein Wert unter 1?</strong><br />Ohne zusätzliche Finanzierung oder schnellere Zahlungseingänge entsteht ein Zahlungsproblem.</p>
3640<h2>Kennzahlen automatisch verfolgen</h2>
3641<p>Smartbooks berechnet Current Ratio, Quick Ratio und Eigenkapitalquote automatisch aus Ihrer Buchhaltung &mdash; monatlich und je Gesellschaft. <a href="/de/demo">Demo buchen</a>.</p>`,WR=`---json
3642{
3643  "title": "Current ratio: formula, benchmark and worked example",
3644  "slug": "current-ratio",
3645  "metaTitle": "Current ratio: formula, benchmark and example",
3646  "date": "2026-08-18 10:00:00",
3647  "category": "Articles",
3648  "tags": [
3649    "Analytics",
3650    "Cash Flow",
3651    "Business Control",
3652    "KPI"
3653  ],
3654  "excerpt": "How to calculate the current ratio: the formula, a worked example with balance sheet items, healthy benchmarks and the difference with the quick ratio.",
3655  "originalUrl": ""
3656}
3657---
3658<h1>Current ratio: <strong>formula, benchmark and worked example</strong></h1>
3659<p>The <strong>current ratio</strong> is calculated by dividing current assets by current liabilities. It is the best-known liquidity ratio and shows whether a company can pay its obligations due within a year from assets that convert to cash within that same year.</p>
3660<p>For controllers the current ratio is the fastest read on working capital: it combines inventory, receivables and cash into a single number, which is why it appears in nearly every monthly report and bank covenant.</p>
3661<h2>The current ratio formula</h2>
3662<p><strong>Current ratio = current assets / current liabilities</strong></p>
3663<ol>
3664<li>Add up current assets: inventory, receivables, other short-term receivables and cash.</li>
3665<li>Add up current liabilities: payables, tax liabilities, overdraft and other obligations due within a year.</li>
3666<li>Divide current assets by current liabilities.</li>
3667</ol>
3668<p>The result is a factor, not a percentage: 1.5 means there is &euro;1.50 of current assets for every euro of current liabilities.</p>
3669<h2>Worked example</h2>
3670<table>
3671<thead><tr><th>Item</th><th>
3671Amount</th></tr></thead>
3672<tbody>
3673<tr><td>Inventory</td><td>&euro;300,000</td></tr>
3674<tr><td>Receivables</td><td>&euro;450,000</td></tr>
3675<tr><td>Cash</td><td>&euro;150,000</td></tr>
3676<tr><td><strong>Current assets</strong></td><td><strong>&euro;900,000</strong></td></tr>
3677<tr><td>Current liabilities</td><td>&euro;600,000</td></tr>
3678<tr><td><strong>Current ratio</strong></td><td><strong>1.5</strong></td></tr>
3679</tbody>
3680</table>
3681<p>Current ratio = 900,000 / 600,000 = <strong>1.5</strong>.</p>
3682<h2>What is a good current ratio?</h2>
3683<p>A current ratio between <strong>1.5 and 2</strong> is generally seen as healthy. Below 1, current liabilities exceed current assets and there is real liquidity risk. Well above 2 may point to too much cash tied up in inventory or receivables: capital that isn't earning a return. Retail and hospitality structurally run lower ratios than manufacturing, so always test against the sector benchmark.</p>
3684<h2>Current ratio versus quick ratio</h2>
3685<p>The current ratio includes inventory, which cannot always be converted quickly. The <strong>quick ratio</strong> excludes it:</p>
3686<p><strong>Quick ratio = (current assets &minus; inventory) / current liabilities</strong></p>
3687<p>In the example above: (900,000 &minus; 300,000) / 600,000 = 1.0. Use both side by side: the current ratio for the overall picture, the quick ratio for the stricter scenario. For actual cash planning, add a weekly <a href="/en/functionalities/cashflow-planning">cash flow forecast</a>.</p>
3688<h2>How to improve the current ratio</h2>
3689<ul>
3690<li><strong>Shorten payment terms:</strong> invoice faster and chase receivables actively.</li>
3691<li><strong>Reduce inventory:</strong> free up working capital tied in slow-moving stock.</li>
3692<li><strong>Refinance short to long:</strong> convert short-term debt into a long-term loan.</li>
3693<li><strong>Retain earnings:</strong> strengthen the cash position instead of paying out.</li>
3694</ul>
3695<h2>Frequently asked questions about the current ratio</h2>
3696<p><strong>How do you calculate the current ratio?</strong><br />Divide current assets by current liabilities. Both figures come straight from the balance sheet.</p>
3697<p><strong>What is the difference between the current ratio and the quick ratio?</strong><br />The quick ratio leaves inventory out of the numerator, making it a stricter measure of immediate payment capacity.</p>
3698<p><strong>What does a current ratio below 1 mean?</strong><br />Current liabilities exceed current assets. Without extra financing or faster collection, a payment problem will arise.</p>
3699<p><strong>Is a high current ratio always good?</strong><br />No. A very high ratio often means unnecessary working capital in inventory and receivables, and therefore a lower return on capital.</p>
3700<h2>Track liquidity ratios automatically</h2>
3701<p>Smartbooks calculates the current ratio, quick ratio and <a href="/en/articles/solvency-ratio">solvency ratio</a> from your ledger automatically, every month and per entity. <a href="/en/demo">Book a demo</a> and see it on your own balance sheet.</p>`,VR=`---json
3702{
3703  "title": "Current ratio berekenen: formule, norm en voorbeeld",
3704  "slug": "current-ratio-berekenen",
3705  "order": 57,
3706  "metaTitle": "Current ratio berekenen: formule, norm en voorbeeld",
3707  "date": "2026-08-18 10:00:00",
3708  "category": "Articles",
3709  "tags": [
3710    "Analyse",
3711    "Cashflow",
3712    "Business Control",
3713    "KPI"
3714  ],
3715  "excerpt": "Current ratio berekenen: de formule, een rekenvoorbeeld met balansposten, wat een gezonde norm is en het verschil met de quick ratio.",
3716  "originalUrl": "",
3717  "enSlug": "current-ratio"
3718}
3719---
3720<h1>Current ratio berekenen: <strong>formule, norm en voorbeeld</strong></h1>
3721<p><strong>Current ratio berekenen</strong> doe je door de vlottende activa te delen door de kortlopende schulden. De current ratio is de bekendste liquiditeitsratio en laat zien of een onderneming haar verplichtingen binnen een jaar kan betalen uit middelen die binnen datzelfde jaar vrijkomen.</p>
3722<p>Voor controllers is de current ratio de snelste temperatuurmeting van het werkkapitaal: hij combineert voorraden, debiteuren en kas in één getal en is daarmee een vast onderdeel van elke maandrapportage en van vrijwel elke bankcovenant.</p>
3723<h2>De formule voor de current ratio</h2>
3724<p><strong>Current ratio = vlottende activa / kortlopende schulden</strong></p>
3725<ol>
3726<li>Tel de vlottende activa op: voorraden, debiteuren, overige vorderingen en liquide middelen.</li>
3727<li>Tel de kortlopende schulden op: crediteuren, belastingschulden, rekening-courantkrediet en overige verplichtingen binnen een jaar.</li>
3728<li>Deel de vlottende activa door de kortlopende schulden.</li>
3729</ol>
3730<p>De uitkomst is een factor, niet een percentage: 1,5 betekent dat er voor elke euro kortlopende schuld €1,50 aan vlottende activa staat.</p>
3731<h2>Rekenvoorbeeld current ratio</h2>
3732<table>
3733<thead><tr><th>
3733Post</th><th>Bedrag</th></tr></thead>
3734<tbody>
3735<tr><td>Voorraden</td><td>&euro;300.000</td></tr>
3736<tr><td>Debiteuren</td><td>&euro;450.000</td></tr>
3737<tr><td>Liquide middelen</td><td>&euro;150.000</td></tr>
3738<tr><td><strong>Vlottende activa</strong></td><td><strong>&euro;900.000</strong></td></tr>
3739<tr><td>Kortlopende schulden</td><td>&euro;600.000</td></tr>
3740<tr><td><strong>Current ratio</strong></td><td><strong>1,5</strong></td></tr>
3741</tbody>
3742</table>
3743<p>Current ratio = 900.000 / 600.000 = <strong>1,5</strong>.</p>
3744<h2>Wat is een goede current ratio?</h2>
3745<p>Een current ratio tussen <strong>1,5 en 2</strong> wordt doorgaans als gezond gezien. Onder 1 zijn de kortlopende schulden groter dan de vlottende activa en is er een reëel liquiditeitsrisico. Ver boven 2 kan duiden op te veel geld in voorraad of debiteuren: kapitaal dat niet rendeert. Retail en horeca werken structureel met lagere ratio's dan bijvoorbeeld de industrie, dus toets altijd aan de sectornorm.</p>
3746<h2>Current ratio, quick ratio en liquiditeit berekenen</h2>
3747<p>De current ratio rekent voorraden mee, en die zijn niet altijd snel in geld om te zetten. De <strong>quick ratio</strong> laat voorraden buiten beschouwing:</p>
3748<p><strong>Quick ratio = (vlottende activa &minus; voorraden) / kortlopende schulden</strong></p>
3749<p>In het voorbeeld hierboven: (900.000 &minus; 300.000) / 600.000 = 1,0. Gebruik beide ratio's naast elkaar: de current ratio voor het totaalbeeld, de quick ratio voor het strengere scenario. Voor de echte kasplanning kijk je daarnaast naar een <a href="/functionaliteiten/budgetteren-cashflow">liquiditeitsprognose</a> op weekbasis.</p>
3750<h2>Current ratio verbeteren</h2>
3751<ul>
3752<li><strong>Debiteurentermijn verkorten:</strong> sneller factureren en actiever nabellen.</li>
3753<li><strong>Voorraad verlagen:</strong> minder werkkapitaal vast in traag lopende artikelen.</li>
3754<li><strong>Kort herfinancieren naar lang:</strong> kortlopende schuld omzetten in een langlopende lening.</li>
3755<li><strong>Winst inhouden:</strong> kaspositie versterken in plaats van uitkeren.</li>
3756</ul>
3757<h2>Veelgestelde vragen over de current ratio</h2>
3758<p><strong>Hoe bereken je de current ratio?</strong><br />Deel de vlottende activa door de kortlopende schulden. Beide posten haal je rechtstreeks uit de balans.</p>
3759<p><strong>Wat is het verschil tussen current ratio en quick ratio?</strong><br />De quick ratio laat de voorraden buiten de teller en is daarmee een strengere maatstaf voor directe betaalcapaciteit.</p>
3760<p><strong>Wat betekent een current ratio onder 1?</strong><br />De kortlopende schulden zijn groter dan de vlottende activa. Zonder extra financiering of snellere inning ontstaat een betalingsprobleem.</p>
3761<p><strong>Is een hoge current ratio altijd goed?</strong><br />Nee. Een zeer hoge ratio betekent vaak onnodig veel werkkapitaal in voorraden en debiteuren en dus een lager rendement op het vermogen.</p>
3762<h2>Liquiditeitsratio's automatisch bijhouden</h2>
3763<p>Smartbooks berekent current ratio, quick ratio en <a href="/artikelen/solvabiliteit-berekenen">solvabiliteit</a> automatisch uit je administratie, elke maand en per entiteit. <a href="/demo">Plan een demo</a> en zie het op je eigen balans.</p>`,KR=`---json
3764{
3765  "title": "Die Kraft von Smartbooks: Interview mit Fractional CFO Marcel Vlug über Innovation in Konsolidierungssystemen",
3766  "slug": "de-kracht-van-smartbooks-een-interview-met-fractional-cfo-marcel-vlug-over-innovatie-in-consolidatiesystemen",
3767  "metaTitle": "Konsolidierungssystem: Interview mit einem Fractional CFO",
3768  "date": "2024-08-12 12:51:32",
3769  "category": "Articles",
3770  "tags": [
3771    "Finanzkonsolidierung"
3772  ],
3773  "excerpt": "Fractional CFO Marcel Vlug im Interview: Wie moderne Konsolidierungssysteme mit Cloud und AI die Finance-Arbeit im Mittelstand grundlegend verbessern.",
3774  "originalUrl": "https://smartbooks.ai/artikelen/de-kracht-van-smartbooks-een-interview-met-fractional-cfo-marcel-vlug-over-innovatie-in-consolidatiesystemen/",
3775  "meta": null
3776}
3777---
3778<p><strong>Kannst du kurz deinen Hintergrund und deine Erfahrung mit Konsolidierungssystemen skizzieren?</strong></p>
3779<p>Seit 1990 bin ich auf die Einführung von Konsolidierungssystemen für Großunternehmen spezialisiert. Angefangen bei KPMG Consulting habe ich Systeme wie Micro Control, Hyperion Enterprise (heimlich mein Favorit), Hyperion Financial Management, Tagetik und Onestream eingeführt. In 30 Jahren habe ich rund 250 große Organisationen bei diesen Implementierungen begleitet — daraus ist eine umfassende Expertise in Finanzkonsolidierung entstanden.</p>
3780<p><strong>Was macht Hyperion Enterprise für dich zum Favoriten?</strong></p>
3781<p>Es war schlank, schnell und funktional. Anpassungen konnten züg
3781ig umgesetzt werden. Konzerne wie Akzo Nobel, Rabobank, ING und Heineken haben komplexe Konsolidierungen damit erstaunlich benutzerfreundlich gemanagt.</p>
3782<p><strong>Wie haben sich Konsolidierungssysteme seit den 90ern entwickelt?</strong></p>
3783<p>Seit etwa 2015 hat sich viel getan. Ursprünglich waren die Systeme groß, teuer und beratungsintensiv. Steigende Dimensionalität hat sie eher komplexer als besser gemacht — aber die Nachfrage nach Beratern erhöht. Die eigentliche Innovation: Konsolidierungspower ist nun auch für kleinere Unternehmen erschwinglich. Smartbooks bietet die Kernidee von Hyperion Enterprise in einer modernen, cloudbasierten und deutlich einfacheren Form — implementierbar in Stunden statt Monaten.</p>
3784<p><strong>Wie steht Smartbooks im Verhältnis zu Hyperion Enterprise?</strong></p>
3785<p>Smartbooks ist eine moderne Cloud-Variante des Hyperion-Enterprise-Konzepts, zugeschnitten auf kleinere Organisationen. Wer Hyperion Enterprise kennt, erkennt viele Funktionen wieder — aber ohne Komplexität und Kosten klassischer Enterprise-Systeme.</p>
3786<hr>
3787<blockquote><p>„Smartbooks ist eine Art moderne Version von Hyperion Enterprise, speziell für kleinere Unternehmen.“</p></blockquote>
3788<hr>
3789<p><strong>Warum ist Smartbooks ein Gamechanger für kleinere Firmen?</strong></p>
3790<p>Cloud und moderne BI machen ehemals „Enterprise-only“-Funktionen zugänglich. Der konsolidierte Monatsbericht wird zu einem Klick — das spart mir als Fractional CFO jeden Monat viele Stunden.</p>
3791<p><strong>Vorteile gegenüber Excel-Konsolidierung?</strong></p>
3792<p>Fremdwährungen, Sub-Konsolidierungen und Intercompany-Abstimmungen führen in Excel schnell zu Fehlern. Smartbooks vereinfacht das strukturell — deutlich weniger Zeit, deutlich mehr Verlässlichkeit.</p>
3793<p><strong>Welche Rolle spielt AI in Smartbooks?</strong></p>
3794<p>Wir setzen AI aktuell für die Erkennung von Anomalien in der Konsolidierungsdatenbasis ein — z. B. eine Kostenposition, die fünf Monate konstant war und plötzlich fehlt. Ich erwarte, dass diese AI-Prüfungen bald zuverlässiger sind als jede manuelle Kontrolle. Für die Konsolidierung heißt das: noch schneller, noch belastbarer.</p>
3795<p><strong>Deine Empfehlung an andere CFOs?</strong></p>
3796<p>Weg von Excel — hin zu einem strukturierten System wie Smartbooks. Es reduziert manuelle Fehler, standardisiert Prozesse und liefert das Fundament, auf dem strategisch gearbeitet werden kann.</p>
3797<p><strong>Ausblick?</strong></p>
3798<p>Cloud + BI + AI machen fortgeschrittene Finance-Prozesse zugänglicher denn je. Anomalien werden automatisch erkannt, Analysen tiefer, Entscheidungen schneller.</p>`,qR=`---json
3799{
3800  "title": "The Power of Smartbooks: An Interview with Fractional CFO Marcel Vlug on Innovation in Consolidation Systems",
3801  "metaTitle": "Consolidation System: Interview with a Fractional CFO",
3802  "slug": "de-kracht-van-smartbooks-een-interview-met-fractional-cfo-marcel-vlug-over-innovatie-in-consolidatiesystemen",
3803  "date": "",
3804  "category": "Articles",
3805  "tags": [
3806    "Consolidation Systems",
3807    "Fractional CFO",
3808    "Financial Innovation",
3809    "Smartbooks",
3810    "Data Integration"
3811  ],
3812  "excerpt": "In this interview, fractional CFO Marcel Vlug discusses how innovations in consolidation systems, such as automation and data integration, are helping companies improve their financial processes.",
3813  "originalUrl": "",
3814  "meta": {
3815    "type_bedrijf": "Financial Consultancy",
3816    "naam_medewerker": "Marcel Vlug",
3817    "functie_medewerker": "Fractional CFO"
3818  }
3819}
3820---
3821<p><strong>Can you tell us a bit about your background and experience with consolidation systems?</strong></p>
3822
3823<p>Since 1990, I have specialized in the implementation of consolidation systems for large enterprises. My career began at KPMG Consulting, where I gained experience with systems such as Micro Control, Hyperion Enterprise (secretly my favorite), Hyperion Financial Management, Tagetik, and OneStream. Over the past 30 years, I have assisted approximately 250 large companies with the implementation of these systems, through which I have developed extensive expertise in financial consolidation.</p>
3824
3825<p><strong>What made Hyperion Enterprise a favorite system for you?</strong></p>
3826
3827<p>Hyperion Enterprise was particularly valued for its simplicity, compactness, and speed. Adjustments could be implemented quickly, and the system offered an extensive range of functionalities. For large companies using it at the time (such as Akzo Nobel, Rabobank, ING, and Heineken), it was a perfect system for managing complex financial consolidations in a user-friendly manner.</p>
3828
3829<p><strong>How have consolidation systems evolved since the 1990s?</strong></p>
3830
3831<p>Since 2015, consolidation systems have undergone a significant evolution. Initially, these systems were primarily focused on large corporations and required extensive technical and specialist knowledge. As systems developed further, they became increasingly complex, particularly due to the added...</p>`,HR=`---json
3832{
3833  "title": "De Kracht van Smartbooks: Een Interview met Fractional CFO Marcel Vlug over Innovatie in Consolidatiesystemen",
3834  "metaTitle": "Consolidatiesysteem: interview met een fractional CFO",
3835  "slug": "de-kracht-van-smartbooks-een-interview-met-fractional-cfo-marcel-vlug-over-innovatie-in-consolidatiesystemen",
3836  "order": 29,
3837  "date": "2024-08-12 12:51:32",
3838  "category": "Articles",
3839  "tags": [
3840    "Consolideren"
3841  ],
3842  "excerpt": "In dit interview bespreekt fractional CFO Marcel Vlug hoe innovaties in consolidatiesystemen, zoals automatisering en data-integratie, bedrijven helpen financiële processen te verbeteren. ",
3843  "originalUrl": "https://smartbooks.ai/artikelen/de-kracht-van-smartbooks-een-interview-met-fractional-cfo-marcel-vlug-over-innovatie-in-consolidatiesystemen/",
3844  "meta": null,
3845  "enSlug": "the-power-of-smartbooks-interview-with-fractional-cfo-marcel-vlug"
3846}
3847---
3848<p><strong>Kun je iets vertellen over je achtergrond en ervaring met consolidatiesystemen?</strong></p>
3849
3850
3851
3852<p>Sinds 1990 ben ik gespecialiseerd in de implementatie van consolidatiesystemen voor grote bedrijven. Mijn carrière begon bij KPMG Consulting, waar ik ervaring heb opgedaan met systemen zoals Micro Control, Hyperion Enterprise (stiekem mijn favoriet), Hyperion Financial Management, Tagetik en Onestream. In de afgelopen 30 jaar heb ik zo’n 250 grote bedrijven geholpen bij de implementatie van deze systemen, waardoor ik uitgebreide expertise heb ontwikkeld in financiële consolidatie.</p>
3853
3854
3855
3856<p><strong>Wat maakte Hyperion Enterprise een favoriet systeem voor jou?</strong></p>
3857
3858
3859
3860<p>Hyperion Enterprise werd bijzonder gewaardeerd om zijn eenvoud, compactheid en snelheid. Aanpassingen konden snel worden doorgevoerd en het systeem bood een uitgebreide hoeveelheid functionaliteiten. Voor grote bedrijven die het destijds gebruikten (zoals Akzo Nobel, Rabobank, ING en Heineken) was dit een perfect systeem om complexe financiële consolidaties op een gebruiksvriendelijke manier te beheren.</p>
3861
3862
3863
3864<p><strong>Hoe hebben consolidatiesystemen zich ontwikkeld sinds de jaren '90?</strong></p>
3865
3866
3867
3868<p>Sinds 2015 hebben consolidatiesystemen een sterke evolutie doorgemaakt. Aanvankelijk 
3868waren deze systemen vooral gericht op grote bedrijven en vereisten ze uitgebreide technische en specialistische kennis. Naarmate de systemen verder ontwikkelden, werden ze steeds complexer, vooral door de toevoeging van meer dimensies. Dit heeft echter niet geleid tot veel innovatie; in plaats daarvan is de vraag naar consultants toegenomen.</p>
3869
3870
3871
3872<p>De echte innovatie is echter dat de kracht van consolidatiesystemen nu ook beschikbaar is voor kleinere bedrijven. Waar Hyperion Enterprise al bekend stond om zijn gebruiksvriendelijke benadering, biedt Smartbooks een betaalbare en nog eenvoudigere oplossing voor kleinere bedrijven. Dit systeem vereist geen aparte systeembeheerder, kan in enkele uren worden geïmplementeerd en kost slechts een fractie van wat Hyperion Enterprise vroeger kostte.</p>
3873
3874
3875
3876<p><strong>Wat is de relatie tussen Hyperion Enterprise en Smartbooks?</strong></p>
3877
3878
3879
3880<p>Smartbooks is een soort moderne (cloud-gebaseerde) versie van Hyperion Enterprise, speciaal ontworpen voor kleinere bedrijven. Wie vertrouwd is met Hyperion Enterprise zal veel herkenbare functies in Smartbooks vinden. Beide systemen bieden krachtige tools voor financiële consolidatie, maar Smartbooks is gebruiksvriendelijker en toegankelijker. Dit stelt kleinere bedrijven in staat om te profiteren van geavanceerde functies zonder de complexiteit en kosten van traditionele enterprise-systemen.</p>
3881
3882
3883
3884<hr class="wp-block-separator has-css-opacity is-style-default" />
3885
3886
3887
3888<blockquote class="wp-block-quote has-text-align-center is-style-large">
3889<p>"Smartbooks is een soort moderne versie van Hyperion Enterprise, speciaal ontworpen voor kleinere bedrijven"</p>
3890</blockquote>
3891
3892
3893
3894<hr class="wp-block-separator has-css-opacity is-style-default" />
3895
3896
3897
3898<p></p>
3899
3900
3901
3902<p><strong>Waarom is nieuwe software zoals Smartbooks een gamechanger voor kleinere bedrijven?</strong></p>
3903
3904
3905
3906<p>Dankzij cloudtechnologie en geavanceerde business intelligence hebben kleinere bedrijven nu toegang tot krachtige tools die vroeger alleen voor grote bedrijven beschikbaar waren. Smartbooks stelt hen in staat om financiële processen te stroomlijnen en waardevolle inzichten te verkrijgen. De geconsolideerde maandrapportage is daardoor een kwestie van een druk op de knop geworden, wat mij als fractional CFO elke maand veel tijd en moeite bespaart.</p>
3907
3908
3909
3910<p><strong>Wat zijn de voordelen van Smartbooks ten opzichte van Excel voor consolidatie?</strong></p>
3911
3912
3913
3914<p>Consolidatie kan complex zijn, vooral door factoren zoals vreemde valuta, subconsolidaties en intercompany-afstemming. Veel bedrijven gebruiken ingewikkelde Excel-spreadsheets om deze processen te beheren, wat vaak leidt tot fouten en inefficiëntie. Smartbooks biedt een oplossing door deze processen te vereenvoudigen met krachtige ingebouwde functionaliteiten. Het systeem stroomlijnt consolidatieprocessen, wat resulteert in grote tijdsbesparingen en een hogere betrouwbaarheid van de gegevens.</p>
3915
3916
3917
3918<p class="has-text-align-center"><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXc-o_ZP4g7Hmu_QIAgj2HcVZSBaOUmrhKpqpeP-TgUPSKSMAopzsQaUqFsZ2r9OkZsfHB96yjnMZpnJzbUIJHJud0_vAn8KA5bRI7SoIBgH-cdqEipKsYr0KnMVYbTlTpOFCSsKqHWqcddYYOD2nRsfAS9C?key=EzldtVCE9yjXAKRNVqVBmw" width="590" height="651"></p>
3919
3920
3921
3922<p><strong>Wat zijn de voordelen van investeren in een systeem zoals Smartbooks?</strong></p>
3923
3924
3925
3926<p>De investering in Smartbooks, vanaf honderd euro per maand, bespaart mij en mijn collega’s meerdere dagen per maand aan tijdrovend werk. Dit stelt mij in staat me te richten op de meer interessante aspecten van mijn vak, zoals cijferanalyse, planning en strategisch advies. Smartbooks versterkt de financiële discipline, biedt helder inzicht in de bedrijfsprestaties en ondersteunt bij budgettering en forecasting. Hierdoor kunnen sneller en beter geïnformeerde beslissingen worden genomen. Bovendien vermindert de gebruiksvriendelijkheid van Smartbooks de noodzaak voor complex IT-beheer, zodat medewerkers zich kunnen concentreren op hun kernactiviteiten.</p>
3927
3928
3929
3930<p><strong>Welke rol speelt AI in Smartbooks?</strong></p>
3931
3932
3933
3934<p>AI speelt een steeds belangrijkere rol in Smartbooks. Momenteel voeren we een pilot uit met AI om fouten in de input van de consolidatie op te sporen. Deze technologie helpt bij het automatisch detecteren van mogelijke fouten in de boekhouding. Bijvoorbeeld, als een kostenpost vijf maanden lang consistent is en daarna plotseling verdwijnt, kan AI dit opmerken en aangeven dat er mogelijk een factuur ontbreekt. Het zal niet lang duren voordat deze AI-controle veel effectiever is dan mijn eigen controle. Ik verwacht dat accountants hierdoor hun eigen werk beter kunnen controleren, waardoor de consolidatie mij nog minder tijd kost.</p>
3935
3936
3937
3938<p></p>
3939
3940
3941
3942<p><strong>Wat zou je andere CFO's aanraden die overwegen om over te stappen naar modernere consolidatiesystemen?</strong></p>
3943
3944
3945
3946<p>Ik raad controllers en CFO's aan om over te stappen van Excel naar een gestructureerd systeem zoals Smartbooks. Excel mist vaak de noodzakelijke overzichtelijkheid en robuustheid voor effectieve consolidatie en planning. Smartbooks biedt een efficiënte en betrouwbare oplossing die administratieve processen vereenvoudigt en geen technische expertise vereist. Dit maakt het een duurzame keuze voor financiële consolidatie, zonder de complexiteit van traditionele systemen.</p>
3947
3948
3949
3950<p><strong>Wat zijn jouw verwachtingen voor de toekomst van consolidatiesystemen?</strong></p>
3951
3952
3953
3954<p>De toekomst van consolidatiesystemen ziet er veelbelovend uit, vooral voor kleinere bedrijven. De combinatie van cloudtechnologie en business intelligence maakt geavanceerde oplossingen toegankelijker dan ooit. Kunstmatige intelligentie zal een sleutelrol spelen door automatisch afwijkingen te detecteren en diepere inzichten te verschaffen. Dit zal niet alleen de precisie en efficiëntie verhogen, maar ook bedrijven helpen sneller en doeltreffender beslissingen te nemen. Het biedt een kans om financiële processen te optimaliseren en beter voorbereid te zijn op de toekomst.</p>
3955
3956
3957
3958<p><strong>
3958Tot slot, wat zijn de waardevolle lessen die je hebt geleerd als fractional CFO?</strong></p>
3959
3960
3961
3962<p>Tijdens mijn carrière als fractional CFO heb ik geleerd dat de basisprincipes van financieel management vergelijkbaar zijn voor zowel kleine als grote bedrijven. Beide hebben behoefte aan effectieve planning, controle en efficiëntie. Het verschil is echter dat kleinere bedrijven vaak met beperkte middelen en een kleiner team werken, wat de uitvoering bemoeilijkt. Veel oprichters van kleinere bedrijven hebben niet de achtergrond van een CFO of controller en besteden vaak minder aandacht aan rapportage en consolidatie. Dat is begrijpelijk. En ik moet toegeven: je kan beter een goed bedrijf hebben met een slechte rapportage, dan omgekeerd. Maar ik weet zeker dat een goede rapportage een goed bedrijf nog beter maakt. En met Smartbooks is dat voor m’n klanten nu binnen handbereik.</p>`,UR=`---json
3963{
3964  "title": "Die 4 Kernkompetenzen einer Best-in-Class Finance-Organisation",
3965  "slug": "de-vier-kerncompetenties-van-een-best-in-class-finance-organisatie",
3966  "metaTitle": "Best-in-Class Finance-Organisation: 4 Kernkompetenzen",
3967  "date": "2024-07-26 12:23:30",
3968  "category": "Articles",
3969  "tags": [
3970    "Best Practices",
3971    "Reporting"
3972  ],
3973  "excerpt": "Was macht eine Best-in-Class-Finance-Organisation aus? Entdecken Sie die vier Kernkompetenzen: Zurückschauen, Erklären, Vorausschauen und Beeinflussen.",
3974  "originalUrl": "https://smartbooks.ai/artikelen/de-vier-kerncompetenties-van-een-best-in-class-finance-organisatie/",
3975  "meta": null
3976}
3977---
3978<h4>Zurückschauen, Erklären, Vorausschauen und Beeinflussen</h4>
3979<p>Eine Best-in-Class-Finance-Organisation liefert nicht nur belastbare Zahlen, sondern echten strategischen Mehrwert. Doch wo beginnt Veränderung?</p>
3980<p>Bevor Sie an einzelnen Kompetenzen arbeiten, prüfen Sie die drei Grundpfeiler: <strong>Team</strong>, <strong>Prozess</strong>, <strong>System</strong>. Erst wenn diese Basis <em>fit-for-purpose</em> ist, entfalten die vier Kernkompetenzen ihre Wirkung:</p>
3981<ul>
3982<li>Zurückschauen — Reporting und Konsolidierung</li>
3983<li>Erklären — Analysieren und Priorisieren</li>
3984<li>Vorausschauen — Budgetierung und Forecast</li>
3985<li>Beeinflussen — Strategische Beratung</li>
3986</ul>
3987
3988<blockquote><p><em><strong>Viele Organisationen scheitern am Fundament — Smartbooks ist häufig der Katalysator für mehr finanzielle Disziplin.</strong></em></p></blockquote>
3989
3990<h3>Das Fundament stärken</h3>
3991<p><strong>Team</strong>: proaktive Sparringpartner statt reine Zahlenverwalter.</p>
3992<p><strong>Prozess</strong>: dokumentierte, standardisierte Abläufe für Monatsabschluss, Reporting, Forecast, Jahresabschluss.</p>
3993<p><strong>System</strong>: integrierte Plattform für Business- und Finanzplanung — statt Excel-Chaos.</p>
3994
3995<h3>Vorsicht vor dem Excel-Monster</h3>
3996<p>Wenn nur wenige verstehen, wie Ihr Excel-Modell funktioniert, sind Sie abhängig. Excel ist nicht direkt an das Hauptbuch gekoppelt — Reporting wird zeitaufwendig und fehleranfällig. Laut TheSaaSCFO.com nutzen 67 % der Finance-Manager Spreadsheets für Reporting und Planung. Kosteneffizient — aber für eine professionelle Finance-Organisation kein tragfähiges Fundament.</p>
3997
3998<h2>Die 4 Kernkompetenzen</h2>
3999<h4>Zurückschauen</h4>
4000<p>Schnell belastbare Zahlen. Nicht mehr als 20 % der Zeit. Ein integriertes Reporting nahtlos am Hauptbuch — Spreadsheets nur ausnahmsweise.</p>
4001<h4>Erklären</h4>
4002<p>Ursachen für Plan-Ist-Abweichungen aufdecken. Rund 30 % der Zeit. AI unterstützt bei der Anomalie-Erkennung.</p>
4003<h4>Vorausschauen</h4>
4004<p>Mehrjahresplan, Budget mit rollierendem Forecast, Szenarien. Bis zu 40 % der Zeit. Historische Daten + AI liefern belastbare Basis.</p>
4005<h4>Beeinflussen</h4>
4006<p>
4006Der Finance-Manager als strategischer Gesprächspartner im Managementteam — mit Daten, Analyse und klarer Empfehlung.</p>
4007
4008<h2>Die drei Säulen mit Smartbooks</h2>
4009<p><strong>Fortschrittliche Technologie</strong>, <strong>effizientes Team</strong>, <strong>Fundament für Best-in-Class-Prozesse</strong> — Smartbooks ist Ihr Wegbegleiter.</p>
4010<blockquote><p><strong>Kontaktieren Sie uns und heben Sie Ihre Finance-Organisation auf das nächste Level.</strong> Vereinbaren Sie eine <a href="/de/demo">Demo</a>.</p></blockquote>`,GR=`---json
4011{
4012  "title": "The 4 Core Competencies of a Best-In-Class Finance Organization",
4013  "metaTitle": "Best-in-Class Finance Organization: 4 Competencies",
4014  "slug": "four-core-competencies-of-a-best-in-class-finance-organization",
4015  "date": "",
4016  "category": "Articles",
4017  "tags": [
4018    "Finance Transformation",
4019    "FP&A",
4020    "Strategic Finance",
4021    "Business Intelligence"
4022  ],
4023  "excerpt": "What are the core competencies of a best-in-class finance organization? Discover how looking back, understanding, and looking ahead are essential for strategic success and informed decision-making.",
4024  "originalUrl": "",
4025  "meta": {
4026    "type_bedrijf": "Finance Consultancy",
4027    "naam_medewerker": "Not Specified",
4028    "functie_medewerker": "Not Specified",
4029    "logo_bedrijf": "Not Specified"
4030  }
4031}
4032---
4033<h4 class="">Looking back, understanding & explaining, and looking ahead: these are the domains in which the modern finance organization must excel. By integrating these three pillars, finance transforms from a traditional accounting department into a proactive strategic partner. This shift is essential for organizations that want to remain competitive in a rapidly changing market. Discover how a balanced focus on these core competencies leads to better decisions and sustainable growth.</h4>`,$R=`---json
4034{
4035  "title": "De 4 Kerncompetenties van een Best-In-Class Finance Organisatie",
4036  "metaTitle": "Best-in-class finance organisatie: 4 competenties",
4037  "slug": "de-vier-kerncompetenties-van-een-best-in-class-finance-organisatie",
4038  "order": 30,
4039  "date": "2024-07-26 12:23:30",
4040  "category": "Articles",
4041  "tags": [
4042    "Best Practices",
4043    "Rapporteren"
4044  ],
4045  "excerpt": "Wat maakt een best-in-class finance organisatie? Ontdek de kerncompetenties terugkijken, verklaren en vooruitkijken voor strategisch succes.",
4046  "originalUrl": "https://smartbooks.ai/artikelen/de-vier-kerncompetenties-van-een-best-in-class-finance-organisatie/",
4047  "meta": null,
4048  "enSlug": "four-core-competencies-of-a-best-in-class-finance-organization"
4049}
4050---
4051<h4 class="wp-block-heading has-text-align-center" style="text-transform:none"><strong>Terugkijken, Verklaren, Vooruitkijken</strong> en Beïnvloeden</h4>
4052
4053
4054
4055<p>Een best-in-class finance organisatie presteert beter, en de meeste finance managers beseffen dat hun financiële organisatie nog beter kan. Maar waar begin je met het doorvoeren van veranderingen?</p>
4056
4057
4058
4059<p>Beschik je over de juiste expertise binnen je finance team en heb je de optimale procesinrichting gevonden? Dan is het essentieel om je finance systeem en andere databronnen optimaal op elkaar af te stemmen. Pas wanneer dit alles gerealiseerd is, kun je de volgende kerncompetenties van een best-in-class finance organisatie evalueren en naar een hoger niveau brengen:</p>
4060
4061
4062
4063<ul class="wp-block-list">
4064<li>Terugkijken&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rapporteren en consolideren</li>
4065
4066
4067
4068<li>Verklaren&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; analyseren en prioritiseren</li>
4069
4070
4071
4072<li>Vooruitkijken&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; budgetteren en forecasten</li>
4073
4074
4075
4076<li>Beïnvloeden&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strategisch adviseren&nbsp;&nbsp;&nbsp;&nbsp;</li>
4077</ul>
4078
4079
4080
4081<p>Deze whitepaper belicht hoe een finance organisatie deze vier kerncompetenties kan versterken.sterken.</p>
4082
4083
4084
4085<blockquote class="wp-block-quote">
4086<p class="has-text-align-center has-theme-palette-6-color has-text-color has-link-color"><em><strong>Veel organisaties hebben moeite om het fundament goed neer te zetten&nbsp;– Smartbooks is vaak de katalysator voor verbeteren van financiële discipline</strong></em></p>
4087</blockquote>
4088
4089
4090
4091<h3 class="kt-adv-heading2152_5a6323-b3 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_5a6323-b3">Verbetering van de basis</h3>
4092
4093
4094
4095<p>Om de financiële discipline goed in te richten, zijn drie solide pijlers essentieel. Allereerst is een uitstekend finance <strong><em>team </em></strong>onmisbaar. Daarnaast moet de benodigde data beschikbaar zijn en moet er een modern en geïntegreerd <strong><em>systeem</em></strong> opgezet worden. Vervolgens moeten zowel het team als het systeem<strong><em> </em></strong>worden ondersteund door een goed en gestructureerde <strong><em>proces.</em></strong></p>
4096
4097
4098
4099<p>Belangrijk hierbij is dat alle acties snel leiden tot een accuraat inzicht, wat waardevolle informatie biedt voor het interpreteren van de cijfers, en dat allemaal ook nog binnen een bepaald budget. Die optimale combinatie van de drie pijlers moet uiteindelijk <em>fit-for-purpose</em> zijn, en dat betekent dat het moet passen bij de grootte en complexiteit en de rol die finance zou moeten spelen binnen de organisatie.</p>
4100
4101
4102
4103<p>Het aantrekken en behouden van gekwalificeerde mensen is niet eenvoudig. Daarnaast vereist het inrichten, documenteren en voortdurend verbeteren van financiële processen veel tijd en aandacht.</p>
4104
4105
4106
4107<p>Een effectief financieel systeem met geautomatiseerde rapportage- en analysemogelijkheden wordt nog niet breed toegepast, omdat veel organisaties nog steeds (te) veel vertrouwen op onbetrouwbare en tijdrovende spreadsheets.</p>
4108
4109
4110
4111<figure class="wp-block-image aligncenter size-large is-resized"><img src="https://smartbooks.ai/wp-content/uploads/2024/07/Afbeelding2-1024x734.png" alt="" class="wp-image-2154" style="width:484px;height:auto"/></figure>
4112
4113
4114
4115<h4 class="kt-adv-heading2152_f949ee-16 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_f949ee-16">Team</h4>
4116
4117
4118
4119<p>Een financiële organisatie op topniveau staat bekend als een betrouwbare adviseur die proactief inzichten biedt en advies verstrekt, waardoor zij cruciale ondersteuning biedt voor strategische besluitvorming.</p>
4120
4121
4122
4123<h4 class="kt-adv-heading2152_84153b-da wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_84153b-da">Proces&nbsp;</h4>
4124
4125
4126
4127<p>
4127Alle financiële processen zijn grondig gedocumenteerd en waar mogelijk gestandaardiseerd. Er zijn gedetailleerde stappenplannen en procedures opgesteld voor onder andere maandafsluitingen, rapportages, periodieke prognoses, de jaarlijkse budgetcyclus en jaarafsluitingen.</p>
4128
4129
4130
4131<h4 class="kt-adv-heading2152_62f40c-52 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_62f40c-52">Systeem</h4>
4132
4133
4134
4135<p>Een best-in-class financiële organisatie beschikt over systemen die naadloos kunnen samenwerken, wat resulteert in een geïntegreerd platform voor zakelijke en financiële planning<a href="#_ftn1" id="_ftnref1">[1]</a>. Het streven naar volledige systeemintegratie op zich is echter niet het doel; ook gestroomlijnde handmatige updates zijn kenmerkend voor een efficiënte financiële organisatie.</p>
4136
4137
4138
4139<hr class="wp-block-separator has-alpha-channel-opacity"/>
4140
4141
4142
4143<p><a id="_ftn1" href="#_ftnref1">[1]</a> Bron: <a href="/artikelen/to-interface-or-not-that-is-the-question">To interface or not, dat is de vraag</a></p>
4144
4145
4146
4147<h3 class="kt-adv-heading2152_597482-c5 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_597482-c5">Maar, pas op voor het Excel-monster!</h3>
4148
4149
4150
4151<p>Voelt het alsof slechts een paar mensen echt begrijpen hoe het financiële model en de formules werken binnen jouw organisatie? Dan ben je misschien volledig afhankelijk van deze experts. Maar wat als zij het bedrijf verlaten?</p>
4152
4153
4154
4155<p>Bovendien worden spreadsheets vaak gekopieerd en lokaal bewaard, wat resulteert in verschillende versies. Excel is ook niet direct gekoppeld aan het grootboeksysteem, wat maandelijkse handmatige updates vereist voor het opstellen van financiële rapportages. Dit proces is tijdrovend en foutgevoelig. Voor sommige van onze klanten heeft dit onbedoeld geleid tot wat we een 'Excel-monster' noemen. Misschien maak je je hier ook een beetje zorgen over.</p>
4156
4157
4158
4159<blockquote class="wp-block-quote">
4160<p class="has-text-align-center has-theme-palette-6-color has-text-color has-link-color"><em><strong>Wij weten dat het niet eenvoudig is, maar met Smartbooks zet je snel en eenvoudig de eerste stappen naar meer financiële discipline</strong></em></p>
4161</blockquote>
4162
4163
4164
4165<figure class="wp-block-image aligncenter size-full is-resized"><img src="https://smartbooks.ai/wp-content/uploads/2024/07/Afbeelding3.jpg" alt="" class="wp-image-2157" style="width:379px;height:auto"/></figure>
4166
4167
4168
4169<p>Uit onderzoek van TheSaaSCFO.com<a href="#_ftn1" id="_ftnref1">[1]</a> blijkt dat 67% van de ondervraagde finance managers spreadsheets gebruikt voor rapportage en planning. We begrijpen dat spreadsheets populair zijn vanwege hun kosteneffectiviteit en de snelheid waarmee je een planning en rapportagemodel kunt opzetten. Toch zijn wij van mening dat een spreadsheet niet de ideale basis vormt voor een professionele financiële organisatie. Gelukkig zijn er solide en betaalbare alternatieven beschikbaar.</p>
4170
4171
4172
4173<hr class="wp-block-separator has-alpha-channel-opacity"/>
4174
4175
4176
4177<p><a href="#_ftnref1" id="_ftn1">[1]</a> Bron: TheSaaSCFO.com</p>
4178
4179
4180
4181<h2 class="kt-adv-heading2152_e71476-4e wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_e71476-4e">De 4 kerncompetenties waarmee je als finance team de organisatie écht <em>vooruithelpt</em></h2>
4182
4183
4184
4185<p>De 3 pijlers van Team, Proces en Systeem zijn nu bekend. Om een best-in-class finance organisatie op te zetten, zijn er drie belangrijke competenties nodig.</p>
4186
4187
4188
4189<p>Allereerst moet je snel en accuraat kunnen rapporteren over wat er in de afgelopen periode is gebeurd<a href="#_ftn1" id="_ftnref1">[1]</a>.</p>
4190
4191
4192
4193<p>Daarnaast is het essentieel om de huidige situatie en resultaten helder te kunnen verklaren en prioriteiten aan te geven die invloed hebben op omzet, kosten en cashflow.</p>
4194
4195
4196
4197<p>Bovendien moet het finance team toekomstige ontwikkelingen kunnen voorspellen in één of meerdere scenario's, zodat de organisatie goed onderbouwde beslissingen kan nemen voor de toekomst<a href="#_ftn2" id="_ftnref2">[2]</a>.</p>
4198
4199
4200
4201<p>Uiteindelijk kan het Finance team dan snel en flexibel informatie verschaffen en een rol spelen als adviseur bij discussies rondom strategische onderwerpen.</p>
4202
4203
4204
4205<hr class="wp-block-separator has-alpha-channel-opacity"/>
4206
4207
4208
4209<p><a href="#_ftnref1" id="_ftn1">[1]</a> Bron: <a href="/artikelen/boekhouden-als-record-to-report-proces">Record-to-Report</a></p>
4210
4211
4212
4213<p><a href="#_ftnref2" id="_ftn2">[2]</a> Bron: <a href="/artikelen/plan-to-perform">Plan-to-Perform</a></p>
4214
4215
4216
4217<hr class="wp-block-separator has-alpha-channel-opacity"/>
4218
4219
4220
4221<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/07/Afbeelding1-2-1024x459.png" alt="" class="wp-image-2556"/></figure>
4222
4223
4224
4225<h4 class="kt-adv-heading2152_3b2501-39 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_3b2501-39">Terugkijken</h4>
4226
4227
4228
4229<p>Het finance team moet snel betrouwbare cijfers opleveren die inzicht geven in de prestaties van de afgelopen periode. Aan deze activiteit zou het finance team niet meer dan 20% van hun tijd moeten besteden<a href="#_ftn1" id="_ftnref1">[1]</a>.</p>
4230
4231
4232
4233<p>Het periodiek opstellen en delen van geconsolideerde financiële overzichten, zoals winst-en-verliesre
4233keningen, balansen en kasstroomoverzichten, is essentieel om de financiële situatie van een organisatie duidelijk weer te geven. Deze rapporten moeten nauwkeurig zijn, snel worden geleverd en voldoen aan de geldende boekhoudregels.</p>
4234
4235
4236
4237<p>Een best-in-class finance organisatie maakt gebruik van een geïntegreerd rapportageplatform dat naadloos aansluit op de grootboekadministratie. Rapporten worden desgewenst aangepast aan individuele behoeften. Spreadsheets worden nauwelijks gebruikt, omdat ze meestal handmatige acties vereisen en het risico op fouten vergroten, wat het proces vertraagt.</p>
4238
4239
4240
4241<h4 class="kt-adv-heading2152_542e10-48 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_542e10-48">Verklaren</h4>
4242
4243
4244
4245<p>Het finance team moet snel en helder inzicht geven in de feiten en onderliggende verklaringen van wat er is gebeurd, en aangeven waar de verschillen tussen de werkelijkheid en het plan vandaan komen. Dit zou niet meer dan 30% van hun tijd moeten kosten.</p>
4246
4247
4248
4249<p>Analyseren betekent dat de werkelijke financiële resultaten worden vergeleken met de begroting en prognoses. Door deze verschillen te analyseren kunnen de oorzaken worden achterhaald, of deze nu te wijten zijn aan interne factoren (zoals operationele inefficiënties) of externe factoren (zoals economische omstandigheden).</p>
4250
4251
4252
4253<p>Een best-in-class finance organisatie maakt gebruik van geavanceerde analyses om afwijkingen te voorspellen voordat ze zich voordoen, zodat er preventieve acties kunnen worden ondernomen. Met een goed ingericht systeem waarin zowel planningsgegevens als werkelijke cijfers worden vergeleken, kunnen analyses worden gestandaardiseerd en kan veel tijd worden bespaard. Dit kan verder worden verbeterd door AI in te zetten om afwijkingen te signaleren of suggesties te geven waarom zaken anders zijn dan gepland.</p>
4254
4255
4256
4257<h4 class="kt-adv-heading2152_90a96f-7c wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_90a96f-7c">Vooruitkijken</h4>
4258
4259
4260
4261<p>Het finance team moet, samen met andere afdelingen, een meerjarenplan opstellen en het budget voor het lopende jaar met een geüpdatete forecast voor de korte termijn maken. Daarnaast is het essentieel dat het team ervoor zorgt dat alle medewerkers binnen de organisatie de doelstellingen kennen en begrijpen. Voor deze activiteiten mag zeker 40% van de tijd van het finance team worden ingezet.</p>
4262
4263
4264
4265<p>Normaal gesproken stelt een organisatie een budget op voor een kalenderjaar. Dit budget omvat de verwachte inkomsten en uitgaven, geplande investeringen en aflossingen, en de verwachte betalingstermijnen van debiteuren en crediteuren. Dit resulteert onder andere in een cashflow planning.</p>
4266
4267
4268
4269<p>Een (rolling) forecast is de meest recente inschatting van hoe de nabije toekomst er waarschijnlijk uit zal zien. Als de toekomst onzeker is, kan het nodig zijn om verschillende scenario's te ontwikkelen. Scenario-planning omvat diverse mogelijke uitkomsten (zoals best case, base case en worst case), met aannames voor elk scenario.</p>
4270
4271
4272
4273<p>Met een modern systeem dat ook gekoppeld is aan AI, kunnen historische gegevens worden gebruikt voor een meerjarenplanning. Bovendien kunnen invloeden zoals renteontwikkelingen, inflatiecijfers en benchmarkgegevens uit de sector worden meegenomen in het planningsproces.</p>
4274
4275
4276
4277<hr class="wp-block-separator has-alpha-channel-opacity"/>
4278
4279
4280
4281<p><a href="#_ftnref1" id="_ftn1">[1]</a> Bron: McKinsey en TheHackettGroup</p>
4282
4283
4284
4285<figure class="wp-block-image aligncenter size-full is-resized"><img src="https://smartbooks.ai/wp-content/uploads/2024/07/Afbeelding5.jpg" alt="" class="wp-image-2158" style="width:328px;height:auto"/></figure>
4286
4287
4288
4289<p>Met een modern systeem dat ook gekoppeld is aan AI, kunnen historische gegevens worden gebruikt voor een meerjarenplanning. Bovendien kunnen invloeden zoals renteontwikkelingen, inflatiecijfers en benchmarkgegevens uit de sector worden meegenomen in het planningsproces.</p>
4290
4291
4292
4293<h4 class="kt-adv-heading2152_e75a2d-21 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_e75a2d-21"><strong>Beïnvloeden</strong></h4>
4294
4295
4296
4297<p>Het finance team zou de status en het vertrouwen moeten krijgen, dat met hun data, analyse en toelichting strategische besluiten kunnen worden genomen. De finance manager zou gezien moeten (gaan) worden als een onmisbare gesprekspartner in het MT en het financiële geweten van de organisatie.</p>
4298
4299
4300
4301<h2 class="kt-adv-heading2152_daa196-56 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_daa196-56">De 3 <em>pijlers</em> van een Best-in-Class finance organisatie</h2>
4302
4303
4304
4305<h4 class="kt-adv-heading2152_506436-1c wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_506436-1c">Geavanceerde technologie</h4>
4306
4307
4308
4309<p>Smartbooks is een modern finance platform dat wordt aangedreven door AI, waarmee rapporteren, analyseren, consolideren en budgetteren eenvoudig en snel verloopt, voor zowel financiële als operationele KPI's.</p>
4310
4311
4312
4313<h4 class="kt-adv-heading2152_132db9-d2 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_132db9-d2">Efficiënt team</h4>
4314
4315
4316
4317<p>Met Smartbooks geef je je finance team een boost in productiviteit en professionaliteit.</p>
4318
4319
4320
4321<h4 class="kt-adv-heading2152_bff4ba-c6 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2152_bff4ba-c6">Fundament voor een best-in-class proces</h4>
4322
4323
4324
4325<p>Met Smartbooks implementeer je automatisch best practices en zet je stappen richting een best-in-class finance organisatie.</p>
4326
4327
4328
4329<p>Met deze <strong><em>drie pijlers</em></strong> op orde kun je de benodigde competenties voor Terugkijken, Begrijpen &amp; Verklaren, en Vooruitkijken snel en gestructureerd aanscherpen. Smartbooks is daarbij je gids!</p>
4330
4331
4332
4333<figure class="wp-block-image aligncenter size-full is-resized"><img src="https://smartbooks.ai/wp-content/uploads/2023/11/smartbooks-0
43335_Consolidation-Fast-implementation.jpg" alt="" class="wp-image-2024" style="width:344px;height:auto"/></figure>
4334
4335
4336
4337<blockquote class="wp-block-quote">
4338<p class="has-text-align-center has-theme-palette-6-color has-text-color has-link-color"><strong>Neem vandaag nog contact met ons op en ontdek hoe Smartbooks jouw finance organisatie naar het volgende niveau kan tillen!</strong><strong></strong></p>
4339
4340
4341
4342<p class="has-text-align-center has-theme-palette-6-color has-text-color has-link-color"><strong>Plan daarom </strong><a href="/demo"><strong>hier</strong></a><strong> een afspraak voor meer informatie en een gratis demo, of bezoek onze website </strong><a href="/"><strong>www.smartbooks.ai</strong></a></p>
4343</blockquote>
4344
4345
4346
4347<p></p>`,ZR=`---json
4348{
4349  "title": "Accounts receivable automation: which steps to automate first",
4350  "slug": "accounts-receivable-automation",
4351  "date": "2026-09-28 10:00:00",
4352  "category": "Articles",
4353  "tags": [
4354    "Automatisering",
4355    "AI",
4356    "Rapporteren"
4357  ],
4358  "excerpt": "Accounts receivable automation: which steps in the AR process can run on rules, which need judgement, and what it saves in DSO.",
4359  "originalUrl": "",
4360  "metaTitle": "Accounts receivable automation: where to start"
4361}
4362---
4363<p><strong>Accounts receivable automation</strong> comes down to putting four weekly recurring steps on fixed rules: bucketing open invoices by age, sending reminders on a set schedule, following up on payment arrangements, and tracking payment behaviour per customer. The conversation with a customer who does not pay stays human work. The administration around it should not be.</p>
4364<p>For a controller this is a liquidity project rather than a collections project. In a portfolio of &euro; 3 million in open receivables, 15 to 25 percent is typically past due. That is half a million already earned, already invoiced and simply not yet collected: cash you release without adding a single euro of margin. The bottleneck is rarely the willingness to call. It is the hours that go into building the list of who to call.</p>
4365<h2>What accounts receivable automation takes over, and what it does not</h2>
4366<p>Break the AR cycle apart and six steps remain. How much of each can run without judgement differs sharply.</p>
4367<table>
4368<thead><tr><th>Step</th><th>Can be automated</th><th>What stays human work</th></tr></thead>
4369<tbody>
4370<tr><td>Pulling open items and sorting them into age buckets</td><td>Fully</td><td>Checking that the source connection still runs</td></tr>
4371<tr><td>Filtering out credit notes, prepayments and intercompany</td><td>Fully, with rules</td><td>Assigning new relations to the right group</td></tr>
4372<tr><td>Sending reminders at fixed moments</td><td>Fully</td><td>The exception: a customer with an open dispute</td></tr>
4373<tr><td>Recording and following up payment arrangements</td><td>Largely</td><td>Making the arrangement itself</td></tr>
4374<tr><td>Monitoring payment behaviour and DSO per customer</td><td>Fully</td><td>The conclusion: credit limit, prepayment or delivery stop</td></tr>
4375<tr><td>Escalation to collections or write-off</td><td>Flagging only</td><td>The decision, and its effect on the relationship</td></tr>
4376</tbody>
4377</table>
4378<p>Four of the six steps are pulling, filtering and sorting data. That ratio matches the rest of the finance administration, for the same reason: work without judgement is the work you can automate away. How the ratio plays out across the full record-to-report chain is covered in <a href="/en/articles/accounting-automation">accounting automation</a>.</p>
4379<h2>How to approach accounts receivable automation</h2>
4380<ol>
4381<li><strong>Start with the aging analysis, not with the reminder.</strong> Until you can see how the open balance is spread across the buckets current, 1 to 30, 31 to 60, 61 to 90 and over 90 days overdue, you are automating a dunning process without knowing where the delay sits. Smartbooks shows that breakdown live per entity and consolidated, with the amount and the invoice count in every cell, and lets you click through to the underlying invoices and the relation behind them.</li>
4382<li><strong>Clean the list before you act on it.</strong> Intercompany receivables, credit notes and prepayments distort every aging analysis, because there is no real payment term behind them. Filter intercompany relations out structurally instead of by hand every month, and group branches of the same customer into one relation. Otherwise three people call the same purchasing department.</li>
4383<li><strong>Fix the reminder schedule in the system that issues the invoice.</strong> Three moments are enough: a friendly reminder two days after the due date, a second one on day fourteen with the full open statement attached, and on day thirty a message that goes to both the contact person and the purchasing department. The schedule belongs in the package that sent the invoice; the reporting layer around it measures whether the schedule works.</li>
4384<li><strong>Drive planned receivables from a DSO metric.</strong> The planned receivables balance then moves along with your revenue forecast, so a lengthening payment term shows up in the cash flow forecast instead of only in the actuals. For the ratio itself, see <a href="/en/articles/dso-calculation">DSO calculation</a>.</li>
4385<li><strong>Let AI build the weekly action list.</strong> This step holds the most hours and the least judgement. A question such as <em>which customers are more than 30 days past due, sorted by amount, excluding intercompany</em> returns that list straight away in the AI Controller chat or through the MCP connection with Claude, with the journal entries underneath 
4385so every line can be checked. What used to be an export and an afternoon of pivot tables is now a question.</li>
4386<li><strong>Measure on one fixed basis.</strong> Put DSO, the percentage past due and the amount in the over-90-days bucket side by side in the same monthly report. Without a baseline you will not know, six months later, whether the schedule worked or whether one large customer simply settled up.</li>
4387</ol>
4388<h2>Worked example: a portfolio of 1,400 open invoices</h2>
4389<p>A neutral example. A group with three operating companies has &euro; 3.1 million outstanding across 1,400 invoices. After filtering out intercompany, the aging analysis looks like this.</p>
4390<table>
4391<thead><tr><th>Bucket</th><th>Amount</th><th>Invoices</th></tr></thead>
4392<tbody>
4393<tr><td>Current</td><td>&euro; 2,310,000</td><td>1,010</td></tr>
4394<tr><td>1 to 30 days overdue</td><td>&euro; 480,000</td><td>250</td></tr>
4395<tr><td>31 to 60 days overdue</td><td>&euro; 185,000</td><td>82</td></tr>
4396<tr><td>61 to 90 days overdue</td><td>&euro; 71,000</td><td>34</td></tr>
4397<tr><td>Over 90 days overdue</td><td>&euro; 54,000</td><td>24</td></tr>
4398<tr><td><strong>Total</strong></td><td><strong>&euro; 3,100,000</strong></td><td><strong>1,400</strong></td></tr>
4399</tbody>
4400</table>
4401<p>Watch the ratio between amount and count. The 24 invoices over 90 days are 1.7 percent of the invoice count and 1.7 percent of the amount: small, old items that usually hide a dispute. The liquidity sits in the 1 to 30 days bucket, at &euro; 480,000 across 250 invoices, averaging &euro; 1,920 each. Those are not problem customers but a payment rhythm running a few days behind, and that is exactly where a fixed schedule works and a phone call does not.</p>
4402<table>
4403<thead><tr><th>Activity</th><th>Before</th><th>After</th></tr></thead>
4404<tbody>
4405<tr><td>Building the aging overview across three entities</td><td>3 hours per week</td><td>0 &minus; always current</td></tr>
4406<tr><td>Stripping out intercompany and credit notes</td><td>1 hour per week</td><td>0 &minus; set as a rule</td></tr>
4407<tr><td>Building and distributing the action list</td><td>1.5 hours per week</td><td>15 minutes</td></tr>
4408<tr><td>Sending reminders</td><td>2 hours per week</td><td>0 &minus; on schedule</td></tr>
4409<tr><td>Calling and agreeing payment arrangements</td><td>1 hour per week</td><td>3 hours per week</td></tr>
4410<tr><td><strong>Total</strong></td><td><strong>8.5 hours</strong></td><td><strong>3.25 hours</strong></td></tr>
4411</tbody>
4412</table>
4413<p>These figures illustrate the proportions; they are not a customer result. Note the line above the total: calling triples. That is the point of accounts receivable automation. Not less contact with customers, but more contact and less administration around it.</p>
4414<h2>Limits and risks</h2>
4415<ul>
4416<li><strong>An unmatched payment becomes an unjustified dunning letter.</strong> Automation speeds up the mistake as well. A customer who has paid, but whose bank transaction has not been matched yet, receives a reminder that costs the trust ten phone calls built up. Run the schedule only after the day's bank transactions have been processed.</li>
4417<li><strong>Age says nothing about collectability.</strong> A 100-day invoice at a solid customer waiting for a credit note is a different case from a 35-day invoice at a customer in payment trouble. The buckets sort on time, not on risk; the weighting stays yours.</li>
4418<li><strong>Auditability.</strong> Every automated step has to trace back to the underlying invoice and journal entry, not to a balance. That is more than an auditor requirement: it is exactly what you need the moment a customer disputes an amount.</li>
4419<li><strong>Receivables balances are customer data.</strong> For an AI connection, use one that runs under your own login and access rights and that only reads. The Smartbooks MCP connection does that: it reads data and posts nothing, and a user sees only the companies they can already open in the application.</li>
4420<li><strong>AI presents an error with the same confidence as a fact.</strong> A model summarising a receivables list can add up a relation group incorrectly without any change in tone. Always trace an answer back to the invoices underneath before you call a customer.</li>
4421</ul>
4422<h2>Pitfalls in automating the AR process</h2>
4423<ul>
4424<li>Starting to dun before the aging analysis is clean, so the first roun
4424d mostly chases intercompany items and credit notes.</li>
4425<li>Steering on average DSO alone. One large customer paying on day 75 hides a portfolio that otherwise sits neatly on day 28.</li>
4426<li>Trying to build the reminder schedule in the reporting layer instead of in the package that issues the invoice. Measuring and sending are two different functions.</li>
4427<li>Leaving branches of the same customer as separate relations, so three people call the same purchasing department about three invoices.</li>
4428<li>Measuring success in reminders sent instead of in DSO days and the amount past due.</li>
4429</ul>
4430<h2>Frequently asked questions about accounts receivable automation</h2>
4431<h3>What should you automate first in the AR process?</h3>
4432<p>The aging analysis, including the exclusion of intercompany and credit notes. It is the list every other step depends on, and as long as it is built by hand it costs hours every week and is already out of date by the next review meeting.</p>
4433<h3>Can you use AI for accounts receivable automation?</h3>
4434<p>Partly, and not in the part most people expect. AI is strong at building and summarising the action list: which customers, which amounts, which movement against last month. A decision on a credit limit or a delivery stop is a judgement with commercial consequences and belongs with a person. Give AI read access to your receivables position, not decision authority.</p>
4435<h3>How many DSO days can this win?</h3>
4436<p>That depends entirely on the starting point. If the overrun sits mainly in the 1 to 30 days bucket, a fixed reminder schedule is usually enough for a few days. If it sits beyond 60 days, there is an agreement or invoice quality problem that no schedule solves. Measure for three months before setting a target, or you will book a gain that came from the revenue mix.</p>
4437<h3>Does Smartbooks send the dunning letters?</h3>
4438<p>No. Smartbooks is the analysis and reporting layer: the aging analysis per entity and consolidated, payment behaviour per relation, DSO in your plan, and the option to ask questions about all of it through AI. Sending invoices and reminders stays in your accounting or invoicing package, and Smartbooks reads from there.</p>
4439<p>Treat this as a liquidity measure with a baseline rather than a software purchase: first a clean aging analysis, then the schedule, then the weekly list out of AI, and the freed-up hours into the conversations that actually matter. What a shorter payment term does to the rest of your current assets is covered in <a href="/en/articles/working-capital">working capital</a>; how to put the effect into your cash forecast, in the <a href="/en/articles/13-week-cashflow-planning-peace-of-mind">13-week cashflow planning</a>.</p>
4440`,YR=`---json
4441{
4442  "title": "Debiteurenbeheer automatiseren: welke stappen wel en welke niet",
4443  "slug": "debiteurenbeheer-automatiseren",
4444  "enSlug": "accounts-receivable-automation",
4445  "date": "2026-09-28 10:00:00",
4446  "category": "Articles",
4447  "tags": [
4448    "Automatisering",
4449    "AI",
4450    "Rapporteren"
4451  ],
4452  "excerpt": "Debiteurenbeheer automatiseren: welke stappen in het debiteurenproces op regels kunnen, welke oordeel vragen, en wat het scheelt in DSO.",
4453  "originalUrl": "",
4454  "metaTitle": "Debiteurenbeheer automatiseren: zo pak je het aan"
4455}
4456---
4457<p><strong>Debiteurenbeheer automatiseren</strong> doe je door de vier handelingen die elke week identiek terugkomen aan vaste regels te hangen: de ouderdomsindeling van openstaande facturen, het herinneringsschema, de opvolging van gemaakte betaalafspraken en de monitoring van betaalgedrag per klant. Het gesprek met een klant die niet betaalt blijft mensenwerk; de administratie eromheen hoort dat niet te zijn.</p>
4458<p>Voor een controller is dit geen incassoproject maar een liquiditeitsproject. In een portefeuille van &euro; 3 miljoen aan openstaande vorderingen staat doorgaans 15 tot 25 procent voorbij de vervaldatum. Dat is een half miljoen euro dat al is verdiend, al is gefactureerd en alleen nog niet is opgehaald: geld dat je vrijmaakt zonder een euro extra marge. Het knelpunt is zelden de wil om te bellen, maar de tijd die opgaat aan het samenstellen van de lijst wie je moet bellen.</p>
4459<h2>Wat je in het debiteurenbeheer kunt automatiseren, en wat niet</h2>
4460<p>Leg het debiteurenproces uit elkaar en er blijven zes stappen over. Per stap verschilt sterk hoeveel er zonder oordeel kan.</p>
4461<table>
4462<thead><tr><th>
4462Stap</th><th>Automatiseerbaar</th><th>Wat mensenwerk blijft</th></tr></thead>
4463<tbody>
4464<tr><td>Openstaande posten ophalen en per ouderdomsbucket indelen</td><td>Volledig</td><td>Bewaken dat de koppeling nog loopt</td></tr>
4465<tr><td>Creditnota's, vooruitbetalingen en intercompany eruit filteren</td><td>Volledig, met regels</td><td>Nieuwe relaties in de juiste groep zetten</td></tr>
4466<tr><td>Herinneringen versturen op vaste momenten</td><td>Volledig</td><td>De uitzondering: een klant met een lopend geschil</td></tr>
4467<tr><td>Betaalafspraken vastleggen en opvolgen</td><td>Grotendeels</td><td>De afspraak zelf maken</td></tr>
4468<tr><td>Betaalgedrag en debiteurentermijn per klant monitoren</td><td>Volledig</td><td>De conclusie: kredietlimiet, vooruitbetaling of leveringsstop</td></tr>
4469<tr><td>Escalatie naar incasso of afboeking</td><td>Signalering</td><td>Het besluit, en de gevolgen voor de relatie</td></tr>
4470</tbody>
4471</table>
4472<p>Vier van de zes stappen zijn data ophalen, filteren en sorteren. Dat is dezelfde verhouding als in de rest van de administratie, en om dezelfde reden: het werk zonder oordeel is het werk dat je weg kunt automatiseren. Hoe die verhouding over de hele record-to-report-keten uitpakt staat in <a href="/artikelen/accountancy-automatiseren">automatiseren van accountancy</a>.</p>
4473<h2>Zo pak je het debiteurenbeheer automatiseren aan</h2>
4474<ol>
4475<li><strong>Begin bij de ouderdomsanalyse, niet bij de herinnering.</strong> Zolang je niet ziet hoe het openstaande saldo verdeeld is over de buckets niet vervallen, 1 tot 30, 31 tot 60, 61 tot 90 en meer dan 90 dagen te laat, automatiseer je een aanmaanproces zonder te weten waar de vertraging zit. Smartbooks toont die indeling live per entiteit en geconsolideerd, met per cel het bedrag en het aantal facturen, en laat je doorklikken naar de onderliggende facturen en de relatie erachter.</li>
4476<li><strong>Maak de lijst eerst schoon.</strong> Intercompany-vorderingen, creditnota's en vooruitontvangen bedragen vertekenen elke ouderdomsanalyse, omdat er geen echte betaaltermijn achter zit. Filter intercompany-relaties structureel uit in plaats van elke maand met de hand, en groepeer vestigingen van dezelfde afnemer tot een relatie. Anders belt iedereen drie keer dezelfde inkoopafdeling.</li>
4477<li><strong>Zet het herinneringsschema vast in het systeem dat factureert.</strong> Drie momenten volstaan: een vriendelijke reminder twee dagen na de vervaldatum, een tweede op dag veertien met het volledige openstaande overzicht erbij, en op dag dertig een bericht dat naar de contactpersoon en naar de inkoopafdeling gaat. Het schema hoort in het pakket dat de factuur heeft verzonden; de rapportagelaag eromheen meet of het werkt.</li>
4478<li><strong>Hang de debiteurenstand in de planning aan een DSO-metric.</strong> Dan beweegt het geplande debiteurensaldo automatisch mee met je omzetprognose, en zie je de liquiditeitsgevolgen van een oplopende termijn in de cashflowprognose in plaats van pas in de realisatie. Voor het kengetal zelf: <a href="/artikelen/dso-berekenen">DSO berekenen</a>.</li>
4479<li><strong>Laat AI de wekelijkse actielijst maken.</strong> Hier zit de meeste tijd en de minste beoordeling. Een vraag als <em>welke klanten staan meer dan 30 dagen over de vervaldatum, gesorteerd op bedrag, exclusief intercompany</em> levert in het AI Controller-gesprek of via de MCP-koppeling met Claude direct die lijst op, met de journaalposten eronder zodat je elke regel kunt narekenen. Wat vroeger een export en een middag draaitabellen was, is nu een vraag.</li>
4480<li><strong>Meet het resultaat op een vaste grondslag.</strong> Zet de debiteurentermijn, het percentage voorbij de vervaldatum en het bedrag in de bucket boven 90 dagen naast elkaar in dezelfde maandrapportage. Zonder nulmeting weet je na een half jaar niet of het schema werkte of dat er gewoon een grote klant heeft afgerekend.</li>
4481</ol>
4482<h2>Voorbeeld: een portefeuille van 1.400 openstaande facturen</h2>
4483<p>Een neutraal voorbeeld. Een groep met drie werkmaatschappijen heeft &euro; 3,1 miljoen openstaan over 1.400 facturen. Na het uitfilteren van intercompany ziet de ouderdomsanalyse er zo uit.</p>
4484<table>
4485<thead><tr><th>
4485Bucket</th><th>Bedrag</th><th>Facturen</th></tr></thead>
4486<tbody>
4487<tr><td>Niet vervallen</td><td>&euro; 2.310.000</td><td>1.010</td></tr>
4488<tr><td>1 tot 30 dagen te laat</td><td>&euro; 480.000</td><td>250</td></tr>
4489<tr><td>31 tot 60 dagen te laat</td><td>&euro; 185.000</td><td>82</td></tr>
4490<tr><td>61 tot 90 dagen te laat</td><td>&euro; 71.000</td><td>34</td></tr>
4491<tr><td>Meer dan 90 dagen te laat</td><td>&euro; 54.000</td><td>24</td></tr>
4492<tr><td><strong>Totaal</strong></td><td><strong>&euro; 3.100.000</strong></td><td><strong>1.400</strong></td></tr>
4493</tbody>
4494</table>
4495<p>Let op de verhouding tussen bedrag en aantal. De 24 facturen boven de 90 dagen zijn 1,7 procent van het aantal facturen en 1,7 procent van het bedrag: kleine, oude posten waar vooral discussie achter zit. De liquiditeit zit in de bucket 1 tot 30 dagen, met &euro; 480.000 over 250 facturen, gemiddeld &euro; 1.920 per stuk. Dat zijn geen probleemklanten maar een betaalritme dat een paar dagen achterloopt, en precies daar werkt een vast schema wel en een telefoontje niet.</p>
4496<table>
4497<thead><tr><th>Handeling</th><th>Voor</th><th>Na</th></tr></thead>
4498<tbody>
4499<tr><td>Ouderdomsoverzicht samenstellen over drie entiteiten</td><td>3 uur per week</td><td>0 &minus; continu actueel</td></tr>
4500<tr><td>Intercompany en creditnota's eruit halen</td><td>1 uur per week</td><td>0 &minus; als regel vastgelegd</td></tr>
4501<tr><td>Actielijst opstellen en verdelen</td><td>1,5 uur per week</td><td>15 minuten</td></tr>
4502<tr><td>Herinneringen versturen</td><td>2 uur per week</td><td>0 &minus; op schema</td></tr>
4503<tr><td>Bellen en betaalafspraken maken</td><td>1 uur per week</td><td>3 uur per week</td></tr>
4504<tr><td><strong>Totaal</strong></td><td><strong>8,5 uur</strong></td><td><strong>3,25 uur</strong></td></tr>
4505</tbody>
4506</table>
4507<p>De cijfers zijn een illustratie van de verhoudingen, geen klantresultaat. Let op de regel boven het totaal: het bellen verdrievoudigt. Dat is het punt van debiteurenbeheer automatiseren. Niet minder contact met afnemers, maar meer contact en minder administratie eromheen.</p>
4508<h2>Grenzen en risico's</h2>
4509<ul>
4510<li><strong>Een niet-afgeletterde betaling wordt een onterechte aanmaning.</strong> Automatisering versnelt ook de fout. Een klant die wel heeft betaald maar waarvan de bankmutatie nog niet is gematcht, krijgt een herinnering die het vertrouwen kost dat je met tien telefoontjes hebt opgebouwd. Laat het schema daarom pas lopen nadat de bankmutaties van die dag zijn verwerkt.</li>
4511<li><strong>Ouderdom zegt niets over verhaalbaarheid.</strong> Een factuur van 100 dagen bij een solide afnemer die op een creditnota wacht, is een ander geval dan een factuur van 35 dagen bij een klant met betalingsproblemen. De buckets sorteren op tijd, niet op risico; de weging blijft van jou.</li>
4512<li><strong>Controleerbaarheid.</strong> Elke geautomatiseerde stap moet herleidbaar zijn tot de onderliggende factuur en journaalpost, niet tot een saldo. Dat is niet alleen een eis van de accountant, het is ook precies wat je nodig hebt op het moment dat een afnemer een bedrag betwist.</li>
4513<li><strong>Debiteurenstanden zijn klantgegevens.</strong> Gebruik voor een AI-koppeling een verbinding die onder je eigen inlog en rechten werkt en die alleen leest. De MCP-koppeling van Smartbooks doet dat: hij leest gegevens en boekt niets, en een gebruiker ziet alleen de bedrijven waar hij ook in de applicatie bij mag.</li>
4514<li><strong>AI brengt een fout met evenveel zelfvertrouwen als een feit.</strong> Een model dat een debiteurenlijst samenvat kan een relatiegroep verkeerd optellen zonder dat de toon verandert. Laat een antwoord altijd terugslaan op de facturen eronder voordat je een afnemer belt.</li>
4515</ul>
4516<h2>Valkuilen bij het automatiseren van het debiteurenproces</h2>
4517<ul>
4518<li>Beginnen met aanmanen voordat de ouderdomsanalyse schoon is, waardoor de eerste ronde vooral intercompany-posten en creditnota's aanmaant.</li>
4519<li>De gemiddelde debiteurentermijn als enige stuurgetal nemen. Een grote afnemer die op dag 75 betaalt, verbergt een portefeuille die verder keurig op dag 28 zit.</li>
4520<li>Het herinneringsschema in de rapportagelaag willen bouwen in plaats van in het pakket dat de factuur verzendt. Meten en versturen zijn twee verschillende functies.</li>
4521<li>Vestigingen van dezelfde afnemer als losse relaties laten staan, zodat drie mensen dezelfde inkoopafdeling bellen over drie facturen.</li>
4522<li>Succes meten in verstuurde herinneringen in plaats van in dagen debiteurentermijn en in het bedrag voorbij de vervaldatum.</li>
4523</ul>
4524<h2>Veelgestelde vragen over debiteurenbeheer automatiseren</h2>
4525<h3>Wat kun je in het debiteurenproces het beste als eerste automatiseren?</h3>
4526<p>De ouderdomsanalyse, inclusief het uitfilteren van intercompany en creditnota's. Dat is de lijst waarop alle andere stappen zich baseren, en zolang die met de hand wordt samengesteld kost hij elke week uren en is hij bij het volgende overleg alweer verouderd.</p>
4527<h3>Kun je debiteurenbeheer automatiseren met AI?</h3>
4528<p>Voor een deel, en niet voor het deel dat je verwacht. AI is sterk in het samenstellen en samenvatten van de actielijst: welke afnemer
4528s, welke bedragen, welke ontwikkeling ten opzichte van vorige maand. Het besluit over een kredietlimiet of een leveringsstop is een oordeel met commerci&euml;le gevolgen en hoort bij een mens. Geef AI leesrechten op je debiteurenstand, geen beslisbevoegdheid.</p>
4529<h3>Hoeveel dagen debiteurentermijn kun je hiermee winnen?</h3>
4530<p>Dat hangt volledig af van waar je begint. Zit de overschrijding vooral in de bucket 1 tot 30 dagen, dan is een vast herinneringsschema doorgaans genoeg voor een paar dagen winst. Zit ze boven de 60 dagen, dan is er een afspraak- of factuurkwaliteitsprobleem dat geen schema oplost. Meet drie maanden voordat je een doel stelt, anders schrijf je een winst op die uit de omzetmix komt.</p>
4531<h3>Verstuurt Smartbooks zelf de aanmaningen?</h3>
4532<p>Nee. Smartbooks is de analyse- en rapportagelaag: de ouderdomsanalyse per entiteit en geconsolideerd, het betaalgedrag per relatie, de debiteurentermijn in je planning en de mogelijkheid er via AI vragen over te stellen. Het versturen van facturen en herinneringen blijft in je boekhoud- of factureringspakket, en Smartbooks leest daaruit.</p>
4533<p>Behandel dit als een liquiditeitsmaatregel met een nulmeting en niet als een softwareaankoop: eerst een schone ouderdomsanalyse, dan het schema, dan de wekelijkse lijst uit AI, en de vrijgekomen tijd naar de gesprekken waar het echt om gaat. Wat een kortere termijn doet met de rest van je vlottende activa staat in <a href="/artikelen/werkkapitaal-berekenen">werkkapitaal berekenen</a>; hoe je het effect in de kasprognose zet, in de <a href="/artikelen/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening">13-weken cashflowplanning</a>.</p>
4534`,QR=`---json
4535{
4536  "title": "Jahresplanung und monatliches Budget-Update als End-to-End-Prozess",
4537  "slug": "design-your-annual-planning-cycle-and-monthly-budget-update-as-an-end-to-end-process",
4538  "metaTitle": "Jahresplanung als End-to-End-Prozess aufsetzen",
4539  "date": "2024-04-15 10:00:00",
4540  "category": "Articles",
4541  "tags": [
4542    "Planung",
4543    "Budget",
4544    "Forecast",
4545    "Best Practices"
4546  ],
4547  "excerpt": "Jahresplanung als ein End-to-End-Prozess (Plan-to-Perform): die 5 Kernschritte, die Voraussetzungen — und warum Menschen, System und Daten den Unterschied machen.",
4548  "originalUrl": "https://smartbooks.ai/en/articles/design-your-annual-planning-cycle-and-monthly-budget-update-as-an-end-to-end-process/",
4549  "meta": null
4550}
4551---
4552<p><strong>Plan-to-Perform</strong></p>
4553<p>Die Idee hinter dem End-to-End- (E2E-) Prozessgedanken ist ein ganzheitlicher Blick auf die Unternehmenssteuerung — den vollständigen Ablauf eines Prozesses von Anfang bis Ende. Dieser Ansatz erhöht Effizienz, verbessert Ergebnisse und stellt sicher, dass jeder Schritt mit den übergeordneten Zielen abgestimmt ist. Die wichtigsten Vorteile eines E2E-Blickwinkels:</p>
4554<p><strong>Optimierte Operations</strong>
4554: Durch Eliminierung überflüssiger Schritte und Fokus auf wertschöpfende Aktivitäten sinken Kosten, steigt die Produktivität.</p>
4555<p><strong>Mehr Transparenz</strong>: Der End-to-End-Blick macht Ineffizienzen, Engpässe und Verbesserungspotenziale sichtbar.</p>
4556<p><strong>Bessere Zusammenarbeit</strong>: Ein E2E-Ansatz zwingt Abteilungen zur Kooperation, weil Inputs, Outputs und Übergabe-Momente klar definiert sind.</p>
4557<p>Es gibt mehrere End-to-End-Prozesse — Record-to-Report, Hire-to-Retire, Customer-to-Cash, Campaign-to-Conversion. Ein spezifischer Best-Practice-Prozess ist <strong>Plan-to-Perform (P2P)</strong>. Er optimiert operative <em>und</em> finanzielle Planung, um überlegene Performance und aussagekräftige Plan-Ist-Abweichungsanalysen zu ermöglichen.</p>
4558<h2>Den Plan-to-Perform-Prozess entwerfen</h2>
4559<p>Was ist Plan-to-Perform konkret — und wie gestalten und führen Sie ihn aus? Fünf Kernschritte:</p>
4560<ol>
4561<li>Kommunizieren Sie die Unternehmensstrategie an die Prozess­verantwortlichen und lassen Sie sie ein Bottom-up-Budget erstellen — parallel zu einem Top-down-Zielrahmen. Die Spannung zwischen Bottom-up-Forecast und Top-down-Ziel ist der Input für die strategische Diskussion, die in klar definierte Ziele mündet.</li>
4562<li>Setzen Sie eindeutige Ziele für die Geschäftsaktivitäten (Produktion, HR, Sales usw.) — basierend auf den strategischen Gesprächen und dokumentierten Annahmen.</li>
4563<li>Berichten Sie ausgewählte KPIs zu Ist-Performance vs. Plan.</li>
4564<li>Analysieren Sie Abweichungen zwischen Zielen und Realisierung — identifizieren Sie Ursachen und Erklärungen.</li>
4565<li>Adressieren Sie Gaps — entweder durch Nachsteuerung der Aktivitäten oder durch Anpassung der Ziele, wenn Annahmen und Marktentwicklungen ein Plan-Update rechtfertigen.</li>
4566</ol>
4567<figure><img src="https://smartbooks.ai/wp-content/uploads/2024/04/p2p-1024x906.png" alt="Plan-to-Perform Prozess" /></figure>
4568<h2>Voraussetzungen für den Plan-to-Perform-Prozess</h2>
4569<p>Die Reise beginnt mit einem stabilen Fundament: <strong>fachlich starken Menschen</strong>. Expertise ist erforderlich, um Geschäftsnuancen zu verstehen und Komplexität zu navigieren.</p>
4570<p>Zusätzlich zum richtigen Skillset ist ein <strong>State-of-the-Art-Planungssystem</strong> essenziell. Es ist das Rückgrat des Plan-to-Perform-Prozesses und liefert die Tools für Finanzplanung, Analyse und Reporting — für Präzision, Effizienz und bessere Entscheidungen.</p>
4571<p>Selbst das beste Team und modernste System scheitern ohne <strong>Datenqualität</strong>. Daten sind die Lebensader des Prozesses. Zu wenige, zu späte oder fehlerhafte Daten frustrieren den Prozess — beinahe genauso schädlich ist ein Übermaß an operativen Details: mehr Aufwand ohne echten Zugewinn an Genauigkeit.</p>
4572<h2>Fazit</h2>
4573<p>Ein gut gestalteter und gut ausgeführter Plan-to-Perform-Prozess ist ein vitaler Bestandteil jeder Unternehmensstrategie und braucht fachlich starke Menschen, moderne Technologie und hochwertige Daten. So werden aus strategischen Plänen keine bloßen Ambitionen — sondern erreichbare Realität.</p>`,JR=`---json
4574{
4575  "title": "Design your annual planning cycle and monthly budget update as an end-to-end process",
4576  "metaTitle": "Annual Planning as an End-to-End Process",
4577  "slug": "design-your-annual-planning-cycle-and-monthly-budget-update-as-an-end-to-end-process",
4578  "date": "2024-04-15 10:00:00",
4579  "category": "Articles",
4580  "tags": [
4581    "Planning",
4582    "Budget",
4583    "Forecast",
4584    "Best Practices"
4585  ],
4586  "excerpt": "Designing your annual planning as one end-to-end Plan-to-Perform process: the 5 core steps, the requirements, and why people, system and data make the difference together.",
4587  "originalUrl": "https://smartbooks.ai/en/articles/design-your-annual-planning-cycle-and-monthly-budget-update-as-an-end-to-end-process/",
4588  "meta": null
4589}
4590---
4591<p><strong>Plan to Perform</strong></p>
4592<p>The idea behind the end-to-end (E2E) process concept is to provide a holistic view of business operations, focusing on the complete flow of a specific process from its beginning to its end. This approach aims to enhance efficiency, improve performance, and ensure that every step of the process is aligned with the business's overall objectives. The key benefits of adopting an E2E perspective include:</p>
4593<p><strong>Streamlined operations</strong>
4593: By eliminating unnecessary steps and focusing on value-added activities, companies can streamline operations, reduce costs, and increase productivity.</p>
4594<p><strong>Increased transparency</strong>: By looking at processes from start to finish, companies can better identify inefficiencies, bottlenecks, and areas for improvement.</p>
4595<p><strong>Improved collaboration</strong>: An E2E approach encourages different departments and teams within an organization to work together, fostering a more collaborative and integrated working environment, because inputs and outputs as well as hand-off / hand-over points are clearly defined.</p>
4596<p>There are multiple end-to-end processes that help streamline activities and improve outcomes — examples are: Record-to-Report, Hire-to-Retire, Customer-to-Cash or Campaign-to-Conversion. A specific end-to-end process that is regarded as a best practice is the <strong>Plan-to-Perform (P2P)</strong> process. This process focuses on optimizing operational <em>and</em> financial planning to achieve superior performance outcomes and value-adding analyses for differences between the plan and actual results.</p>
4597<h2>Designing the Plan-to-Perform process</h2>
4598<p>So, what exactly does Plan-to-Perform entail, and how should companies approach its design and execution? The following 5 steps are the core of a Plan-to-Perform process:</p>
4599<ol>
4600<li>Articulate the company strategy to the various business process owners and let them make a bottom-up budget while also providing a top-down company goal. The discrepancies and tensions between the bottom-up forecasts and the top-down goals form the input for a strategic discussion that translates into clearly defined goals.</li>
4601<li>Set unambiguous goals for the various business activities (manufacturing, HR, sales, etc.) based on the strategic discussions and recorded assumptions.</li>
4602<li>Report selected key performance indicators on actual performance compared to the planned results.</li>
4603<li>Analyse discrepancies between the goals and actual performance and identify reasons and clarifications for these differences.</li>
4604<li>Address the gaps by either making changes in the execution of the various business activities to realise the set target, or adjust targets if assumptions and developments in the business environment require an update of the plan into an updated budget.</li>
4605</ol>
4606<figure><img src="https://smartbooks.ai/wp-content/uploads/2024/04/p2p-1024x906.png" alt="Plan-to-Perform process" /></figure>
4607<h2>Requirements for the Plan-to-Perform process</h2>
4608<p>The journey begins with a solid foundation: <strong>skilled individuals</strong>. The human element cannot be overstated; expertise is required to understand the nuances of the business and the ability to navigate its complexities.</p>
4609<p>Next to the right set of skills, a state-of-the-art <strong>planning system</strong> is essential. This technology acts as the backbone of the Plan-to-Perform process, providing the tools necessary for financial planning, analysis, and reporting. With the right system in place, businesses can ensure accuracy, enhance efficiency, and facilitate better decision-making.</p>
4610<p>However, even the most skilled team and advanced system would falter without one critical ingredient: <strong>quality data</strong>. Data is the lifeblood of the Plan-to-Perform process. Accurate, timely, and relevant data inputs allow businesses to make informed decisions, adapt to changes, and stay ahead of the curve. Too little, too late or wrong data will frustrate your Plan-to-Perform process — but almost as bad for insightful results is too much data. An overload of operational details may cause extra work to get the numbers updated on a periodic basis and it may create the illusion of being complete, while the additional data does not actually improve accuracy.</p>
4611<h2>Conclusion</h2>
4612<p>To conclude, a well-designed and well-executed Plan-to-Perform process is a vital component of any business strategy, demanding skilled people, advanced technology, and high-quality data. By designing and executing this process effectively, companies can ensure that their strategic plans are not just aspirations but achievable realities.</p>`,XR=`---json
4613{
4614  "title": "Ontwerp je jaarplanning en maandelijkse budgetupdate als end-to-e
4614nd proces",
4615  "metaTitle": "Jaarplanning opstellen als end-to-end proces",
4616  "slug": "design-your-annual-planning-cycle-and-monthly-budget-update-as-an-end-to-end-process",
4617  "order": 53,
4618  "date": "2024-04-15 10:00:00",
4619  "category": "Articles",
4620  "tags": [
4621    "Planning",
4622    "Budget",
4623    "Forecast",
4624    "Best Practices"
4625  ],
4626  "excerpt": "Jaarplanning opstellen als één end-to-end Plan-to-Perform proces: de 5 kernstappen, de vereisten en waarom mensen, systeem en data samen het verschil maken.",
4627  "originalUrl": "https://smartbooks.ai/en/articles/design-your-annual-planning-cycle-and-monthly-budget-update-as-an-end-to-end-process/",
4628  "enSlug": "design-your-annual-planning-cycle-and-monthly-budget-update-as-an-end-to-end-process"
4629}
4630---
4631<p><strong>Plan to Perform</strong></p>
4632<p>Het idee achter het end-to-end (E2E) proces concept is om een holistisch beeld te geven van de bedrijfsvoering, gericht op de volledige stroom van een specifiek proces — van begin tot eind. Deze aanpak verhoogt de efficiëntie, verbetert de prestaties en zorgt ervoor dat elke stap aansluit op de overkoepelende doelen van het bedrijf. De belangrijkste voordelen van een E2E-perspectief zijn:</p>
4633<p><strong>Gestroomlijnde operatie</strong>: door overbodige stappen te elimineren en te focussen op waarde-toevoegende activiteiten, verlagen organisaties hun kosten en verhogen ze de productiviteit.</p>
4634<p><strong>Meer transparantie</strong>: door processen van begin tot eind te bekijken, worden inefficiënties, knelpunten en verbeterpunten beter zichtbaar.</p>
4635<p><strong>Betere samenwerking</strong>: een E2E-aanpak stimuleert verschillende afdelingen om samen te werken, omdat inputs, outputs en hand-over-momenten helder gedefinieerd zijn.</p>
4636<p>Er bestaan meerdere end-to-end processen die activiteiten stroomlijnen en uitkomsten verbeteren — denk aan Record-to-Report, Hire-to-Retire, Customer-to-Cash of Campaign-to-Conversion. Een specifiek end-to-end proces dat als best practice geldt is het <strong>Plan-to-Perform (P2P)</strong> proces. Dit proces richt zich op het optimaliseren van zowel operationele <em>als</em> financiële planning om superieure prestaties en waardevolle verschillenanalyses tussen plan en realisatie te realiseren.</p>
4637<h2>Het Plan-to-Perform proces ontwerpen</h2>
4638<p>Wat houdt Plan-to-Perform precies in en hoe ontwerp en executeer je het? De volgende 5 stappen vormen de kern van een Plan-to-Perform proces:</p>
4639<ol>
4640<li>Communiceer de bedrijfsstrategie naar de verschillende business proces eigenaren en laat hen een bottom-up budget opstellen, terwijl tegelijkertijd een top-down doelstelling wordt meegegeven. De spanning tussen bottom-up forecast en top-down doel vormt de input voor een strategische discussie die uitmondt in helder gedefinieerde doelen.</li>
4641<li>Stel ondubbelzinnige doelen voor de verschillende bedrijfsactiviteiten (productie, HR, sales, etc.) op basis van de strategische discussies en vastgelegde aannames.</li>
4642<li>Rapporteer geselecteerde KPI's over de werkelijke prestaties versus de geplande resultaten.</li>
4643<li>Analyseer verschillen tussen doelen en realisatie en identificeer de oorzaken en verklaringen.</li>
4644<li>Adresseer de gaps door óf de uitvoering van de bedrijfsactiviteiten bij te sturen, óf door doelen aan te passen wanneer aannames en marktontwikkelingen een update van het plan tot een aangepast budget vereisen.</li>
4645</ol>
4646<figure><img src="https://smartbooks.ai/wp-content/uploads/2024/04/p2p-1024x906.png" alt="Plan-to-Perform proces" /></figure>
4647<h2>Vereisten voor het Plan-to-Perform proces</h2>
4648<p>De reis begint met een stevig fundament: <strong>vakkundige mensen</strong>. Het menselijke element is cruciaal — expertise is nodig om de nuances van het bedrijf te begrijpen en de complexiteit ervan te navigeren.</p>
4649<p>Naast de juiste set vaardigheden is een <strong>state-of-the-art planningsysteem</strong> essentieel. Deze technologie vormt de ruggengraat van het Plan-to-Perform proces en biedt de tools voor financiële planning, analyse en rapportage. Met het juiste systeem realiseer je nauwkeurigheid, efficiëntie en betere besluitvorming.</p>
4650<p>Maar zelfs het meest vaardige team en het meest geavanceerde systeem falen zonder één cruciaal ingrediënt: <strong>kwaliteitsdata</strong>. Data is de levensader van het Plan-to-Perform proces. Accurate, tijdige en relevante data stelt organisaties in staat om geïnformeerde beslissingen te nemen. Te weinig, te laat of foutieve data frustreert je proces — maar bijna net zo schadelijk is een overdaad aan o
4650perationele details: het kan leiden tot extra werk en de illusie van compleetheid wekken zonder dat de extra data de nauwkeurigheid daadwerkelijk verbetert.</p>
4651<h2>Conclusie</h2>
4652<p>Een goed ontworpen en goed uitgevoerd Plan-to-Perform proces is een vitale component van iedere bedrijfsstrategie en vereist vakkundige mensen, geavanceerde technologie en hoogwaardige data. Door dit proces effectief te ontwerpen en uit te voeren, zorgen organisaties ervoor dat hun strategische plannen geen ambities blijven, maar haalbare realiteit worden.</p>`,e6=`---json
4653{
4654  "title": "DSO Calculation: Formula, Benchmark and Worked Example",
4655  "slug": "dso-calculation",
4656  "date": "2026-09-23 10:00:00",
4657  "category": "Articles",
4658  "tags": [
4659    "Rapporteren",
4660    "Forecast",
4661    "Budgetteren"
4662  ],
4663  "excerpt": "DSO calculation explained: the formula, the countback method, a worked example and what a healthy days sales outstanding looks like.",
4664  "originalUrl": "",
4665  "metaTitle": "DSO Calculation: Formula, Benchmark and Example"
4666}
4667---
4668<p>The <strong>DSO calculation</strong> divides the outstanding trade receivables balance by revenue for a period and multiplies the result by the number of days in that period. It measures the average number of days between sending an invoice and receiving the cash.</p>
4669<p>For a controller, days sales outstanding is a working capital figure rather than a collections figure. Every day of DSO represents a day of revenue parked on the balance sheet instead of in the bank account: at &euro; 12 million of annual revenue, each additional day ties up roughly &euro; 33,000. That makes the receivables cycle one of the few levers that releases cash without costing a cent of margin.</p>
4670<h2>What days sales outstanding measures</h2>
4671<p>DSO expresses how many days of revenue are sitting in the receivables balance at any given moment. Three separate things hide inside that single number, and they are not equally controllable:</p>
4672<ul>
4673<li><strong>The agreed payment term.</strong> Whatever the contract or the invoice states. This is the floor you can reach under current agreements.</li>
4674<li><strong>Your own invoicing process.</strong> The days between delivery and a sent invoice count in full. With project billing or time-and-materials work, two weeks disappear here easily.</li>
4675<li><strong>Customer payment behaviour.</strong> The overrun beyond the agreed term. Only this part is genuinely a receivables problem.</li>
4676</ul>
4677<p>Alongside DSO sit DIO (inventory days) and DPO (payables days). Together they form the cash conversion cycle; how those three interact is covered in <a href="/en/articles/working-capital">working capital</a>.</p>
4678<h2>The DSO calculation formula</h2>
4679<p><strong>DSO = (outstanding receivables &divide; revenue for the period) &times; days in the period</strong></p>
4680<ol>
4681<li>Take the receivables balance. With stable revenue the closing balance will do; if revenue moves sharply, average the opening and closing balance, otherwise you mostly measure growth.</li>
4682<li>Strip VAT out of that balance. Receivables sit on the balance sheet including VAT, while revenue underneath sits net of VAT.</li>
4683<li>Take revenue over exactly the same period, net of VAT and excluding intercompany sales.</li>
4684<li>Divide the corrected balance by revenue and multiply by the calendar days in the period: 30 or 31 for a month, 90 or 91 for a quarter, 365 for a year.</li>
4685<li>Repeat on the same basis every month. A single reading says little; the twelve-month trend says everything.</li>
4686</ol>
4687<p>So the DSO calculation needs nothing more than one balance sheet item and one profit and loss item. The skill lies in putting both on the same basis, and that is exactly where it usually goes wrong.</p>
4688<h2>Worked example</h2>
4689<p>A wholesaler runs a DSO calculation for the second quarter. Revenue for April, May and June totals &euro; 2,400,000 net of VAT. The receivables balance at 30 June stands at &euro; 1,089,000 including 21% VAT.</p>
4690<table>
4691<thead><tr><th>Item</th><th>
4691Amount</th></tr></thead>
4692<tbody>
4693<tr><td>Revenue Q2 (net of VAT)</td><td>&euro; 2,400,000</td></tr>
4694<tr><td>Receivables 30 June (including VAT)</td><td>&euro; 1,089,000</td></tr>
4695<tr><td>Receivables net of VAT (&divide; 1.21)</td><td><strong>&euro; 900,000</strong></td></tr>
4696<tr><td>Calendar days in the quarter</td><td>91</td></tr>
4697<tr><td><strong>Outcome</strong></td><td><strong>34.1 days</strong></td></tr>
4698</tbody>
4699</table>
4700<p>900,000 &divide; 2,400,000 &times; 91 = <strong>34.1 days</strong>. Leaving the gross balance of &euro; 1,089,000 in place would have produced 41.3 days: over seven days too high, purely because of VAT. On a thirty-day payment term, that is the difference between a normal reading and an alarm bell.</p>
4701<h2>The countback method</h2>
4702<p>The standard formula assumes revenue is spread evenly across the period. With growth, seasonal peaks or a large closing invoice that assumption fails, and you end up measuring the revenue pattern instead of payment behaviour.</p>
4703<p>The countback or exhaustion method solves this by working the receivables balance back against the revenue of the most recent months:</p>
4704<ol>
4705<li>Subtract the last month's revenue from the receivables balance. If it fits entirely, count all days of that month.</li>
4706<li>Repeat with the month before, for as long as a balance remains.</li>
4707<li>Once the remainder is smaller than a month's revenue, prorate: remainder divided by that month's revenue, times the days in that month.</li>
4708</ol>
4709<p>In the example above, June revenue is &euro; 850,000, May &euro; 800,000 and April &euro; 750,000. The balance of &euro; 900,000 covers all of June (30 days) and leaves &euro; 50,000, which is 50,000 &divide; 800,000 &times; 31 = 1.9 days in May. A countback DSO calculation therefore returns 31.9 days against 34.1 under the standard formula. Those 2.2 days are the growth effect, not weaker collections. Use the standard formula for the trend and the countback method to judge a single period.</p>
4710<h2>What is a good DSO?</h2>
4711<p>There is no absolute benchmark. The only meaningful comparison is against your own weighted average payment term, because that determines what is achievable.</p>
4712<ul>
4713<li><strong>Up to ten days above the agreed term:</strong> normal administrative drift. Invoices falling due on a Friday, payment runs executed every other week.</li>
4714<li><strong>Ten to twenty days above:</strong> a process issue. Usually incorrect invoice details, missing purchase order numbers, or a dunning cycle that only starts after the first reminder.</li>
4715<li><strong>More than twenty days above:</strong> the agreement is structurally ignored, or the concentration sits with a handful of large customers imposing their own terms.</li>
4716</ul>
4717<p>Sector ranges differ widely: retail and hospitality sit at practically zero days because payment is immediate, wholesale and manufacturing typically land between 30 and 45 days, and professional services and construction closer to 45 to 60. Never benchmark against a general average; benchmark against your own history and your own terms.</p>
4718<p>Legislation sets the ceiling. Under the EU late payment rules, 30 days applies by default in B2B trade and 60 days is the contractual maximum unless expressly agreed and not grossly unfair to the supplier. In the Netherlands, large companies have been barred since 1 July 2022 from agreeing terms longer than 30 days with SME suppliers. Local rules vary, so check the jurisdiction of the selling entity before treating any figure as a breach.</p>
4719<h2>Pitfalls</h2>
4720<ul>
4721<li><strong>VAT on one side only.</strong> Dividing a gross receivables balance by net revenue produces a figure 21% too high at a 21% rate. By far the most common error.</li>
4722<li><strong>Annual revenue in a seasonal business.</strong> A DSO calculation on twelve months of revenue when half of it lands in the fourth quarter reports a December figure that does not exist. Use a rolling three-month window instead.</li>
4723<li><strong>Credit notes and advance payments.</strong> These rarely sit where you expect them and can compress or inflate the balance by tens of days. Exclude them explicitly or disclose them.</li>
4724<li><strong>Intercompany receivables in a consolidated figure.</strong> Current account positions between group entities distort the picture completely, because no real payment term sits behind them. Filter them out before consolidating.</li>
4725<li><strong>Treating the metric as the only lever.</strong> Factoring, early payment discounts and tight credit limits all lower the number immediately, at the cost of margin or revenue. Always read the drop alongside gross margin.</li>
4726</ul>
4727<h2>Frequently asked questions</h2>
4728<h3>How do you run a DSO calculation in Excel?</h3>
4729<p>Set up three columns per month: the receivables balance net of VAT, revenue net of VAT, and calendar days. The fourth column is balance divided by revenue times days. Extend the series across twelve months and chart it; the trend line tells you more than any single month.</p>
4730<h3>What is the difference between DSO and the average collection period?</h3>
4731<p>Nothing material. Both express the same thing in days. Watch the context though: sales teams often use "payment term" for what was agreed, while DSO measures what actually happened. That gap is the overrun you steer on.</p>
4732<h3>Should the DSO calculation include VAT?</h3>
4733<p>Net of VAT, on both sides. The receivables balance carries VAT and must be grossed down, or revenue must be grossed up. Either route gives the same answer; only mixing a gross balance with net revenue is wrong.</p>
4734<h3>How often should this metric be measured?</h3>
4735<p>Monthly, as a fixed part of the close. A metric that only surfaces with the annual accounts arrives months too late to supp
4735ort a conversation with a customer.</p>
4736<h2>From metric to steering</h2>
4737<p>Underneath the number sits the aging analysis. It splits open invoices across buckets: current, 1 to 30, 31 to 60, 61 to 90 and more than 90 days overdue, so you can see whether a rising term comes from one large customer or from the whole portfolio. Smartbooks shows that analysis per entity and consolidated, with the option to filter out intercompany relations, and lets you drive planned receivables off a DSO metric so working capital moves with your revenue forecast. The metric then lives in the same <a href="/en/functionalities/reporting">reporting set</a> as the result itself.</p>
4738<p>Running a monthly DSO calculation and placing the outcome next to your <a href="/en/articles/13-week-cashflow-planning-peace-of-mind">13-week cashflow planning</a> lets you see a rising term coming rather than explaining it afterwards. Start with a twelve-month series on a fixed basis, then add the adjacent metrics: <a href="/en/articles/cash-flow-calculation">cash flow calculation</a> for the cash itself, or the <a href="/en/knowledge-center">knowledge center</a> for the rest of the set.</p>
4739`,n6=`---json
4740{
4741  "title": "DSO berekenen: formule, norm en rekenvoorbeeld",
4742  "slug": "dso-berekenen",
4743  "enSlug": "dso-calculation",
4744  "date": "2026-09-23 10:00:00",
4745  "category": "Articles",
4746  "tags": [
4747    "Rapporteren",
4748    "Forecast",
4749    "Budgetteren"
4750  ],
4751  "excerpt": "DSO berekenen: de formule, de countback-methode, een rekenvoorbeeld en wat een goede debiteurentermijn is per branche.",
4752  "originalUrl": "",
4753  "metaTitle": "DSO berekenen: formule, norm en voorbeeld"
4754}
4755---
4756<p><strong>DSO berekenen</strong> doe je door het openstaande debiteurensaldo te delen door de omzet over een periode en de uitkomst te vermenigvuldigen met het aantal dagen in die periode. Je meet daarmee het gemiddelde aantal dagen tussen het versturen van een factuur en het ontvangen van het geld.</p>
4757<p>Voor een controller is dat geen incassocijfer maar een werkkapitaalcijfer. Elke dag debiteurentermijn is een dag omzet die als vordering op de balans staat in plaats van op de bankrekening: bij een jaaromzet van &euro; 12 miljoen kost elke extra dag ongeveer &euro; 33.000 aan liquiditeit. Dat maakt de termijn een van de weinige knoppen waarmee je kas vrijmaakt zonder dat er een euro marge bij hoeft.</p>
4758<h2>Wat is DSO?</h2>
4759<p>DSO staat voor days sales outstanding, in het Nederlands de debiteurentermijn of gemiddelde debiteurentermijn. Het kengetal drukt uit hoeveel dagen omzet er op enig moment als debiteurensaldo openstaat. Drie verschillende dingen zitten in dat ene getal verstopt, en ze zijn niet allemaal even goed beinvloedbaar:</p>
4760<ul>
4761<li><strong>De afgesproken betalingstermijn.</strong> Wat er in het contract of op de factuur staat. Dit is de ondergrens die je met de huidige afspraken kunt halen.</li>
4762<li><strong>Het eigen factuurproces.</strong> De dagen tussen levering en verzonden factuur tellen volledig mee. Bij projectfacturatie en nacalculatie loopt dat gemakkelijk op tot twee weken.</li>
4763<li><strong>Het betaalgedrag van de klant.</strong> De overschrijding boven de afgesproken termijn. Alleen dit deel is een echt debiteurenprobleem.</li>
4764</ul>
4765<p>Naast DSO staan DIO (voorraaddagen) en DPO (crediteurendagen). Samen vormen ze de cash conversion cycle; hoe die drie op elkaar inwerken staat in <a href="/artikelen/werkkapitaal-berekenen">werkkapitaal berekenen</a>.</p>
4766<h2>De formule om DSO te berekenen</h2>
4767<p><strong>DSO = (openstaande debiteuren &divide; omzet over de periode) &times; aantal dagen in de periode</strong></p>
4768<ol>
4769<li>Neem het debiteurensaldo. Bij een stabiele omzet volstaat de eindstand; groeit of krimpt de omzet hard, neem dan het gemiddelde van begin- en eindstand, anders meet je vooral de groei.</li>
4770<li>Haal de btw uit dat saldo. Debiteuren staan inclusief btw op de balans, omzet staat er exclusief btw onder. Deel het saldo door 1,21, of breng de omzet juist bruto.</li>
4771<li>Neem de omzet over dezelfde periode, exclusief btw en exclusief intercompany-leveringen.</li>
4772<li>Deel het gecorrigeerde saldo door de omzet en vermenigvuldig met het aantal kalenderdagen in de periode: 30 of 31 voor een maand, 90 of 91 voor een kwartaal, 365 voor een jaar.</li>
4773<li>Herhaal de meting elke maand op dezelfde manier. Een losse uitkomst zegt weinig;
4773 de trend over twaalf maanden zegt alles.</li>
4774</ol>
4775<p>Om de DSO te berekenen heb je dus niet meer nodig dan een balanspost en een resultaatpost. De kunst zit erin dat die twee op dezelfde grondslag staan, en precies daar gaat het in de praktijk mis.</p>
4776<h2>Rekenvoorbeeld</h2>
4777<p>Een groothandel wil de DSO berekenen over het tweede kwartaal. De omzet over april, mei en juni bedraagt &euro; 2.400.000 exclusief btw. Het debiteurensaldo per 30 juni staat op &euro; 1.089.000 inclusief 21% btw.</p>
4778<table>
4779<thead><tr><th>Post</th><th>Bedrag</th></tr></thead>
4780<tbody>
4781<tr><td>Omzet Q2 (exclusief btw)</td><td>&euro; 2.400.000</td></tr>
4782<tr><td>Debiteuren 30 juni (inclusief btw)</td><td>&euro; 1.089.000</td></tr>
4783<tr><td>Debiteuren exclusief btw (&divide; 1,21)</td><td><strong>&euro; 900.000</strong></td></tr>
4784<tr><td>Kalenderdagen in het kwartaal</td><td>91</td></tr>
4785<tr><td><strong>Uitkomst</strong></td><td><strong>34,1 dagen</strong></td></tr>
4786</tbody>
4787</table>
4788<p>900.000 &divide; 2.400.000 &times; 91 = <strong>34,1 dagen</strong>. Had je het brutosaldo van &euro; 1.089.000 laten staan, dan was de uitkomst 41,3 dagen geweest: ruim zeven dagen te hoog, puur door een btw-verschil. Bij een afgesproken termijn van dertig dagen is dat het verschil tussen een normale uitkomst en een alarmbel.</p>
4789<h2>De countback-methode</h2>
4790<p>De gewone formule gaat ervan uit dat de omzet gelijkmatig over de periode is verdeeld. Bij groei, seizoenspieken of een grote slotfactuur klopt die aanname niet, en dan meet je het effect van de omzetverdeling in plaats van het betaalgedrag.</p>
4791<p>De countback-methode, ook wel uitputtingsmethode, lost dat op door het debiteurensaldo terug te rekenen tegen de omzet van de meest recente maanden:</p>
4792<ol>
4793<li>Trek de omzet van de laatste maand af van het debiteurensaldo. Past die volledig, tel dan alle dagen van die maand mee.</li>
4794<li>Herhaal dit met de maand daarvoor, zolang er saldo overblijft.</li>
4795<li>Is het restbedrag kleiner dan de maandomzet, reken dan naar rato: restbedrag gedeeld door de maandomzet, maal het aantal dagen van die maand.</li>
4796</ol>
4797<p>In het voorbeeld hierboven is de omzet in juni &euro; 850.000, in mei &euro; 800.000 en in april &euro; 750.000. Het saldo van &euro; 900.000 dekt heel juni (30 dagen) en houdt &euro; 50.000 over; dat is 50.000 &divide; 800.000 &times; 31 = 1,9 dag in mei. De DSO berekenen met de countback-methode geeft dan 31,9 dagen tegen 34,1 volgens de gewone formule. Dat verschil van 2,2 dagen is het groeieffect, niet slechter betaalgedrag. Gebruik de gewone formule voor de trend en de countback voor het oordeel over een enkele periode.</p>
4798<h2>Wat is een goede debiteurentermijn?</h2>
4799<p>Een absolute norm bestaat niet. De enige zinvolle vergelijking is die met je eigen gewogen gemiddelde betalingstermijn, want die bepaalt wat haalbaar is.</p>
4800<ul>
4801<li><strong>Tot tien dagen boven de afgesproken termijn:</strong> normaal administratief verloop. Facturen die op vrijdag vervallen, betaalruns die eens per twee weken draaien.</li>
4802<li><strong>Tien tot twintig dagen erboven:</strong> een procesprobleem. Meestal onjuiste factuurgegevens, ontbrekende inkoopordernummers of een aanmaanproces dat pas na de eerste herinnering op gang komt.</li>
4803<li><strong>Meer dan twintig dagen erboven:</strong> de afspraak wordt structureel niet nageleefd, of de concentratie zit bij een paar grote afnemers die hun eigen termijn hanteren.</li>
4804</ul>
4805<p>Branchebandbreedtes lopen ver uiteen: retail en horeca zitten praktisch op nul dagen omdat er direct wordt afgerekend, groothandel en productie zitten doorgaans tussen 30 en 45 dagen, en zakelijke dienstverlening en bouw eerder tussen 45 en 60. Vergelijk daarom nooit met een algemeen gemiddelde, maar met je eigen historie en je eigen termijn.</p>
4806<p>Het wettelijk kader in Nederland geeft de bovengrens. Is er niets afgesproken, dan geldt dertig dagen. Contractueel mag in B2B maximaal zestig dagen worden overeengekomen, en sinds 1 juli 2022 mogen grote ondernemingen met mkb-leveranciers niet langer dan dertig dagen afspreken. Een uitkomst ruim boven de zestig dagen betekent dus bijna altijd dat de gemaakte afspraak niet wordt nageleefd.<
4806/p>
4807<h2>Valkuilen</h2>
4808<ul>
4809<li><strong>Btw aan een kant.</strong> Het debiteurensaldo inclusief btw delen door omzet exclusief btw levert bij 21% structureel 21% te veel dagen op. Dit is veruit de meest gemaakte fout.</li>
4810<li><strong>Jaaromzet bij een seizoenbedrijf.</strong> Wie de DSO berekent op de omzet van twaalf maanden terwijl de helft daarvan in het vierde kwartaal valt, meet in december een termijn die er niet is. Gebruik dan een voortschrijdende periode van drie maanden.</li>
4811<li><strong>Creditnota's en vooruitontvangen bedragen.</strong> Die staan debet noch credit waar je ze verwacht en kunnen het saldo tientallen dagen drukken of opblazen. Sluit ze expliciet uit of licht ze toe.</li>
4812<li><strong>Intercompany-vorderingen in een geconsolideerde meting.</strong> Rekening-courantposities tussen groepsmaatschappijen vertekenen het beeld volledig, omdat daar geen echte betaaltermijn achter zit. Filter ze eruit voordat je consolideert.</li>
4813<li><strong>De termijn als enige stuurgetal.</strong> Factoring, betaalkorting en strenge kredietlimieten verlagen de uitkomst direct, maar kosten marge of omzet. Beoordeel de daling altijd naast de brutomarge.</li>
4814</ul>
4815<h2>Veelgestelde vragen over DSO</h2>
4816<h3>Hoe kun je DSO berekenen in Excel?</h3>
4817<p>Zet per maand drie kolommen neer: het debiteurensaldo exclusief btw, de omzet exclusief btw en het aantal kalenderdagen. De vierde kolom is saldo gedeeld door omzet maal dagen. Trek die reeks over twaalf maanden door en zet er een grafiek onder; de trendlijn is informatiever dan elke losse maand.</p>
4818<h3>Wat is het verschil tussen DSO en debiteurentermijn?</h3>
4819<p>Inhoudelijk niets. Debiteurentermijn is de Nederlandse term voor days sales outstanding. Let wel op de context: met "debiteurentermijn" bedoelt een verkoopafdeling vaak de afgesproken betalingstermijn, terwijl DSO de werkelijk gerealiseerde termijn meet. Dat verschil is precies de overschrijding waar je op stuurt.</p>
4820<h3>Moet je de DSO berekenen inclusief of exclusief btw?</h3>
4821<p>Exclusief, aan beide kanten. Het debiteurensaldo op de balans staat inclusief btw en moet dus worden teruggerekend, of je brengt de omzet bruto. Beide routes geven dezelfde uitkomst; alleen de combinatie van bruto saldo en netto omzet is fout.</p>
4822<h3>Hoe vaak meet je dit kengetal?</h3>
4823<p>Maandelijks, als vast onderdeel van de afsluiting. Een kengetal dat pas bij de jaarrekening verschijnt, komt maanden te laat om er nog een gesprek met een klant op te baseren.</p>
4824<h2>Van kengetal naar sturing</h2>
4825<p>Onder het getal ligt de ouderdomsanalyse. Die verdeelt de openstaande facturen over de buckets niet vervallen, 1 tot 30, 31 tot 60, 61 tot 90 en meer dan 90 dagen te laat, zodat je ziet of een oplopende termijn uit een enkele grote klant komt of uit de hele portefeuille. Smartbooks toont die analyse per entiteit en geconsolideerd, met de mogelijkheid intercompany-relaties uit te filteren, en laat je debiteuren in de planning aan een DSO-metric hangen zodat het werkkapitaal automatisch meebeweegt met je omzetprognose. Daarmee staat de debiteurentermijn in dezelfde <a href="/functionaliteiten/rapporteren">rapportageset</a> als het resultaat.</p>
4826<p>Wie de DSO maandelijks berekent en de uitkomst naast de <a href="/artikelen/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening">13-weken cashflowplanning</a> legt, ziet een oplopende termijn aankomen in plaats van achteraf. Begin met een meetreeks van twaalf maanden op een vaste grondslag, en leg daar de aangrenzende kengetallen naast: <a href="/artikelen/cashflow-berekenen">cashflow berekenen</a> voor de kasstroom zelf, of het <a href="/kenniscentrum">kenniscentrum</a> voor de rest van de set.</p>
4827`,t6=`---json
4828{
4829  "title": "EBITDA berechnen: Formel, Marge und Wachstum",
4830  "slug": "ebitda-berekenen",
4831  "metaTitle": "EBITDA berechnen: Formel, Marge und Wachstum",
4832  "date": "2026-08-06 10:00:00",
4833  "category": "Articles",
4834  "tags": [
4835    "Analyse",
4836    "Berichtswesen",
4837    "Business Control",
4838    "KPI"
4839  ],
4840  "excerpt": "EBITDA berechnen: die Formel Schritt für Schritt, Unterschied zum Jahresüberschuss, EBITDA-Marge und -Wachstum berechnen, plus Anpassungen und Fehler.",
4841  "originalUrl": ""
4842}
4843---
4844<h1>EBITDA berechnen: <strong>Formel, Marge und Wachstum</strong></h1>
4845<p><strong>EBITDA berechnen</strong> geh&ouml;rt zum Handwerk jedes Controllers. EBITDA steht f&uuml;r Earnings Before Interest, Taxes, Depreciation and Amortization &mdash; das Ergebnis vor Zinsen, Steuern und Abschreibungen. Es zeigt die operative Leistung eines Unternehmens, unabh&auml;ngig von Finanzierungs- und Steuerentscheidungen.</p>
4846<p>EBITDA wird breit in Finanzanalyse und Bewertung eingesetzt, weil es die Profitabilit&auml;t &uuml;ber Unternehmen und Branchen hinweg vergleichbar macht. Wichtig: EBITDA ist keine standardisierte Kennzahl. Unterschiedliche Bilanzierungspraktiken machen es notwendig, Berechnung und Grenzen zu kennen.</p>
4847<h2>
4847Was ist EBITDA und warum ist es wichtig?</h2>
4848<p>EBITDA misst, wie profitabel das Kerngesch&auml;ft ist. Zinsen und Steuern h&auml;ngen mit Finanzierung und steuerlichen Pflichten zusammen; Abschreibungen sind nicht zahlungswirksame Posten, die das Bild verzerren k&ouml;nnen. Werden sie eliminiert, entsteht ein klareres Bild der Operations.</p>
4849<ul>
4850<li>Einblick in die operative Profitabilit&auml;t.</li>
4851<li>Vergleichbarkeit zwischen Unternehmen und Branchen.</li>
4852<li>Wichtig f&uuml;r Bewertung, M&amp;A und Investitionsentscheidungen.</li>
4853</ul>
4854<figure class="wp-block-image size-large"><img src="/__l5e/assets-v1/73dae3f9-6e45-438e-b5dd-0675439b9236/ebitda-componenten.png" alt="Aufbau des EBITDA von Umsatz über Rohertrag bis EBIT" loading="lazy"/><figcaption>Vom Umsatz zum EBITDA: der Aufbau im Überblick</figcaption></figure>
4855
4856
4857
4858<h2>Die EBITDA-Formel Schritt f&uuml;r Schritt</h2>
4859<p>Die EBITDA-Formel lautet:</p>
4860<p><strong>EBITDA = Jahres&uuml;berschuss + Zinsen + Steuern + Abschreibungen + Amortisation</strong></p>
4861<ol>
4862<li>Beginne mit dem Jahres&uuml;berschuss aus der Gewinn- und Verlustrechnung.</li>
4863<li>Addiere den Zinsaufwand; Finanzierungskosten geh&ouml;ren nicht zum operativen Gesch&auml;ft.</li>
4864<li>Addiere die Steuern.</li>
4865<li>Addiere die Abschreibungen.</li>
4866<li>Addiere die Amortisation.</li>
4867</ol>
4868<p>Alternativ von oben nach unten: Umsatz &minus; Materialaufwand = Rohertrag, minus operative Kosten = EBIT, plus Abschreibungen und Amortisation = EBITDA.</p>
4869<figure class="wp-block-image size-large"><img src="/__l5e/assets-v1/1f36b118-6bbe-4110-95fa-8b40998b8f6d/ebitda-formule.png" alt="Die EBITDA-Formel: Jahresüberschuss plus Zinsen, Steuern, Abschreibungen und Amortisation" loading="lazy"/><figcaption>Die EBITDA-Formel auf einen Blick</figcaption></figure>
4870
4871
4872
4873<h2>EBITDA versus Jahres&uuml;berschuss</h2>
4874<p>EBITDA fokussiert die operative Leistung, der Jahres&uuml;berschuss ist das Endergebnis inklusive aller Aufw&auml;nde und Erl&ouml;se.</p>
4875<ul>
4876<li><strong>EBITDA:</strong> operatives Ergebnis, ohne nicht-operative Kosten und ohne nicht zahlungswirksame Posten.</li>
4877<li><strong>Jahres&uuml;berschuss:</strong> Gesamtergebnis, inklusive Zinsen, Steuern und Abschreibungen.</li>
4878</ul>
4879<h2>EBITDA-Anpassungen: was geh&ouml;rt dazu?</h2>
4880<p>Adjusted EBITDA normalisiert das Ergebnis, damit Einmaleffekte die Vergleichbarkeit nicht st&ouml;ren. H&auml;ufige Anpassungen:</p>
4881<ul>
4882<li>Einmalige oder ungew&ouml;hnliche Aufw&auml;nde, etwa Restrukturierungskosten.</li>
4883<li>&Auml;nderungen bei Sch&auml;tzungen oder Bilanzierungsmethoden.</li>
4884<li>Effekte aus aufgegebenen Gesch&auml;ftsbereichen.</li>
4885<li>Kosten im Zusammenhang mit Fusionen und &Uuml;bernahmen.</li>
4886</ul>
4887<h2>EBITDA-Marge berechnen</h2>
4888<p>Die EBITDA-Marge zeigt, welcher Anteil des Umsatzes nach operativen Kosten bleibt:</p>
4889<ol>
4890<li>Ermittle das EBITDA aus deinen Zahlen.</li>
4891<li>Teile es durch den Gesamtumsatz.</li>
4892<li>Multipliziere mit 100 f&uuml;r einen Prozentwert.</li>
4893</ol>
4894<p>Eine EBITDA-Marge von 30% bedeutet: von jedem Euro Umsatz bleiben 30 Cent operativer Gewinn. Margen unterscheiden sich stark je Branche &mdash; vergleiche immer innerhalb des eigenen Sektors.</p>
4895<h2>EBITDA-Wachstum berechnen</h2>
4896<ol>
4897<li>Bestimme die zu vergleichenden Perioden.</li>
4898<li>Ziehe das EBITDA der fr&uuml;heren Periode von dem der sp&auml;teren ab.</li>
4899<li>Teile die Differenz durch das EBITDA der fr&uuml;heren Periode und multipliziere mit 100.</li>
4900</ol>
4901<p>Konstantes Wachstum spricht f&uuml;r ein robustes Gesch&auml;ftsmodell; schwankendes oder negatives Wachstum verlangt eine genauere Ursachenanalyse.</p>
4902<h2>Rechenbeispiel</h2>
4903<p>Ein Unternehmen weist einen Jahres&uuml;berschuss von 500.000 &euro;, Zinsaufwand von 50.000 &euro;, Steuern von 40.000 &euro; und 60.000 &euro; Abschreibungen aus.</p>
4904<p>EBITDA = 500.000 + 50.000 + 40.000 + 60.000 = <strong>650.000 &euro;</strong>.</p>
4905<h2>St&auml;rken und Grenzen in der Finanzanalyse</h2>
4906<p>EBITDA eignet sich, um Unternehmen mit unterschiedlichen Kapitalstrukturen zu vergleichen, und wird bei M&amp;A, Benchmarking und der Beurteilung der Schuldendienstf&auml;higkeit genutzt. Die Grenze: Investitionen und Working Capital bleiben unber&uuml;cksichtigt. Kombiniere EBITDA daher immer mit Cashflow- und Ergebnisanalysen.</p>
4907<h2>Typische Fehler und Best Practices</h2>
4908<ul>
4909<li><strong>Datenquellen pr&uuml;fen:</strong> nur abgestimmte, verl&auml;ssliche Daten verwenden.</li>
4910<li><strong>Anpassungen konsistent anwenden:</strong> nur so sind Perioden vergleichbar.</li>
4911<li><strong>Zahlen einordnen:</strong> immer im Branchenkontext interpretieren.</li>
4912<li><strong>Einmalig von wiederkehrend trennen:</strong> sonst verzerrt das EBITDA.</li>
4913</ul>
4914<h2>H&auml;ufige Fragen zu EBITDA</h2>
4915<p><strong>Wie lautet die EBITDA-Formel?</strong><br />EBITDA = Jahres&uuml;berschuss + Zinsen + Steuern + Abschreibungen + Amortisation. Alternativ: EBIT + Abschreibungen + Amortisation.</p>
4916<p><strong>Was ist eine gute EBITDA-Marge?</strong><br />Das h&auml;ngt von der Branche ab. Softwareunternehmen erreichen oft hohe Margen, Handel und Produktion liegen strukturell niedriger.</p>
4917<p><strong>Was ist der Unterschied zwischen EBITDA und EBIT?</strong><br />EBIT ist das Ergebnis vor Zinsen und Steuern; EBITDA rechnet zus&auml;tzlich Abschreibungen und Amortisation hinzu.</p>
4918<p><strong>Ist EBITDA dasselbe wie Cashflow?</strong><br />Nein. EBITDA ignoriert Investitionen, Working-Capital-Ver&auml;nderungen sowie Zins- und Steuerzahlungen.</p>
4919<h2>EBITDA automatisch im Reporting</h2>
4920<p>In Smartbooks sind EBITDA, EBITDA-Marge und deren Entwicklung je Einheit oder konsolidiert Teil der Standardberichte &mdash; ohne Excel. <a href="/de/demo">Demo buchen</a> und auf eigenen Zahlen ansehen.</p>`,i6=`---json
4921{
4922  "title": "EBITDA calculation: formula, margin and growth",
4923  "slug": "ebitda-calculation",
4924  "metaTitle": "EBITDA Formula: How to Calculate EBITDA (+ Margin)",
4925  "date": "2026-08-06 10:00:00",
4926  "category": "Articles",
4927  "tags": [
4928    "Analytics",
4929    "Reporting",
4930    "Business Control",
4931    "KPI"
4932  ],
4933  "excerpt": "EBITDA = net income + interest + taxes + depreciation + amortization. Step-by-step calculation, a worked example and the EBITDA margin formula.",
4934  "originalUrl": ""
4935}
4936---
4937<h1>EBITDA calculation: <strong>formula, margin and growth</strong></h1>
4938<p><strong>EBITDA calculation</strong> is essential knowledge in finance. EBITDA stands for Earnings Before Interest, Taxes, Depreciation and Amortization, and it provides insight into a company's operating performance, separate from financing and tax choices.</p>
4939<p>EBITDA is widely used in financial analysis and valuation. It makes profitability comparable across companies and industries, because non-operating expenses are excluded. Note that EBITDA is not a standardized measure: accounting practices differ, which makes understanding its calculation and limitations essential.</p>
4940<h2>What is EBITDA and why does it matter?</h2>
4941<p>EBITDA measures how profitable a company's core business is. Interest and taxes relate to financing and government obligations; depreciation and amortization are non-cash expenses that can distort profitability. By eliminating them, EBITDA offers a cleaner view of operations.</p>
4942<ul>
4943<li>Insight into operational profitability.</li>
4944<li>Comparability across companies and industries.</li>
4945<li>Important in valuation, M&amp;A and investment decisions.</li>
4946</ul>
4947<figure class="wp-block-image size-large"><img src="/__l5e/assets-v1/73dae3f9-6e45-438e-b5dd-0675439b9236/ebitda-componenten.png" alt="How EBITDA builds up from revenue via gross profit and EBIT" loading="lazy"/><figcaption>From revenue to EBITDA: the full build-up</figcaption></figure>
4948
4949
4950
4951<h2>The EBITDA formula, step by step</h2>
4952<p>
4952The EBITDA formula is:</p>
4953<p><strong>EBITDA = net income + interest + taxes + depreciation + amortization</strong></p>
4954<ol>
4955<li>Start with net income from the income statement.</li>
4956<li>Add back interest expense; financing costs are not part of operations.</li>
4957<li>Add back taxes.</li>
4958<li>Add depreciation.</li>
4959<li>Add amortization.</li>
4960</ol>
4961<p>You can also work top-down: revenue &minus; cost of goods sold = gross profit, minus operating expenses = EBIT, plus depreciation and amortization = EBITDA.</p>
4962<figure class="wp-block-image size-large"><img src="/__l5e/assets-v1/1f36b118-6bbe-4110-95fa-8b40998b8f6d/ebitda-formule.png" alt="The EBITDA formula: net profit plus interest, tax, depreciation and amortisation" loading="lazy"/><figcaption>The EBITDA formula at a glance</figcaption></figure>
4963
4964
4965
4966<h2>EBITDA vs net profit</h2>
4967<p>EBITDA and net profit measure different things. EBITDA focuses on operational performance; net profit is the bottom line including all expenses and income.</p>
4968<ul>
4969<li><strong>EBITDA:</strong> operational profit, excluding non-operating costs and non-cash charges.</li>
4970<li><strong>Net profit:</strong> total earnings, including interest, taxes and depreciation.</li>
4971</ul>
4972<p>Use EBITDA to gauge operational health and net profit to assess overall financial performance. Together they give a well-rounded picture.</p>
4973<h2>EBITDA adjustments: what to include and why</h2>
4974<p>Adjusted EBITDA normalizes earnings so one-off events don't distort comparability. Common adjustments:</p>
4975<ul>
4976<li>Non-recurring or unusual expenses, such as restructuring charges.</li>
4977<li>Changes in accounting estimates or policies.</li>
4978<li>Impact of discontinued operations.</li>
4979<li>Costs related to mergers and acquisitions.</li>
4980</ul>
4981<h2>Calculating the EBITDA margin</h2>
4982<p>The EBITDA margin shows what percentage of revenue is left after operating expenses:</p>
4983<ol>
4984<li>Compute EBITDA from your financial statements.</li>
4985<li>Divide by total revenue.</li>
4986<li>Multiply by 100 to get a percentage.</li>
4987</ol>
4988<p>An EBITDA margin of 30% means 30 cents of every euro of revenue remains as operating profit. Margins vary strongly by industry, so always compare within the same sector.</p>
4989<h2>Calculating the EBITDA growth rate</h2>
4990<p>The EBITDA growth rate shows how earnings evolve over time, year-over-year or quarter-over-quarter:</p>
4991<ol>
4992<li>Identify the periods to compare.</li>
4993<li>Subtract the earlier period's EBITDA from the later period's EBITDA.</li>
4994<li>Divide the difference by the earlier period's EBITDA and multiply by 100.</li>
4995</ol>
4996<p>Consistent growth suggests a robust business model; fluctuating or negative growth calls for a closer look at causes and external factors.</p>
4997<h2>Worked example</h2>
4998<p>A company reports net income of &euro;500,000, interest expense of &euro;50,000, taxes of &euro;40,000 and &euro;60,000 in depreciation and amortization.</p>
4999<p>EBITDA = 500,000 + 50,000 + 40,000 + 60,000 = <strong>&euro;650,000</strong>.</p>
5000<h2>Strengths and limitations in financial analysis</h2>
5001<p>EBITDA is ideal for comparing companies with different capital structures and is used in M&amp;A, benchmarking and assessing debt service capability. Its limitation: EBITDA ignores capital expenditure and working capital. Relying on it alone can hide cash flow problems, so always pair EBITDA with cash flow and net profit analysis.</p>
5002<h2>Common mistakes and best practices</h2>
5003<ul>
5004<li><strong>Verify your data sources:</strong> work with reliable, reconciled data.</li>
5005<li><strong>Apply adjustments consistently:</strong> only then are periods comparable.</li>
5006<li><strong>Contextualize the figures:</strong> benchmark against industry norms.</li>
5007<li><strong>Separate one-off from recurring items:</strong> otherwise EBITDA is misleading.</li>
5008</ul>
5009<h2>Frequently asked questions about EBITDA</h2>
5010<p><strong>What is the EBITDA formula?</strong><br />EBITDA = net income + interest + taxes + depreciation + amortization. Alternatively: EBIT + depreciation + amortization.</p>
5011<p><strong>What is a good EBITDA margin?</strong><br />
5011It depends on the industry. Software companies often reach high margins, while trading and manufacturing businesses structurally sit lower. Always compare within your own sector.</p>
5012<p><strong>What is the difference between EBITDA and EBIT?</strong><br />EBIT is earnings before interest and taxes; EBITDA adds depreciation and amortization back on top of EBIT.</p>
5013<p><strong>Is EBITDA the same as cash flow?</strong><br />No. EBITDA ignores capital expenditure, working capital movements and interest and tax payments, so it is not a substitute for a cash flow statement.</p>
5014<h2>EBITDA automatically in your reporting</h2>
5015<p>In Smartbooks, EBITDA, EBITDA margin and their development per entity or consolidated are part of your standard reports, without any Excel work. <a href="/en/demo">Book a demo</a> and see it on your own numbers.</p>`,r6=`---json
5016{
5017  "title": "EBITDA berekenen: formule, marge en groei",
5018  "slug": "ebitda-berekenen",
5019  "order": 55,
5020  "metaTitle": "EBITDA berekenen: formule en rekenvoorbeeld in 5 stappen",
5021  "date": "2026-08-06 10:00:00",
5022  "category": "Articles",
5023  "tags": [
5024    "Analyse",
5025    "Rapportage",
5026    "Business Control",
5027    "KPI"
5028  ],
5029  "excerpt": "EBITDA berekenen begint bij de nettowinst: tel rente, belastingen, afschrijvingen en amortisatie erbij. Met rekenvoorbeeld, marge en de gangbare correcties.",
5030  "originalUrl": "",
5031  "enSlug": "ebitda-calculation"
5032}
5033---
5034<h1>EBITDA berekenen: <strong>formule, marge en groei</strong></h1>
5035<p><strong>EBITDA berekenen</strong> is voor elke controller basiskost: EBITDA staat voor Earnings Before Interest, Taxes, Depreciation and Amortization &mdash; het bedrijfsresultaat v&oacute;&oacute;r rente, belastingen, afschrijvingen en amortisatie. Het geeft inzicht in de operationele prestatie van een onderneming, los van financierings- en fiscale keuzes.</p>
5036<p>EBITDA wordt breed gebruikt in financi&euml;le analyse en waardering. Het maakt winstgevendheid vergelijkbaar tussen bedrijven en sectoren, omdat niet-operationele posten buiten beschouwing blijven. Let op: EBITDA is geen gestandaardiseerde maatstaf. Verschillen in grondslagen maken het essentieel om de berekening en de beperkingen te kennen.</p>
5037<h2>Wat is EBITDA en waarom is het belangrijk?</h2>
5038<p>EBITDA meet hoe winstgevend de kernactiviteit van een onderneming is. Rente en belastingen hangen samen met financiering en fiscale verplichtingen; afschrijvingen en amortisatie zijn non-cash posten die het beeld kunnen vertekenen. Door deze posten te elimineren geeft EBITDA een zuiverder beeld van de operatie.</p>
5039<ul>
5040<li>Inzicht in operationele winstgevendheid.</li>
5041<li>Vergelijkbaarheid tussen bedrijven en sectoren.</li>
5042<li>Belangrijk bij waardering, overnames en investeringsbeslissingen.</li>
5043</ul>
5044<figure class="wp-block-image size-large"><img src="/__l5e/assets-v1/73dae3f9-6e45-438e-b5dd-0675439b9236/ebitda-componenten.png" alt="Opbouw van EBITDA vanaf omzet via brutowinst en EBIT" loading="lazy"/><figcaption>Van omzet naar EBITDA: de opbouw in één overzicht</figcaption></figure>
5045
5046
5047
5048<h2>De EBITDA-formule: stap voor stap</h2>
5049<p>De EBITDA-formule is:</p>
5050<p><strong>EBITDA = nettowinst + rente + belastingen + afschrijvingen + amortisatie</strong></p>
5051<ol>
5052<li>Start bij de nettowinst uit de winst- en verliesrekening.</li>
5053<li>Tel de rentelasten erbij op; financieringskosten horen niet bij de operatie.</li>
5054<li>Tel de belastinglast erbij op.</li>
5055<li>Tel de afschrijvingen op.</li>
5056<li>Tel de amortisatie op.</li>
5057</ol>
5058<p>Je kunt ook van boven naar beneden werken: omzet &minus; kostprijs = brutowinst, minus operationele kosten = EBIT, plus afschrijvingen en amortisatie = EBITDA.</p>
5059<figure class="wp-block-image size-large"><img src="/__l5e/assets-v1/1f36b118-6bbe-4110-95fa-8b40998b8f6d/ebitda-formule.png" alt="De EBITDA-formule: nettowinst plus rente, belastingen, afschrijvingen en amortisatie" loading="lazy"/><figcaption>De EBITDA-formule in beeld</figcaption></figure>
5060
5061
5062
5063<h2>EBITDA versus nettowinst</h2>
5064<p>EBITDA en nettowinst meten verschillende dingen. EBITDA focust op de operationele prestatie; nettowinst is het onderste-regelresultaat inclusief alle kosten en baten.</p>
5065<ul>
5066<li><strong>EBITDA:</strong> operationeel resultaat, exclusief niet-operationele kosten en non-cash posten.</li>
5067<li><strong>Nettowinst:</strong> totaalresultaat, inclusief rente, belastingen en afschrijvingen.</li>
5068</ul>
5069<p>Gebruik EBITDA om de operationele gezondheid te beoordelen en nettowinst om het totale financi&euml;le resultaat te beoordelen. Samen geven ze een compleet beeld.</p>
5070<h2>EBITDA-correcties: wat neem je mee?</h2>
5071<p>Correcties (adjusted EBITDA) normaliseren het resultaat, zodat eenmalige effecten de vergelijkbaarheid niet verstoren. Veelvoorkomende correcties:</p>
5072<ul>
5073<li>Eenmalige of bijzondere kosten, zoals reorganisatielasten.</li>
5074<li>Wijzigingen in schattingen of waarderingsgrondslagen.</li>
5075<li>Effect van bee&iuml;ndigde bedrijfsactiviteiten.</li>
5076<li>Kosten rondom fusies en overnames.</li>
5077</ul>
5078<h2>EBITDA-marge berekenen</h2>
5079<p>De EBITDA-marge laat zien welk deel van de omzet overblijft na operationele kosten. Bereken de marge zo:</p>
5080<ol>
5081<li>Bepaal de EBITDA uit je cijfers.</li>
5082<li>Deel de EBITDA door de totale omzet.</li>
5083<li>Vermenigvuldig met 100 voor een percentage.</li>
5084</ol>
5085<p>Een EBITDA-marge van 30% betekent dat 30 cent van elke euro omzet als operationele winst overblijft. Marges verschillen sterk per sector, dus vergelijk altijd binnen dezelfde branche.</p>
5086<h2>EBITDA-groei berekenen</h2>
5087<p>De EBITDA-groei laat zien hoe het resultaat zich over tijd ontwikkelt, jaar-op-jaar of kwartaal-op-kwartaal:</p>
5088<ol>
5089<li>Bepaal de te vergelijken perioden.</li>
5090<li>Trek de EBITDA van de eerdere periode af van die van de latere periode.</li>
5091<li>Deel het verschil door de EBITDA van de eerdere periode en vermenigvuldig met 100.</li>
5092</ol>
5093<p>Consistente groei duidt op een robuust businessmodel; schommelende of negatieve groei vraagt om nader onderzoek naar oorzaken en externe factoren.</p>
5094<h2>Rekenvoorbeeld</h2>
5095<p>Een onderneming heeft een nettowinst van &euro;500.000, rentelasten van &euro;50.000, belastingen van &euro;40.000 en &euro;60.000 aan afschrijvingen en amortisatie.</p>
5096<p>EBITDA = 500.000 + 50.000 + 40.000 + 60.000 = <strong>&euro;650.000</strong>.</p>
5097<h2>Sterktes en beperkingen in financi&euml;le analyse</h2>
5098<p>EBITDA is ideaal om ondernemingen met verschillende kapitaalstructuren te vergelijken en wordt gebruikt bij overnames, benchmarking en de beoordeling van aflossingscapaciteit. De beperking: EBITDA houdt geen rekening met investeringen (capex) en werkkapitaal. Wie er blind op vaart, mist mogelijke cashflowproblemen. Combineer EBITDA daarom altijd met cashflow- en resultaatanalyses.</p>
5099<h2>Veelgemaakte fouten en best practices</h2>
5100<ul>
5101<li><strong>Controleer je bronnen:</strong> werk met betrouwbare, afgestemde data.</li>
5102<li><strong>Pas correcties consistent toe:</strong> alleen dan zijn perioden vergelijkbaar.</li>
5103<li><strong>Plaats cijfers in context:</strong> toets aan sectornormen.</li>
5104<li><strong>Scheid eenmalig van terugkerend:</strong> anders geeft EBITDA een vertekend beeld.</li>
5105</ul>
5106<h2>Veelgestelde vragen over EBITDA</h2>
5107<p><strong>Wat is de EBITDA-formule?</strong><br />EBITDA = nettowinst + rente + belastingen + afschrijvingen + amortisatie. Alternatief: EBIT + afschrijvingen + amortisatie.</p>
5108<p><strong>Wat is een goede EBITDA-marge?</strong><br />Dat verschilt per sector. Softwarebedrijven halen vaak hoge marges, terwijl handels- en productiebedrijven structureel lager zitten. Vergelijk altijd binnen je eigen branche.</p>
5109<p><strong>Wat is het verschil tussen EBITDA en EBIT?</strong><br />EBIT is het resultaat v&oacute;&oacute;r rente en belastingen; EBITDA telt daarbovenop afschrijvingen en amortisatie terug.</p>
5110<p><strong>Is EBITDA gelijk aan cashflow?</strong><br />Nee. EBITDA negeert investeringen, werkkapitaalmutaties en rente- en belastingbetalingen en is dus geen vervanging voor een kasstroomoverzicht.</p>
5111<h2>
5111EBITDA automatisch in je rapportage</h2>
5112<p>In Smartbooks staan EBITDA, EBITDA-marge en de ontwikkeling per entiteit of geconsolideerd standaard in je rapportages, zonder Excel-werk. <a href="/demo">Plan een demo</a> en zie het op je eigen cijfers.</p>`,a6=`---json
5113{
5114  "title": "ESG-Reporting",
5115  "slug": "esg-rapportage",
5116  "metaTitle": "ESG-Reporting: nicht-finanzielle Kennzahlen erfassen",
5117  "date": "2023-12-14 13:32:23",
5118  "category": "Articles",
5119  "tags": [],
5120  "excerpt": "ESG-Reporting dreht sich um nicht-finanzielle Kennzahlen: Umwelt, Soziales und gute Unternehmensführung (Environment, Social, Governance). So zeigen Sie, wie zukunftsfähig Ihre Organisation ist.",
5121  "originalUrl": "https://smartbooks.ai/artikelen/esg-rapportage/",
5122  "meta": null
5123}
5124---
5125<p>Die Abkürzung „ESG“ wird vor allem in der (internationalen) Finanzwelt verwendet und steht für „Environment, Social, Governance“ — Umwelt, Soziales und gute Unternehmensführung. Es geht zum Beispiel um CO2-Ausstoß, Ausbeutung, Steuerhinterziehung und Korruption. Themen, die die Gesellschaft, in der ein Unternehmen agiert, beeinflussen, aber nicht (direkt oder erkennbar) im finanziellen Jahresabschluss sichtbar werden. Ein ESG-Reporting fokussiert vor allem auf die „nicht-finanziellen“ Kennzahlen. Es sagt etwas über die Langfristperspektive und die Steuerung im Unternehmen aus — und damit über die Zukunftsfähigkeit. Berichte zu Teilbereichen wie CO2, Kreislaufwirtschaft, Sicherheit oder Kinderarbeit können Teil davon sein.</p>
5126
5127<p>Es gibt bereits Gesetzgebung, die speziell auf das ESG-Reporting abzielt. Die Corporate Sustainability Reporting Directive verpflichtet alle großen Unternehmen ab 2023, ihre nicht-finanziellen Leistungen zu berichten und diese unabhängig prüfen zu lassen. Betroffen sind Unternehmen mit 250 Mitarbeitenden oder mehr und einem Umsatz von über 40 Mio. EUR oder einer Bilanzsumme von über 20 Mio. EUR. Es wird erwartet, dass innerhalb weniger Jahre vergleichbare Vorschriften auch für kleinere Organisationen gelten werden.</p>
5128
5129<p>Smartbooks bietet schon heute die Möglichkeit, relevante ESG-Daten zu erfassen und zu berichten.</p>`,o6=`---json
5130{
5131  "title": "ESG Reporting",
5132  "metaTitle": "ESG Reporting: Capturing Non-Financial Metrics",
5133  "slug": "esg-reporting",
5134  "date": "",
5135  "category": "Articles",
5136  "tags": [
5137    "ESG",
5138    "CSRD",
5139    "Sustainability",
5140    "Reporting",
5141    "Compliance"
5142  ],
5143  "excerpt": "ESG reporting focuses on the non-financial metrics: Environment, Social, and Governance. It shows how future-proof your organization really is.",
5144  "originalUrl": ""
5145}
5146---
5147<p>The abbreviation ‘ESG’ is primarily used in the (international) financial world and stands for&nbsp;‘Environment, Social, and Governance’: environmental, social, and corporate governance. It covers matters such as carbon emissions, exploitation, tax evasion, and corruption. These are issues that impact the society in which you operate as a company, but which are not (directly or recognizably) reflected in the financial annual figures. An ESG report focuses primarily on&nbsp;‘non-financial’&nbsp;metrics. It provides insight into the long-term vision or management within the company and, consequently, its future-proofing. Reports on specific areas such as CO2, the circular economy, safety, or child labor may be part of it.</p>
5148
5149<p>Legislation specifically focused on ESG reporting already exists. The Corporate Sustainability Reporting Directive&nbsp;requires all large companies to report on non-financial performance and undergo an independent audit starting from 2023. This applies to companies with 250 or more employees and a turnover of more than 40 million euros, or a balance sheet total of more than 20 million euros. It is expected that such legislation will also apply to smaller organizations within a few years.</p>
5150
5151<p>Smartbooks already offers the possibility to collect and report relevant ESG data.</p>`,s6=`---json
5152{
5153  "title": "ESG rapportage",
5154  "metaTitle": "ESG rapportage: niet-financiële cijfers vastleggen",
5155  "slug": "esg-rapportage",
5156  "order": 40,
5157  "date": "2023-12-14 13:32:23",
5158  "category": "Articles",
5159  "tags": [],
5160  "excerpt": "ESG rapportage draait om de niet-financiële cijfers: milieu, sociaal en goed bestuur (Environment, Social, Governance). Zo laat je zien hoe toekomstbestendig je organisatie is.",
5161  "originalUrl": "https://smartbooks.ai/artikelen/esg-rapportage/",
5162  "meta": null,
5163  "enSlug": "esg-reporting"
5164}
5165---
5166<p>De afkorting ‘ESG’ wordt vooral in de (internationale) financiële wereld gebruikt en staat voor&nbsp;‘Environment, Social, Governance’: milieu, sociaal en goed bestuur. Het gaat bijvoorbeeld over CO2-uitstoot, uitbuiting, belastingontduiking en corruptie. Zaken die invloed hebben op de maatschappij waarin je als bedrijf opereert, maar die je niet (direct of herkenbaar) terugziet in de financiële jaarcijfers. Een ESG-rapportage gaat vooral over de&nbsp;‘niet-financiële’&nbsp;cijfers. Het zegt iets over de langetermijnvisie of aansturing binnen het bedrijf en daarmee ook over de toekomstbestendigheid. Rapportages op deelgebieden zoals CO2, circulaire economie, veiligheid of kinderarbeid kunnen er onderdeel van zijn.</p>
5167
5168
5169
5170<p>
5170Er bestaat al wetgeving die specifiek gericht is op de ESG-rapportage. De Corporate Sustainability Reporting Directive&nbsp;verplicht alle grote bedrijven om vanaf 2023 niet-financiële prestaties te rapporteren en hierop een onafhankelijke controle te laten uitvoeren. Dit is van toepassing op bedrijven die 250 medewerkers of meer hebben en een omzet van meer dan 40 miljoen, of een balanstotaal van meer dan 20 miljoen euro. De verwachting is dat binnen enkele jaren dergelijke wetgeving ook voor kleinere organisaties gaat gelden.</p>
5171
5172
5173
5174<p>Smartbooks biedt nu al de mogelijkheid om relevante ESG data te verzamelen en te rapporteren.</p>`,l6=`---json
5175{
5176  "title": "Finanzkonsolidierung meistern: praktische Schritte zum Erfolg",
5177  "slug": "financiele-consolidatie-masteren-praktische-stappen-voor-succes",
5178  "metaTitle": "Finanzkonsolidierung: praktische Schritte zum Erfolg",
5179  "date": "2024-08-14 17:43:49",
5180  "category": "Articles",
5181  "tags": [
5182    "Finanzkonsolidierung"
5183  ],
5184  "excerpt": "Ist Finanzkonsolidierung wirklich so komplex? Entdecken Sie die wesentlichen Schritte, Pflichten, Methoden und Herausforderungen — und wie Sie den Prozess sicher meistern.",
5185  "originalUrl": "https://smartbooks.ai/artikelen/financiele-consolidatie-masteren-praktische-stappen-voor-succes/",
5186  "meta": null
5187}
5188---
5189<p>Finanzkonsolidierung bedeutet, die Ergebnisse mehrerer Gesellschaften einer Gruppe klar und exakt zusammenzuführen. Das kann anspruchsvoll sein — besonders bei komplexen Strukturen und vielfältigen Reporting-Anforderungen. Wie erhält man ein sauberes, vollständiges Bild der finanziellen Gesundheit der gesamten Gruppe?</p>
5190<p>Mit über 30 Jahren Erfahrung in Finanzkonsolidierung und heute als CFO bei Smartbooks habe ich rund 250 Unternehmen erfolgreich begleitet. In diesem Beitrag geht es um:</p>
5191<ul>
5192<li>Vier Schritte für eine erfolgreiche Umsetzung</li>
5193<li>Gesetzliche Anforderungen an die Finanzkonsolidierung</li>
5194<li>Verschiedene Konsolidierungsmethoden</li>
5195<li>Die typischen Herausforderungen</li>
5196<li>Praktische Schritte für jede Phase des Prozesses</li>
5197</ul>
5198
5199<h2>Wie Konsolidierung mehrere Gesellschaften zu einem Bild zusammenführt</h2>
5200<p>Konsolidierung heißt: die Ergebnisse mehrerer Gesellschaften — z. B. Holding plus Tochtergesellschaften — so zusammenzufassen, dass ein Konzernabschluss ein zutreffendes Gesamtbild ergibt.</p>
5201
5202<h2>Die vier Schritte zur erfolgreichen Konsolidierung</h2>
5203<ol>
5204<li><strong>Währungsumrechnung</strong>: Ergebnisse ausländischer Gesellschaften werden in die Konzernwährung umgerechnet.</li>
5205<li><strong>Aggregation</strong>: GuV und Bilanz aller Gesellschaften werden addiert.</li>
5206<li><strong>Eliminierung von Intercompany-Beziehungen</strong>: Interne Transaktionen werden neutralisiert, um Doppelzählungen zu vermeiden.</li>
5207<li><strong>Eliminierung des Eigenkapitals und Erfassung von Minderheiten</strong>: Die Beteiligungsbuchwerte der Holding und das Eigenkapital der Töchter werden gegeneinander verrechnet; Minderheitsanteile werden separat ausgewiesen.</li>
5208</ol>
5209
5210<h2>Gesetzliche Anforderungen</h2>
5211<p>In vielen Ländern besteht eine Konsolidierungspflicht ab bestimmten Schwellen (Bilanzsumme, Umsatz, Mitarbeitende). Der Konzernabschluss muss ein vollständiges und zutreffendes Bild der Gruppe liefern — was in der Praxis eine spezialisierte Konsolidierungslösung erfordert.</p>
5212
5213<h2>Konsolidierungsmethoden</h2>
5214<p><strong>Vollkonsolidierung</strong>: 100 % der Vermögenswerte, Schulden, Erträge und Aufwendungen werden aufgenommen; Intercompany und Eigenkapital eliminiert. In 99 % der Fälle die Methode der Wahl.</p>
5215<p><strong>Teilkonsolidierung</strong>: In der Praxis kaum verwendet.</p>
5216<p><strong>Joint-Venture-Konsolidierung</strong>: Bei 50/50-Beteiligungen anteilig einbezogen.</p>
5217
5218<h2>Die größten Herausforderungen</h2>
5219<p><strong>Verschiedene Buchhaltungssysteme</strong>, <strong>uneinheitliche Kontenpläne</strong> und <strong>nachträgliche Zahlenänderungen</strong> bremsen den Prozess und erhöhen das Fehlerrisiko. Es braucht klare Kontrollen und Governance.</p>
5220
5221<h2>Praktische Schritte</h2>
5222<ol>
5223<li><strong>Konsolidierungssystem auswählen</strong>: Excel skaliert nicht; wählen Sie ein System, das Multicurrency, mehrere Buchhaltungssysteme und Benutzerfreundlichkeit vereint.</li>
5224<li><strong>System sauber implementieren</strong>: Planung und Koordination sind entscheidend — auch bei kleineren Gruppen.</li>
5225<li><strong>Kontenpläne standardisieren</strong>: Wo möglich einen einheitlichen Kontenrahmen verwenden.</li>
5226</ol>
5227
5228<h2>Konsolidierung muss nicht kompliziert sein</h2>
5229<p>Mit den richtigen Schritten und einem passenden System erhalten Sie ein sauberes Konzernbild und treffen fundierte Entscheidungen. Fragen? Vereinbaren Sie gerne eine <a href="/de/demo">Live-Demo</a>.</p>`,d6=`---json
5230{
5231  "title": "Mastering Financial Consolidation: Practical Steps for Success",
5232  "metaTitle": "Financial Consolidation: Practical Steps",
5233  "slug": "mastering-financial-consolidation-practical-steps-for-success",
5234  "date": "",
5235  "category": "Articles",
5236  "tags": [
5237    "Financial Consolidation",
5238    "Financial Reporting",
5239    "CFO Insights",
5240    "Compliance"
5241  ],
5242  "excerpt": "Is financial consolidation really as complicated as it seems, or can anyone learn it? Discover the essential steps, obligations, methods, and challenges to fully master the process in this blog.",
5243  "originalUrl": "",
5244  "meta": {
5245    "type_bedrijf": "Fintech / SaaS",
5246    "naam_medewerker": "Not Specified",
5247    "functie_medewerker": "CFO",
5248    "logo_bedrijf": "Smartbooks"
5249  }
5250}
5251---
5252<p>Financial consolidation is about bringing together the results of different c
5252ompanies within a group in a clear and accurate manner. However, this can be a major challenge, especially when dealing with complex structures and diverse reporting requirements. Whether you are already consolidating or considering starting, it is essential to approach this correctly. But how do you ensure you get a clear and complete picture of the financial health of the entire group?</p>
5253
5254<p>I have noticed that many companies struggle with effectively executing financial consolidation, especially when it comes to integrating data from different systems and complying with regulations. With more than 30 years of experience in financial consolidation, and now as CFO at Smartbooks, I have successfully guided about 250 companies. This extensive expertise allows me to offer valuable insights into this complex process.<br><br>In this blog, I discuss the following elements:</p>
5255
5256<ul class="`,c6=`---json
5257{
5258  "title": "Financiële consolidatie: de stappen, methodes en een rekenvoorbeeld",
5259  "metaTitle": "Financiële consolidatie: stappen, methodes en voorbeeld",
5260  "slug": "financiele-consolidatie-masteren-praktische-stappen-voor-succes",
5261  "order": 27,
5262  "date": "2024-08-14 17:43:49",
5263  "category": "Articles",
5264  "tags": [
5265    "Consolideren"
5266  ],
5267  "excerpt": "Financiële consolidatie in vier stappen: omrekenen, optellen, intercompany elimineren en eigen vermogen wegstrepen. Met rekenvoorbeeld en wettelijke drempels.",
5268  "originalUrl": "https://smartbooks.ai/artikelen/financiele-consolidatie-masteren-praktische-stappen-voor-succes/",
5269  "meta": null,
5270  "enSlug": "mastering-financial-consolidation-practical-steps-for-success"
5271}
5272---
5273<p><strong>Financiële consolidatie</strong> is het samenvoegen van de jaarrekeningen van alle maatschappijen in een groep tot één geconsolideerde jaarrekening, alsof de groep één onderneming is. Dat gebeurt in vier stappen: vreemde valuta omrekenen, de balansen en resultatenrekeningen optellen, onderlinge transacties elimineren en de deelnemingen tegen het eigen vermogen van de dochters wegstrepen.</p>
5274<p>Op papier is dat eenvoudig. In de praktijk zit het werk in wat eromheen gebeurt: dochters die op verschillende grootboeksystemen draaien, rekeningschema's die niet op elkaar aansluiten, intercompany-saldi die aan beide kanten net anders geboekt zijn en cijfers die na het aanleveren nog wijzigen. Wie consolideert, besteedt het grootste deel van de tijd aan aansluiten, niet aan optellen.</p>
5275
5276<h2>Wat is consolideren?</h2>
5277<p>Consolideren betekent dat een moedermaatschappij de activa, passiva, opbrengsten en kosten van haar dochtermaatschappijen in haar eigen jaarrekening opneemt. Het resultaat laat de financiële positie van de groep als geheel zien, zonder de dubbeltellingen die ontstaan als je de losse jaarrekeningen alleen maar optelt.</p>
5278<p>Een typische structuur in het Nederlandse mkb is een holding met twee of drie werkmaatschappijen, soms aangevuld met een buitenlandse vestiging of een joint venture. Ook bij zo'n kleine groep is consolidatie in de boekhouding meer dan een optelsom: de holding factureert management fees aan de werkmaatschappijen, er lopen rekening-courantverhoudingen en de holding heeft de deelnemingen op haar balans staan.</p>
5279
5280<h2>De vier stappen van financiële consolidatie</h2>
5281<ol>
5282<li><strong>Koersomrekening.</strong> Rapporteert een dochter in een andere valuta, dan reken je haar cijfers om naar de rapportagevaluta van de groep. Balansposten gaan doorgaans tegen de koers op balansdatum, resultaatposten tegen de gemiddelde koers over de periode. Het verschil dat daardoor ontstaat, loopt via een omrekeningsreserve in het eigen vermogen.</li>
5283<li><strong>Optellen.</strong> Je telt de balansen en resultatenrekeningen van alle maatschappijen in de consolidatiekring regel voor regel bij elkaar op. Dat lukt alleen als ze op hetzelfde rekeningschema zijn gemapt.</li>
5284<li><strong>Intercompany elimineren.</strong> Transacties en saldi tussen groepsmaatschappijen vallen weg. Factureert de holding &euro; 100.000 aan management fees aan een werkmaatschappij, dan is dat voor de groep geen omzet en geen kosten. Hetzelfde geldt voor onderlinge vorderingen en schulden, en voor winst op onderlinge leveringen die nog in de voorraad zit.</li>
5285<li><strong>Eigen vermogen elimineren en minderheidsbelangen verwerken.</strong> De deelneming op de balans van de moeder en het eigen vermogen van de dochter vertegenwoordigen hetzelfde bezit. Die streep je tegen elkaar weg. Heeft de moeder minder dan 100% van de aandelen, dan neem je de dochter toch volledig op en laat je het deel van derden apart zien als minderheidsbelang.</li>
5286</ol>
5287
5288<h2>Rekenvoorbeeld: een geconsolideerde balans opstellen</h2>
5289<p>Een holding heeft 100% van werkmaatschappij A en 80% van werkmaatschappij B. A heeft een rekening-courantschuld van 100 aan de holding. Alle bedragen in duizenden euro's.</p>
5290<table>
5291<thead><tr><th>
5291Post</th><th>Holding</th><th>A</th><th>B</th><th>Eliminaties</th><th>Groep</th></tr></thead>
5292<tbody>
5293<tr><td>Deelnemingen</td><td>700</td><td>&ndash;</td><td>&ndash;</td><td>&minus;700</td><td>0</td></tr>
5294<tr><td>Vordering op A</td><td>100</td><td>&ndash;</td><td>&ndash;</td><td>&minus;100</td><td>0</td></tr>
5295<tr><td>Overige activa</td><td>200</td><td>800</td><td>900</td><td>&ndash;</td><td>1.900</td></tr>
5296<tr><td><strong>Totaal activa</strong></td><td><strong>1.000</strong></td><td><strong>800</strong></td><td><strong>900</strong></td><td><strong>&minus;800</strong></td><td><strong>1.900</strong></td></tr>
5297<tr><td>Eigen vermogen</td><td>1.000</td><td>300</td><td>500</td><td>&minus;800</td><td>1.000</td></tr>
5298<tr><td>Minderheidsbelang</td><td>&ndash;</td><td>&ndash;</td><td>&ndash;</td><td>+100</td><td>100</td></tr>
5299<tr><td>Schuld aan holding</td><td>&ndash;</td><td>100</td><td>&ndash;</td><td>&minus;100</td><td>0</td></tr>
5300<tr><td>Overige schulden</td><td>&ndash;</td><td>400</td><td>400</td><td>&ndash;</td><td>800</td></tr>
5301<tr><td><strong>Totaal passiva</strong></td><td><strong>1.000</strong></td><td><strong>800</strong></td><td><strong>900</strong></td><td><strong>&minus;800</strong></td><td><strong>1.900</strong></td></tr>
5302</tbody>
5303</table>
5304<p>De deelnemingen van 700 (300 voor A en 80% van 500 voor B) vallen weg tegen het eigen vermogen van A en B, samen 800. Het verschil van 100 is het aandeel van derden in B: 20% van 500. Dat komt als minderheidsbelang op de geconsolideerde balans. De onderlinge vordering en schuld van 100 vallen tegen elkaar weg. Wat overblijft is een groep met 1.900 aan activa, waarvan 1.000 groepsvermogen, 100 minderheidsbelang en 800 schulden aan derden.</p>
5305<p>Klopt de eliminatie van deelnemingen en eigen vermogen niet precies, dan zit er bijna altijd een verschil in timing achter: de dochter verwerkt haar resultaat maandelijks in het eigen vermogen, terwijl de holding de deelneming pas bij de jaarafsluiting herwaardeert.</p>
5306
5307<h2>Consolidatiemethodes: integraal, proportioneel of niet</h2>
5308<p>Welke methode je toepast, hangt af van de zeggenschap die de moeder over de andere maatschappij heeft.</p>
5309<ul>
5310<li><strong>Integrale consolidatie</strong> bij overheersende zeggenschap, meestal een meerderheidsbelang. De dochter gaat voor 100% mee, het deel van derden staat apart als minderheidsbelang. Dit is verreweg de meest gebruikte methode.</li>
5311<li><strong>Proportioneel consolideren</strong> bij gezamenlijke zeggenschap, zoals een joint venture waarin twee partijen elk 50% hebben. Je neemt alleen je eigen aandeel op: van een joint venture met &euro; 2 miljoen omzet komt &euro; 1 miljoen in de geconsolideerde omzet. De Nederlandse richtlijnen staan dit toe; onder IFRS verwerk je een joint venture met de equity-methode.</li>
5312<li><strong>Geen consolidatie, wel waardering tegen nettovermogenswaarde</strong> bij invloed van betekenis zonder zeggenschap, doorgaans een belang van 20% tot 50%. De deelneming blijft als één regel op de balans staan en groeit mee met het resultaat.</li>
5313</ul>
5314
5315<h2>Wanneer ben je verplicht te consolideren?</h2>
5316<p>Volgens artikel 2:406 BW stelt een rechtspersoon die aan het hoofd van een groep staat een geconsolideerde jaarrekening op. Er zijn drie veelvoorkomende uitzonderingen.</p>
5317<ul>
5318<li><strong>Kleine groep (art. 2:407 lid 2 BW).</strong> Consolidatie mag achterwege blijven als de groep samen niet boven de grenzen voor kleine rechtspersonen uitkomt. Voor boekjaren vanaf 2024 zijn dat: activa tot &euro; 7,5 miljoen, netto-omzet tot &euro; 15 miljoen en gemiddeld minder dan 50 werknemers. Je moet twee opeenvolgende jaren aan minstens twee van de drie criteria voldoen. Daarnaast mag er geen organisatie van openbaar belang in de groep zitten, zoals een beursgenoteerde onderneming, bank of verzekeraar. En de algemene vergadering mag niet binnen zes maanden na het begin van het boekjaar schriftelijk bezwaar hebben gemaakt.</li>
5319<li><strong>Tussenholding (art. 2:408 BW).</strong> Een tussenholding hoeft niet te consolideren als haar cijfers al zijn opgenomen in de geconsolideerde jaarrekening van een hoger groepshoofd, mits aan de deponeringsvoorwaarden is voldaan.</li>
5320<li><strong>Verwaarloosbare betekenis (art. 2:407 lid 1 BW).</strong> Een groepsmaatschappij die voor het geheel van verwaarloosbare betekenis is, mag buiten de consolidatie blijven.</li>
5321</ul>
5322<p>Deze vrijstellingen hebben voorwaarden die per situatie verschillen. Stem met je accountant af welke op jouw groep van toepassing is voordat je besluit niet te consolideren. Let ook op: een vrijstelling voor de jaarrekening betekent niet dat de bank of de aandeelhouders geen geconsolideerde cijfers willen zien.</p>
5323
5324<h2>
5324Valkuilen bij consolidatie in de boekhouding</h2>
5325<ul>
5326<li><strong>Intercompany-saldi die niet aansluiten.</strong> De ene maatschappij boekt een factuur in maart, de andere in april, of in een andere valuta. Dan blijft er na eliminatie een verschil staan dat nergens thuishoort. Sluit de rekening-couranten maandelijks aan in plaats van alleen bij de jaarafsluiting.</li>
5327<li><strong>Verschillende rekeningschema's.</strong> Zonder een gemeenschappelijk groepsschema is optellen handwerk dat elke periode opnieuw fouten oplevert. Leg de mapping van elk lokaal grootboek naar het groepsschema één keer vast.</li>
5328<li><strong>Cijfers die na aanlevering wijzigen.</strong> Een correctiejournaalpost bij een dochter nadat de consolidatie al is gedraaid, maakt de groepscijfers stilletjes onjuist. Sluit perioden af voordat je consolideert.</li>
5329<li><strong>Tussenwinst in de voorraad vergeten.</strong> Levert de ene maatschappij met marge aan de andere en ligt die voorraad op balansdatum nog op de plank, dan zit er groepswinst in de voorraad die nog niet gerealiseerd is.</li>
5330<li><strong>Consolideren in Excel zonder controle.</strong> Een consolidatiesheet werkt tot er een entiteit of een rekening bijkomt. Bouw minstens een controle in die laat zien dat alle eliminaties samen op nul uitkomen.</li>
5331</ul>
5332
5333<h2>Veelgestelde vragen over financiële consolidatie</h2>
5334<h3>Wat is consolidatie in de boekhouding?</h3>
5335<p>Consolidatie is het samenvoegen van de boekhoudingen van een moedermaatschappij en haar dochters tot één jaarrekening voor de groep. Onderlinge transacties, onderlinge saldi en de deelnemingen worden daarbij geëlimineerd, zodat niets dubbel telt.</p>
5336<h3>Wanneer moet je consolideren?</h3>
5337<p>Een groepshoofd is volgens artikel 2:406 BW verplicht een geconsolideerde jaarrekening op te stellen, tenzij een vrijstelling geldt. De bekendste is de vrijstelling voor kleine groepen: activa tot &euro; 7,5 miljoen, netto-omzet tot &euro; 15 miljoen en minder dan 50 werknemers, waarbij je aan twee van de drie criteria moet voldoen.</p>
5338<h3>Wat is het verschil tussen integraal en proportioneel consolideren?</h3>
5339<p>Bij integraal consolideren neem je 100% van de dochter op en laat je het aandeel van derden apart zien als minderheidsbelang. Bij proportioneel consolideren neem je alleen je eigen percentage van elke post op. Proportioneel consolideren is alleen gebruikelijk bij joint ventures met gezamenlijke zeggenschap.</p>
5340<h3>Kun je consolideren in Excel?</h3>
5341<p>Voor een holding met één of twee werkmaatschappijen op hetzelfde rekeningschema kan dat. Bij meer entiteiten, meerdere valuta of maandelijkse consolidatie wordt het foutgevoelig, omdat elke nieuwe rekening of entiteit de sheet raakt en intercompany-verschillen handmatig moeten worden uitgezocht.</p>
5342
5343<h2>Van jaarlijks naar maandelijks consolideren</h2>
5344<p>Veel groepen consolideren alleen voor de jaarrekening en sturen de rest van het jaar op losse entiteitscijfers. Juist maandelijkse groepscijfers laten zien waar de marge echt zit. Welke systemen dat ondersteunen, lees je in de <a href="/artikelen/vergelijk-business-control-software">vergelijking van business control software</a>. Wil je weten wat automatiseren concreet oplevert, lees dan <a href="/artikelen/the-power-of-automation-in-financial-consolidation">hoe je financiële consolidatie automatiseert</a>.</p>
5345<p>In Smartbooks consolideert de groep automatisch zodra een periode in de onderliggende entiteiten is gepubliceerd. Aparte verschilrekeningen laten direct zien waar intercompany-posten of deelnemingen niet aansluiten. Bekijk hoe dat werkt op de pagina over <a href="/consolidatie-software">consolidatiesoftware</a> of <a href="/demo">plan een demo</a>.</p>
5346`,u6=`---json
5347{
5348  "title": "Kundenreferenz Glomar",
5349  "slug": "glomar",
5350  "metaTitle": "Konsolidierung internationaler Gesellschaften: Fallstudie Glomar",
5351  "date": "2024-12-09 22:24:59",
5352  "category": "Case Studies",
5353  "tags": [
5354    "Finanzkonsolidierung",
5355    "Reporting",
5356    "Maritime Industrie"
5357  ],
5358  "excerpt": "Konsolidierung internationaler Gesellschaften: Wie die Reederei Glomar durch automatisierte Konsolidierung 5 Tage pro Monat spart — mit belastbareren Berichten.",
5359  "originalUrl": "",
5360  "meta": {
5361    "naam_medewerker": "Dennis Beintma",
5362    "functie_medewerker": "CFO, Glomar Group"
5363  }
5364}
5365---
5366<h1>Kundenreferenz: <strong>Glomar Group</strong></h1>
5367<p class="has-medium-font-size">Wie Glomar Zeit spart und verlässlichere Einblicke gewinnt — dank eines einfacheren und flexibleren Finanzprozesses.</p>
5368
5369<h2>Kundenprofil</h2>
5370<p>Die Glomar Group ist eine Reederei mit einer Flotte von 19 Offshore-Schiffen im maritimen Sektor. Dennis Beintma, CFO der Glomar Group, stand vor einer Herausforderung im Finanzreporting, die manuelle Arbeit und zeitaufwendige Prozesse mit sich brachte.</p>
5371
5372<h2>Herausforderung</h2>
5373<p>Für die Glomar Group war die Erstellung periodischer Managementberichte komplex und zeitintensiv. Diese Berichte wurden mit Speedbooks und Excel gebaut und benötigten im Schnitt 4–5 Tage. Angesichts des Zeitdrucks und der Fehleranfälligkeit manueller Verarbeitung suchte Glomar eine automatisierte Lösung, die einfacher, schneller und präziser arbeitet.</p>
5374
5375<h2>Die Lösung mit Smartbooks</h2>
5376<p class="has-medium-font-size">Smartbooks wurde als integrierte Lösung für das Finanzreporting der Glomar Group eingeführt. Die Software ermöglicht die nahtlose Anbindung und Konsolidierung der Finanzdaten, sodass Dennis und sein Team Berichte schneller und effizienter erstellen können. Der Reporting- und Konsolidierungsprozess, der früher Tage dauerte, ist nun in wenigen Stunden erledigt — <strong>eine Zeitersparnis von fast fünf Tagen pro Monat.</strong></p>
5377
5378<h4>Zeitersparnis</h4>
5379<p>
5379Die Zeit für das Management-Reporting sank von 4–5 Tagen auf nur noch zwei Stunden. Dennis kann diese gewonnene Zeit heute für strategische Planung, Marktanalysen und die Optimierung interner Prozesse einsetzen — und stärkt so die Zukunftsfähigkeit von Glomar.</p>
5380
5381<h4>Bessere Einblicke</h4>
5382<p>Dank Smartbooks hat Glomar Zugriff auf Echtzeitberichte auf Kostenstellenebene und damit einen klaren Blick auf die Performance einzelner Schiffe. Das ermöglicht der Geschäftsführung, rechtzeitig Entscheidungen zu treffen — etwa bei Rentabilitätsproblemen auf bestimmten Schiffen.</p>
5383
5384<h4>Flexibilität und Mobilität</h4>
5385<p>Smartbooks gibt Dennis von überall Zugriff auf die Finanzdaten von Glomar. Er kann sich problemlos aus der Ferne einloggen — sogar vom Flughafen — um in Echtzeit Einblick zu gewinnen und dort einzugreifen, wo es nötig ist. Diese Flexibilität steigert die Reaktionsfähigkeit des Teams erheblich.</p>
5386
5387<h4>Verlässlichkeit und einfache Bedienung</h4>
5388<p>Mit der Wahl von Smartbooks anstelle des vorherigen Setups (Speedbooks in Kombination mit Excel) arbeitet Glomar effizienter — ohne das Risiko fehlerhafter Eingaben, das bei Excel-Modellen immer besteht.</p>
5389
5390<h2>Erfahrung mit Smartbooks</h2>
5391<p>Dennis beschreibt die Zusammenarbeit mit Smartbooks als sehr positiv und hebt die offene Kommunikation und enge Abstimmung mit dem Smartbooks-Team hervor. Gemeinsam wurde sichergestellt, dass die Software sauber implementiert und auf die spezifischen Bedürfnisse von Glomar zugeschnitten wurde — mit einer effizienten, passgenauen Lösung als Ergebnis.</p>
5392
5393<h2>Empfehlung</h2>
5394<p>Dennis ermutigt andere Unternehmen, die noch zögern, Smartbooks auszuprobieren. Die Flexibilität, die Zeitersparnis und die präzisen Reporting-Möglichkeiten machen es zu einem wertvollen Werkzeug für jedes Unternehmen, das seine Finanzprozesse automatisieren und optimieren möchte.</p>
5395
5396<h2>Fazit</h2>
5397<p>Smartbooks hat der Glomar Group geholfen, Finanzprozesse von zeitaufwendiger Handarbeit in ein effizientes, automatisiertes System zu verwandeln. Mit Echtzeit-Einblicken und mehr Zeit für strategische Fragen bietet Smartbooks ein solides Fundament für weiteres Wachstum und die langfristige Resilienz der Glomar Group.</p>`,h6=`---json
5398{
5399  "title": "Customer Case Glomar",
5400  "metaTitle": "Consolidating International Entities: Glomar Case",
5401  "slug": "glomar",
5402  "date": "2024-12-09 22:24:59",
5403  "category": "Case Studies",
5404  "tags": [],
5405  "excerpt": "Consolidating international entities: how shipping company Glomar saves 5 days per month with automated consolidation and more reliable reporting.",
5406  "originalUrl": "https://smartbooks.ai/klantcase/klantcase-glomar/",
5407  "meta": {
5408    "naam_medewerker": "Dennis Beintma",
5409    "functie_medewerker": "CFO, Glomar Group"
5410  }
5411}
5412---
5413<div class="wp-block-kadence-column kadence-column2750_e0d629-b1"><div class="kt-inside-inner-col">
5414<div style="height:2rem" aria-hidden="true" class="wp-block-spacer"></div>
5415
5416
5417
5418<h1 class="kt-adv-heading2750_3ab5ec-ac wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_3ab5ec-ac">Customer Case: <strong>Glomar Group</strong></h1>
5419
5420
5421
5422<p class="has-text-align-center has-medium-font-size" style="padding-top:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--60)">How Glomar saves time and gains better, more reliable insights thanks to a simpler and more flexible financial process.</p>
5423
5424
5425
5426<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns2750_ef2e4d-cc"></div>
5427</div></div>
5428
5429
5430
5431
5432
5433<div class="wp-block-kadence-column kadence-column2750_0a59e6-ae"><div class="kt-inside-inner-col">
5434<h2 class="kt-adv-heading2750_ae7e43-5f wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_ae7e43-5f">Customer profile</h2>
5435
5436
5437
5438<p>Glomar Group is a shipping company with a fleet of 19 offshore vessels, operating in the maritime sector. Dennis Beintma, CFO of Glomar Group, was facing a challenge in financial reporting that required manual work and time-consuming processes.</p>
5439
5440
5441
5442<h2 class="kt-adv-heading2750_8e37c6-73 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_8e37c6-73">Challenge</h2>
5443
5444
5445
5446<p>For Glomar Group, producing periodic management reports was a complex and time-intensive task. These reports were built using Speedbooks and Excel and took on average 4–5 days to complete. Given the time pressure and the error-prone nature of manual processing, Glomar needed an automated solution that could work more easily, faster, and more accurately.</p>
5447</div></div>
5448
5449
5450
5451<div class="wp-block-kadence-column kadence-column2750_f3eae0-7e"><div class="kt-inside-inner-col">
5452<figure class="wp-block-video"><video controls onclick="this.play()" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Glomar%20klantinterview.mp4"></video></figure>
5453</div></div>
5454
5455
5456
5457
5458
5459<div class="wp-block-kadence-column kadence-column2750_f88a31-98"><div class="kt-inside-inner-col">
5460<h2 class="kt-adv-heading2750_80762a-9f wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_80762a-9f">The solution with Smartbooks</h2>
5461
5462
5463
5464<p class="has-medium-font-size">Smartbooks was implemented as the integrated solution for Glomar Group's financial reporting. The softw
5464are enabled a seamless connection and consolidation of financial data, allowing Dennis and his team to produce reports faster and more efficiently. The reporting and consolidation process that used to take days could now be completed within a few hours — <strong>a time saving of almost five days per month.</strong></p>
5465</div></div>
5466
5467
5468
5469
5470
5471<div class="wp-block-kadence-column kadence-column2750_aa4d50-03"><div class="kt-inside-inner-col">
5472<h4 class="kt-adv-heading2750_743ce4-2c wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_743ce4-2c">Time savings</h4>
5473
5474
5475
5476<p>The time previously needed for management reporting dropped from 4–5 days to just two hours. Dennis can now spend that extra time on strategic planning, market analysis, and streamlining internal processes — strengthening the future-readiness of Glomar. <a href="/en/functionalities/reporting/">More about reporting</a></p>
5477
5478
5479
5480<h4 class="kt-adv-heading2750_f1089b-ee wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_f1089b-ee">Improved insights</h4>
5481
5482
5483
5484<p>Thanks to Smartbooks, Glomar has access to real-time reports at cost-center level, giving a clear view of the performance of individual vessels. This enables the leadership team to make timely decisions, such as addressing profitability issues on specific ships. <a href="/en/functionalities/cashflow-planning/">More about planning</a></p>
5485
5486
5487
5488<h4 class="kt-adv-heading2750_39900e-f6 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_39900e-f6">Flexibility and mobility</h4>
5489
5490
5491
5492<p>Smartbooks gives Dennis access to Glomar's financial data from anywhere. He can easily log in from remote locations — even from an airport — to get real-time insight and step in where needed. This flexibility significantly increases the team's responsiveness and ability to act quickly.</p>
5493
5494
5495
5496<h4 class="kt-adv-heading2750_26043e-a2 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_26043e-a2">Reliability and ease of use</h4>
5497
5498
5499
5500<p>By choosing Smartbooks over their previous setup (Speedbooks combined with Excel), Glomar can work more efficiently without the risk of faulty data entry that always comes with Excel models.</p>
5501</div></div>
5502
5503
5504
5505
5506
5507<div class="wp-block-kadence-column kadence-column2750_d5add1-4e"><div class="kt-inside-inner-col">
5508<h2 class="kt-adv-heading2750_65b14b-18 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_65b14b-18">Experience with Smartbooks</h2>
5509
5510
5511
5512<p class="kt-adv-heading2750_e6b3a9-2b wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_e6b3a9-2b">Dennis describes the collaboration with Smartbooks as very positive, highlighting the open communication and strong alignment with the Smartbooks team. Together they ensured the software was implemented well and tailored to Glomar's specific needs, resulting in an efficient, custom-fit solution.</p>
5513
5514
5515
5516<h2 class="kt-adv-heading2750_a83a4d-d9 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_a83a4d-d9">Recommendation</h2>
5517
5518
5519
5520<p class="kt-adv-heading2750_c7fc2e-bc wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_c7fc2e-bc">Dennis encourages other companies that are still on the fence to give Smartbooks a try. The flexibility, time savings, and accurate reporting capabilities make it a valuable tool for any company looking to automate and optimize its financial processes.</p>
5521
5522
5523
5524<h2 class="kt-adv-heading2750_6fe0ba-85 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_6fe0ba-85">Conclusion</h2>
5525
5526
5527
5528<p class="kt-adv-heading2750_427365-28 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_427365-28">Smartbooks has helped Glomar Group transform its financial processes from time-consuming, manual work into an efficient, automated system. With real-time insights and more time for strategic questions, Smartbooks provides a solid foundation for further growth and the long-term resilience of Glomar Group.</p>
5529</div></div>`,g6=`---json
5530{
5531  "title": "Klantcase Glomar",
5532  "metaTitle": "Consolidatie internationale entiteiten: case Glomar",
5533  "slug": "glomar",
5534  "order": 12,
5535  "date": "2024-12-09 22:24:59",
5536  "category": "Case Studies",
5537  "tags": [],
5538  "excerpt": "Consolidatie van internationale entiteiten: hoe rederij Glomar 5 dagen per maand bespaart met geautomatiseerde consolidatie en betrouwbaardere rapportage.",
5539  "originalUrl": "https://smartbooks.ai/klantcase/klantcase-glomar/",
5540  "meta": {
5541    "naam_medewerker": "Dennis Beintma",
5542    "functie_medewerker": "CFO, Glomar Group"
5543  },
5544  "enSlug": "glomar"
5545}
5546---
5547<div class="wp-block-kadence-column kadence-column2750_e0d629-b1"><div class="kt-inside-inner-col">
5548<div style="height:2rem" aria-hidden="true" class="wp-block-spacer"></div>
5549
5550
5551
5552<h1 class="kt-adv-heading2750_3ab5ec-ac wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_3ab5ec-ac">Klantcase: <strong>Glomar Group</strong></h1>
5553
5554
5555
5556<p class="has-text-align-center has-medium-font-size" style="padding-top:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--60)">Hoe Glomar tijd bespaart met beterere en betrouwbaardere inzichten dankzij een makkelijker en flexibeler financieel proces.</p>
5557
5558
5559
5560<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns2750_ef2e4d-cc"></div>
5561</div></div>
5562
5563
5564
5565
5566
5567<div class="wp-block-kadence-column kadence-column2750_0a59e6-ae"><div class="kt-inside-inner-col">
5568<h2 class="kt-adv-heading2750_ae7e43-5f wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_ae7e43-5f">Klantprofiel</h2>
5569
5570
5571
5572<p>Glomar Group is een rederij met een vloot van 19 offshore schepen, actief in de maritieme sector. Dennis Beintma, CFO van Glomar Group, stond voor een uitdaging in de financiële rapportage die handmatige bewerkingen en tijdsintensieve processen vereiste.</p>
5573
5574
5575
5576<h2 class="kt-adv-heading2750_8e37c6-73 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_8e37c6-73">Uitdaging</h2>
5577
5578
5579
5580<p>Voor Glomar Group was het opstellen van periodieke managementrapportages een complexe en tijdrovende taak. Deze rapportages werden gemaakt met Speedbooks en Excel en namen gemiddeld 4-5 dagen in beslag. Door de tijdsdruk en de foutgevoeligheid van de handmatige verwerking was er behoefte aan een geautomatiseerde oplossing die makkelijker, sneller en nauwkeuriger kon werken.</p>
5581</div></div>
5582
5583
5584
5585<div class="wp-block-kadence-column kadence-column2750_f3eae0-7e"><div class="kt-inside-inner-col">
5586<figure class="wp-block-video"><video controls onclick="this.play()" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Glomar%20klantinterview.mp4"></video></figure>
5587</div></div>
5588
5589
5590
5591
5592
5593<div class="wp-block-kadence-column kadence-column2750_f88a31-98"><div class="kt-inside-inner-col">
5594<h2 class="kt-adv-heading2750_80762a-9f wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_80762a-9f">Oplossing met Smartbooks:</h2>
5595
5596
5597
5598<p class="has-medium-font-size">
5598Smartbooks werd geïmplementeerd als geïntegreerde oplossing voor de financiële rapportages van Glomar Group. De software zorgde voor een naadloze koppeling en consolidatie van financiële gegevens, waardoor Dennis en zijn team de rapportages sneller en efficiënter konden opstellen. Binnen enkele uren konden zij nu de rapportages en consolidatie afronden, <strong>een tijdsbesparing van bijna vijf dagen per maand.</strong></p>
5599</div></div>
5600
5601
5602
5603
5604
5605<div class="wp-block-kadence-column kadence-column2750_aa4d50-03"><div class="kt-inside-inner-col">
5606<h4 class="kt-adv-heading2750_743ce4-2c wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_743ce4-2c">Tijdswinst</h4>
5607
5608
5609
5610<p>De tijd die voorheen nodig was voor de managementrapportages, ging van 4-5 dagen naar slechts twee uur. Dennis kan deze extra tijd nu besteden aan strategische planning, marktanalyse en het stroomlijnen van interne processen, wat de toekomstbestendigheid van Glomar versterkt. <a href="/functionaliteiten/rapporteren/">Meer over rapporteren</a></p>
5611
5612
5613
5614<h4 class="kt-adv-heading2750_f1089b-ee wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_f1089b-ee">Verbeterde Inzichten</h4>
5615
5616
5617
5618<p>Dankzij Smartbooks heeft Glomar toegang tot real-time rapportages op kostenplaatsniveau, wat een helder overzicht biedt van de prestaties van individuele schepen. Dit stelt het directieteam in staat om tijdig beslissingen te nemen, zoals het aanpakken van rendementsproblemen bij specifieke schepen. <a href="/functionaliteiten/budgetteren-cashflow/">Meer over plannen</a></p>
5619
5620
5621
5622<h4 class="kt-adv-heading2750_39900e-f6 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_39900e-f6">Flexibiliteit en Mobiliteit</h4>
5623
5624
5625
5626<p>Smartbooks maakt het voor Dennis mogelijk om overal toegang te krijgen tot de financiële data van Glomar. Hij kan eenvoudig inloggen vanaf externe locaties, zoals een vliegveld, om real-time inzicht te krijgen en in te grijpen waar nodig. Deze flexibiliteit verhoogt de slagkracht en de reactietijd van het team aanzienlijk.</p>
5627
5628
5629
5630<h4 class="kt-adv-heading2750_26043e-a2 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_26043e-a2">Betrouwbaarheid en Gebruiksvriendelijkheid</h4>
5631
5632
5633
5634<p>Door te kiezen voor Smartbooks in plaats van de eerdere oplossingen (Speedbooks in combinatie met Excel), kan Glomar efficiënter werken zonder het risico op foutieve data-invoer, wat in Excel-modellen altijd aanwezig is.</p>
5635</div></div>
5636
5637
5638
5639
5640
5641<div class="wp-block-kadence-column kadence-column2750_d5add1-4e"><div class="kt-inside-inner-col">
5642<h2 class="kt-adv-heading2750_65b14b-18 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_65b14b-18">Ervaring met Smartbooks</h2>
5643
5644
5645
5646<p class="kt-adv-heading2750_e6b3a9-2b wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_e6b3a9-2b">Dennis beschrijft de samenwerking met Smartbooks als zeer positief en benadrukt de open communicatie en goede afstemming met het Smartbooks-team. Samen zorgden ze ervoor dat de software goed werd geïmplementeerd en aangepast aan de specifieke behoeften van Glomar, wat resulteerde in een efficiënte en op maat gemaakte oplossing.</p>
5647
5648
5649
5650<h2 class="kt-adv-heading2750_a83a4d-d9 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_a83a4d-d9">Aanbeveling</h2>
5651
5652
5653
5654<p class="kt-adv-heading2750_c7fc2e-bc wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_c7fc2e-bc">Dennis adviseert andere bedrijven die nog twijfelen om Smartbooks te proberen. De flexibiliteit, tijdsbesparing en nauwkeurige rapportagemogelijkheden maken het een waardevolle tool voor bedrijven die hun financiële processen willen automatiseren en optimaliseren.</p>
5655
5656
5657
5658<h2 class="kt-adv-heading2750_6fe0ba-85 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_6fe0ba-85">Conclusie</h2>
5659
5660
5661
5662<p class="kt-adv-heading2750_427365-28 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2750_427365-28">Smartbooks heeft Glomar Group geholpen om hun financiële processen te transformeren van tijdrovende en handmatige bewerkingen naar een efficiënt, geautomatiseerd systeem. Met real-time inzichten en meer tijd voor strategische vraagstukken biedt Smartbooks een solide basis voor verdere groei en toekomstbestendigheid van Glomar Group.</p>
5663</div></div>`,m6=`---json
5664{
5665  "title": "Der Nutzen eines Businessplans",
5666  "slug": "het-nut-van-een-business-plan",
5667  "metaTitle": "Businessplan erstellen: warum es sich lohnt",
5668  "date": "2023-12-14 13:31:59",
5669  "category": "Articles",
5670  "tags": [
5671    "Planung"
5672  ],
5673  "excerpt": "Einen Businessplan zu erstellen kostet Zeit, liefert aber Einblick in Cashflow, Ziele und Finanzierung. Das sind die wichtigsten Gründe, sich die Zeit dafür zu nehmen.",
5674  "originalUrl": "https://smartbooks.ai/artikelen/het-nut-van-een-business-plan/",
5675  "meta": null
5676}
5677---
5678<p>Einen Finanzplan für den kommenden Zeitraum zu erstellen kostet Zeit, und die Realität sieht jeden Monat ein Stück anders aus. Was sind trotzdem gute Gründe, diese Arbeit zu investieren?</p>
5679
5680<ol>
5681<li>Teil eines Businessplans ist der Einblick in erwartete Einnahmen und Ausgaben — Ergebnis: eine Cashflow-Prognose. Auch wenn Liquidität kein Engpass ist, ist es hilfreich zu wissen, welchen Kontostand Sie pro Monat erwarten dürfen, gerade bei saisonalen Schwankungen.</li>
5682<li>Sie können den einzelnen Abteilungen kommunizieren, welche Ziele pro Monat gelten, damit sie Einkauf, Produktion und Vertrieb daran ausrichten. So sehen sie zudem besser, ob und wann sie ihr Team ausbauen — oder im negativen Fall verkleinern — müssen.</li>
5683<li>Kommt ein neuer Investor hinzu oder wird das Unternehmen für den Verkauf vorbereitet, wollen Investor oder Käufer einen Businessplan sehen.</li>
5684<li>Für Kredit- oder Betriebsmittelanfragen verlangt der Kapitalgeber ebenfalls einen Businessplan.</li>
5685</ol>
5686
5687<p>Smartbooks sorgt dafür, dass der Businessplan nicht länger in Excel liegt, sondern strukturiert im System erfasst wird. Änderungen an Annahmen werden direkt durchgerechnet, und der Vergleich mit Ist-Zahlen und Forec
5687ast ist jederzeit aktuell.</p>`,p6=`---json
5688{
5689  "title": "The importance of a business plan",
5690  "metaTitle": "Writing a Business Plan: Why It Pays Off",
5691  "slug": "the-value-of-a-business-plan",
5692  "date": "",
5693  "category": "Articles",
5694  "tags": [
5695    "Business Plan",
5696    "Financial Planning",
5697    "Cash Flow Forecast",
5698    "Strategy",
5699    "Budgeting"
5700  ],
5701  "excerpt": "Writing a business plan takes time, but delivers insight into cash flow, objectives, and financing. Here are the key reasons to invest that time anyway.",
5702  "originalUrl": "",
5703  "meta": {
5704    "type_bedrijf": "Financial Software"
5705  }
5706}
5707---
5708<p>Creating a financial plan for the coming period takes time, but what we know for certain is that reality looks a little different every month. What then are some good reasons to still dedicate time to this task?</p>
5709
5710<ol>
5711<li>Part of a business plan is gaining insight into expected income and expenses, which results in a cash flow forecast. Even if cash is not a bottleneck, it is useful to know what your expected bank balance will be per month, especially if there are seasonal fluctuations.</li>
5712
5713<li>You can communicate the monthly objectives to the various departments in the organization, so they can align procurement, production, and sales accordingly. It also gives them better insight into if and when they need to expand their team, or in a negative scenario, scale down.</li>
5714
5715<li>If a new investor joins or if the organization is being prepared for sale, the new investor or buyer will want to see a business plan.</li>
5716
5717<li>If you want to apply for a loan or business credit, the financier will request a business plan.</li>
5718</ol>
5719
5720<p>Smartbooks ensures that the business plan is no longer kept in Excel but is recorded in the system. In this way, changes in assumptions are immediately recalculated in Smartbooks, and the comparison between actual figures and the forecast is always up-to-date.</p>`,f6=`---json
5721{
5722  "title": "Het nut van een business plan",
5723  "metaTitle": "Business plan opstellen: waarom het loont",
5724  "slug": "het-nut-van-een-business-plan",
5725  "order": 41,
5726  "date": "2023-12-14 13:31:59",
5727  "category": "Articles",
5728  "tags": [
5729    "Planning"
5730  ],
5731  "excerpt": "Een business plan opstellen kost tijd, maar levert inzicht in cashflow, doelstellingen en financiering. Dit zijn de belangrijkste redenen om er toch tijd in te steken.",
5732  "originalUrl": "https://smartbooks.ai/artikelen/het-nut-van-een-business-plan/",
5733  "meta": null,
5734  "enSlug": "the-value-of-a-business-plan"
5735}
5736---
5737<p>Een financieel plan maken voor de komende periode kost tijd, maar wat we zeker weten is dat de realiteit er iedere maand een beetje anders uit ziet. Wat zijn dan enkele goede redenen om toch tijd te besteden aan deze klus?</p>
5738
5739
5740
5741<ol>
5742<li>Onderdeel van een business plan is inzicht in de verwachte inkomsten en uitgaven en dat resulteert in een cash flow forecast. Ook als cash geen knelpunt is, is het nuttig om te weten wat je verwachte banksaldo per maand zal zijn, zeker als er seizoenschommelingen zijn.</li>
5743
5744
5745
5746<li>Je kunt de verschillende afdelingen in de organisatie vertellen wat de doelstellingen zijn per maand, zodat zij inkoop, productie en verkoop hierop op af kunnen stemmen. Ook hebben ze dan beter inzicht of en wanneer ze hun team moeten uitbreiden, of in een negatief geval moeten laten krimpen.</li>
5747
5748
5749
5750<li>Als er een nieuwe investeerder bij komt of als de organisatie klaar gemaakt wordt voor verkoop zal de nieuwe investeerder of koper een business plan willen zien</li>
5751
5752
5753
5754<li>Als je een lening of zakelijk krediet wilt aanvragen vraagt de financier om een business plan</li>
5755</ol>
5756
5757
5758
5759<p>Smartbooks zorgt ervoor dat het business plan niet meer in excel zit, maar wordt vastgelegd in het systeem. Op die manier worden veranderingen in aannames direct doorgerekend in Smartbooks en is de vergelijking met actuele cijfers en de forecast altijd up-to-date.</p>`,b6=`---json
5760{
5761  "title": "Der Unterschied zwischen Planen, Budgetieren und Forecasten",
5762  "slug": "het-verschil-tussen-plannen-budgetteren-en-forecasten",
5763  "metaTitle": "Unterschied: Planen, Budgetieren und Forecasten",
5764  "date": "2023-12-14 13:31:34",
5765  "category": "Articles",
5766  "tags": [
5767    "Planung"
5768  ],
5769  "excerpt": "Was ist der Unterschied zwischen Planen, Budgetieren und Forecasten? Berichte zeigen die Vergangenheit; diese drei Techniken helfen, gezielt vorauszuschauen und nachzusteuern.",
5770  "originalUrl": "https://smartbooks.ai/artikelen/het-verschil-tussen-plannen-budgetteren-en-forecasten/",
5771  "meta": null
5772}
5773---
5774<p>Zuerst muss Ihr Finanzreporting sauber aufgesetzt sein und monatlich nützliche, verlässliche Informationen liefern. Berichte zeigen jedoch, was in der Vergangenheit passiert ist, und sagen wenig darüber aus, was künftig wahrscheinlich passieren wird. Dafür wurden Planung, Budgetierung und Forecasting entwickelt.</p>
5775
5776<p>Planung ist ein taktischer Prozess, in dem die langfristige Ausrichtung des Unternehmens definiert wird. Ergebnis ist ein Plan, der u. a. die finanziellen Ziele des Unternehmens zeigt.</p>
5777
5778<p>Budgetierung ist eine Methode, finanzielle Mittel verschiedenen Ausgaben zuzuweisen — etwa Produktion, Marketing oder Personal. Zugleich macht sie kommerzielle Ziele explizit und ermöglicht das Monitoring des Fortschritts. Ein Budget umfasst häufig Schätzungen für Umsatz, Kosten s
5778owie erwartete Cashflow- und Schuldenpositionen. Der Prozess läuft in der Regel zu Beginn eines neuen Geschäftsjahres. Anschließend wird das Budget monatlich mit den Ist-Zahlen verglichen, um Abweichungen und daraus abgeleitete Maßnahmen sichtbar zu machen.</p>
5779
5780<p>Beim Forecast wird jeden Monat neu geprüft, wohin sich Erträge und Kosten voraussichtlich entwickeln. Diese jüngste Realitätsschätzung liefert die Information, ob nachgesteuert werden muss — etwa Produktion hochfahren bei steigender Nachfrage oder Kosten reduzieren. Die Frage ist also nicht, welche dieser drei Finanztechniken Sie verwenden, sondern wie Sie die drei Blickrichtungen praktisch kombinieren. Smartbooks wurde konsequent mit diesen drei <em>Best Practices</em> als Ausgangspunkt entwickelt.</p>`,v6=`---json
5781{
5782  "title": "The Difference Between Planning, Budgeting, and Forecasting",
5783  "metaTitle": "Planning vs Budgeting vs Forecasting: The Difference",
5784  "slug": "the-difference-between-planning-budgeting-and-forecasting",
5785  "date": "",
5786  "category": "Articles",
5787  "tags": [
5788    "Financial Planning",
5789    "Budgeting",
5790    "Forecasting",
5791    "Business Intelligence",
5792    "Financial Reporting"
5793  ],
5794  "excerpt": "What is the difference between planning, budgeting, and forecasting? Reports show the past; these three techniques help you look ahead and adjust in time.",
5795  "originalUrl": "",
5796  "meta": {
5797    "type_bedrijf": "Financial Software"
5798  }
5799}
5800---
5801<p>First, you must ensure that your financial reporting is correctly set up and provides useful and reliable information on a monthly basis. However, reports tell you what happened in the past and say little about what is likely to happen in the future. For this, Planning, Budgeting, and Forecasting have been developed.</p>
5802
5803<p>Planning is a tactical process in which the long-term direction of the company is defined. The result is a plan that shows, among other things, the company's financial objectives.&nbsp;</p>
5804
5805<p>Budgeting is a way to allocate financial resources to various expenses, such as production, marketing, or general wages. In addition, it is a way to clarify commercial goals and monitor progress. Budgeting often includes estimates of income and expenses, as well as expected cash flow and debt position. This process is usually performed at the beginning of a new fiscal year. Subsequently, the budget is compared with actual financial statements every month to show variances and define any necessary actions.</p>
5806
5807<p>For the Forecast, the most likely actual status for all types of revenue and costs must be reviewed every month. This latest estimation of reality provides information on whether adjustments are needed: for example, increasing production due to increased demand, or conversely, cutting costs. The question is therefore...`,k6=`---json
5808{
5809  "title": "Het verschil tussen Plannen, Budgetteren en Forecasten",
5810  "metaTitle": "Verschil tussen plannen, budgetteren en forecasten",
5811  "slug": "het-verschil-tussen-plannen-budgetteren-en-forecasten",
5812  "order": 42,
5813  "date": "2023-12-14 13:31:34",
5814  "category": "Articles",
5815  "tags": [
5816    "Planning"
5817  ],
5818  "excerpt": "Wat is het verschil tussen plannen, budgetteren en forecasten? Rapportages tonen het verleden; deze drie technieken helpen je gericht vooruit te kijken en bij te sturen.",
5819  "originalUrl": "https://smartbooks.ai/artikelen/het-verschil-tussen-plannen-budgetteren-en-forecasten/",
5820  "meta": null,
5821  "enSlug": "the-difference-between-planning-budgeting-and-forecasting"
5822}
5823---
5824<p>Eerst moet je zorgen dat je financiële rapportage goed is ingericht en maandelijks nuttige en betrouwbare informatie verschaft. Maar, rapportages vertellen je wat er in het verleden is gebeurd en zeggen weinig over wat er in de toekomst waarschijnlijk gaat gebeuren. Daarvoor zijn Planning, Budgetteren en Forecasten ontwikkeld.</p>
5825
5826
5827
5828<p>Planning is een tactisch proces waarin de lange termijn van het bedrijf wordt gedefinieerd. Het resultaat is een plan dat o.a. de financiële doelstellingen van het bedrijf toont.&nbsp;</p>
5829
5830
5831
5832<p>Budgettering is een manier om financiële middelen toe te wijzen aan ver
5832schillende uitgaven, zoals productie, marketing of lonen in het algemeen. Daarnaast is het ook een manier om de commerciële doelen helder te maken en voortgang te kunnen monitoren. Budgettering omvat vaak schattingen van inkomsten en uitgaven, evenals de verwachte cashflow en schuldpositie. Dit proces wordt meestal uitgevoerd aan het begin van een nieuw fiscaal jaar. Vervolgens wordt het budget elke maand vergeleken met de werkelijke financiële overzichten om de verschillen te tonen en eventuele acties te definiëren.</p>
5833
5834
5835
5836<p>Voor de Forecast zal iedere maand moeten worden bekeken wat de werkelijke status voor alle soorten opbrengsten en kosten hoogstwaarschijnlijk zal gaan worden. Deze laatste inschatting van de werkelijkheid geeft dan informatie of er bijgestuurd moet gaan worden: bijvoorbeeld meer productie vanwege toegenomen vraag, of juist kosten besparen. De vraag is dus niet welke van deze financiële technieken je moet gebruiken, maar hoe je deze drie soorten van vooruitkijken praktisch combineert. Smartbooks is speciaal ontwikkeld met deze drie financiële <em>best practices</em> als uitgangspunt.</p>`,w6=`---json
5837{
5838  "title": "Wie KI den Monatsabschluss und das Finanzreporting verändert",
5839  "metaTitle": "KI im Monatsabschluss: 10 Wege, wie sich der Prozess wandelt",
5840  "slug": "hoe-ai-het-maandafsluitingsproces-en-financiele-rapportages-gaat-veranderen",
5841  "date": "2025-04-01 14:53:17",
5842  "category": "Articles",
5843  "tags": [
5844    "KI",
5845    "Best Practices",
5846    "Monatsabschluss"
5847  ],
5848  "excerpt": "KI im Monatsabschluss: zehn Wege, wie KI Monatsabschluss und Finanzreporting beschleunigt — von IC-Abstimmungen bis Rückstellungen und Analysen.",
5849  "originalUrl": "https://smartbooks.ai/artikelen/hoe-ai-het-maandafsluitingsproces-en-financiele-rapportages-gaat-veranderen/",
5850  "meta": null
5851}
5852---
5853<p>Der Monatsabschluss ist für viele Finanzabteilungen nach wie vor ein intensiver, repetitiver und fehleranfälliger Prozess. Der Druck, schneller, transparenter und präziser zu berichten, wächst — und Künstliche Intelligenz (KI) bietet gerade hier viele Chancen. In diesem Beitrag skizzieren wir 10 erwartete Entwicklungen, bei denen KI für Finance-Verantwortliche den Unterschied macht — jetzt und in naher Zukunft.</p>
5854
5855<p><strong>1. Intercompany-(IC-)Korrekturbuchungen durch KI</strong></p>
5856
5857<p>IC-Abstimmungen sind häufig ein Verzögerungsfaktor. KI kann Abweichungen zwischen IC-Transaktionen automatisch erkennen und korrigieren. Beispiel: Gesellschaft A fakturiert 100.000 € an Gesellschaft B, B hat aber nur 95.000 € gebucht. KI erkennt den Unterschied, analysiert die Ursachen (z. B. fehlende Kostenanteile oder Währungseffekte) und schlägt Korrekturbuchungen vor. Die Abstimmung wird schneller und konsistenter.</p>
5858
5859<p><strong>2. Automatische Anpassung von Zahlungsterminen auf Basis des Cashflows</strong></p>
5860
5861<p>KI-Modelle können Zahlungsvorschläge auf Basis von Echtzeit-Cashflow-Prognosen optimieren. Bei angespannter Liquidität kann KI etwa vorschlagen, unkritische Lieferantenrechnungen eine Woche später zu zahlen, während Rechnungen mit Skonto zügig ausgeglichen werden. So wird das Working Capital aktiv gesteuert — ohne manuelle Eingriffe.</p>
5862
5863<p><strong>3. Rückstellungen für noch zu erwartende Kosten</strong></p>
5864
5865<p>Viele Kosten wie Miete, Wartung oder Marketingkampagnen werden periodisch auf Basis manueller Schätzungen gebucht. KI kann Historie, Vertragsdaten und Rechnungszyklen nutzen, um Rückstellungen automatisch zu buchen. Beispiel: Eine jährliche Mietrechnung, die stets im Februar eintrifft — Ende Januar schlägt KI bereits eine Rückstellung auf Basis von Vertrag und Vorjahren vor.</p>
5866
5867<p><strong>4. Automatische Umsatzabgrenzung und periodengerechte Erlöse</strong></p>
5868
5869<p>Wird eine Rechnung vorab für eine spätere Leistung gestellt, muss ein Teil des Erlöses abgegrenzt werden. KI erkennt das anhand von Rechnungszeilen und Vertragsdaten. Beispiel: Ein Softwareabonnement über 1.200 € für 12 Monate wird im Januar fakturiert — KI bucht automatisch 100 € Umsatz pro Monat statt den Gesamtbetrag auf einmal.</p>
5870
5871<p><strong>5. KI-generierte Erläuterungen zu Abweichungen</strong></p>
5872
5873<p>Bei Abweichungen in den Zahlen — etwa einem Rückgang der Bruttomarge oder ungewöhnlich hohen Kosten — kann KI automatisch eine Erläuterung erzeugen. Grundlage sind Vergleiche mit Vorperioden, Budgets und Benchmarks. Beispiel: „Die Bruttomarge sank von 42 % auf 35 %, bedingt durch höhere Einkaufspreise in Q4, insbesondere in Produktgruppe X.“ Das spart Zeit und erhöht die Berichtsqualität.</p>
5874
5875<p><strong>
58756. Narrative Berichte</strong></p>
5876
5877<p>Neben zahlenbasierten Dashboards können KI-Tools narrative Berichte schreiben. Ein Monatsreport wird automatisch mit einer Zusammenfassung in natürlicher Sprache ergänzt: „Der Umsatz stieg um 8 % gegenüber Vormonat, vor allem dank einer starken Performance in Nordeuropa. Die operativen Kosten blieben im Budget.“ Das erleichtert die Kommunikation mit Stakeholdern.</p>
5878
5879<p><strong>7. Anomalie-Erkennung</strong></p>
5880
5881<p>KI ist besonders gut darin, Muster zu erkennen — und damit auch Auffälligkeiten. Das kann ungewöhnliche Transaktionen, doppelte Rechnungen oder abweichendes Zahlungsverhalten betreffen. Beispiel: Ein Lieferant wird plötzlich zweimal in einer Woche bezahlt, während er sonst monatlich abgerechnet wird. KI markiert das als potenzielles Kontrollrisiko.</p>
5882
5883<p><strong>8. KI als virtueller Assistent oder Agent</strong></p>
5884
5885<p>Wenn KI als Agent eingerichtet ist — mit Zugriff auf Systeme, Regeln und Daten — kann sie auf Zuruf eigenständig Aufgaben ausführen. Beispiele:</p>
5886
5887<ul>
5888<li>Erstelle eine Erläuterung zum Umsatzrückgang in Deutschland.</li>
5889<li>Welche Lieferanten wurden im Vergleich zum Vorquartal verspätet fakturiert?</li>
5890<li>Buche alle Mietrückstellungen für Q1 auf Basis der bestehenden Verträge.</li>
5891</ul>
5892
5893<p>So muss der Finance-Verantwortliche nicht mehr selbst in die Systeme einsteigen, sondern erhält direkt relevante Ergebnisse.</p>
5894
5895<p><strong>9. Integration mit E-Mail und Dokumentenerkennung</strong></p>
5896
5897<p>KI kann E-Mails und Anhänge lesen, Fehlendes erkennen und darauf reagieren. Beispiel: KI stellt fest, dass die Mietrechnung für März noch nicht eingegangen ist, erinnert den Lieferanten automatisch und schlägt eine Rückstellung in den Büchern vor. Der Prozess wird proaktiv.</p>
5898
5899<p><strong>10. Interaktion mit oder durch KI</strong></p>
5900
5901<p>KI kann also melden, dass eine erwartete Buchung noch nicht erfolgt ist, und proaktiv beim Controller nachfragen, warum. Die Antwort wird Teil des Wissens des KI-Agenten. Anschließend kann KI die Erklärung in die automatisch ausgehende Erläuterung zu den Monatszahlen einbauen.</p>
5902
5903<p><strong>Zum Schluss</strong></p>
5904
5905<p>KI ersetzt keine Finance-Profis, sondern ist ein starker Assistent für Tempo, Konsistenz und Einblick. Der Monatsabschluss wird immer weniger ein manueller Prozess — und immer mehr ein automatisierter Analyse- und Entscheidungszyklus.</p>
5906
5907<p>KI ist dabei keine Suchmaschine mit reinen Antworten, sondern ein trainierter „Agent“, der Ihre Organisation immer besser kennenlernt, Ihren Monatsprozess versteht und zu einer virtuellen Kollegin mit Wissen, Erfahrung und Umsetzungskraft wird.</p>
5908
5909<p>Bei Smartbooks verfolgen wir diese Entwicklungen eng und orchestrieren sie mit und über Smartbooks. Denn KI braucht eine strukturierte Datenbasis, um diese Aufgaben zuverlässig, schnell und konsistent auszuführen. Zudem wollen Sie festhalten, welche Anpassungen und Kommentare KI vorgenommen hat — und die Möglichkeit haben, diese anzupassen. Smartbooks integriert KI daher als festen Bestandteil unserer Software.</p>`,x6=`---json
5910{
5911  "title": "How AI Will Transform the Month-End Close and Financial Reporting",
5912  "metaTitle": "AI Month-End Close: 10 Ways AI Transforms It",
5913  "slug": "how-ai-will-change-month-end-closing-and-financial-reporting",
5914  "date": "",
5915  "category": "Articles",
5916  "tags": [
5917    "AI",
5918    "Month-End Close",
5919    "Financial Reporting",
5920    "Finance Automation",
5921    "Cash Flow"
5922  ],
5923  "excerpt": "AI month-end close: explore 10 ways AI is set to revolutionize the month-end close and financial reporting for the modern finance manager.",
5924  "originalUrl": "",
5925  "meta": {
5926    "type_bedrijf": "FinTech / SaaS",
5927    "functie_medewerker": "CFO"
5928  }
5929}
5930---
5931<p>For many finance departments, the month-end close is still an intensive, repetitive, and error-prone process. The pressure to report faster, more transparently, and with greater accuracy is increasing, and Artificial Intelligence (AI) offers significant opportunities in this area. In this blog, we outline 10 expected developments where AI can make a difference for the finance manager – now and in the near future.</p>
5932
5933<p><strong>1. Intercompany (IC) adjustment entries through AI</strong></p>
5934
5935<p>Intercompany settlements are often a source of delay. AI can automatically detect and correct discrepancies between IC transactions. For example: Entity A invoices Entity B for €100,000, but Entity B has only recorded €95,000. AI can identify this, analyze the differences (e.g., due to missing cost components or currency effects), and suggest adju
5935stment entries. This makes reconciliation faster and more consistent.</p>
5936
5937<p><strong>2. Automated payment date adjustment based on cash flow</strong></p>
5938
5939<p>AI models can optimize payment proposals based on real-time cash flow projections. In situations where liquidity is under temporary pressure, AI can, for instance, propose paying non-critical supplier invoices a week later, while prioritizing invoices with early payment discounts. This allows for active working capital management without manual intervention.</p>
5940
5941<p><strong>3. Accruals for costs yet to be received</strong></p>`,y6=`---json
5942{
5943  "title": "Hoe AI het maandafsluitingsproces en financiële rapportages gaat veranderen",
5944  "metaTitle": "AI maandafsluiting: 10 manieren die het proces veranderen",
5945  "slug": "hoe-ai-het-maandafsluitingsproces-en-financiele-rapportages-gaat-veranderen",
5946  "order": 7,
5947  "date": "2025-04-01 14:53:17",
5948  "category": "Articles",
5949  "tags": [
5950    "AI",
5951    "Best Practices",
5952    "Maandafsluiting"
5953  ],
5954  "excerpt": "AI maandafsluiting: tien manieren waarop AI de maandafsluiting en financiële rapportages versnelt — van intercompany-aansluitingen tot accruals en analyses.",
5955  "originalUrl": "https://smartbooks.ai/artikelen/hoe-ai-het-maandafsluitingsproces-en-financiele-rapportages-gaat-veranderen/",
5956  "meta": null,
5957  "enSlug": "how-ai-will-change-month-end-closing-and-financial-reporting"
5958}
5959---
5960<p>De maandafsluiting is voor veel financiële afdelingen nog steeds een intensief, repetitief en foutgevoelig proces. Druk om sneller, transparanter en nauwkeuriger te rapporteren neemt toe, en Artificial Intelligence (AI) biedt juist op dit terrein veel kansen. In deze blog schetsen we 10 verwachte ontwikkelingen waarin AI het verschil kan maken voor de finance manager – nu en in de nabije toekomst.</p>
5961
5962
5963
5964<p><strong>1. Intercompany (IC) correctieboekingen door AI</strong></p>
5965
5966
5967
5968<p>Intercompany-verrekeningen zijn vaak een bron van vertraging. AI kan afwijkingen tussen IC-transacties automatisch detecteren en corrigeren. Stel: entiteit A factureert €100.000 aan entiteit B, maar B heeft slechts €95.000 geboekt. AI kan dit herkennen, de verschillen analyseren (bijv. door ontbrekende kostencomponenten of valuta-effecten) en voorstellen doen voor correctieboekingen. Hierdoor wordt de reconciliatie sneller en consistenter.</p>
5969
5970
5971
5972<p><strong>2. Automatisch aanpassen van betaaldata op basis van cashflow</strong></p>
5973
5974
5975
5976<p>AI-modellen kunnen betalingsvoorstellen optimaliseren op basis van real-time cashflowprojecties. In een situatie waarin de liquiditeit tijdelijk onder druk staat, kan AI bijvoorbeeld voorstellen om niet-kritieke leveranciersfacturen een week later te betalen, terwijl facturen met vroegboekkorting juist sneller betaald worden. Hierdoor wordt het werkkapitaal actief gestuurd zonder handmatige tussenkomst.</p>
5977
5978
5979
5980<p><strong>3. Voorzieningen voor nog te ontvangen kosten</strong></p>
5981
5982
5983
5984<p>Veel kosten, zoals huur, onderhoud of marketingcampagnes, worden periodiek geboekt op basis van handmatige inschattingen. AI kan historische gegevens, contractinformatie en facturatiecycli gebruiken om automatisch voorzieningen te boeken. Denk aan een jaarlijkse huurfactuur die altijd in februari komt: AI kan eind januari al een voorziening voorstellen op basis van het contract en eerdere jaren.</p>
5985
5986
5987
5988<p><strong>4. Automatische omzetuitstel en tijdsgebonden opbrengsten</strong></p>
5989
5990
5991
5992<p>Wanneer een factuur vooraf wordt verstuurd voor een dienst of levering die pas in de toekomst plaatsvindt, moet een deel van de opbrengst worden uitgesteld. AI kan dit herkennen op basis van factuurregels en contractinformatie. Bijvoorbeeld: een softwareabonnement van €1.200 voor 12 maanden wordt in januari gefactureerd. AI boekt automatisch €100 per maand aan omzet, in plaats van het volledige bedrag ineens.</p>
5993
5994
5995
5996<p><strong>5. AI-gegenereerde toelichtingen bij afwijkingen</strong></p>
5997
5998
5999
6000<p>Bij afwijkingen in de cijfers – zoals een daling van de brutomarge of een onverwacht hoge kostenpost – kan AI automatisch een toelichting genereren. Deze toelichting kan gebaseerd zijn op vergelijking met vorige perioden, budgetten en benchmarks. Bijvoorbeeld: “De brutomarge daalde van 42% naar 35% door hogere inkoopprijzen in Q4, met name bij productgroep X.” Dit bespaart tijd en verbetert de kwaliteit van de toelichtingen.</p>
6001
6002
6003
6004<p><strong>6. Narratieve rapportages</strong></p>
6005
6006
6007
6008<p>Naast cijfermatige dashboards kunnen AI-tools ook narratieve rapportages schrijven. Een maandrapportage kan automatisch w
6008orden aangevuld met een samenvatting in natuurlijke taal: “De omzet steeg met 8% ten opzichte van vorige maand, vooral dankzij een sterke prestatie in de regio Noord-Europa. De operationele kosten bleven binnen budget.” Dit ondersteunt de communicatie richting stakeholders zonder dat finance zelf alles hoeft op te stellen.</p>
6009
6010
6011
6012<p><strong>7. Anomalie-detectie</strong></p>
6013
6014
6015
6016<p>AI is bijzonder goed in het herkennen van patronen – en dus ook in het signaleren van afwijkingen. Dit kan gaan om ongebruikelijke transacties, dubbele facturen of afwijkende betaalgedragingen. Bijvoorbeeld: een leverancier wordt ineens twee keer in één week betaald, terwijl dat normaal gesproken maandelijks gebeurt. AI markeert dit als potentieel risico voor controle.</p>
6017
6018
6019
6020<p><strong>8. AI als virtuele assistent of agent</strong></p>
6021
6022
6023
6024<p>Wanneer AI wordt ingericht als een agent – dus met toegang tot systemen, regels en data – kan deze zelfstandig taken uitvoeren op verzoek. Voorbeelden:</p>
6025
6026
6027
6028<ul class="wp-block-list">
6029<li>Maak een toelichting bij de omzetdaling in Duitsland.</li>
6030
6031
6032
6033<li>Welke leveranciers zijn te laat gefactureerd t.o.v. vorig kwartaal?</li>
6034
6035
6036
6037<li>Boek alle huurvoorzieningen voor Q1 op basis van de bestaande contracten</li>
6038</ul>
6039
6040
6041
6042<p>De finance manager hoeft dan niet meer zelf in de systemen te duiken, maar krijgt direct relevante output.</p>
6043
6044
6045
6046<p><strong>9. Integratie met e-mail en documentherkenning</strong></p>
6047
6048
6049
6050<p>AI kan e-mails en bijlagen lezen, herkennen wat ontbreekt en hierop anticiperen. Bijvoorbeeld: AI signaleert dat de huurfactuur voor maart nog niet is ontvangen, herinnert de leverancier automatisch én stelt een voorziening voor in de boeken. Zo wordt het proces pro-actiever.</p>
6051
6052
6053
6054<p><strong>10. Interactie met of d.m.v. AI</strong></p>
6055
6056
6057
6058<p>AI kan dus signaleren dat een te verwachten boeking nog niet is gemaakt en pro-actief vragen aan de controller of er een reden is dat die boeking nog niet is gemaakt. De uitleg waarom die boeking nog niet is gemaakt wordt onderdeel van de kennis van de AI-agent. Vervolgens kan AI de ontvangen uitleg onderdeel maken van de automatisch uit te sturen toelichting bij de maandcijfers.</p>
6059
6060
6061
6062<p><strong>Tot slot</strong></p>
6063
6064
6065
6066<p>AI is geen vervanger van finance professionals, maar een krachtige assistent die zorgt voor snelheid, consistentie en inzicht. De maandafsluiting zal steeds minder een handmatig proces zijn, en steeds meer een geautomatiseerde analyse- en besliscyclus.</p>
6067
6068
6069
6070<p>AI is hierbij geen search engine die alleen antwoorden geeft, maar een getrainde ‘agent’ die jouw organisatie steeds beter leert kennen, begrijpt hoe je maandproces eruit ziet en gezien moet gaan worden als een virtuele collega met kennis, ervaring en executiekracht.</p>
6071
6072
6073
6074<p>Vanuit Smartbooks zitten we bovenop deze ontwikkelingen en zorgen we dat al deze ontwikkelingen georkestreerd kunnen worden met en vanuit Smartbooks. Want AI heeft een gestructureerde databron nodig om al deze werkzaamheden betrouwbaar, snel en consistent uit te kunnen voeren. Daarnaast wil je vast kunnen leggen welke aanpassingen en commentaren AI heeft gemaakt én de mogelijkheid hebben om deze aan te passen. Smartbooks blijft daarom ontwikkelingen met AI op de voet volgen en zorgt ervoor dat AI een integraal onderdeel wordt van onze software.</p>`,j6=`---json
6075{
6076  "title": "Kundenreferenz Intermax",
6077  "slug": "intermax",
6078  "metaTitle": "Konsolidierungssoftware für ein Hosting-Unternehmen – Fallstudie",
6079  "date": "2026-04-21 10:00:00",
6080  "category": "Case Studies",
6081  "tags": [
6082    "Finanzkonsolidierung",
6083    "Exact Globe",
6084    "Reporting",
6085    "IT-Services"
6086  ],
6087  "excerpt": "Wie das Hosting-Unternehmen Intermax die monatliche Konsolidierung von 10 Gesellschaften auf Exact Globe beschleunigte — mehrere Tage Zeitgewinn pro Monat und belastbarere Berichte.",
6088  "originalUrl": "",
6089  "meta": {
6090    "type_bedrijf": "IT / Cloud-Infrastruktur",
6091    "naam_medewerker": "Karel van den Bos",
6092    "functie_medewerker": "CFO, Intermax",
6093    "logo_bedrijf": "intermax"
6094  }
6095}
6096---
6097<h1>Kundenreferenz: <strong>Intermax</strong></h1>
6098<p><em>Wie Intermax die monatliche Konsolidierung von 10 Gesellschaften drastisch beschleunigt und gleichzeitig eine deutlich verlässlichere Finanzsteuerung gewonnen hat.</em></p>
6099
6100<h2>Kundenprofil</h2>
6101<p>
6101Intermax ist eine der wenigen IT-Organisationen in den Niederlanden, die sich noch vollständig im Besitz ihres Gründers befindet — seit über 30 Jahren unabhängig und authentisch. Das Unternehmen unterstützt Organisationen, für die Sicherheit und Verfügbarkeit von Daten und Anwendungen geschäftskritisch sind, mit robuster, bewährter Technologie. Darüber hinaus ist Intermax Teil eines Konsortiums aus sieben Parteien, das an einer souveränen niederländischen Cloud-Infrastruktur arbeitet.</p>
6102
6103<h2>Herausforderung</h2>
6104<p>Intermax nutzt Exact Globe als Buchhaltungssoftware und muss zehn Gesellschaften monatlich konsolidieren und an die Geschäftsleitung berichten.</p>
6105<p>Karel van den Bos und seine sechs Finance-Kolleginnen und -Kollegen standen jeden Monat vor derselben Aufgabe: einen belastbaren Monatsbericht zu erstellen, der dem Management die richtigen Informationen und Einblicke liefert. Gleichzeitig mussten die täglichen Finanzprozesse strukturiert laufen und Ad-hoc-Fragen schnell und präzise beantwortet werden.</p>
6106<p>Mit der bestehenden Mischung aus Systemen und Excel-Tabellen war das ein zeitaufwendiger und fehleranfälliger Prozess. Intermax suchte nach einer modernen, effizienten Lösung, die die Arbeitsweise strukturell verbessern würde.</p>
6107
6108<h2>Die Lösung mit Smartbooks</h2>
6109<p>Intermax entschied sich aufgrund der Einfachheit und schnellen Implementierung für Smartbooks. Karel beschreibt die Entscheidung als „No-Brainer“, nachdem in der Demo 80–90 % seiner Anforderungen out of the box abgedeckt waren. Innerhalb von zwei Wochen war das System vollständig einsatzbereit — mit nur minimalem Zeitaufwand für das Intermax-Team.</p>
6110<p>Dank der Flexibilität von Smartbooks konnte der bestehende Kontenplan schnell in die Plattform integriert werden. Standardberichte wurden mühelos an die spezifischen Anforderungen des Unternehmens angepasst — eine benutzerfreundliche, effiziente Lösung, die ab dem ersten Tag Mehrwert lieferte.</p>
6111
6112<h4>Bessere Einblicke</h4>
6113<p>Die monatliche Konsolidierung und Berichterstattung der zehn Gesellschaften ist heute deutlich schneller und einfacher. Berichte sind belastbarer und aussagekräftiger — es bleibt mehr Raum für Analyse und Interpretation. Ein willkommener Nebeneffekt: das Team ist erheblich weniger von Excel abhängig.</p>
6114
6115<h4>Effizienzgewinne</h4>
6116<p>Die Erstellung der Monatsberichte geht deutlich schneller und erfordert weniger Handarbeit. Dank eingebauter Logik und Kontrollen entfallen manuelle Fehlerprüfungen. Das Ergebnis: mehrere gewonnene Tage pro Monat.</p>
6117
6118<h4>Vertrauen in die Zahlen</h4>
6119<p>Mit standardisierten, jederzeit aktuellen und für das Management direkt zugänglichen Berichten ist das Vertrauen in die Zahlen — und in das Finance-Team selbst — spürbar gewachsen.</p>
6120
6121<h2>Rückmeldung von Intermax</h2>
6122<p>Die Einführung verlief reibungslos und ohne großen Aufwand. Karel war positiv überrascht, wie schnell das System aufgesetzt war und wie eigenständig sein Team damit arbeiten konnte.</p>
6123<p>„Machen Sie aus der Implementierung kein Großprojekt — es geht sehr schnell. Während des kostenlosen Testmonats ist alles bereits eingerichtet und einsatzbereit“, so Karel van den Bos.</p>
6124
6125<h2>Empfehlung</h2>
6126<p>Karel empfiehlt Smartbooks uneingeschränkt Organisationen, die mit mehreren Gesellschaften arbeiten und ihre monatliche Konsolidierung und Berichterstattung in den Griff bekommen möchten. Die Kombination aus schneller Implementierung, einfacher Bedienung und sofortiger Zeitersparnis macht die Plattform zur logischen Wahl für jedes Finance-Team, das Excel hinter sich lassen will.</p>
6127
6128<h2>Fazit</h2>
6129<p>Intermax zeigt, wie ein Finance-Team von sieben Personen mit einer smarten, benutzerfreundlichen Lösung wie Smartbooks mit weniger Aufwand mehr erreicht. Mit verlässlicheren Berichten, kürzeren Durchlaufzeiten und mehr Zeit für Analyse hat Intermax ein solides Fundament für weiteres Wachstum geschaffen — gebaut auf Einblick statt auf Tabellenkalkulationen.</p>`,S6=`---json
6130{
6131  "title": "Customer Case Intermax",
6132  "slug": "intermax",
6133  "excerpt": "How hosting company Intermax accelerated monthly consolidation of 10 entities on Exact Globe — days saved each month and more reliable reporting.",
6134  "metaTitle": "Consolidation software for a hosting company – case study",
6135  "date": "2026-04-21 10:00:00",
6136  "category": "Case Studies",
6137  "tags": [
6138    "Financial Consolidation",
6139    "Exact Globe",
6140    "Reporting",
6141    "IT Services"
6142  ],
6143  "originalUrl": "",
6144  "meta": {
6145    "type_bedrijf": "IT / Cloud Infrastructure",
6146    "naam_medewerker": "Karel van den Bos",
6147    "functie_medewerker": "CFO, Intermax",
6148    "logo_bedrijf": "intermax"
6149  }
6150}
6151---
6152<h1>Customer Case: <strong>Intermax</strong></h1>
6153<p><em>How Intermax dramatically accelerated the monthly consolidation of 10 entities and gained a stronger grip on reliable financial insights.</em></p>
6154
6155<h2>Customer profile</h2>
6156<p>Intermax is one of the few IT organizations in the Netherlands still fully owned by its founder — independent and authentic for over 30 years. The company helps organizations for whom the security and availability of data and applications are mission-critical to safeguard their digital continuity, using robust, proven technology. In addition, Intermax is part of a seven-party consortium working on the development of a sovereign Dutch cloud infrastructure.</p>
6157
6158<h2>Challenge</h2>
6159<p>Intermax uses Exact Globe as its accounting package and has ten entities that need to be consolidated and reported to the management team every month.</p>
6160<p>Karel van den Bos and his six finance colleagues faced the same task each month: producing a reliable monthly report that gave management the right information and insights. At the same time, day-to-day financial processes had to run in a well-structured way, and ad-hoc questions needed quick and accurate answers.</p>
6161<p>With their existing mix of systems and Excel sheets, this was a time-consuming and error-prone process. Intermax was looking for a modern, efficient solution that would structurally improve the way they worked.</p>
6162
6163<h2>The solution with Smartbooks</h2>
6164<p>Intermax chose Smartbooks for its simplicity and fast implementation. Karel describes it as &ldquo;a no-brainer&rdquo; after seeing the demo, in which 80–90% of his requirements were covered out of the box. The system was fully operational within two weeks, with only a minimal time investment from the Intermax team.</p>
6165<p>The flexibility of Smartbooks allowed the team to quickly integrate their existing chart of accounts into the platform. Standard reports were easily tailored to the company's specific needs, resulting in a user-friendly and efficient solution that delivered value from day one.</p>
6166
6167<h4>Improved insight</h4>
6168<p>The monthly consolidation and reporting of ten entities is now significantly faster and simpler. Reports are more reliable and richer in insights, leaving more room for analysis and interpretation. As an added benefit, the team is far less dependent on Excel.</p>
6169
6170<h4>Efficiency gains</h4>
6171<p>Producing the monthly reports goes considerably faster and requires less manual work. Thanks to built-in logic and controls, manual error-checking is no longer needed. The result: several days of time saved every month.</p>
6172
6173<h4>Confidence in the numbers</h4>
6174<p>With standardized reports that are always up to date and directly accessible to the management team, confidence in both the numbers and the finance team itself has grown substantially.</p>
6175
6176<h2>Feedback from Intermax</h2>
6177<p>The implementation went smoothly and without fuss. Karel was positively surprised by how quickly the system was set up and how independently his team was able to work with it.</p>
6178<p>&ldquo;Don't turn the implementation into a big project, because it goes very fast. During the free trial month the entire setup is already completed and everything is ready to use,&rdquo; says Karel van den Bos.</p>
6179
6180<h2>Recommendation</h2>
6181<p>Karel wholeheartedly recommends Smartbooks to organizations that work with multiple entities and want to get a grip on their monthly consolidation and reporting. The combination of fast implementation, ease of use, and immediate time savings makes it a logical choice for any finance team ready to leave Excel behind.</p>
6182
6183<h2>Conclusion</h2>
6184<p>Intermax shows how a smart, user-friendly solution like Smartbooks enables a finance team of seven to do more with less effort. With more reliable reports, a shorter lead time, and more time for analysis, Intermax has built a solid foundation for further growth — built on insight rather than spreadsheets.</p>`,z6=`---json
6185{
6186  "title": "Klantcase Intermax",
6187  "slug": "intermax",
6188  "order": 0,
6189  "metaTitle": "Consolidatie software hostingbedrijf – klantcase",
6190  "date": "2026-04-21 10:00:00",
6191  "category": "Case Studies",
6192  "tags": [
6193    "Consolidatie",
6194    "Exact Globe",
6195    "Rapportage"
6196  ],
6197  "excerpt": "Hoe hostingbedrijf Intermax de maandelijkse consolidatie van 10 entiteiten op Exact Globe versnelde — dagen tijdswinst per maand en betrouwbaardere rapportages.",
6198  "originalUrl": "",
6199  "meta": {
6200    "type_bedrijf": "IT / Cloud Infrastructuur",
6201    "naam_medewerker": "Karel van den Bos",
6202    "functie_medewerker": "CFO, Intermax",
6203    "logo_bedrijf": "intermax"
6204  },
6205  "enSlug": "intermax"
6206}
6207---
6208<h1>Klantcase: <strong>Intermax</strong></h1>
6209<p><em>Hoe Intermax de maandelijkse consolidatie van 10 entiteiten drastisch versnelde en meer grip kreeg op betrouwbare financiële inzichten.</em></p>
6210
6211<h2>Klantprofiel</h2>
6212<p>Intermax is een van de weinige IT-organisaties in Nederland die nog volledig in handen is van de oprichter — al 30 jaar onafhankelijk en authentiek. Het bedrijf helpt organisaties voor wie de veiligheid en beschikbaarheid van data en applicaties cruciaal zijn, bij het borgen van hun digitale continuïteit. Dat doet Intermax met robuuste, bewezen technologie. Daarnaast werkt het bedrijf samen met een consortium van zeven partijen aan de ontwikkeling van een soevereine Nederlandse cloudinfrastructuur.</p>
6213
6214<h2>Uitdaging</h2>
6215<p>Intermax werkt met Exact Globe als boekhoudpakket en heeft tien entiteiten die maandelijks geconsolideerd en gerapporteerd moeten worden aan het managementteam.</p>
6216<p>Karel van den Bos en zijn zes finance collega's stonden elke maand voor dezelfde klus: een betrouwbare maandrapportage samenstellen die de juiste informatie en inzichten geeft aan het management. Tegelijkertijd moesten dagelijkse financiële processen goed gestructureerd verlopen en moesten ad-hocvragen snel en correct beantwoord worden.</p>
6217<p>Met de bestaande combinatie van systemen en Excel-sheets was dat een tijdrovend en foutgevoelig proces. Er was behoefte aan een moderne, efficiënte oplossing die dit structureel zou verbeteren.</p>
6218
6219<h2>Oplossing met Smartbooks</h2>
6220<p>Intermax koos voor Smartbooks vanwege de eenvoud en de snelle implementatiemogelijkheden. Karel omschrijft het als &ldquo;een no-brainer&rdquo; na het zien van de demo, waarin direct 80 tot 90% van zijn behoeften werd afgedekt. Binnen twee weken was het systeem volledig operationeel, met een minimale tijdsinvestering vanuit Intermax zelf.</p>
6221<p>De flexibiliteit van Smartbooks stelde het team in staat om de bestaande grootboekstructuur snel te integreren in de tool. Standaardrapportages waren eenvoudig aan te passen aan de specifieke behoeften van het bedrijf, wat resulteerde in een gebruiksvriendelijke en efficiënte oplossing die direct waarde leverde.</p>
6222
6223<h4>Verbeterd inzicht</h4>
6224<p>De maandelijkse consolidatie en rapportage van tien entiteiten is serieus versneld en vereenvoudigd. De rapportages zijn betrouwbaarder en bevatten meer inzichten, waardoor er meer ruimte ontstaat voor analyse en interpretatie. En als bijkomend voordeel: het team is een stuk minder afhankelijk van Excel.</p>
6225
6226<h4>Efficiëntieverbetering</h4>
6227<p>Het opstellen van de maandrapportages gaat aanzienlijk sneller, vergt minder handmatig werk, en dankzij de ingebouwde logica en controles is een handmatige foutencheck niet langer nodig. Kortom: een tijdswinst van meerdere dagen per maand.</p>
6228
6229<h4>Vertrouwen</h4>
6230<p>Met gestandaardiseerde rapportages die altijd up-to-date en direct toegankelijk zijn voor het managementteam, is het vertrouwen in de cijfers én in het finance team aanzienlijk gegroeid.</p>
6231
6232<h2>Feedback van Intermax</h2>
6233<p>Het implementatieproces verliep vlot en zonder gedoe. Karel was positief verrast door de snelheid waarmee het systeem ingericht was en waarmee zijn team er zelfstandig mee aan de slag kon.</p>
6234<p>&ldquo;Maak van de implementatie niet een groot project, want het gaat heel snel. Tijdens de gratis proefmaand is de hele inrichting al afgerond en is alles klaar voor gebruik,&rdquo; aldus Karel van den Bos.</p>
6235
6236<h2>Aanbeveling</h2>
6237<p>Karel raadt Smartbooks van harte aan voor organisaties die werken met meerdere entiteiten en grip willen krijgen op hun maandelijkse consolidatie en rapportage. De combinatie van snelle implementatie, gebruiksgemak en directe tijdswinst maakt het een logische keuze voor ieder finance team dat klaar is om Excel achter zich te laten.</p>
6238
6239<h2>Conclusie</h2>
6240<p>Intermax laat zien hoe een slimme en gebruiksvriendelijke oplossing als Smartbooks een finance team van zeven mensen in staat stelt om meer te doen met minder moeite. Met betrouwbaardere rapportages, een kortere doorlooptijd en meer tijd voor analyse heeft Intermax een solide basis gelegd voor verdere groei — gebouwd op inzicht in plaats van spreadsheets.</p>`,A6=`---json
6241{
6242  "title": "LifeWatcher",
6243  "slug": "lifewatcher",
6244  "metaTitle": "Fallstudie LifeWatcher: Schnellerer Monatsabschluss",
6245  "date": "",
6246  "category": "Customer Stories",
6247  "tags": [
6248    "Monatsabschluss",
6249    "Automatisierung",
6250    "Financial Reporting",
6251    "Effizienz"
6252  ],
6253  "excerpt": "Mit Smartbooks benötigt der Monatsabschluss deutlich weniger Zeit — und alle Berichte stehen im Anschluss automatisch bereit.",
6254  "originalUrl": "",
6255  "meta": {
6256    "type_bedrijf": "Consumer Electronics"
6257  }
6258}
6259---
6260<p>Mit Smartbooks benötigt unser Monatsabschluss deutlich weniger Zeit. Es ist heute wesentlich einfacher zu prüfen, ob fehlerhafte oder fehlende Buchungen vorliegen. Und nach der Prüfung stehen alle Berichte automatisch bereit. Einfacher geht es nicht.</p>`,C6=`---json
6261{
6262  "title": "LifeWatcher",
6263  "metaTitle": "LifeWatcher Case: Faster Month-End Closing",
6264  "slug": "lifewatcher",
6265  "date": "",
6266  "category": "Customer Stories",
6267  "tags": [
6268    "Month-end closing",
6269    "Automation",
6270    "Financial Reporting",
6271    "Efficiency"
6272  ],
6273  "excerpt": "With Smartbooks, the month-end closing takes us significantly less time and all our reports are automatically ready.",
6274  "originalUrl": "",
6275  "meta": {
6276    "type_bedrijf": "Consumer Electronics",
6277    "naam_medewerker": "...",
6278    "functie_medewerker": "...",
6279    "logo_bedrijf": "..."
6280  }
6281}
6282---
6283<p>With Smartbooks, the month-end closing takes us significantly less time. It is now much easier to verify whether there are incorrect or missing entr
6283ies. And following the audit, all our reports are automatically ready. It couldn't be any easier.</p>`,E6=`---json
6284{
6285  "title": "LifeWatcher",
6286  "metaTitle": "Klantcase LifeWatcher: snellere maandafsluiting",
6287  "slug": "lifewatcher",
6288  "order": 31,
6289  "date": "2024-07-17 10:56:41",
6290  "category": "Customer Stories",
6291  "tags": [],
6292  "excerpt": "Met Smartbooks kost de maandafsluiting ons veel minder tijd. Het is nu veel eenvoudiger om te controleren of er foute of ontbrekende boekingen zijn. En na de",
6293  "originalUrl": "https://smartbooks.ai/klantervaringen/lifewatcher/",
6294  "meta": {
6295    "type_bedrijf": "Persoonsalarmering voor senioren",
6296    "naam_medewerker": "Ivo van Os",
6297    "functie_medewerker": "Manager",
6298    "logo_bedrijf": "2127"
6299  },
6300  "enSlug": "lifewatcher"
6301}
6302---
6303<p>Met Smartbooks kost de maandafsluiting ons veel minder tijd. Het is nu veel eenvoudiger om te controleren of er foute of ontbrekende boekingen zijn. En na de controle staan al onze rapportages automatisch klaar. Makkelijker kan het niet.</p>`,N6=`---json
6304{
6305  "title": "Liquiditätsplanung: Aufbau, Formel und Rechenbeispiel",
6306  "slug": "liquiditeitsbegroting-maken",
6307  "metaTitle": "Liquiditätsplanung: Formel, Aufbau und Beispiel",
6308  "date": "2026-08-26 10:00:00",
6309  "category": "Articles",
6310  "tags": [
6311    "Budgetierung",
6312    "Forecast",
6313    "Cashflow"
6314  ],
6315  "excerpt": "Liquiditätsplanung aufbauen: die Formel, sechs Schritte, ein Rechenbeispiel pro Monat und die Fallstricke, die das Bild still verzerren.",
6316  "originalUrl": ""
6317}
6318---
6319<p>Die <strong>Liquiditätsplanung</strong> stellt pro Periode alle erwarteten Einzahlungen und Auszahlungen gegenüber, sodass der Bankbestand am Ende jeder Woche oder jedes Monats bereits im Voraus feststeht. Die Rechnung selbst ist trivial: Anfangsbestand plus Einzahlungen minus Auszahlungen. Die Schwierigkeit liegt in der zeitlichen Zuordnung, nie in der Formel.</p>
6320<p>Für Controller beantwortet das eine andere Frage als der Ergebnisplan. Ein Unternehmen kann ein profitables Jahr planen und im März trotzdem knapp werden, weil Umsatzsteuervorauszahlung, Urlaubsgeld und eine Ersatzinvestition in dieselben Wochen fallen. Gewinn ist eine buchhalterische Größe, die Erträge und Aufwendungen der Periode zuordnet, in die sie gehören; Liquidität ist ein Datum auf dem Kontoauszug.</p>
6321<h2>Was Liquiditätsplanung leistet und was nicht</h2>
6322<p>Geplant werden Geldströme, keine Leistung. Damit unterscheidet sich der Plan grundlegend von zwei Rechenwerken, mit denen er am häufigsten verwechselt wird:</p>
6323<ul>
6324<li><strong>Der Ergebnisplan</strong> plant Umsatz und Kosten in der Periode, in der sie verdient oder verbraucht werden. Die Abschreibung steht darin, die Zahlung für die Maschine nicht.</li>
6325<li><strong>Die Kapitalflussrechnung</strong> erklärt im Nachhinein, wie sich der Bestand verändert hat. Sie blickt zurück; die Liquiditätsplanung blickt nach vorn.</li>
6326</ul>
6327<p>Die Brücke zwischen beiden bildet das Working Capital: Umsatzwachstum vollständig auf Rechnung erhöht den Gewinn und senkt den Bankbestand. Die Mechanik dahinter beschreibt der Beitrag zur <a href="/de/artikel/werkkapitaal-berekenen">Berechnung des Working Capital</a>.</p>
6328<h2>Der Aufbau einer Liquiditätsplanung</h2>
6329<p><strong>Endbestand = Anfangsbestand + erwartete Einzahlungen &minus; erwartete Auszahlungen</strong></p>
6330<p>Diese Formel wiederholt sich pro Periode, wobei der Endbestand der einen Periode zum Anfangsbestand der nächsten wird. In der Praxis entsteht der Plan in sechs Schritten:</p>
6331<ol>
6332<li>Intervall und Horizont festlegen: wöchentlich für zwölf bis dreizehn Wochen, monatlich für zwölf Monate. Ein Jahresplan auf Quartalsbasis verbirgt genau die Spitzen, um die es geht.</li>
6333<li>Anfangsbestand fixieren: die Bankbestände aller Gesellschaften zuzüglich des freien Rahmens im Kontokorrentkredit.</li>
6334<li>Den Umsatzplan über ein Zahlungsziel in Einzahlungen übersetzen. Bei einem DSO von 45 Tagen fließt der Januarumsatz überwiegend erst im März zu.</li>
6335<li>Den Kostenplan in Auszahlungen übersetzen und jeder Kostenart einen eigenen Rhythmus geben: Löhne um den 25., Lieferanten auf 30 Tage, Miete quartalsweise im Voraus.</li>
6336<li>Die Positionen ergänzen, die im Ergebnisplan nie auftauchen: Umsatzsteuer, Lohnsteuer, Körperschaftsteuer, Tilgungen, Investitionen, Dividenden und Urlaubsgeld.</li>
6337<li>Das Ergebnis dem freien Kreditrahmen und den mit der Bank vereinbarten Covenants gegenüberstellen.</li>
6338</ol>
6339<h2>Direkte oder indirekte Methode</h2>
6340<p>Zwei Wege führen zum selben Ergebnis.</p>
6341<p>Die <strong>direkte Methode</strong> addiert die erwarteten Ein- und Auszahlungen unmittelbar, meist au
6341s den offenen Posten der Debitoren und Kreditoren zuzüglich einer Planung der Fixkosten. Sie ist auf kurze Sicht genau und bildet die Grundlage einer <a href="/de/artikel/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening">13-Wochen-Cashflow-Planung</a>.</p>
6342<p>Die <strong>indirekte Methode</strong> geht vom geplanten Ergebnis aus und korrigiert um Abschreibungen sowie um die Bewegungen der Bilanzpositionen. Dieser Weg passt zu einem Horizont von einem Jahr oder länger, weil er unmittelbar am Ergebnis- und Bilanzplan hängt. Smartbooks ermittelt den Cashflow auf genau diese Weise: Gewinn- und Verlustrechnung sowie Bilanz werden geplant, das Ergebnis fließt über die Gewinnrücklage in das Eigenkapital, und die liquiden Mittel bilden die Ausgleichsposition aller übrigen Bilanzbewegungen. Debitoren und Kreditoren lassen sich an eine DSO- oder DPO-Kennzahl koppeln, sodass das Working Capital automatisch mitläuft. Jede Änderung der Annahmen wirkt damit direkt in der Liquiditätsplanung.</p>
6343<h2>Rechenbeispiel</h2>
6344<p>Ein Handelsunternehmen mit einem Kontokorrentkredit von &euro; 250.000 plant das erste Quartal wie folgt.</p>
6345<table>
6346<thead><tr><th>Position</th><th>Januar</th><th>Februar</th><th>März</th></tr></thead>
6347<tbody>
6348<tr><td>Anfangsbestand</td><td>&euro; 250.000</td><td>&euro; 300.000</td><td>&euro; 255.000</td></tr>
6349<tr><td>Einzahlungen Debitoren</td><td>&euro; 480.000</td><td>&euro; 410.000</td><td>&euro; 445.000</td></tr>
6350<tr><td>Operative Auszahlungen</td><td>&euro; 430.000</td><td>&euro; 455.000</td><td>&euro; 374.000</td></tr>
6351<tr><td>Umsatzsteuervorauszahlung</td><td>&ndash;</td><td>&ndash;</td><td>&euro; 96.000</td></tr>
6352<tr><td>Investition</td><td>&ndash;</td><td>&ndash;</td><td>&euro; 120.000</td></tr>
6353<tr><td><strong>Endbestand</strong></td><td><strong>&euro; 300.000</strong></td><td><strong>&euro; 255.000</strong></td><td><strong>&euro; 110.000</strong></td></tr>
6354</tbody>
6355</table>
6356<p>Über das Quartal verlassen per saldo &euro; 140.000 mehr das Konto, als eingehen, während der Ergebnisplan einen Gewinn ausweist. Der Unterschied liegt in der Umsatzsteuervorauszahlung von &euro; 96.000 und der Investition von &euro; 120.000: zwei Positionen, die das Ergebnis kaum berühren. Der Tiefpunkt von &euro; 110.000 bleibt innerhalb des Kreditrahmens, doch der Abstand ist gering genug, um die Investition um einen Monat zu verschieben.</p>
6357<h2>Wann ist die Liquiditätsplanung gut genug?</h2>
6358<p>Einen Richtwert wie bei der Current Ratio gibt es nicht, wohl aber drei Maßstäbe, die sich in der Praxis bewähren.</p>
6359<ul>
6360<li><strong>Der Tiefpunkt zählt, nicht der Endbestand.</strong> Ein Jahr, das bei &euro; 250.000 beginnt und endet, sagt nichts aus, wenn die Reihe dazwischen unter null fällt.</li>
6361<li><strong>Der Puffer.</strong> Üblich sind ein bis zwei Monate fixer Auszahlungen als frei verfügbare Reserve. Kapitalintensive und projektgetriebene Unternehmen brauchen mehr, Abonnementmodelle mit Vorauszahlung weniger.</li>
6362<li><strong>Die Abweichung gegenüber den Ist-Zahlen.</strong> Rund 5% auf vier Wochen und 10% auf dreizehn Wochen sind praktikabel. Dauerhaft mehr bedeutet, dass die Annahmen zum Zahlungsverhalten falsch sind, und nicht, dass der Plan zu knapp kalkuliert war.</li>
6363</ul>
6364<p>Prüfen Sie das Ergebnis zusätzlich gegen die eigene Kreditdokumentation. Covenants unterscheiden sich nach Bank und Finanzierungsrunde, eine allgemeine Faustregel dazu gibt es nicht. Rechnen Sie mindestens ein Basisszenario und ein Szenario, in dem der Umsatz 15% niedriger ausfällt und der DSO um zehn Tage steigt.</p>
6365<h2>Typische Fallstricke</h2>
6366<ul>
6367<li><strong>Umsatz als Einzahlung buchen.</strong> Die Rechnung aus Januar ist die Einzahlung im März. Ohne Zahlungsziel pro Kundengruppe verschiebt sich das gesamte Bild um einen Monat oder mehr.</li>
6368<li><strong>Steuern vergessen.</strong> Umsatzsteuer, Lohnsteuer und die Körperschaftsteuerveranlagung ergeben sich nicht aus dem Ergebnisplan, gehören aber zu den größten Einzelauszahlungen des Quartals.</li>
6369<li><strong>Ein Saldo für die gesamte Gruppe.</strong> Liquidität in einer ausländischen Tochter steht nicht frei zur Verfügung, solange kein Cash Pool besteht oder Ausschüttungsbeschränkungen gelten. Erst pro Gesellschaft planen, dann addieren.</li>
6370<li><strong>Nie zurückblicken.</strong> Ohne monatlichen Abgleich von Plan und Ist bleibt das Zahlungsverhalten der Kunden und des eigenen Hauses eine Vermutung.</li>
6371<li><strong>Ein zu grobes Raster.</strong> Eine Monatsbetrachtung verbirgt, dass die Löhne am 25. abfließen und die große Kundenzahlung erst am 5. des Folgemonats eingeht.</li>
6372</ul>
6373<h2>Häufig gestellte Fragen</h2>
6374<h3>Was ist der Unterschied zwischen Liquiditätsplanung und Ergebnisplanung?</h3>
6375<p>Der Ergebnisplan ordnet Erträge und Aufwendungen der Periode zu, in die sie gehören; geplant wird hier der Zeitpunkt, zu dem das Geld tatsächlich fließt. Die Abschreibung steht im ersten Rechenwerk und nicht im zweiten, eine Tilgung oder Umsatzsteuerzahlung genau umgekehrt.</p>
6376<h3>Wie weit im Voraus sollte geplant werden?</h3>
6377<p>Zwei Horizonte nebeneinander funktionieren am besten: dreizehn Wochen auf Wochenbasis für die operative Steuerung und zwölf Monate auf Monatsbasis für Finanzierungs- und Investitionsentscheidungen. Die Wochenversion steuert, die Monatsversion begründet.</p>
6378<h3>Wie oft sollte aktualisiert werden?</h3>
6379<p>Wöchentlich für den kurzen Horizont, monatlich zum Abschluss für den langen. Wichtiger als die Frequenz ist, jede Version neben die Ist-Zahlen zu legen; daran zeigt sich, wie belastbar die Annahmen zu den Zahlungszielen wirklich sind.</p>
6380<h3>Reicht Excel dafür aus?</h3>
6381<p>Für eine einzelne Gesellschaft durchaus. Bei mehreren Gesellschaften, Fremdwährungen oder einem monatlichen Abgleich mit der Buchhaltung stößt die Tabelle an ihre Grenzen: die Verbindung zu den offenen Posten fehlt, und jede Version bleibt Handarbeit, die erneut geprüft werden muss.</p>
6382<p>Fangen Sie klein an: dreizehn Wochen, eine Gesellschaft, drei Zeilen Einzahlungen und sechs Zeilen Auszahlungen, und legen Sie jede Woche die Vorversion neben die Kontobewegungen. Damit die Liquiditätsplanung anschließend mit Budget und Forec
6382ast mitläuft, statt separat gepflegt zu werden, lesen Sie zuerst <a href="/de/artikel/het-verschil-tussen-plannen-budgetteren-en-forecasten">den Unterschied zwischen Planung, Budgetierung und Forecasting</a> und sehen Sie danach, wie <a href="/de/funktionen/cashflow-planung">Budgetierung und Cashflow-Planung</a> in einem Modell zusammenkommen.</p>`,I6=`---json
6383{
6384  "title": "Cash Budget: Structure, Formula and a Worked Example",
6385  "slug": "cash-budget",
6386  "metaTitle": "Cash Budget: Formula, Structure and Example",
6387  "date": "2026-08-26 10:00:00",
6388  "category": "Articles",
6389  "tags": [
6390    "Budgeting",
6391    "Forecasting",
6392    "Cash Flow"
6393  ],
6394  "excerpt": "Building a cash budget: the formula, the six steps, a monthly worked example and the pitfalls that quietly distort the picture.",
6395  "originalUrl": ""
6396}
6397---
6398<p>A <strong>cash budget</strong> sets out every expected receipt and payment per period, so the closing bank balance of each week or month is known before it arrives. The arithmetic is trivial: opening balance plus receipts minus payments. The difficulty sits in the timing, never in the formula.</p>
6399<p>For a controller this answers a different question than the profit plan does. A company can plan a profitable year and still run tight in March, because the VAT payment, the holiday allowance and a replacement investment all land in the same weeks. Profit is an accounting concept that allocates income and expense to the peri
6399od they belong to; liquidity is a date on a bank statement.</p>
6400<h2>What a cash budget is, and what it is not</h2>
6401<p>This plan covers money movements, not performance. That makes it fundamentally different from the two documents it gets confused with most often:</p>
6402<ul>
6403<li><strong>The profit and loss budget</strong> plans revenue and cost in the period they are earned or consumed. Depreciation appears in it; the payment for the machine does not.</li>
6404<li><strong>The cash flow statement</strong> explains after the fact how the balance changed. It looks back; a cash budget looks forward.</li>
6405</ul>
6406<p>The bridge between the two is working capital: revenue growth entirely on credit raises profit and lowers the bank balance. The mechanics behind that are set out in <a href="/en/articles/working-capital">calculating working capital</a>.</p>
6407<h2>How to build a cash budget</h2>
6408<p><strong>Closing balance = opening balance + expected receipts &minus; expected payments</strong></p>
6409<p>You repeat that formula per period, where the closing balance of one period becomes the opening balance of the next. In practice, building the schedule takes six steps:</p>
6410<ol>
6411<li>Pick the interval and the horizon: weekly for twelve to thirteen weeks, monthly for twelve months. An annual plan in quarters hides exactly the peaks that matter.</li>
6412<li>Fix the opening balance: the bank balances of every entity plus the headroom left in the overdraft facility.</li>
6413<li>Convert the revenue plan into receipts using a payment term. At a DSO of 45 days, January revenue mostly arrives in March.</li>
6414<li>Convert the cost plan into payments and give each cost type its own rhythm: payroll around the 25th, suppliers at 30 days, rent quarterly in advance.</li>
6415<li>Add the items that never appear in a profit plan: VAT, payroll tax, corporate income tax, loan repayments, capital expenditure, dividends and holiday allowance.</li>
6416<li>Set the result against your credit headroom and against the covenants agreed with the bank.</li>
6417</ol>
6418<h2>Direct or indirect method</h2>
6419<p>Two routes lead to the same figure.</p>
6420<p>The <strong>direct method</strong> adds up expected receipts and payments themselves, usually from open receivables and payables plus a schedule of fixed costs. It is accurate over a short horizon and forms the basis of a <a href="/en/articles/13-week-cashflow-planning-peace-of-mind">13-week cash flow plan</a>.</p>
6421<p>The <strong>indirect method</strong> starts from the budgeted result and corrects for depreciation and for movements in balance sheet positions. That route suits a horizon of a year or longer, because it hangs directly off your profit and balance sheet plan. Smartbooks derives cash flow this way: you plan the profit and loss statement and the balance sheet, let the result flow into equity through the profit reserves, and make liquid assets the balancing item for all other balance sheet movements. Receivables and payables can be driven by a DSO or DPO metric, so working capital moves along with the plan automatically. Every change in the assumptions then feeds straight through to the cash budget.</p>
6422<h2>Worked example</h2>
6423<p>A trading company with a &euro; 250,000 overdraft facility plans the first quarter as follows.</p>
6424<table>
6425<thead><tr><th>Item</th><th>January</th><th>February</th><th>March</th></tr></thead>
6426<tbody>
6427<tr><td>Opening balance</td><td>&euro; 250,000</td><td>&euro; 300,000</td><td>&euro; 255,000</td></tr>
6428<tr><td>Receipts from customers</td><td>&euro; 480,000</td><td>&euro; 410,000</td><td>&euro; 445,000</td></tr>
6429<tr><td>Operating payments</td><td>&euro; 430,000</td><td>&euro; 455,000</td><td>&euro; 374,000</td></tr>
6430<tr><td>VAT payment</td><td>&ndash;</td><td>&ndash;</td><td>&euro; 96,000</td></tr>
6431<tr><td>Capital expenditure</td><td>&ndash;</td><td>&ndash;</td><td>&euro; 120,000</td></tr>
6432<tr><td><strong>Closing balance</strong></td><td><strong>&euro; 300,000</strong></td><td><strong>&euro; 255,000</strong></td><td><strong>&euro; 110,000</strong></td></tr>
6433</tbody>
6434</table>
6435<p>Across the quarter, &euro; 140,000 more leaves the account than comes in, while the profit plan shows a gain. The difference sits in the &euro; 96,000 VAT payment and the &euro; 120,000 investment: two items that barely touch the result. The low point of &euro; 110,000 stays inside the facility, though the margin is thin enough to consider moving the investment out by a month.</p>
6436<h2>When is the outcome good enough?</h2>
6437<p>There is no benchmark of the kind that exists for the current ratio, but three measures work in practice.</p>
6438<ul>
6439<li><strong>The low point counts, not the closing balance.</strong> A year that starts and ends at &euro; 250,000 tells you nothing if the series dips through zero along the way.</li>
6440<li><strong>The buffer.</strong> One to two months of fixed outgoings, freely available, is the common guideline. Capital-intensive and project-driven firms need more; subscription models billed in advance need less.</li>
6441<li><strong>The variance against actuals.</strong> Within roughly 5% over four weeks and 10% over thirteen weeks is workable. Structurally more than that means your assumptions on payment behaviour are wrong, not that the plan was too tight.</li>
6442</ul>
6443<p>Test the outcome against your own loan documentation as well. Covenants differ per bank and per financing round, so no general rule of thumb applies. Run at least a base case alongside a scenario in which revenue falls 15% 
6443short and DSO stretches by ten days.</p>
6444<h2>Pitfalls</h2>
6445<ul>
6446<li><strong>Treating revenue as a receipt.</strong> The January invoice is the March receipt. Without a payment term per customer group, the whole picture shifts forward by a month or more.</li>
6447<li><strong>Forgetting taxes.</strong> VAT, payroll tax and the corporate income tax assessment do not fall out of the profit plan, yet they are the largest single payments of the quarter.</li>
6448<li><strong>One balance for an entire group.</strong> Cash held in a foreign subsidiary is not freely available while there is no cash pool or while dividend restrictions apply. Plan per entity and only then add up.</li>
6449<li><strong>Never looking back.</strong> Without a monthly comparison of plan against actuals, you keep guessing at your own payment behaviour and that of your customers.</li>
6450<li><strong>Too coarse a grid.</strong> A monthly view hides that payroll leaves on the 25th while the large customer payment only arrives on the 5th of the following month.</li>
6451</ul>
6452<h2>Frequently asked questions</h2>
6453<h3>What is the difference between a cash budget and a profit plan?</h3>
6454<p>
6454The profit plan allocates income and expense to the period they belong to; the cash budget plans the moment money actually moves. Depreciation sits in the first and not in the second; a loan repayment or a VAT payment the other way round.</p>
6455<h3>How far ahead should the plan run?</h3>
6456<p>Two horizons side by side work best: thirteen weeks on a weekly grid for operational steering, and twelve months on a monthly grid for financing and investment decisions. The weekly version steers, the monthly version substantiates.</p>
6457<h3>How often should it be updated?</h3>
6458<p>Weekly for the short horizon, monthly at the close for the long one. More important than the frequency is that each round places the previous version next to actuals; that is where you learn how reliable your payment term assumptions really are.</p>
6459<h3>Can it be done in Excel?</h3>
6460<p>For a single entity, fine. With several entities, foreign currencies or a monthly reconciliation to the ledger it breaks down: the link to open items is missing, and every version is manual work that has to be checked again.</p>
6461<p>Start small: thirteen weeks, one entity, three receipt lines and six payment lines, and place the previous version next to the bank statements each week. To make the schedule move with budget and forecast rather than maintaining it separately, read <a href="/en/articles/the-difference-between-planning-budgeting-and-forecasting">the difference between planning, budgeting and forecasting</a> first, then look at how <a href="/en/functionalities/cashflow-planning">budgeting and cash flow planning</a> come together in one model.</p>`,P6=`---json
6462{
6463  "title": "Liquiditeitsbegroting maken: opbouw, formule en voorbeeld",
6464  "slug": "liquiditeitsbegroting-maken",
6465  "metaTitle": "Liquiditeitsbegroting maken: formule en voorbeeld",
6466  "date": "2026-08-26 10:00:00",
6467  "category": "Articles",
6468  "tags": [
6469    "Budgetteren",
6470    "Forecast",
6471    "Cashflow"
6472  ],
6473  "excerpt": "Een liquiditeitsbegroting maken: de formule, de zes stappen, een rekenvoorbeeld per maand en de valkuilen die het beeld stilletjes vertekenen.",
6474  "originalUrl": "",
6475  "enSlug": "cash-budget"
6476}
6477---
6478<p>Een <strong>liquiditeitsbegroting</strong> is een overzicht per periode van alle verwachte ontvangsten en uitgaven, waarmee je vooraf ziet wat het banksaldo aan het eind van elke week of maand is. De rekensom zelf is triviaal: beginsaldo plus ontvangsten minus uitgaven. De moeilijkheid zit in de timing, nooit in de formule.</p>
6479<p>Voor een controller beantwoordt dit een andere vraag dan de resultaatbegroting. Een onderneming kan een winstgevend jaar begroten en in maart alsnog krap zitten, omdat de btw-afdracht, het vakantiegeld en een vervangingsinvestering in dezelfde weken vallen. Winst is een boekhoudkundig begrip dat opbrengsten en kosten toerekent aan de periode waarin ze thuishoren; liquiditeit is een datum op een bankafschrift.</p>
6480<h2>Wat een liquiditeitsbegroting wel en niet is</h2>
6481<p>Deze begroting plant geldstromen, geen prestaties. Dat maakt haar wezenlijk anders dan de twee stukken waarmee ze het vaakst wordt verward:</p>
6482<ul>
6483<li><strong>De resultaatbegroting</strong> plant omzet en kosten in de periode waarin ze verdiend of verbruikt worden. De afschrijving staat erin, de betaling van de machine niet.</li>
6484<li><strong>Het kasstroomoverzicht</strong> verklaart achteraf hoe het saldo is veranderd. Het kijkt terug; een liquiditeitsbegroting kijkt vooruit.</li>
6485</ul>
6486<p>De brug tussen beide is het werkkapitaal: omzetgroei die volledig op rekening gaat, verhoogt de winst en verlaagt het banksaldo. De mechaniek daarachter staat in <a href="/artikelen/werkkapitaal-berekenen">werkkapitaal berekenen</a>.</p>
6487<h2>De opbouw van een liquiditeitsbegroting</h2>
6488<p><strong>Eindsaldo = beginsaldo + verwachte ontvangsten &minus; verwachte uitgaven</strong></p>
6489<p>Die formule herhaal je per periode, waarbij het eindsaldo van de ene periode het beginsaldo van de volgende wordt. In de praktijk zet je een liquiditeitsbegroting in zes stappen op:</p>
6490<ol>
6491<li>Kies interval en horizon: wekelijks voor twaalf tot dertien weken, maandelijks voor twaalf maanden. Een jaarplan per kwartaal verbergt precies de pieken waar het om gaat.</li>
6492<li>Leg het beginsaldo vast: de banksaldi van alle entiteiten plus de vrije ruimte in het rekening-courantkrediet.</li>
6493<li>Vertaal de omzetbegroting naar ontvangsten met een betalingstermijn. Bij een DSO van 45 dagen komt de omzet van januari grotendeels in maart binnen.</li>
6494<li>Vertaal de kostenbegroting naar uitgaven en geef elke kostensoort een eigen ritme: salarissen rond de 25e, crediteuren op 30 dagen, huur per kwartaal vooruit.</li>
6495<li>Voeg de posten toe die nooit in een resultaatbegroting staan: btw, loonheffing, vennootschapsbelasting, aflossingen, investeringen, dividend en vakantiegeld.</li>
6496<li>Zet de uitkomst af tegen je kredietruimte en tegen de convenanten die met de bank zijn afgesproken.</li>
6497</ol>
6498<h2>Direct of indirect opstellen</h2>
6499<p>
6499Twee routes leiden naar dezelfde uitkomst.</p>
6500<p>De <strong>directe methode</strong> telt de verwachte ontvangsten en betalingen zelf op, meestal vanuit de openstaande posten van debiteuren en crediteuren plus een planning van de vaste lasten. Die methode is nauwkeurig op korte termijn en het uitgangspunt van een <a href="/artikelen/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening">13-weken cashflowplanning</a>.</p>
6501<p>De <strong>indirecte methode</strong> vertrekt vanuit het begrote resultaat en corrigeert voor afschrijvingen en voor de mutaties in de balansposten. Die route past beter bij een horizon van een jaar of langer, omdat ze rechtstreeks aan je resultaat- en balansbegroting hangt. Smartbooks rekent de kasstroom langs deze weg: je plant de winst-en-verliesrekening en de balans, laat het resultaat via de winstreserve in het eigen vermogen landen en maakt de liquide middelen de sluitpost van alle overige balansmutaties. Debiteuren en crediteuren kun je aan een DSO- of DPO-metric hangen, zodat het werkkapitaal automatisch meebeweegt met het plan. Elke wijziging in de aannames werkt dan direct door in de liquiditeitsbegroting.</p>
6502<h2>Rekenvoorbeeld</h2>
6503<p>Een handelsonderneming met een rekening-courantkrediet van &euro; 250.000 begroot het eerste kwartaal als volgt.</p>
6504<table>
6505<thead><tr><th>Post</th><th>Januari</th><th>Februari</th><th>Maart</th></tr></thead>
6506<tbody>
6507<tr><td>Beginsaldo</td><td>&euro; 250.000</td><td>&euro; 300.000</td><td>&euro; 255.000</td></tr>
6508<tr><td>Ontvangsten debiteuren</td><td>&euro; 480.000</td><td>&euro; 410.000</td><td>&euro; 445.000</td></tr>
6509<tr><td>Operationele uitgaven</td><td>&euro; 430.000</td><td>&euro; 455.000</td><td>&euro; 374.000</td></tr>
6510<tr><td>Btw-afdracht</td><td>&ndash;</td><td>&ndash;</td><td>&euro; 96.000</td></tr>
6511<tr><td>Investering</td><td>&ndash;</td><td>&ndash;</td><td>&euro; 120.000</td></tr>
6512<tr><td><strong>Eindsaldo</strong></td><td><strong>&euro; 300.000</strong></td><td><strong>&euro; 255.000</strong></td><td><strong>&euro; 110.000</strong></td></tr>
6513</tbody>
6514</table>
6515<p>Over het kwartaal gaat er per saldo &euro; 140.000 meer uit dan er binnenkomt, terwijl de resultaatbegroting winst laat zien. Het verschil zit in de btw-afdracht van &euro; 96.000 en de investering van &euro; 120.000: twee posten die het resultaat nauwelijks raken. Het dieptepunt van &euro; 110.000 blijft binnen het krediet, maar de marge is dun genoeg om te overwegen de investering een maand op te schuiven.</p>
6516<h2>Wanneer is de uitkomst goed genoeg?</h2>
6517<p>Er bestaat geen norm zoals bij de current ratio, maar er zijn drie maatstaven die in de praktijk werken.</p>
6518<ul>
6519<li><strong>Het laagste punt telt, niet het eindsaldo.</strong> Een jaar dat begint en eindigt op &euro; 250.000 zegt niets als de reeks daartussen door nul zakt.</li>
6520<li><strong>De buffer.</strong> Gangbaar is een vrij beschikbare buffer van een tot twee maanden vaste uitgaven. Kapitaalintensieve en projectgedreven bedrijven hebben meer nodig; abonnementsmodellen met vooruitbetaling minder.</li>
6521<li><strong>De afwijking ten opzichte van de realisatie.</strong> Binnen zo'n 5% op vier weken en 10% op dertien weken is werkbaar. Structureel meer betekent dat je aannames over betaalgedrag niet kloppen, niet dat de begroting te krap staat.</li>
6522</ul>
6523<p>Toets de uitkomst daarnaast altijd tegen je eigen leningdocumentatie. Convenanten verschillen per bank en per financieringsronde; een algemene vuistregel bestaat er niet. Werk minstens met een basisscenario en een scenario waarin de omzet 15% lager uitvalt en de DSO tien dagen oploopt.</p>
6524<h2>Valkuilen</h2>
6525<ul>
6526<li><strong>Omzet als ontvangst boeken.</strong> De factuur van januari is de ontvangst van maart. Zonder betalingstermijn per klantgroep schuift het hele beeld een maand of meer op.</li>
6527<li><strong>Belastingen vergeten.</strong> Btw-afdracht, loonheffing en de aanslag vennootschapsbelasting komen niet uit de resultaatbegroting rollen en zijn juist de grootste losse uitgaven van het kwartaal.</li>
6528<li><strong>Eén saldo voor een hele groep.</strong> Kas in een buitenlandse dochter is niet vrij beschikbaar zolang er geen cashpo
6528ol ligt of er dividendrestricties gelden. Begroot per entiteit en tel daarna pas op.</li>
6529<li><strong>Nooit terugkijken.</strong> Zonder maandelijkse vergelijking van begroot en werkelijk blijf je gissen naar je eigen betaalgedrag en dat van je klanten.</li>
6530<li><strong>Een te grof raster.</strong> Een maandbegroting verbergt dat de salarissen op de 25e vertrekken en de grote klantbetaling pas op de 5e van de maand daarna binnenkomt.</li>
6531</ul>
6532<h2>Veelgestelde vragen</h2>
6533<h3>Wat is het verschil tussen een liquiditeitsbegroting en een resultaatbegroting?</h3>
6534<p>De resultaatbegroting plant opbrengsten en kosten in de periode waarin ze horen; de liquiditeitsbegroting plant het moment waarop het geld werkelijk beweegt. Afschrijving zit wel in de eerste en niet in de tweede; een aflossing of een btw-afdracht precies andersom.</p>
6535<h3>Hoe ver vooruit moet je begroten?</h3>
6536<p>Twee horizonnen naast elkaar werken het best: dertien weken op weekbasis voor de operationele sturing, en twaalf maanden op maandbasis voor financierings- en investeringsbeslissingen. De weekversie stuurt, de maandversie onderbouwt.</p>
6537<h3>Hoe vaak moet je hem bijwerken?</h3>
6538<p>Wekelijks voor de korte horizon, maandelijks bij de afsluiting voor de lange. Belangrijker dan de frequentie is dat je elke keer de vorige versie naast de realisatie legt; daar leer je hoe betrouwbaar je aannames over betaaltermijnen werkelijk zijn.</p>
6539<h3>Kan het in Excel?</h3>
6540<p>Voor één entiteit prima. Bij meerdere entiteiten, vreemde valuta of een maandelijkse aansluiting op de administratie loopt het spaak: de koppeling met de openstaande posten ontbreekt, en elke versie is handwerk dat opnieuw gecontroleerd moet worden.</p>
6541<p>Begin klein: dertien weken, één entiteit, drie regels ontvangsten en zes regels uitgaven, en leg elke week de vorige versie naast de bankmutaties. Wil je de begroting daarna laten meebewegen met budget en forecast in plaats van haar apart te onderhouden, lees dan eerst <a href="/artikelen/het-verschil-tussen-plannen-budgetteren-en-forecasten">het verschil tussen plannen, budgetteren en forecasten</a> en bekijk daarna hoe <a href="/functionaliteiten/budgetteren-cashflow">budgetteren en cashflowplanning</a> in één model samenkomen.</p>`,T6=`---json
6542{
6543  "title": "Monatsabschluss-Demo – 3:30 Min",
6544  "slug": "maandafsluiting-demo",
6545  "metaTitle": "Monatsabschluss-Demo: schneller abschließen (Video)",
6546  "date": "2024-10-08 12:33:11",
6547  "category": "Videos",
6548  "tags": [
6549    "Analyse",
6550    "Monatsabschluss"
6551  ],
6552  "excerpt": "Monatsabschluss-Demo: sehen Sie, wie Smartbooks den Monatsabschluss in gut 3 Minuten einfacher und schneller macht.",
6553  "originalUrl": "https://smartbooks.ai/videos/maandafsluiting-demo/",
6554  "meta": null
6555}
6556---
6557<p>Diese Monatsabschluss-Demo zeigt in gut 3 Minuten, wie Smartbooks den Monatsabschluss einfacher und schneller macht.</p>
6558
6559<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/Maandafsluiten.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Maandafsluiten%20Demo.mp4"></video></figure>`,D6=`---json
6560{
6561  "title": "Month-end closing demo - 3:30 min",
6562  "metaTitle": "Month-End Close Demo: Faster Closing (Video)",
6563  "slug": "month-end-closing-demo",
6564  "date": "",
6565  "category": "Videos",
6566  "tags": [
6567    "Month-end closing",
6568    "Financial automation",
6569    "SaaS demo",
6570    "Accounting software"
6571  ],
6572  "excerpt": "Month-end close demo: watch how Smartbooks makes the month-end closing process easier and faster.",
6573  "originalUrl": "",
6574  "meta": {
6575    "type_bedrijf": "Financial Services",
6576    "logo_bedrijf": "smartbooks-logo.png"
6577  }
6578}
6579---
6580<figure class="wp-block-video"><video controls src="https://example.com/demo.mp4"></video></figure><p>In this video, we demonstrate how our platform automates complex financial reconciliations, ensuring a seamless month-end close. Discover how Smartbooks reduces manual tasks and increases accuracy for finance teams.</p>`,B6=`---json
6581{
6582  "title": "Maandafsluiten demo - 3:30 min",
6583  "metaTitle": "Maandafsluiten demo: sneller afsluiten (video)",
6584  "slug": "maandafsluiting-demo",
6585  "order": 19,
6586  "date": "2024-10-08 12:33:11",
6587  "category": "Videos",
6588  "tags": [
6589    "Analyseren",
6590    "Maandafsluiting"
6591  ],
6592  "excerpt": "Maandafsluiten demo: bekijk hoe Smartbooks de maandafsluiting in ruim 3 minuten makkelijker en sneller maakt.",
6593  "originalUrl": "https://smartbooks.ai/videos/maandafsluiting-demo/",
6594  "meta": null,
6595  "enSlug": "month-end-closing-demo"
6596}
6597---
6598<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/Maandafsluiten.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Maandafsluiten%20Demo.mp4"></video></figure>
6599
6600
6601
6602<p></p>
6603
6604
6605
6606
6607<div class="wp-block-kadence-column kadence-column2622_05753d-46"><div class="kt-inside-inner-col">
6608<figure class="wp-block-kadence-image kb-image2622_5a7d0a-b7 size-full kb-image-is-ratio-size"><div class="kb-is-ratio-image kb-image-ratio-land43"><img src="https://smartbooks.ai/wp-content/uploads/2023/12/shutterstock_1919479694.jpg" alt="" class="kb-img wp-image-1108"/></div></figure>
6609</div></div>
6610
6611
6612
6613<div class="wp-block-kadence-column kadence-column2622_59576e-23"><div class="kt-inside-inner-col">
6614<p class="has-medium-font-size">Bekijk het on-demand webinar:</p>
6615
6616
6617
6618<h2 class="kt-adv-heading2622_1a86aa-94 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2622_1a86aa-94">'Rapporteren, plannen en consolideren in 20% van de tijd'</h2>
6619
6620
6621
6622<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns2622_eb0cbe-5a"></div>
6623</div></div>`,M6=`---json
6624{
6625  "title": "Monatsabschluss",
6626  "slug": "maandafsluiting",
6627  "metaTitle": "Monatsabschluss: Soft, Hard, Fast oder No Close?",
6628  "date": "2024-11-05 12:39:00",
6629  "category": "Articles",
6630  "tags": [],
6631  "excerpt": "Monatsabschluss: Soft Close, Hard Close, Fast Close und No Close im Vergleich — welche Methode passt zu Ihrer Organisation?",
6632  "originalUrl": "https://smartbooks.ai/artikelen/maandafsluiting/",
6633  "meta": null
6634}
6635---
6636<p><strong>Wie geht Ihre Organisation mit dem periodischen Monatsabschluss um? Soft Close, Hard Close, Fast Close — oder lieber No Close?</strong></p>
6637
6638<p>Der monatliche Abschluss der Buchhaltung ist ein zentraler Baustein für Finanztransparenz und Kontrolle. Unternehmen können unter verschiedenen Methoden wählen — jede mit spezifischen Vor- und Nachteilen.</p>
6639
6640<ul>
6641<li>Ein <strong>Soft Close</strong> liefert einen schnellen, vorläufigen Blick auf die Zahlen, ohne dass jede Position vollständig geprüft wird. Korrekturen in Vorperioden bleiben möglich.</li>
6642<li>Der <strong>Hard Close</strong> fokussiert auf Genauigkeit und Verlässlichkeit — wichtig für externes Reporting. Perioden werden endgültig geschlossen, Korrekturen wandern in die Folgeperiode.</li>
6643<li>Einige Organisationen wählen <strong>No Close</strong> und überspringen den Monatsabschluss, um Zeit zu sparen. Das erhöht jedoch den Aufwand beim Jahresabschluss deutlich.</li>
6644<li>Der <strong>Fast Close</strong> kombiniert Schnelligkeit mit hoher Genauigkeit. Er verlangt gut optimierte Prozesse, Systeme und ein erfahrenes Finance-Team.</li>
6645</ul>
6646
6647<h3><strong>Soft Close</strong></h3>
6648<p>Beim Soft Close werden die Bücher vorläufig geschlossen, um schnell Einblick in die Finanzlage zu bekommen. Nicht alle Positionen müssen abschließend geprüft sein.</p>
6649<p><strong>Vorteil:</strong> Schnelle Einblicke ohne große Belastung der Administration.<br><strong>Nachteil:</strong> Ungenauigkeiten können vorhanden sein — Risiken, wenn Entscheidungen darauf basieren.</p>
6650
6651<h3><strong>Hard Close</strong></h3>
6652<p>Beim Hard Close wird der Monat vollständig geschlossen, alle Buchungen sind geprüft und verifiziert. Die Zahlen sind final und für externes Reporting bestimmt.</p>
6653<p><strong>Vorteil:</strong> Genauigkeit und Verlässlichkeit — essenziell für Reporting und Audits.<br><strong>Nachteil:</strong> Zeitaufwendig, besonders wenn Korrekturen oder komplexe Buchungen anfallen.</p>
6654
6655<h3><strong>Fast Close</strong></h3>
6656<p>Ein Fast Close bringt schnellen, aber verlässlichen Abschluss durch Automatisierung und Prozessoptimierung. Börsennotierte Unternehmen verfolgen häufig einen Fast Close, um Investoren zeitnah zu informieren — viele streben Zahlen zum 5. Werktag des Folgemonats an.</p>
6657<p><strong>Vorteil:</strong> Schneller Zugriff auf belastbare Zahlen — spart Zeit und beschleunigt Entscheidungen. Schafft Vertrauen bei Investoren.<br><strong>Nachteil:</strong> Setzt gestraffte Prozesse, Technologieinvestitionen und ausgeprägte Finance-Kompetenz voraus.</p>
6658
6659<h3><strong>No Close</strong></h3>
6660<p>Manche Unternehmen überspringen den Monatsabschluss — meist aus operativen Gründen oder weil monatlicher Blick auf die Zahlen nicht als nötig gesehen wird.</p>
6661<p><strong>Vorteil:</strong> Spart Zeit und senkt die administrative Last unterjährig.<br><strong>Nachteil:</strong> Monatliche Performance ist schwer zu bewerten und zu steuern. Die Buchhaltung kann chaotisch werden, der Jahresabschluss deutlich aufwendiger.</p>
6662
6663<hr />
6664
6665<blockquote>
6666<p>Welche Methode Sie auch wählen: Smartbooks unterstützt sämtliche Ausprägungen des Monatsabschlusses. Als Finance-Profis würden wir No Close jedoch nicht empfehlen.</p>
6667</blockquote>`,F6=`---json
6668{
6669  "title": "Month-End Closing",
6670  "metaTitle": "Month-End Close: Soft, Hard, Fast or No Close?",
6671  "slug": "month-end-closing",
6672  "date": "",
6673  "category": "Articles",
6674  "tags": [
6675    "Accounting",
6676    "Financial Management",
6677    "Month-End Closing",
6678    "Reporting"
6679  ],
6680  "excerpt": "Month-end close: compare soft close, hard close, fast close and no close, and find out which closing method best fits your organization.",
6681  "originalUrl": "",
6682  "meta": {
6683    "type_bedrijf": "Financial Services"
6684  }
6685}
6686---
6687<p><strong>
6687How does your organization handle the periodic tasks surrounding the month-end close? Do you opt for a soft close, hard close, fast close, or would you rather skip the month-end closing altogether?</strong></p>
6688
6689<p>Closing the monthly accounts is a crucial step for financial transparency and control within an organization. Companies can choose from various closing methods, each with specific advantages and disadvantages.</p>
6690
6691<ul class="`,R6=`---json
6692{
6693  "title": "Maandafsluiting",
6694  "metaTitle": "Maandafsluiting: soft, hard, fast of no close?",
6695  "slug": "maandafsluiting",
6696  "order": 15,
6697  "date": "2024-11-05 12:39:00",
6698  "category": "Articles",
6699  "tags": [],
6700  "excerpt": "Maandafsluiting: vergelijk soft close, hard close, fast close en no close en ontdek welke afsluitmethode het beste past bij jouw organisatie.",
6701  "originalUrl": "https://smartbooks.ai/artikelen/maandafsluiting/",
6702  "meta": null,
6703  "enSlug": "month-end-closing"
6704}
6705---
6706<p><strong>Hoe pakt jouw organisatie de periodieke werkzaamheden rondom de maandafsluiting aan? Kies je voor een soft close, hard close, fast close, of sla je de maandafsluiting liever over?</strong></p>
6707
6708
6709
6710<p>Het maandelijkse afsluiten van de boekhouding is een cruciale stap voor financiële transparantie en controle binnen een organisatie. Bedrijven kunnen kiezen uit verschillende afsluitmethoden, elk met specifieke voor- en nadelen.</p>
6711
6712
6713
6714<ul class="wp-block-list">
6715<li>Een <strong>Soft Close</strong> biedt een snelle, voorlopige kijk op de cijfers, zonder dat elke post volledig wordt gecontroleerd. Je kunt dan ook nog correcties doorvoeren in vorige periodes.</li>
6716
6717
6718
6719<li>De <strong>Hard Close</strong> richt zich juist op nauwkeurigheid en betrouwbaarheid, wat vooral belangrijk is voor externe rapportages. Periodes worden dan ook echt afgesloten en eventuele correcties worden in de volgende periode geboekt.</li>
6720
6721
6722
6723<li>Sommige organisaties kiezen voor <strong>No Close</strong>, waarbij de maandelijkse afsluiting wordt overgeslagen om tijd te besparen. Dit kan echter leiden tot een zwaardere belasting bij de jaarafsluiting.</li>
6724
6725
6726
6727<li>Ten slotte is er de <strong>Fast Close</strong>, die snelheid combineert met een hoge mate van nauwkeurigheid. Deze aanpak vereist goed geoptimaliseerde processen, systemen en een ervaren finance team.</li>
6728</ul>
6729
6730
6731
6732<h3 class="wp-block-heading has--font-size"><strong>Soft Close</strong></h3>
6733
6734
6735
6736<p>Bij een soft close worden de boeken voorlopig afgesloten om snel inzicht te geven in de financiële status. Niet alle posten hoeven volledig te worden gecontroleerd en geverifieerd.</p>
6737
6738
6739
6740<p><strong>Voordeel:</strong> Snelle inzichten zonder zware belasting van de administratie.<br><strong>Nadeel:</strong> Onnauwkeurigheden kunnen aanwezig zijn, wat risico’s met zich meebrengt als beslissingen op deze gegevens worden gebaseerd.</p>
6741
6742
6743
6744<h3 class="wp-block-heading"><strong>Hard Close</strong></h3>
6745
6746
6747
6748<p>Bij een hard close wordt de maand volledig afgesloten en zijn alle boekingen zorgvuldig gecontroleerd en geverifieerd. Deze cijfers zijn definitief en bedoeld voor externe rapportages.</p>
6749
6750
6751
6752<p><strong>Voordeel:</strong> Nauwkeurigheid en betrouwbaarheid, essentieel voor rapportages en audits.<br><strong>Nadeel:</strong> Tijdrovend en arbeidsintensief, vooral als er correcties of complexe boekingen nodig zijn.</p>
6753
6754
6755
6756<h3 class="wp-block-heading"><strong>Fast Close</strong></h3>
6757
6758
6759
6760<p>Een fast close zorgt voor een snelle, maar betrouwbare afsluiting door processen te automatiseren en optimaliseren. Dit wordt vaak door beursgenoteerde bedrijven nagestreefd om beleggers snel inzicht te geven. Veel bedrijven streven ernaar om de cijfers op de vijfde werkdag van de nieuwe maand te presenteren.</p>
6761
6762
6763
6764<p><strong>Voordeel:</strong> Snel toegang tot betrouwbare cijfers, wat tijd bespaart en beslissingen versnelt. Het wekt ook vertrouwen bij investeerders.<br><strong>Nadeel:</strong> Vereist gestroomlijnde processen, technologische investeringen en specifieke financiële kennis, wat uitstekend financieel management noodzakelijk maakt.</p>
6765
6766
6767
6768<h3 class="wp-block-heading"><strong>No Close</strong></h3>
6769
6770
6771
6772<p>Sommige bedrijven kiezen ervoor om de maandafsluiting over te slaan, meestal om operationele redenen of omdat zij geen noodzaak zien om maandelijks de cijfers te bekijken.</p>
6773
6774
6775
6776<p><strong>Voordeel:</strong> Bespaart tijd en verlaagt de administratieve lasten gedurende het jaar.<br><strong>Nadeel:</strong> Moeilijker om prestaties maandelijks te evalueren en bij te sturen. De administratie kan chaotisch worden, en de jaarafsluiting 
6776kan veel extra tijd vergen.</p>
6777
6778
6779
6780<hr class="wp-block-separator has-alpha-channel-opacity"/>
6781
6782
6783
6784<blockquote class="wp-block-quote">
6785<p>Welke methode jouw organisatie ook kiest, Smartbooks biedt ondersteuning bij alle soorten maandafsluitingen. Wel zouden wij als finance professionals de No Close optie niet aanraden!</p>
6786</blockquote>
6787
6788
6789
6790<p></p>`,O6=`---json
6791{
6792  "title": "Inventory Turnover Ratio: Formula, Days and Benchmarks",
6793  "slug": "inventory-turnover-ratio",
6794  "metaTitle": "Inventory Turnover Ratio: Formula and Benchmarks",
6795  "date": "2026-10-05 10:00:00",
6796  "category": "Articles",
6797  "tags": [
6798    "Rapporteren",
6799    "Forecast",
6800    "Budgetteren"
6801  ],
6802  "excerpt": "Inventory turnover ratio: the formula, the conversion to days of inventory, a worked example and what a healthy outcome looks like by sector.",
6803  "originalUrl": ""
6804}
6805---
6806<p><strong>The inventory turnover ratio</strong> divides the cost of goods sold by the average inventory. The result is a number of times per year: how often the entire stock has been sold and replaced within the period.</p>
6807<p>For a controller that is a financing figure rather than a logistics figure. Inventory is working capital that earns nothing while it sits on the shelf: at a cost of goods sold of &euro; 8.4 million, every ten days of inventory represents roughly &euro; 230,000 tied up in boxes instead of sitting in the bank account. And unlike receivables, there is no payment term behind it that someone can be reminded of &mdash; only a purchasing decision taken months ago.</p>
6808<h2>What the inventory turnover ratio measures</h2>
6809<p>The inventory turnover ratio, also called stock turn or inventory rotation, expresses how many times the average inventory is converted into sales during a period. A ratio of 6 means the stock is sold through six times a year, or that two months of inventory is standing in the warehouse at any moment.</p>
6810<p>The same figure appears in two forms:</p>
6811<ul>
6812<li><strong>The ratio itself</strong>, in times per period. Useful for comparing product groups: twelve against three needs no further explanation.</li>
6813<li><strong>Days of inventory</strong>, also known as DIO or days inventory outstanding. Useful in a working capital discussion, because days can be added to the receivable and payable terms.</li>
6814</ul>
6815<p>That second form is the inventory leg of the <a href="/en/articles/cash-conversion-cycle-formula">cash conversion cycle</a>, the formula DSO + DIO &minus; DPO. There the inventory term is one of three components; here it is the subject in its own right.</p>
6816<h2>The inventory turnover ratio formula</h2>
6817<p><strong>Inventory turnover ratio = cost of goods sold &divide; average inventory</strong></p>
6818<ol>
6819<li>Take the cost of goods sold for the period: the purchase value of what was actually sold, excluding VAT. Not revenue &mdash; see the pitfalls below.</li>
6820<li>Determine the average inventory: opening balance plus closing balance divided by two. With seasonal swings, the average of twelve month-end balances is more accurate than the average of two year-end balances.</li>
6821<li>Divide the cost of goods sold by the average inventory. The outcome is the number of turns per period.</li>
6822<li>Convert to days where useful: the number of days in the period divided by the ratio.</li>
6823<li>Repeat the measurement monthly on the same basis. For a single month, use that month's cost of goods sold and convert with the thirty or thirty-one days of that month.</li>
6824</ol>
6825<p>One balance sheet line and one income statement line are all you need. The difficulty lies in keeping the numerator and the denominator on the same valuation basis, and that is exactly where it tends to go wrong.</p>
6826<h2>Worked example</h2>
6827<p>A technical wholesaler wants the figure for a full financial year. Revenue is &euro; 12,000,000 and the cost of goods sold &euro; 8,400,000, a gross margin of 30%. Inventory stood at &euro; 1,300,000 on 1 January and &euro; 1,500,000 on 31 December.</p>
6828<table>
6829<thead><tr><th>Item</th><th>
6829Amount</th></tr></thead>
6830<tbody>
6831<tr><td>Cost of goods sold</td><td>&euro; 8,400,000</td></tr>
6832<tr><td>Inventory 1 January</td><td>&euro; 1,300,000</td></tr>
6833<tr><td>Inventory 31 December</td><td>&euro; 1,500,000</td></tr>
6834<tr><td><strong>Average inventory</strong></td><td><strong>&euro; 1,400,000</strong></td></tr>
6835<tr><td><strong>Inventory turnover ratio</strong></td><td><strong>6.0 times a year</strong></td></tr>
6836<tr><td><strong>Days of inventory</strong></td><td><strong>61 days</strong></td></tr>
6837</tbody>
6838</table>
6839<p>8,400,000 &divide; 1,400,000 = <strong>6.0 times a year</strong>, and 365 &divide; 6.0 = <strong>61 days</strong>. Had the closing balance of &euro; 1,500,000 been used on its own, the outcome would have been 5.6 times and 65 days: four days too high, purely because inventory grew during the year.</p>
6840<h2>From turns to days of inventory</h2>
6841<p><strong>Days of inventory = days in the period &divide; inventory turnover ratio</strong></p>
6842<p>Both directions work. A ratio of 6.0 equals 61 days; 61 days of inventory equals a ratio of 6.0. The days figure can also be calculated directly as (average inventory &divide; cost of goods sold) &times; 365, which is the same DIO that gets added to the receivable term in the cash conversion cycle.</p>
6843<p>Which form to use depends on the conversation. In a purchasing or assortment review, turns work better, because the spread between fast and slow movers is immediately visible. In a discussion about <a href="/en/articles/working-capital">working capital</a> or financing, days work better, because they add up with the <a href="/en/articles/dso-calculation">days sales outstanding</a> and subtract against the payable term. For a quarter, use 90 or 91 days instead of 365, and do not then multiply the result by four.</p>
6844<h2>What is a healthy inventory turnover ratio?</h2>
6845<p>There is no absolute benchmark. The outcome depends entirely on the business model and on how perishable the product is, so the only meaningful comparison is against your own history and against companies running the same model. The ranges below are indicative:</p>
6846<ul>
6847<li><strong>Grocery and fresh produce:</strong> fifteen to twenty-five times a year. Perishability forces the pace; there is no choice.</li>
6848<li><strong>Non-food retail and e-commerce:</strong> four to eight times. Collections and seasons put a floor under the stock level.</li>
6849<li><strong>Technical wholesale:</strong> four to six times. Delivery reliability is a selling point here, so part of the stock is deliberately held as service inventory.</li>
6850<li><strong>Manufacturing with long lead times:</strong> two to four times, with much of the value sitting in work in progress and semi-finished goods.</li>
6851<li><strong>Spare parts and service items:</strong> one to two times. A low figure is not an error here but the price of a delivery guarantee.</li>
6852</ul>
6853<p>The spread underneath matters more than the level. A healthy 6 may consist of fast movers turning twenty times plus a quarter of the stock value that has been standing still for two years. Higher is also not automatically better: if the ratio rises because stock is too tight, the cost shows up in lost sales, rush orders and air freight. Read the outcome alongside the <a href="/en/articles/gross-margin-calculation">gross margin</a> and the service level.</p>
6854<p>One further nuance: the <a href="/en/articles/quick-ratio-calculation">quick ratio</a> deliberately excludes inventory altogether. That is not a contradiction but a judgement, because stock that turns six times a year is a very different asset from stock that turns once. The lower the turnover, the less inventory deserves to be treated as a liquid asset.</p>
6855<h2>Pitfalls</h2>
6856<ul>
6857<li><strong>Revenue in the numerator.</strong> Inventory sits on the balance sheet at purchase value, so the numerator has to as well. In the example above, revenue of &euro; 12,000,000 produces a ratio of 8.6 and 43 days instead of 6.0 and 61 days. Those eighteen days are exactly the 30% gross margin &mdash; no achievement, just an arithmetic error, and by far the most common one.</li>
6858<li><strong>Using the closing balance only.</strong> In a seasonal business, a measurement on the closing balance mostly measures the balance sheet date. A closing balance taken after the autumn purchasing round and one taken in February give very different outcomes on identical sales.</li>
6859<li><strong>One figure for the whole assortment.</strong> An average hides the slow movers that are the actual problem. Split at least by product group or ABC class before drawing any conclusion.</li>
6860<li><strong>Reading a write-down as an improvement.</strong> Writing off obsolete stock lowers the denominator and lifts the ratio instantly, without a single extra unit having been sold. Always read the outcome alongside the write-downs in the income statement.</li>
6861<li><strong>Treating work in progress inconsistently.</strong> In project and manufacturing businesses, much of the pre-financing sits under semi-finished goods or work in progress. If those balances go into the denominator, make sure the matching cost goes into the numerator.</li>
6862</ul>
6863<h2>Frequently asked questions about the inventory turnover ratio</h2>
6864<h3>What is a good inventory turnover ratio?</h3>
6865<p>It depends on the sector and on the shelf life of the product. A grocer runs at fifteen to twenty-five times a year, a technical wholesaler at four to six and a spare parts supplier at one to two. So never compare against a general average; compare against your own twelve-month series and against the level your supplier lead times allow.</p>
6866<h3>What is the difference between inventory turnover and days of inventory?</h3>
6867<p>Nothing in substance: they are two ways of writing the same figure. Turnover is expressed in times per period, days of inventory in days, and you convert between them by dividing the days in the peri
6867od by the ratio. Use turns to compare product groups and days to place the figure next to the receivable and payable terms.</p>
6868<h3>How do you calculate the inventory turnover ratio in Excel?</h3>
6869<p>Set up three columns per month: cost of goods sold, opening inventory and closing inventory, all three excluding VAT. The fourth column averages the two inventory balances, the fifth divides the cost by that average and the sixth converts the result into days. Extend the series across twelve months and put a chart underneath it; the trend line tells you more than any single month.</p>
6870<h3>Do you use purchase value or sales value?</h3>
6871<p>Purchase value, on both sides. Inventory is carried on the balance sheet at purchase or production cost, so the denominator is already at purchase value; the numerator then has to be cost of goods sold rather than revenue. Only a retailer who values stock at selling price, under the gross profit method, works consistently at sales value on both sides.</p>
6872<h2>From ratio to monthly steering</h2>
6873<p>Inventory changes every day, while in many organisations this figure only gets calculated for the annual accounts. That is far too late to base a purchasing decision on. In Smartbooks you capture the ratio as a metric: a custom KPI driven by a formula across the general ledger accounts, with the opening balance pulled from the prior period through the PreviousPeriod function, so the average updates itself every month. The same metric can be split by cost center or business dimension and placed on a dashboard as a KPI tile with a trend line, referenced against budget or against last year. That puts the ratio in the same <a href="/en/functionalities/reporting">reporting set</a> as the result, and across multiple entities also at consolidated level.</p>
6874<p>Start with twelve months of history on a fixed basis and break it down by the five largest product groups; almost all of the gain sits there. Then place the adjacent measures beside it: <a href="/en/articles/cash-flow-calculation">cash flow calculation</a> for the cash movement itself and the cash conversion cycle for the full working c
6874apital lead time. The rest of the set is in the <a href="/en/knowledge-center">knowledge center</a>.</p>
6875`,_6=`---json
6876{
6877  "title": "Omloopsnelheid voorraad berekenen: formule, dagen en norm",
6878  "slug": "omloopsnelheid-voorraad-berekenen",
6879  "metaTitle": "Omloopsnelheid voorraad berekenen: formule en norm",
6880  "date": "2026-10-05 10:00:00",
6881  "category": "Articles",
6882  "tags": [
6883    "Rapporteren",
6884    "Forecast",
6885    "Budgetteren"
6886  ],
6887  "excerpt": "Omloopsnelheid voorraad berekenen: de formule, de omrekening naar voorraaddagen, een rekenvoorbeeld en wat een gezonde uitkomst is per branche.",
6888  "originalUrl": "",
6889  "enSlug": "inventory-turnover-ratio"
6890}
6891---
6892<p><strong>De omloopsnelheid van voorraad bereken je</strong> door de kostprijs van de omzet te delen door de gemiddelde voorraad. De uitkomst is een aantal keren per jaar: hoe vaak de hele voorraad in die periode is verkocht en opnieuw aangevuld.</p>
6893<p>Voor een controller is dat geen logistiek getal maar een financieringsgetal. Voorraad is werkkapitaal dat niets opbrengt zolang het in het schap ligt: bij een kostprijs van de omzet van &euro;
6893 8,4 miljoen staat elke tien voorraaddagen voor ongeveer &euro; 230.000 die vastligt in dozen in plaats van op de bankrekening. En anders dan bij debiteuren zit er geen betalingstermijn achter waar iemand aan herinnerd kan worden &mdash; alleen een inkoopbeslissing van maanden terug.</p>
6894<h2>Wat is de omloopsnelheid van de voorraad?</h2>
6895<p>De omloopsnelheid van de voorraad, ook wel voorraadrotatie, voorraadomloop of inventory turnover, drukt uit hoe vaak de gemiddelde voorraad in een periode wordt omgezet. Een omloopsnelheid van 6 betekent dat de voorraad zes keer per jaar volledig wordt doorverkocht, oftewel dat er gemiddeld twee maanden voorraad in het pand staat.</p>
6896<p>Het kengetal heeft twee verschijningsvormen die hetzelfde zeggen:</p>
6897<ul>
6898<li><strong>De omloopsnelheid</strong>, in keren per periode. Handig om artikelgroepen onderling te vergelijken: twaalf tegen drie is direct te plaatsen.</li>
6899<li><strong>De voorraaddagen</strong>, ook wel DIO of days inventory outstanding. Handig in een werkkapitaalgesprek, want dagen zijn optelbaar met de debiteuren- en crediteurentermijn.</li>
6900</ul>
6901<p>Die tweede vorm is de voorraadschakel in de <a href="/artikelen/cash-conversion-cycle">cash conversion cycle</a>, de formule DSO + DIO &minus; DPO. Daar is de voorraadtermijn een van de drie componenten; hier is hij het onderwerp zelf.</p>
6902<h2>De formule om de omloopsnelheid voorraad te berekenen</h2>
6903<p><strong>Omloopsnelheid = kostprijs van de omzet &divide; gemiddelde voorraad</strong></p>
6904<ol>
6905<li>Neem de kostprijs van de omzet over de periode: de inkoopwaarde van wat daadwerkelijk is verkocht, exclusief btw. Dus niet de omzet &mdash; zie de valkuilen.</li>
6906<li>Bepaal de gemiddelde voorraad: beginstand plus eindstand gedeeld door twee. Bij seizoensinvloed is het gemiddelde van twaalf maandeindes nauwkeuriger dan dat van twee jaareindes.</li>
6907<li>Deel de kostprijs van de omzet door de gemiddelde voorraad. De uitkomst is het aantal keren per periode.</li>
6908<li>Reken desgewenst om naar dagen: het aantal dagen in de periode gedeeld door de omloopsnelheid.</li>
6909<li>Herhaal de meting maandelijks op dezelfde grondslag. Meet je per maand, gebruik dan de kostprijs van die ene maand en reken om met de dertig of eenendertig dagen van die maand.</li>
6910</ol>
6911<p>Om de omloopsnelheid voorraad te berekenen heb je dus niet meer nodig dan een balanspost en een resultaatpost. De kunst zit erin dat teller en noemer op dezelfde waarderingsgrondslag staan, en precies daar gaat het in de praktijk mis.</p>
6912<h2>Rekenvoorbeeld</h2>
6913<p>Een technische groothandel wil de omloopsnelheid voorraad berekenen over een heel boekjaar. De omzet bedraagt &euro; 12.000.000 en de kostprijs van de omzet &euro; 8.400.000, een brutomarge van 30%. De voorraad stond op 1 januari op &euro; 1.300.000 en op 31 december op &euro; 1.500.000.</p>
6914<table>
6915<thead><tr><th>Post</th><th>Bedrag</th></tr></thead>
6916<tbody>
6917<tr><td>Kostprijs van de omzet</td><td>&euro; 8.400.000</td></tr>
6918<tr><td>Voorraad 1 januari</td><td>&euro; 1.300.000</td></tr>
6919<tr><td>Voorraad 31 december</td><td>&euro; 1.500.000</td></tr>
6920<tr><td><strong>Gemiddelde voorraad</strong></td><td><strong>&euro; 1.400.000</strong></td></tr>
6921<tr><td><strong>Omloopsnelheid</strong></td><td><strong>6,0 keer per jaar</strong></td></tr>
6922<tr><td><strong>Voorraaddagen</strong></td><td><strong>61 dagen</strong></td></tr>
6923</tbody>
6924</table>
6925<p>8.400.000 &divide; 1.400.000 = <strong>6,0 keer per jaar</strong>, en 365 &divide; 6,0 = <strong>61 dagen</strong>. Had je alleen de eindvoorraad van &euro; 1.500.000 genomen, dan was de uitkomst 5,6 keer en 65 dagen geweest: vier dagen te hoog, puur omdat de voorraad in dat jaar is gegroeid.</p>
6926<h2>Van omloopsnelheid naar voorraaddagen</h2>
6927<p><strong>Voorraaddagen = aantal dagen in de periode &divide; omloopsnelheid</strong></p>
6928<p>Beide richtingen werken. Een omloopsnelheid van 6,0 is 61 dagen; 61 dagen voorraad is een omloopsnelheid van 6,0. Je kunt de dagen ook direct uitrekenen als (gemiddelde voorraad &divide; kostprijs van de omzet) &times; 365, en dat is dezelfde DIO die in de cash conversion cycle wordt opgeteld bij de debiteurentermijn.</p>
6929<p>Welke vorm je kiest, hangt af van het gesprek. In een inkoopoverleg werken keren beter, omdat de spreiding tussen snel- en langzaamlopers daarin direct zichtbaar is. In een gesprek over <a href="/artikelen/werkkapitaal-berekenen">werkkapitaal</a> werken dagen beter, omdat ze optelbaar zijn met de <a href="/artikelen/dso-berekenen">debiteurentermijn</a> en aftrekbaar met de crediteurentermijn. Reken je over een kwartaal, gebruik dan 90 of 91 dagen in plaats van 365.</p>
6930<h2>Wat is een gezonde omloopsnelheid?</h2>
6931<p>Een absolute norm bestaat niet. De uitkomst hangt volledig aan het businessmodel en aan de bederfelijkheid van het product, dus de enige zinvolle vergelijking is die met je eigen historie en met ondernemingen die hetzelfde model draaien. De bandbreedtes hieronder zijn indicatief:</p>
6932<ul>
6933<li><strong>Supermarkt en versassortiment:</strong> vijftien tot vijfentwintig keer per jaar. Bederfelijkheid dwingt de snelheid af; er is geen keuze.</li>
6934<li><strong>Non-food retail en e-commerce:</strong> vier tot acht keer. Collecties en seizoenen leggen een bodem onder de voorraad.</li>
6935<li><strong>Technische groothandel:</strong> vier tot zes keer. Leverbetrouwbaarheid is hier een verkoopargument, dus een deel van de voorraad is bewust servicevoorraad.</li>
6936<li><strong>Productie met lange doorlooptijd:</strong> twee tot vier keer, met een groot deel van de waarde in halffabricaten en onderhanden werk.</li>
6937<li><strong>Onderdelen en serviceartikelen:</strong> een tot twee keer. Een lage omloopsnelheid is hier geen fout maar de prijs van een leveringsgarantie.</li>
6938</ul>
6939<p>Belangrijker dan het niveau is de spreiding eronder. Een gezonde 6 kan bestaan uit snellopers die twintig keer draaien en een kwart van de voorraadwaarde die er al twee jaar staat. En hoger is niet per definitie beter: loopt de omloopsnelheid op doordat de voorraad te krap is, dan betaal je dat in nee-verkopen, spoedorders en luchtvracht. Leg de uitkomst daarom naast de <a href="/artikelen/brutomarge-berekenen">brutomarge</a> en de leverbetrouwbaarheid.</p>
6940<p>Een laatste nuance: de <a href="/artikelen/quick-ratio-berekenen">quick ratio</a> laat de voorraad juist volledig weg. Dat is geen tegenspraak maar een bewuste keuze, want een voorraad die zes keer per jaar draait is iets heel anders dan een voorraad die een keer draait. Hoe lager de omloopsnelheid, hoe minder de voorraad als liquide middel mag worden gezien.</p>
6941<h2>Valkuilen</h2>
6942<ul>
6943<li><strong>De omzet in de teller.</strong> Voorraad staat tegen inkoopwaarde op de balans, dus de teller moet dat ook. In het voorbeeld hierboven geeft de omzet van &euro; 12.000.000 een omloopsnelheid van 8,6 en 43 voorraaddagen in plaats van 6,0 en 61 dagen. Dat verschil van achttien dagen is precies de brutomarge van 30% &mdash; geen prestatie maar een rekenfout, en de meest gemaakte.</li>
6944<li><strong>Alleen de eindvoorraad.</strong> Wie de omloopsnelheid voorraad berekent op de eindstand, meet bij een seizoensbedrijf vooral de balansdatum. Een eindstand na de najaarsinkoop en een eindstand in februari geven bij dezelfde verkopen een heel andere uitkomst.</li>
6945<li><strong>Eén getal voor het hele assortiment.</strong> Een gemiddelde verbergt de langzaamlopers die het probleem zijn. Splits minimaal naar artikelgroep of ABC-klasse voordat je er een conclusie aan hangt.</li>
6946<li><strong>
6946Een afwaardering als verbetering lezen.</strong> Incourante voorraad afboeken verlaagt de noemer en verhoogt de omloopsnelheid onmiddellijk, zonder dat er iets extra is verkocht. Beoordeel de uitkomst daarom altijd naast de afwaarderingen in het resultaat.</li>
6947<li><strong>Onderhanden werk half meenemen.</strong> Bij project- en productiebedrijven staat een groot deel van de voorfinanciering onder halffabricaten of onderhanden werk. Neem je die posten mee in de noemer, zorg dan dat de teller de bijbehorende kostprijs ook bevat.</li>
6948</ul>
6949<h2>Veelgestelde vragen over de omloopsnelheid van de voorraad</h2>
6950<h3>Wat is een goede omloopsnelheid van de voorraad?</h3>
6951<p>Dat hangt af van de branche en van de houdbaarheid van het product. Een supermarkt zit op vijftien tot vijfentwintig keer per jaar, een technische groothandel op vier tot zes en een onderdelenleverancier op een tot twee. Vergelijk daarom nooit met een algemeen gemiddelde, maar met je eigen reeks over twaalf maanden.</p>
6952<h3>Wat is het verschil tussen omloopsnelheid en voorraaddagen?</h3>
6953<p>Inhoudelijk niets: het zijn twee schrijfwijzen van hetzelfde getal. De omloopsnelheid staat in keren per periode, de voorraaddagen in dagen, en je rekent ze om met het aantal dagen in de periode gedeeld door de omloopsnelheid. Gebruik keren om artikelgroepen te vergelijken en dagen om het getal naast de debiteuren- en crediteurentermijn te leggen.</p>
6954<h3>Hoe kun je de omloopsnelheid voorraad berekenen in Excel?</h3>
6955<p>Zet per maand drie kolommen neer: de kostprijs van de omzet, de beginvoorraad en de eindvoorraad, alle drie exclusief btw. De vierde kolom is het gemiddelde van de twee voorraadstanden, de vijfde deelt de kostprijs door dat gemiddelde en de zesde rekent dat om naar dagen. Trek de reeks over twaalf maanden door en zet er een grafiek onder; de trendlijn is informatiever dan elke losse maand.</p>
6956<h3>Reken je met de inkoopwaarde of met de verkoopwaarde?</h3>
6957<p>Met de inkoopwaarde, aan beide kanten. De voorraad staat op de balans tegen inkoopprijs of vervaardigingsprijs, dus de noemer is al inkoopwaarde en de teller moet dan de kostprijs van de omzet zijn. Alleen een retailer die zijn voorraad tegen verkoopprijs waardeert, de brutowinstmethode, rekent consequent aan beide kanten tegen verkoopwaarde.</p>
6958<h2>Van kengetal naar maandelijkse sturing</h2>
6959<p>De voorraad verandert elke dag, terwijl dit kengetal in veel organisaties alleen bij de jaarrekening wordt uitgerekend. Dat is te laat om er nog een inkoopbeslissing op te baseren. In Smartbooks leg je de omloopsnelheid vast als metric: een eigen KPI met een formule over de grootboekrekeningen, waarbij de beginstand met de functie PreviousPeriod uit de vorige periode komt, zodat het gemiddelde zich elke maand bijwerkt. Dezelfde metric is per kostenplaats of business dimension uit te splitsen en als KPI-tegel met trendlijn op een dashboard te zetten, afgezet tegen het budget of tegen vorig jaar. Daarmee staat de omloopsnelheid in dezelfde <a href="/functionaliteiten/rapporteren">rapportageset</a> als het resultaat, en bij meerdere entiteiten ook geconsolideerd.</p>
6960<p>Wie de omloopsnelheid voorraad maandelijks berekent, ziet een oplopende voorraad aankomen in plaats van achteraf. Begin met twaalf maanden historie op een vaste grondslag en splits die uit naar de vijf grootste artikelgroepen; daar zit bijna altijd de hele winst. Leg daar de aangrenzende kengetallen naast: <a href="/artikelen/cashflow-berekenen">cashflow berekenen</a> voor de kasstroom zelf, of het <a href="/kenniscentrum">kenniscentrum</a> voor de rest van de set.</p>
6961`,L6=`---json
6962{
6963  "title": "Budgetierung als Plan-to-Perform-Prozess",
6964  "slug": "plan-to-perform",
6965  "metaTitle": "Plan-to-Perform: Budgetierung als End-to-End-Prozess",
6966  "date": "2024-09-30 14:24:07",
6967  "category": "Articles",
6968  "tags": [],
6969  "excerpt": "Plan-to-Perform: Gestalten Sie Ihren Planungszyklus und das monatliche Budget-Update als End-to-End-Prozess — für bessere Performance und schärfere Analysen.",
6970  "originalUrl": "https://smartbooks.ai/artikelen/plan-to-perform/",
6971  "meta": null
6972}
6973---
6974<h3>Gestalten Sie Ihren jährlichen Planungszyklus und das monatliche Budget-Update als End-to-End-Prozess</h3>
6975
6976<p>Das Konzept eines End-to-End- (E2E-) Prozesses zielt auf einen vollständigen Blick auf die Unternehmensergebnisse — mit Fokus auf den Ablauf von Anfang bis Ende. Ziel: Effizienz steigern, Performance erhöhen und jeden Schritt an den strategischen Zielen ausrichten. Wesentliche Vorteile:</p>
6977
6978<ul>
6979<li><strong>Gestraffter Betrieb</strong>: Überflüssige Schritte entfallen; Fokus auf wertschöpfende Aktivitäten senkt Kosten und erhöht Produktivität.</li>
6980<li><strong>Mehr Transparenz</strong>: Ineffizienzen, Engpässe und Verbesserungspotenziale werden sichtbar.</li>
6981<li><strong>Bessere Zusammenarbeit</strong>
6981: Inputs, Outputs und Übergaben zwischen Teams sind klar.</li>
6982</ul>
6983
6984<p>Beispiele für E2E-Prozesse: Record-to-Report, Hire-to-Retire, Customer-to-Cash, Campaign-to-Conversion. Ein Best-Practice-Prozess ist Plan-to-Perform (P2P). Er optimiert operative <em>und</em> finanzielle Planung — für bessere Performance und aussagekräftige Plan-Ist-Abweichungen.</p>
6985
6986<h3>Den Plan-to-Perform-Prozess entwerfen</h3>
6987
6988<p>Fünf Kernschritte:</p>
6989
6990<ol>
6991<li><strong>Unternehmensstrategie formulieren</strong>: Strategie mit Prozess­verantwortlichen diskutieren, Bottom-up-Budget an Top-down-Ziel spiegeln. Die Spannung zwischen beidem ist der Ausgangspunkt für strategische Gespräche und klare Ziele.</li>
6992<li><strong>Klare Ziele setzen</strong>: Aus den strategischen Gesprächen konkrete Ziele je Abteilung ableiten (Produktion, HR, Sales).</li>
6993<li><strong>Performance monitoren</strong>: Ausgewählte KPIs berichten und mit Plan vergleichen.</li>
6994<li><strong>Abweichungen analysieren</strong>: Differenzen untersuchen, Ursachen und Erklärungen benennen.</li>
6995<li><strong>Handeln</strong>: Gaps schließen — durch Anpassung der Aktivitäten, um Ziele zu erreichen, oder durch Zielanpassung, wenn Annahmen und Markt sich geändert haben.</li>
6996</ol>
6997
6998<h3>Voraussetzungen für einen erfolgreichen Plan-to-Perform-Prozess <img class="wp-image-2495" style="width: 500px;" src="https://smartbooks.ai/wp-content/uploads/2024/09/p2p.png" alt="Plan-to-Perform Prozess"></h3>
6999
7000<p>Erfolg beginnt mit einem starken Team. Know-how ist entscheidend, um Komplexität zu verstehen und wirksam zu managen.</p>
7001
7002<p>Zusätzlich unerlässlich: moderne Technologie. Ein modernes Planungssystem ist das Rückgrat — Tools für Finanzplanung, Analyse und Reporting. Mit dem richtigen System entstehen präzise Daten, effizientes Arbeiten und bessere Entscheidungen. Warum Spreadsheets für einen so zentralen Prozess oft zu kurz greifen, lesen Sie in unserem anderen Blog.</p>
7003
7004<p>Und Datenqualität: präzise, aktuelle und relevante Daten. Zu wenig oder falsche Daten bremsen den Prozess. Auch zu viele Daten sind ein Problem — mehr Aufwand ohne echten Zugewinn.</p>
7005
7006<h3>Fazit</h3>
7007
7008<p>Ein gut gestalteter Plan-to-Perform-Prozess ist zentraler Baustein jeder Strategie. Er verlangt talentierte Menschen, moderne Technologie und hochwertige Daten. Richtig umgesetzt werden aus Ambitionen erreichbare Realitäten.</p>
7009
7010<p>Mehr zu Ihrem Planungsprozess? Laden Sie unseren Best-Practice-Guide herunter — oder sehen Sie unser Webinar für einen Überblick unserer Software.</p>`,W6=`---json
7011{
7012  "title": "Budgeting as a Plan to Perform Process",
7013  "metaTitle": "Plan to Perform: Budgeting as an End-to-End Process",
7014  "slug": "plan-to-perform",
7015  "date": "",
7016  "category": "Articles",
7017  "tags": [
7018    "Budgeting",
7019    "Financial Planning",
7020    "Performance Management",
7021    "FP&A"
7022  ],
7023  "excerpt": "Plan to Perform: transform budgeting into an integrated process that improves agility, financial control, and business performance.",
7024  "originalUrl": "",
7025  "meta": {
7026    "type_bedrijf": "Financial Services",
7027    "naam_medewerker": "John Doe",
7028    "functie_medewerker": "Financial Consultant",
7029    "logo_bedrijf": "logo.png"
7030  }
7031}
7032---
7033<h3 class="text-h3 mb-4">Traditional Budgeting vs. Plan to Perform</h3><p>Many organizations still treat budgeting as a static annual exercise. By shifting to a 'Plan to Perform' methodology, finance teams can create a more dynamic environment where planning, execution, and performance monitoring are integrated. This approach ensures that financial targets are not just numbers, but actionable drivers for growth.</p>`,V6=`---json
7034{
7035  "title": "Budgetteren als Plan to Perform-proces",
7036  "metaTitle": "Plan to Perform: budgetteren als end-to-end proces",
7037  "slug": "plan-to-perform",
7038  "order": 24,
7039  "date": "2024-09-30 14:24:07",
7040  "category": "Articles",
7041  "tags": [],
7042  "excerpt": "Plan to Perform: ontwerp je planningscyclus en maandelijkse budgetupdate als end-to-end proces voor betere prestaties en sc
7042herpere analyses.",
7043  "originalUrl": "https://smartbooks.ai/artikelen/plan-to-perform/",
7044  "meta": null,
7045  "enSlug": "plan-to-perform"
7046}
7047---
7048<h3 class="kt-adv-heading2494_885acb-ac wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2494_885acb-ac">Ontwerp je jaarlijkse planningscyclus en maandelijkse budgetupdate als een end-to-end proces</h3>
7049
7050
7051
7052<p>Het concept van een end-to-end (E2E) proces is erop gericht een compleet overzicht te geven van de bedrijfsresultaten, waarbij de focus ligt op de volledige stroom van een proces, van begin tot eind. Het doel is om de efficiëntie te verbeteren, de prestaties te verhogen en ervoor te zorgen dat elke stap in lijn is met de strategische doelen van de organisatie. De belangrijkste voordelen van een E2E-benadering zijn:</p>
7053
7054
7055
7056<ul class="wp-block-list">
7057<li><strong>Gestroomlijnde bedrijfsvoering</strong>: Door overbodige stappen te schrappen en de focus te leggen op activiteiten die waarde toevoegen, kunnen bedrijven hun processen vereenvoudigen, kosten verlagen en de productiviteit verhogen.</li>
7058
7059
7060
7061<li><strong>Verhoogde transparantie</strong>: Door het volledige proces van begin tot eind te analyseren, kunnen inefficiënties, knelpunten en verbeterpunten gemakkelijker worden opgespoord.</li>
7062
7063
7064
7065<li><strong>Betere samenwerking</strong>: Een E2E-aanpak stimuleert samenwerking tussen afdelingen, omdat duidelijk wordt wat de input en output zijn van elk team en waar de overdrachtsmomenten liggen.</li>
7066</ul>
7067
7068
7069
7070<p>Voorbeelden van E2E-processen die bedrijven helpen om hun activiteiten te stroomlijnen, zijn: Record-to-Report, Hire-to-Retire, Customer-to-Cash en Campaign-to-Conversion. Een proces dat als een Best Practice wordt beschouwd, is het Plan-to-Perform (P2P) proces. Dit proces richt zich op het optimaliseren van zowel de operationele als financiële planning, zodat prestaties verbeteren en nuttige analyses ontstaan over de verschillen tussen plannen en daadwerkelijke resultaten.</p>
7071
7072
7073
7074<h3 class="wp-block-heading">Ontwerpen van het Plan-to-Perform-proces</h3>
7075
7076
7077
7078<p>Wat houdt Plan-to-Perform precies in, en hoe kunnen bedrijven dit proces effectief ontwerpen en uitvoeren? Hieronder staan de vijf kernstappen van een Plan-to-Perform-proces:</p>
7079
7080
7081
7082<div class="wp-block-group">
7083<ol start="1" class="wp-block-list">
7084<li><strong>Formuleer de bedrijfsstrategie</strong>: Bespreek de strategie met de verantwoordelijken voor verschillende bedrijfsprocessen. Laat hen een budget van onderaf opstellen (bottom-up) en koppel dit aan een bedrijfsdoel dat van bovenaf (top-down) komt. De verschillen en spanningen tussen deze twee benaderingen vormen de basis voor strategische discussies, die leiden tot duidelijke doelstellingen.</li>
7085
7086
7087
7088<li><strong>Stel duidelijke doelen</strong>: Gebruik de uitkomst van de strategische discussies om concrete doelen te bepalen voor verschillende afdelingen, zoals productie, HR en verkoop.</li>
7089
7090
7091
7092<li><strong>Monitor prestaties</strong>: Rapporteer de prestaties aan de hand van geselecteerde Key Performance Indicators (KPI’s) en vergelijk deze met de geplande resultaten.</li>
7093
7094
7095
7096<li><strong>Analyseer afwijkingen</strong>: Onderzoek verschillen tussen de gestelde doelen en de daadwerkelijke prestaties. Identificeer de oorzaken van deze afwijkingen en licht ze toe.</li>
7097
7098
7099
7100<li><strong>Onderneem actie</strong>: Vul de geconstateerde lacunes door het aanpassen van bedrijfsactiviteiten om de doelen alsnog te bereiken. Of pas de doelen aan als de aannames en marktomstandigheden zijn veranderd.</li>
7101</ol>
7102</div>
7103
7104
7105
7106<h3 class="wp-block-heading">Vereisten voor een succesvol Plan-to-Perform-proces<img class="wp-image-2495" style="width: 500px;" src="https://smartbooks.ai/wp-content/uploads/2024/09/p2p.png" alt=""></h3>
7107
7108
7109
7110<p>Het succes van een Plan-to-Perform-proces begint met een sterke basis: een bekwaam team. De kennis en ervaring van je medewerkers zijn essentieel om de complexiteit van je bedrijf te begrijpen en hiermee effectief om te gaan.</p>
7111
7112
7113
7114<p>Naast het juiste team is moderne technologie onmisbaar. Een geavanceerd planningssysteem vormt de ruggengraat van het proces, omdat het de tools biedt voor financiële planning, analyse en rapportage. Met een goed systeem kunnen bedrijven zorgen voor nauwkeurige gegevens, efficiënter werken en beter onderbouwde beslissingen nemen. In deze blog lees je waarom het gebruik van spreadsheets voor zo’n cruciaal proces vaak tekortschiet.</p>
7115
7116
7117
7118<p>Daarnaast zijn goede gegevens van levensbelang. Nauwkeurige, tijdige en relevante data zorgen ervoor dat bedrijven weloverwogen beslissingen kunnen nemen en zich snel kunnen aanpassen aan veranderingen. Te weinig of onjuiste data kunnen het Plan-to-Perform-proces vertragen en verstoren. Maar een teveel aan data is bijna net zo problematisch: overtollige informatie kan voor onnodig extra werk zorgen zonder de nauwkeurigheid te verbeteren.</p>
7119
7120
7121
7122<h3 class="wp-block-heading">Conclusie</h3>
7123
7124
7125
7126<p>Samenvattend is een goed ontworpen en uitgevoerd Plan-to-Perform-proces een cruciaal onderdeel van elke bedrijfsstrategie. Het vereist getalenteerde mensen, geavanceerde technologie en kwalitatief hoogwaardige data. Door dit proces op de juiste manier te implementeren, kunnen bedrijven hun strategische plannen niet alleen ambitieus, maar ook haalbaar maken.</p>
7127
7128
7129
7130<p>Wil je meer weten over je eigen planningsproces? Download onze gids met best practices en ontdek hoe je jouw planningsvolwassenheid kunt verbeteren. Of leun achterover en bekijk ons opgenomen webinar voor een overzicht van de mogelijkheden van onze software.</p>`,K6=`---json
7131{
7132  "title": "Planen und Budgetieren: Top-down, Bottom-up oder auf Basis des Geschäftsmodells?",
7133  "slug": "plannen-en-budgetteren-top-down-bottom-up-of-op-basis-van-het-business-model",
7134  "metaTitle": "Top-down oder Bottom-up budgetieren: was passt?",
7135  "date": "2023-12-14 13:30:28",
7136  "category": "Articles",
7137  "tags": [
7138    "Planung"
7139  ],
7140  "excerpt": "Top-down, Bottom-up oder Budgetierung auf Basis Ihres Geschäftsmodells? Smartbooks unterstützt jede Methode und rechnet Anpassungen an Ihrem Jahresplan direkt durch.",
7141  "originalUrl": "https://smartbooks.ai/artikelen/plannen-en-budgetteren-top-down-bottom-up-of-op-basis-van-het-business-model/",
7142  "meta": null
7143}
7144---
7145<p>Viele mittelständische Buchhaltungspakete bieten die Möglichkeit, auf Kontoebene zu planen oder zu budgetieren. Das ist jedoch zeitaufwendig und viel zu detailliert, um jeden Monat einen Betrag pro Konto einzugeben. Einfacher wird es, wenn Sie auf Ebene „Löhne“ oder ähnlichen Aggregaten budgetieren. Aber selbst dann geben Sie 12 mal einen Betrag ein — die Herleitung liegt hoffentlich irgendwo in einer Excel-Datei.</p>
7146
7147<p>
7147Ideal ist es, das Geschäftsmodell einmalig im Planungstool zu hinterlegen und dabei etwa saisonale Effekte oder Personal­fluktuation zu berücksichtigen. Das Geschäftsmodell enthält eine Struktur, in der Sie z. B. verkaufte Stückzahlen oder Stunden mal Tarif planen. Ergänzt um konstante und variable Kosten. So werden alle Annahmen im Modell festgehalten — und Sie können strukturiert vorausplanen.</p>
7148
7149<p>Smartbooks unterstützt Budgetierung auf Basis Ihres Geschäftsmodells und sorgt dafür, dass ein Jahresplan einfach angepasst und durchgerechnet werden kann. Zusätzlich können Sie ein Alternativszenario neben Budget und Ist-Zahlen stellen. Monatlich behalten Sie so den Puls, ob sich Umsatz, Kosten und Liquidität wie geplant entwickeln.</p>`,q6=`---json
7150{
7151  "title": "Planning and Budgeting: Top-down, bottom-up, or business model-based?",
7152  "metaTitle": "Top-down or Bottom-up Budgeting: Which Fits?",
7153  "slug": "planning-and-budgeting-top-down-bottom-up-or-based-on-the-business-model",
7154  "date": "",
7155  "category": "Articles",
7156  "tags": [
7157    "Budgeting",
7158    "Financial Planning",
7159    "Business Model",
7160    "SME",
7161    "Cash Flow"
7162  ],
7163  "excerpt": "Top-down, bottom-up, or business model-based budgeting? Smartbooks supports every method and instantly recalculates changes to your annual plan.",
7164  "originalUrl": "",
7165  "meta": {
7166    "type_bedrijf": "Financial Software"
7167  }
7168}
7169---
7170<p>Many SME accounting packages offer the option to plan or budget at the general ledger account level. However, entering a figure for every GL account every month is time-consuming and far too detailed. It becomes easier if you can budget at a higher level, such as 'wages'. But even then, you still have to enter a figure 12 times, with the supporting documentation hopefully stored somewhere in an Excel sheet.</p>
7171
7172<p>The ideal approach is to enter your business model into your budgeting software once, taking into account seasonal influences and the fact that employees will leave and join throughout the year. The business model contains a structure where you plan, for example, the number of products sold or hours worked multiplied by a rate. In addition, fixed and variable costs are included in the model. In this way, all assumptions are captured in the model, allowing you to plan ahead effectively.</p>
7173
7174<p>Smartbooks supports budgeting based on your business model and ensures that an annual plan can be easily adjusted and recalculated. You can also place an alternative scenario alongside the budget and actual figures. This allows you to keep a close eye on whether revenue, costs, and cash flow are developing as planned on a monthly basis.</p>`,H6=`---json
7175{
7176  "title": "Plannen en Budgetteren; Top down, bottom up of op basis van het business model?",
7177  "metaTitle": "Top-down of bottom-up budgetteren: welke past?",
7178  "slug": "plannen-en-budgetteren-top-down-bottom-up-of-op-basis-van-het-business-model",
7179  "order": 44,
7180  "date": "2023-12-14 13:30:28",
7181  "category": "Articles",
7182  "tags": [
7183    "Planning"
7184  ],
7185  "excerpt": "Top-down, bottom-up of budgetteren op basis van je business model? Smartbooks ondersteunt elke methode en rekent aanpassingen aan je jaarplan direct door.",
7186  "originalUrl": "https://smartbooks.ai/artikelen/plannen-en-budgetteren-top-down-bottom-up-of-op-basis-van-het-business-model/",
7187  "meta": null,
7188  "enSlug": "planning-and-budgeting-top-down-bottom-up-or-based-on-the-business-model"
7189}
7190---
7191<p>Veel MKB boekhoudpakketten geven de mogelijkheid om op grootboekrekening-niveau te plannen of te budgetteren. Het is echter tijdrovend en veel te gedetailleerd om voor iedere maand een getal per grootboekrekening in te voeren. Het wordt al makkelijker als je bijvoorbeeld op het niveau ‘lonen’ kunt gaan budgetteren. Maar dan moet je nog steeds 12 keer een getal invoeren, waarvan de onderbouwing hopelijk ergens in een excelsheet wordt bewaard.</p>
7192
7193
7194
7195<p>Ideaal is het om je bedrijfsmodel eenmalig in het budgetteringsprogramma in te voeren, daarbij bijvoorbeeld rekening houdend met seizoensinvloeden en het feit dat er gedurende een jaar mensen weg gaan en mensen bij komen. Het bedrijfsmodel bevat een structuur waarin je bijvoorbeeld het aantal verkoc
7195hte producten of uren maal een tarief gaat plannen. Daarnaast zijn er constante en variabele kosten die in het model worden opgenomen. Op die wijze worden alle aannames vastgelegd in het model en kun je vooruit gaan plannen.</p>
7196
7197
7198
7199<p>Smartbooks ondersteunt budgetteren op basis van jouw bedrijfsmodel en zorgt dat een jaarplan eenvoudig kan worden aangepast en doorgerekend. Ook kun je een alternatief scenario naast het budget en de werkelijke cijfers zetten. Maandelijks kun je dan de vinger aan de pols houden of omzet, kosten én cash zich ontwikkelen zoals gepland.</p>`,U6=`---json
7200{
7201  "title": "Kundenreferenz Primus Wafer Paper",
7202  "slug": "primus-wafer-paper",
7203  "metaTitle": "Konsolidierung für einen Hersteller: Fallstudie Primus",
7204  "date": "2025-01-31 15:37:35",
7205  "category": "Case Studies",
7206  "tags": [
7207    "Produktion",
7208    "Automatisierung",
7209    "Financial Reporting",
7210    "Monatsabschluss"
7211  ],
7212  "excerpt": "Konsolidierung und Reporting für einen Hersteller: Wie Primus den Monatsabschluss um 5 Tage verkürzt und mehr Vertrauen in die Zahlen gewonnen hat.",
7213  "originalUrl": "",
7214  "meta": {
7215    "type_bedrijf": "Lebensmittelproduktion",
7216    "naam_medewerker": "Marcel Steenbrink",
7217    "functie_medewerker": "CFO, Primus Wafer Paper",
7218    "logo_bedrijf": "primus-wafer-paper-logo.png"
7219  }
7220}
7221---
7222<h1>Kundenreferenz: <strong>Primus Wafer Paper</strong></h1>
7223<p class="has-medium-font-size">Wie Primus seinen Monatsabschluss um 5 Tage verkürzt und dabei mehr Einblick und Vertrauen in die Zahlen gewonnen hat.</p>
7224
7225<h2>Kundenprofil</h2>
7226<p>Primus Wafer Paper mit Sitz in Oostzaan ist ein führendes niederländisches Unternehmen der Lebensmittelbranche. Das Unternehmen produziert essbares Papier, das weltweit in Anwendungen wie Kokosmakronen, Bio-Broten und Energieriegeln eingesetzt wird. Mit 60 Mitarbeitenden exportiert Primus in mehr als 40 Länder.</p>
7227
7228<h2>Herausforderung</h2>
7229<p>Als CFO von Primus stand Marcel Steenbrink vor der Aufgabe, die Finanzverwaltung effizienter transparent zu machen. Zwar verfügte Primus über ein solides ERP-System, dessen Reporting-Fähigkeiten waren jedoch begrenzt. Die Folge: starke Abhängigkeit von Excel und manuellen Prozessen — zeitaufwendig und fehleranfällig.<br>Marcel suchte eine Lösung, die Standardberichte einfach und automatisiert erstellt. Wichtige Anforderungen: intuitive Bedienung, kurze Implementierungszeit und geringe Kosten — ohne einen eigenen Spezialisten dafür einstellen zu müssen.</p>
7230
7231<h2>Die Lösung mit Smartbooks</h2>
7232<p class="has-medium-font-size">Primus entschied sich für die Smartbooks.ai-Reporting-Plattform — wegen ihrer Einfachheit und schnellen Einführung. Marcel bezeichnet die Entscheidung als „No-Brainer“, nachdem in der Demo 80–90 % seiner Anforderungen out of the box abgedeckt waren. Innerhalb von zwei Wochen war das System vollständig einsatzbereit — mit nur 10 Stunden Zeitaufwand seitens Primus.<br>Dank der Flexibilität von Smartbooks konnte der spezifische Kontenplan schnell in die Plattform integriert werden. Standardberichte ließen sich einfach an die individuellen Bedürfnisse des Unternehmens anpassen — mit einer benutzerfreundlichen, effizienten Lösung als Ergebnis.</p>
7233
7234<h4>Bessere Einblicke</h4>
7235<p>Die Plattform ermöglicht mühelosen Wechsel zwischen Gesamtübersicht und Buchungsdetails. Das führt zu qualitativ besseren Reviews der Zahlen und einem stärkeren Griff auf die finanzielle Lage.</p>
7236
7237<h4>Effizienzgewinne</h4>
7238<p>Die Durchlaufzeit des Monatsabschlusses hat sich um volle fünf Tage verkürzt. So kann das Team schneller und präziser berichten.</p>
7239
7240<h4>Vertrauen in die Zahlen</h4>
7241<p>Berichte sind heute standardisiert und für das Management direkt zugänglich — das stärkt das Vertrauen in die Zahlen und in das Finance-Team.</p>
7242
7243<h2>Rückmeldung von Primus</h2>
7244<p>Laut Marcel verlief die Implementierung „reibungslos und unkompliziert“. Das Team war positiv überrascht von der intuitiven Oberfläche und der Geschwindigkeit, mit der es eigenständig arbeiten konnte.<br><br>
7244„Das Vertrauen in unsere Finanzberichte ist dank der Transparenz und Verlässlichkeit von Smartbooks gewachsen. Unser Team hat mehr Gewicht und kann sich auf das konzentrieren, was wirklich zählt“, so Marcel.</p>
7245
7246<h2>Empfehlung</h2>
7247<p>Marcel Steenbrink empfiehlt Smartbooks Mittelständlern uneingeschränkt: „In über 30 Jahren Berufserfahrung habe ich mit vielen Tools gearbeitet, aber Smartbooks ist mit Abstand am einfachsten und schnellsten einzuführen. Es deckt die Bedürfnisse von 80–90 % mittelständischer Unternehmen ab. Für uns ist es aus dem Abschlussprozess nicht mehr wegzudenken.“</p>
7248
7249<h2>Fazit</h2>
7250<p>Primus Wafer Paper zeigt, wie eine smarte, benutzerfreundliche Lösung wie Smartbooks Unternehmen hilft, ihre Finanzprozesse zu straffen. Mit besseren Einblicken, mehr Effizienz und standardisierten Berichten hat Primus signifikante Fortschritte erzielt — zu geringen Kosten und mit einer Implementierung, die nur 10 Stunden Teamzeit gekostet hat.</p>`,G6=`---json
7251{
7252  "title": "Customer Case Primus Wafer Paper",
7253  "metaTitle": "Consolidation for a Manufacturer: Primus Case",
7254  "slug": "primus-wafer-paper",
7255  "date": "2025-01-31 15:37:35",
7256  "category": "Case Studies",
7257  "tags": [
7258    "Manufacturing",
7259    "Automation",
7260    "Financial Reporting",
7261    "Monthly Close"
7262  ],
7263  "excerpt": "Consolidation and reporting for a manufacturing company: how Primus shortened its monthly close by 5 days and gained more confidence in the numbers.",
7264  "originalUrl": "https://smartbooks.ai/klantcase/klantcase-primus-wafer-paper/",
7265  "meta": {
7266    "type_bedrijf": "Food Production",
7267    "naam_medewerker": "Marcel Steenbrink",
7268    "functie_medewerker": "CFO, Primus Wafer Paper",
7269    "logo_bedrijf": "primus-wafer-paper-logo.png"
7270  }
7271}
7272---
7273<div class="wp-block-kadence-column"><div class="kt-inside-inner-col">
7274<div style="height:2rem" aria-hidden="true" class="wp-block-spacer"></div>
7275
7276<h1 class="wp-block-kadence-advancedheading">Customer Case: <strong>Primus Wafer Paper</strong></h1>
7277
7278<p class="has-text-align-center has-medium-font-size" style="padding-top:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--60)">How Primus shortened its monthly close by 5 days and gained more insight and confidence in the numbers.</p>
7279
7280<div class="wp-block-kadence-advancedbtn kb-buttons-wrap"></div>
7281</div></div>
7282
7283<div class="wp-block-kadence-column"><div class="kt-inside-inner-col">
7284<h2 class="wp-block-kadence-advancedheading">Customer profile</h2>
7285
7286<p>Primus Wafer Paper, based in Oostzaan, is a leading Dutch company in the food industry. The company produces edible paper that is used worldwide in a wide range of applications, including coconut macaroons, organic bread, and energy bars. With a team of 60 employees, Primus exports to more than 40 countries.</p>
7287
7288<h2 class="wp-block-kadence-advancedheading">Challenge</h2>
7289
7290<p>As CFO of Primus, Marcel Steenbrink faced the challenge of gaining more efficient insight into the company's financial administration. While Primus relied on a solid ERP system, its reporting capabilities were limited. This resulted in a heavy dependence on Excel and manual processes — both time-consuming and prone to errors.<br>Marcel was looking for a solution that could generate standard reports easily and automatically. Key requirements were ease of use, a short implementation time, and minimal cost — without the need for a dedicated specialist.</p>
7291</div></div>
7292
7293<div class="wp-block-kadence-column"><div class="kt-inside-inner-col">
7294<figure class="wp-block-video"><video controls src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Primus_lang%20%E2%80%90%20low%20res.mp4"></video></figure>
7295</div></div>
7296
7297<div class="wp-block-kadence-column"><div class="kt-inside-inner-col">
7298<h2 class="wp-block-kadence-advancedheading">The solution with Smartbooks</h2>
7299
7300<p class="has-medium-font-size">Primus chose the Smartbooks.ai reporting platform for its simplicity and fast implementation. Marcel describes the decision as “a no-brainer” after seeing the demo, in which 80–90% of his requirements were covered out of the box. The system was fully operational within two weeks, with only 10 hours of time investment from the Primus team.<br>The flexibility of Smartbooks allowed the team to quickly integrate their specific chart of accounts into the platform. Standard reports were easily tailored to the company's unique needs, resulting in a user-friendly and efficie
7300nt solution.</p>
7301</div></div>
7302
7303<div class="wp-block-kadence-column"><div class="kt-inside-inner-col">
7304<h4 class="wp-block-kadence-advancedheading">Improved insight</h4>
7305
7306<p>The platform makes it easy to move from a high-level overview down to transaction-level detail. This has led to better-quality reviews of the numbers and a stronger grip on the financial situation.</p>
7307
7308<h4 class="wp-block-kadence-advancedheading">Efficiency gains</h4>
7309
7310<p>The lead time of the monthly close has been reduced by a full five days. This enables the team to report faster and more accurately.</p>
7311
7312<h4 class="wp-block-kadence-advancedheading">Confidence in the numbers</h4>
7313
7314<p>Reports are now standardized and easily accessible to the management team — strengthening trust in both the numbers and the finance team itself.</p>
7315</div></div>
7316
7317<div class="wp-block-kadence-column"><div class="kt-inside-inner-col">
7318<h2 class="wp-block-kadence-advancedheading">Feedback from Primus</h2>
7319
7320<p class="wp-block-kadence-advancedheading">According to Marcel, the implementation process was “smooth and straightforward.” The team was positively surprised by the intuitive user interface and how quickly they were able to work with the tool independently.<br><br>“Confidence in our financial reports has grown thanks to the transparency and reliability Smartbooks provides. It has given our team more clout and allows us to focus on what really matters,” says Marcel.</p>
7321
7322<h2 class="wp-block-kadence-advancedheading">Recommendation</h2>
7323
7324<p class="wp-block-kadence-advancedheading">Marcel Steenbrink wholeheartedly recommends Smartbooks to mid-sized companies: “In my 30+ years of experience I've worked with many tools, but Smartbooks is by far the simplest and fastest to implement. It covers the needs of 80–90% of mid-sized companies. For us, it has become an indispensable part of our close process.”</p>
7325
7326<h2 class="wp-block-kadence-advancedheading">Conclusion</h2>
7327
7328<p class="wp-block-kadence-advancedheading">Primus Wafer Paper shows how a smart, user-friendly solution like Smartbooks can help companies streamline their financial processes. With improved insight, greater efficiency, and standardized reporting, Primus has made significant gains — at a low cost and with an implementation that took just 10 hours of their team's time.</p>
7329</div></div>`,$6=`---json
7330{
7331  "title": "Klantcase Primus Wafer Paper",
7332  "metaTitle": "Consolidatie productiebedrijf: klantcase Primus",
7333  "slug": "primus-wafer-paper",
7334  "order": 10,
7335  "date": "2025-01-31 15:37:35",
7336  "category": "Case Studies",
7337  "tags": [],
7338  "excerpt": "Consolidatie en rapportage voor een productiebedrijf: hoe Primus de maandafsluiting 5 dagen verkortte en meer vertrouwen in de cijfers kreeg.",
7339  "originalUrl": "https://smartbooks.ai/klantcase/klantcase-primus-wafer-paper/",
7340  "meta": {
7341    "naam_medewerker": "Marcel Steenbrink",
7342    "functie_medewerker": "CFO, Primus Wafer Paper"
7343  },
7344  "enSlug": "primus-wafer-paper"
7345}
7346---
7347<div class="wp-block-kadence-column kadence-column2951_f4ffc0-a0"><div class="kt-inside-inner-col">
7348<div style="height:2rem" aria-hidden="true" class="wp-block-spacer"></div>
7349
7350
7351
7352<h1 class="kt-adv-heading2951_709f9f-75 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_709f9f-75">Klantcase: <strong>Primus Wafer Paper</strong></h1>
7353
7354
7355
7356<p class="has-text-align-center has-medium-font-size" style="padding-top:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--60)">Hoe Primus de maandafsluiting met 5 dagen heeft verkort en meer inzicht en vertrouwen in de cijfers kreeg.</p>
7357
7358
7359
7360<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns2951_5230fb-c9"></div>
7361</div></div>
7362
7363
7364
7365
7366
7367<div class="wp-block-kadence-column kadence-column2951_567052-ad"><div class="kt-inside-inner-col">
7368<h2 class="kt-adv-heading2951_f9bfc8-1f wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_f9bfc8-1f">Klantprofiel</h2>
7369
7370
7371
7372<p>Primus Wafer Paper, gevestigd in Oostzaan, is een toonaangevend Nederlands bedrijf in de voedingsindustrie. Het bedrijf produceert eetbaar papier dat wereldwijd wordt gebruikt in diverse toepassingen zoals kokosmakronen, biologisch brood en energierepen. Met een team van 60 medewerkers exp
7372orteert Primus naar meer dan 40 landen.</p>
7373
7374
7375
7376<h2 class="kt-adv-heading2951_39a339-7b wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_39a339-7b">Uitdaging</h2>
7377
7378
7379
7380<p>Als CFO van Primus stond Marcel Steenbrink voor de uitdaging om efficiënter inzicht te verkrijgen in de financiële administratie. Hoewel het bedrijf gebruik maakt van een betrouwbaar ERP-systeem, bood dit beperkte mogelijkheden voor rapportages. Dit resulteerde in een afhankelijkheid van Excel en handmatige processen, wat tijdrovend en foutgevoelig bleek te zijn.<br>Marcel zocht naar een oplossing waarmee standaardrapportages eenvoudig en automatisch konden worden gegenereerd. Belangrijke eisen waren gebruiksgemak, een korte implementatietijd en minimale kosten, zonder dat er een toegewijde specialist nodig was.</p>
7381</div></div>
7382
7383
7384
7385<div class="wp-block-kadence-column kadence-column2951_3abd83-b0"><div class="kt-inside-inner-col">
7386<figure class="wp-block-video"><video controls src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Primus_lang%20%E2%80%90%20low%20res.mp4"></video></figure>
7387</div></div>
7388
7389
7390
7391
7392
7393<div class="wp-block-kadence-column kadence-column2951_88d014-c4"><div class="kt-inside-inner-col">
7394<h2 class="kt-adv-heading2951_811b80-7d wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_811b80-7d">Oplossing met Smartbooks:</h2>
7395
7396
7397
7398<p class="has-medium-font-size">Primus koos voor de rapportagetool van Smartbooks.ai vanwege de eenvoud en de snelle implementatiemogelijkheden. Marcel omschrijft het proces als “een no-brainer” na het zien van de demo, waarin 80-90% van zijn behoeften direct werd afgedekt. Binnen twee weken was het systeem volledig operationeel, en de tijdsinvestering vanuit Primus bedroeg slechts 10 uur.<br>De flexibiliteit van Smartbooks stelde het team in staat om hun specifieke grootboekstructuur snel te integreren in de tool. Standaardrapportages waren eenvoudig aan te passen aan de unieke behoeften van het bedrijf, waardoor een gebruiksvriendelijke en efficiënte oplossing werd gerealiseerd.</p>
7399
7400
7401
7402<p class="has-medium-font-size"></p>
7403</div></div>
7404
7405
7406
7407
7408
7409<div class="wp-block-kadence-column kadence-column2951_5579bc-ea"><div class="kt-inside-inner-col">
7410<h4 class="kt-adv-heading2951_1cbdf4-7f wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_1cbdf4-7f">Verbeterd Inzicht</h4>
7411
7412
7413
7414<p>De tool biedt uitgebreide mogelijkheden om vanuit een helikopterview door te zoomen naar details tot op transactieniveau. Dit heeft geleid tot betere cijferbeoordelingen en meer grip op de financiële situatie.</p>
7415
7416
7417
7418<h4 class="kt-adv-heading2951_c4453e-2e wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_c4453e-2e">Efficiëntieverbetering</h4>
7419
7420
7421
7422<p>De doorlooptijd van de maandafsluiting is met maar liefst vijf dagen verkort. Dit stelt het team in staat sneller en accurater te rapporteren.</p>
7423
7424
7425
7426<h4 class="kt-adv-heading2951_9283e6-56 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_9283e6-56">Vertrouwen</h4>
7427
7428
7429
7430<p>Rapportages zijn nu gestandaardiseerd en eenvoudig toegankelijk voor het managementteam. Wat bijdraagt aan het vertrouwen in de cijfers en het finance team.</p>
7431</div></div>
7432
7433
7434
7435
7436
7437<div class="wp-block-kadence-column kadence-column2951_35e108-54"><div class="kt-inside-inner-col">
7438<h2 class="kt-adv-heading2951_3e47fe-48 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_3e47fe-48">Feedback van Primus</h2>
7439
7440
7441
7442<p class="kt-adv-heading2951_0ca1db-82 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_0ca1db-82">Volgens Marcel was het implementatieproces “vlot en eenvoudig”. Het team was positief verrast door de intuïtieve gebruikersinterface en de snelheid waarmee zij zelfstandig met de tool konden werken.<br><br>“Het vertrouwen in de financiële rapportages is toegenomen dankzij de transparantie en betrouwbaarheid die Smartbooks biedt. Het heeft ons team slagkracht gegeven en laat ons focussen op de belangrijke zaken,” aldus Marcel.</p>
7443
7444
7445
7446<h2 class="kt-adv-heading2951_f857b9-62 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_f857b9-62">Aanbeveling</h2>
7447
7448
7449
7450<p class="kt-adv-heading2951_5b32fc-b4 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_5b32fc-b4">Marcel Steenbrink raadt Smartbooks van harte aan voor MKB-bedrijven: “Ik heb in mijn 30+ jaar ervaring met veel tools gewerkt, maar Smartbooks is by far de eenvoudigste en snelste om te implementeren. Het dekt de behoeften van 80-90% van de MKB bedrijven. Voor ons is het een onmisbare schakel geworden in ons afsluitproces.”</p>
7451
7452
7453
7454<h2 class="kt-adv-heading2951_47dd72-9f wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_47dd72-9f">Conclusie</h2>
7455
7456
7457
7458<p class="kt-adv-heading2951_54c6a8-95 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2951_54c6a8-95">Primus Wafer Paper illustreert hoe een slimme en gebruiksvriendelijke oplossing als Smartbooks bedrijven kan helpen bij het stroomlijnen van financiële processen. Met verbeterd inzicht, efficiëntie en standaardisatie heeft Primus belangrijke verbeteringen gerealiseerd. Tegen lage kosten en een implementatie die Primus maar 10 uur heeft gekost.</p>
7459</div></div>`,Z6=`---json
7460{
7461  "title": "Quick ratio calculation: formula, benchmark and pitfalls",
7462  "slug": "quick-ratio-calculation",
7463  "date": "2026-09-16 10:00:00",
7464  "category": "Articles",
7465  "tags": [
7466    "Analyse",
7467    "Cashflow",
7468    "Business Control",
7469    "KPI"
7470  ],
7471  "excerpt": "Quick ratio calculation explained: the formula excluding inventory, a worked example, what counts as a healthy benchmark and where the ratio misleads.",
7472  "originalUrl": "",
7473  "metaTitle": "Quick ratio calculation: formula and benchmark"
7474}
7475---
7476<p>A <strong>quick ratio calculation</strong>
7476 divides current assets minus inventory by current liabilities. The result shows whether a company can meet its obligations due within a year without having to sell stock first.</p>
7477<p>That is exactly the question the <a href="/en/articles/current-ratio">current ratio</a> leaves open. A company with a current ratio of 1.9 and a warehouse full of slow-moving goods has no buffer; it has a sales problem. Removing inventory from the numerator gives the stricter view of immediate payment capacity, which is why lenders put both ratios in their covenants.</p>
7478<h2>What the quick ratio measures</h2>
7479<p>The quick ratio, also called the acid test, compares the assets that can be turned into cash at short notice without losing value against the debts falling due within a year. The gap with the current ratio comes down to a single balance sheet item: inventory.</p>
7480<p>Two definitions are in common use, and they do not always produce the same figure:</p>
7481<ul>
7482<li><strong>Subtractive version:</strong> current assets minus inventory. This is the most widely used definition and the one that appears in bank covenants.</li>
7483<li><strong>Additive version:</strong> cash plus receivables plus marketable securities. Alongside inventory this also excludes prepaid expenses, and rightly so: a prepaid insurance premium is money already spent, not cash still to come.</li>
7484</ul>
7485<p>If the balance sheet carries substantial prepayments or other short-term receivables, the additive version lands noticeably lower. Pick one definition, document which items it contains and apply it consistently. A ratio whose composition shifts from report to report is noise, not management information.</p>
7486<h2>The quick ratio calculation step by step</h2>
7487<p><strong>Quick ratio = (current assets &minus; inventory) &divide; current liabilities</strong></p>
7488<ol>
7489<li>Add up current assets: inventory, work in progress, receivables, other short-term receivables, prepaid expenses and cash.</li>
7490<li>Deduct inventory. In manufacturing and project businesses, treat work in progress as inventory too: it converts to cash just as slowly.</li>
7491<li>Add up current liabilities: payables, VAT and payroll tax due, the drawn part of the overdraft facility, the portion of long-term loans repayable within twelve months, and accrued liabilities.</li>
7492<li>Divide the adjusted current assets by the current liabilities.</li>
7493</ol>
7494<p>The outcome is a factor, not a percentage. A quick ratio of 1.10 means there is &euro;1.10 of readily liquid assets for every euro of current liabilities.</p>
7495<h2>Quick ratio calculation example</h2>
7496<table>
7497<thead><tr><th>Balance sheet item</th><th>
7497Amount</th></tr></thead>
7498<tbody>
7499<tr><td>Inventory</td><td>&euro;480,000</td></tr>
7500<tr><td>Work in progress</td><td>&euro;120,000</td></tr>
7501<tr><td>Receivables</td><td>&euro;620,000</td></tr>
7502<tr><td>Prepaid expenses</td><td>&euro;40,000</td></tr>
7503<tr><td>Cash</td><td>&euro;110,000</td></tr>
7504<tr><td><strong>Current assets</strong></td><td><strong>&euro;1,370,000</strong></td></tr>
7505<tr><td>Less: inventory and work in progress</td><td>&minus; &euro;600,000</td></tr>
7506<tr><td><strong>Quick ratio numerator</strong></td><td><strong>&euro;770,000</strong></td></tr>
7507<tr><td>Current liabilities</td><td>&euro;700,000</td></tr>
7508<tr><td><strong>Quick ratio</strong></td><td><strong>1.10</strong></td></tr>
7509</tbody>
7510</table>
7511<p>Quick ratio = 770,000 &divide; 700,000 = <strong>1.10</strong>. The same balance sheet produces a current ratio of 1,370,000 &divide; 700,000 = <strong>1.96</strong>. Those two numbers tell different stories: the current ratio suggests a comfortable position, while the quick ratio shows that almost half of the cover sits in inventory and work in progress.</p>
7512<p>Applying the additive version to the same figures leaves only receivables and cash: 730,000 &divide; 700,000 = 1.04. The six-hundredths difference comes entirely from prepaid expenses and other receivables. With a covenant threshold at 1.0, that is no longer a theoretical distinction.</p>
7513<h2>What is a good quick ratio?</h2>
7514<p>As a rule of thumb, a quick ratio of <strong>1 or higher</strong> is considered healthy: current liabilities can be settled without selling stock. Below 1, payment capacity depends on moving inventory, drawing extra credit or stretching suppliers.</p>
7515<p>The benchmark is strongly sector-dependent. Supermarkets and hospitality collect at the till and buy on credit, so a quick ratio of 0.3 to 0.5 is normal there. Wholesale and machine building need a wider margin, because both inventory and collection periods run long. In pure services with no stock, the quick ratio and the current ratio sit almost on top of each other, so the receivables ageing tells you more.</p>
7516<p>The direction over twelve months matters more than the level on any single reporting date, as does the link with <a href="/en/articles/working-capital">working capital</a> and the <a href="/en/articles/solvency-ratio">solvency ratio</a>. A quick ratio drifting from 1.4 to 1.0 across four quarters is a sharper signal than a stable 0.9.</p>
7517<h2>Pitfalls in the quick ratio calculation</h2>
7518<ul>
7519<li><strong>Bad debts still count.</strong> The formula strips out obsolete stock, yet leaves the invoice that has been open for 180 days. Adjust the numerator for the allowance for doubtful accounts, or you measure payment capacity that does not exist.</li>
7520<li><strong>The reporting date is a snapshot.</strong> Paying suppliers from the overdraft just before the cut-off reduces numerator and denominator by the same amount, which lifts any ratio above 1. Judge the series, not the point.</li>
7521<li><strong>The overdraft belongs in the denominator</strong>, even when the bank renews the facility silently every year. Undrawn headroom does not belong in the numerator: that is financing capacity, not an asset.</li>
7522<li><strong>Work in progress often sits outside the inventory line.</strong> In project organisations it is the largest item that wrongly stays in the numerator, while it only becomes cash after delivery and invoicing.</li>
7523<li><strong>Consolidated figures differ from entity figures.</strong> Intercompany receivables and payables disappear on elimination, so an operating company can run tight while the group looks comfortable. Calculate at both levels before drawing a conclusion.</li>
7524</ul>
7525<h2>Frequently asked questions about the quick ratio</h2>
7526<h3>How do you do a quick ratio calculation?</h3>
7527<p>Subtract inventory from current assets and divide the remainder by current liabilities. Both figures come straight from the balance sheet. Treat work in progress as inventory when it is reported on a separate line.</p>
7528<h3>What is the difference between the quick ratio and the current ratio?</h3>
7529<p>The current ratio divides all current assets by current liabilities; the quick ratio leaves inventory out of the numerator. It is therefore the stricter measure and always comes out lower, except in a business that carries no stock at all.</p>
7530<h3>What does a quick ratio below 1 mean?</h3>
7531<p>
7531Debts due within a year exceed the assets convertible to cash at short notice. In a sector with fast stock turnover that need not be a problem; with long lead times it is a reason to tighten the cash forecast.</p>
7532<h3>Can the quick ratio be too high?</h3>
7533<p>Yes. A quick ratio of 3 or more usually means significant amounts sitting in receivables or on the bank account without earning a return. That is a profitability question rather than a liquidity risk.</p>
7534<h2>Running the quick ratio calculation every month</h2>
7535<p>In many organisations this figure is only produced at year-end, while the underlying balance sheet items move every week. Smartbooks captures such a ratio as a custom metric: a formula across the balance sheet accounts that appears as a fixed row or KPI tile in the monthly report, referenced against the prior period or budget, per entity and at consolidated level.</p>
7536<p>That puts the quick ratio in the same <a href="/en/functionalities/reporting">reporting set</a> as the result, so the trend is visible well before a covenant comes into view. To look beyond the reporting date, pair it with a <a href="/en/articles/cash-budget">cash budget</a> that plans cash flow week by week. <a href="/en/demo">Book a demo</a> and see the ratio on your own balance sheet.</p>
7537`,Y6=`---json
7538{
7539  "title": "Quick ratio berekenen: formule, norm en valkuilen",
7540  "slug": "quick-ratio-berekenen",
7541  "enSlug": "quick-ratio-calculation",
7542  "date": "2026-09-16 10:00:00",
7543  "category": "Articles",
7544  "tags": [
7545    "Analyse",
7546    "Cashflow",
7547    "Business Control",
7548    "KPI"
7549  ],
7550  "excerpt": "Quick ratio berekenen: de formule zonder voorraden, een rekenvoorbeeld, wanneer een uitkomst onder 1 zorgelijk is en het verschil met de current ratio.",
7551  "originalUrl": "",
7552  "metaTitle": "Quick ratio berekenen: formule, norm en voorbeeld"
7553}
7554---
7555<p><strong>Quick ratio berekenen</strong> doe je door de vlottende activa minus de voorraden te delen door de kortlopende schulden. De uitkomst laat zien of een onderneming haar verplichtingen binnen een jaar kan voldoen zonder eerst voorraad te hoeven verkopen.</p>
7556<p>Dat is precies de vraag die de <a href="/artikelen/current-ratio-berekenen">current ratio</a> openlaat. Een onderneming met een current ratio van 1,9 en een magazijn vol traag lopende artikelen heeft geen buffer maar een verkoopopgave. De quick ratio haalt die voorraad uit de teller en geeft daarmee het strengere beeld van de directe betaalcapaciteit &mdash; de reden dat banken hem in covenanten naast de current ratio zetten.</p>
7557<h2>Wat is de quick ratio?</h2>
7558<p>De quick ratio, ook wel acid test of kengetal voor directe liquiditeit, meet de verhouding tussen de bezittingen die op korte termijn zonder waardeverlies in geld zijn om te zetten en de schulden die binnen een jaar moeten worden betaald. Het verschil met de current ratio zit in &eacute;&eacute;n post: de voorraad.</p>
7559<p>Er zijn twee gangbare schrijfwijzen van de formule, en die leveren niet altijd dezelfde uitkomst op:</p>
7560<ul>
7561<li><strong>Aftrekkende variant:</strong> vlottende activa minus voorraden. Dit is de meest gebruikte definitie en de variant die in bankconvenanten staat.</li>
7562<li><strong>Optellende variant:</strong> liquide middelen plus debiteuren plus kortlopende effecten. Deze laat naast de voorraad ook de overlopende activa buiten beschouwing, en terecht: een vooruitbetaalde verzekeringspremie of huur is geen geld dat nog binnenkomt.</li>
7563</ul>
7564<p>Staan er substanti&euml;le vooruitbetaalde kosten of overige vorderingen op de balans, dan valt de optellende variant merkbaar lager uit. Kies &eacute;&eacute;n definitie, leg vast welke posten erin zitten en gebruik hem consequent. Een ratio die per rapportage van samenstelling wisselt is geen stuurinformatie maar ruis.</p>
7565<h2>De formule om de quick ratio te berekenen</h2>
7566<p><strong>Quick ratio = (vlottende activa &minus; voorraden) &divide; kortlopende schulden</strong></p>
7567<ol>
7568<li>Tel de vlottende activa op: voorraden, onderhanden werk, debiteuren, overige vorderingen, overlopende activa en liquide middelen.</li>
7569<li>Trek de voorraden eraf. Reken bij een productie- of projectorganisatie ook het onderhanden werk als voorraad: dat is net zo min binnen een maand in kas om te zetten.</li>
7570<li>Tel de kortlopende schulden op: crediteuren, af te dragen btw en loonheffingen, het opgenomen deel van het rekening-courantkrediet, de aflossingsverplichting op langlopende leningen binnen twaalf maanden en de overlopende passiva.</li>
7571<li>Deel de gecorrigeerde vlottende activa door de kortlopende schulden.</li>
7572</ol>
7573<p>De uitkomst is een factor, geen percentage. Een quick ratio van 1,10 betekent dat tegenover elke euro kortlopende schuld &euro;1,10 aan snel liquide bezittingen staat.</p>
7574<h2>Rekenvoorbeeld: quick ratio berekenen</h2>
7575<table>
7576<thead><tr><th>
7576Balanspost</th><th>Bedrag</th></tr></thead>
7577<tbody>
7578<tr><td>Voorraden</td><td>&euro;480.000</td></tr>
7579<tr><td>Onderhanden werk</td><td>&euro;120.000</td></tr>
7580<tr><td>Debiteuren</td><td>&euro;620.000</td></tr>
7581<tr><td>Overlopende activa</td><td>&euro;40.000</td></tr>
7582<tr><td>Liquide middelen</td><td>&euro;110.000</td></tr>
7583<tr><td><strong>Vlottende activa</strong></td><td><strong>&euro;1.370.000</strong></td></tr>
7584<tr><td>Af: voorraden en onderhanden werk</td><td>&minus; &euro;600.000</td></tr>
7585<tr><td><strong>Teller quick ratio</strong></td><td><strong>&euro;770.000</strong></td></tr>
7586<tr><td>Kortlopende schulden</td><td>&euro;700.000</td></tr>
7587<tr><td><strong>Quick ratio</strong></td><td><strong>1,10</strong></td></tr>
7588</tbody>
7589</table>
7590<p>Quick ratio = 770.000 &divide; 700.000 = <strong>1,10</strong>. Dezelfde balans levert een current ratio van 1.370.000 &divide; 700.000 = <strong>1,96</strong> op. Die twee getallen vertellen een ander verhaal: de current ratio suggereert een comfortabele positie, de quick ratio laat zien dat bijna de helft van de dekking in voorraad en onderhanden werk zit.</p>
7591<p>Wie in dit voorbeeld de optellende variant hanteert, houdt alleen debiteuren en liquide middelen over: 730.000 &divide; 700.000 = 1,04. Het verschil van zes honderdsten komt volledig uit de overlopende activa en de overige vorderingen. Bij een covenantgrens van 1,0 is dat geen theoretische discussie.</p>
7592<h2>Wat is een goede quick ratio?</h2>
7593<p>Als vuistregel geldt een quick ratio van <strong>1 of hoger</strong> als gezond: de kortlopende schulden kunnen dan worden voldaan zonder voorraad te verkopen. Onder 1 is de onderneming voor haar betaalcapaciteit afhankelijk van voorraadverkoop, extra krediet of uitstel bij leveranciers.</p>
7594<p>Die norm is wel sterk sectorafhankelijk. Supermarkten en horeca rekenen direct af en kopen op krediet in; een quick ratio van 0,3 tot 0,5 is daar normaal en niet verontrustend. Groothandel en machinebouw hebben juist een ruimere marge nodig, omdat zowel de voorraad als de debiteurentermijn lang is. Bij zuivere dienstverlening zonder voorraad liggen quick ratio en current ratio vrijwel gelijk; het kengetal voegt daar weinig toe en kun je beter vervangen door een blik op de debiteurenaging.</p>
7595<p>Belangrijker dan het niveau op &eacute;&eacute;n balansdatum is de richting over twaalf maanden, en de samenhang met het <a href="/artikelen/werkkapitaal-berekenen">werkkapitaal</a> en de <a href="/artikelen/solvabiliteit-berekenen">solvabiliteit</a>. Een quick ratio die in vier kwartalen van 1,4 naar 1,0 zakt is een serieuzer signaal dan een stabiele 0,9.</p>
7596<h2>Valkuilen bij de quick ratio</h2>
7597<ul>
7598<li><strong>Oninbare debiteuren tellen gewoon mee.</strong> De formule haalt de incourante voorraad eruit, maar niet de factuur die 180 dagen openstaat. Corrigeer de teller voor de voorziening dubieuze debiteuren, anders meet je betaalcapaciteit die er niet is.</li>
7599<li><strong>De balansdatum is een momentopname.</strong> Wie vlak voor de peildatum crediteuren betaalt uit het rekening-courantkrediet, verlaagt teller en noemer met hetzelfde bedrag en duwt een ratio boven 1 dus omhoog. Beoordeel de reeks, niet het punt.</li>
7600<li><strong>Rekening-courantkrediet hoort in de noemer</strong>, ook als de bank de faciliteit elk jaar stilzwijgend verlengt. De ongebruikte ruimte hoort er niet in de teller bij: dat is financieringsruimte, geen bezit.</li>
7601<li><strong>Onderhanden werk staat vaak buiten de voorraadregel.</strong> Bij projectorganisaties is dat de grootste post die ten onrechte in de teller blijft staan, terwijl het pas na oplevering en facturatie kas wordt.</li>
7602<li><strong>Geconsolideerd ziet het er anders uit dan per entiteit.</strong> Intercompany-vorderingen en -schulden vallen weg in de eliminatie, waardoor een werkmaatschappij krap kan zitten terwijl de groep ruim staat. Bereken de ratio op beide niveaus voordat je er een conclusie aan verbindt.</li>
7603</ul>
7604<h2>Veelgestelde vragen over de quick ratio</h2>
7605<h3>Hoe moet je de quick ratio berekenen?</h3>
7606<p>Trek de voorraden af van de vlottende activa en deel het restant door de kortlopende schulden. Beide posten haal je rechtstreeks uit de balans. Reken het onderhanden werk mee als voorraad wanneer dat apart op de balans staat.</p>
7607<h3>Wat is het verschil tussen de quick ratio en de current ratio?</h3>
7608<p>
7608De current ratio deelt alle vlottende activa door de kortlopende schulden; de quick ratio laat de voorraad buiten de teller. De quick ratio is daarmee de strengere maatstaf en valt per definitie lager uit, behalve bij een onderneming zonder voorraad.</p>
7609<h3>Wat betekent een quick ratio onder 1?</h3>
7610<p>De schulden die binnen een jaar moeten worden betaald zijn groter dan de bezittingen die op korte termijn in geld zijn om te zetten. In een sector met snelle voorraadomloop hoeft dat geen probleem te zijn; bij lange doorlooptijden is het een reden om de kasprognose te verscherpen.</p>
7611<h3>Kan de quick ratio te hoog zijn?</h3>
7612<p>Ja. Een quick ratio van 3 of hoger betekent meestal dat er veel geld in debiteuren of op de rekening staat zonder te renderen. Dat is geen liquiditeitsrisico maar een rendementsvraag.</p>
7613<h2>De quick ratio maandelijks berekenen in plaats van &eacute;&eacute;n keer per jaar</h2>
7614<p>In veel organisaties wordt dit kengetal pas bij de jaarrekening uitgerekend, terwijl de onderliggende posten elke week bewegen. Smartbooks legt zo'n ratio vast als eigen metric: een formule over de balansrekeningen die als vaste regel of KPI-tegel in de maandrapportage verschijnt, met de vorige periode of het budget als referentie, per entiteit en op consolidatieniveau.</p>
7615<p>Daarmee staat de quick ratio in dezelfde <a href="/functionaliteiten/rapporteren">rapportageset</a> als het resultaat, en zie je de trend voordat een covenant in zicht komt. Wil je verder kijken dan de balansdatum, zet hem dan naast een <a href="/artikelen/liquiditeitsbegroting-maken">liquiditeitsbegroting</a> die de kasstroom per week vooruit plant. <a href="/demo">Plan een demo</a> en zie de ratio op je eigen balans.</p>
7616`,Q6=`---json
7617{
7618  "title": "Reporting-Demo – 4 Min",
7619  "slug": "rapporteren-demo",
7620  "metaTitle": "Reporting-Software Demo",
7621  "date": "2024-10-05 12:33:11",
7622  "category": "Videos",
7623  "tags": [
7624    "Reporting"
7625  ],
7626  "excerpt": "Reporting-Software in Aktion: Demovideo, das zeigt, wie Sie mit Smartbooks Ihr Finanzreporting vollständig automatisieren — komplett auf Ihre Wünsche zugeschnitten.",
7627  "originalUrl": "https://smartbooks.ai/videos/rapporteren-demo/",
7628  "meta": null
7629}
7630---
7631<p>Diese Demovideo-Tour zeigt, wie Sie mit Smartbooks Ihr Finanzreporting vollständig automatisieren — komplett auf Ihre Wünsche zugeschnitten.</p>
7632
7633<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/Rapporteren.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Rapporteren%20Demo.mp4"></video></figure>`,J6=`---json
7634{
7635  "title": "Reporting demo - 4 min",
7636  "metaTitle": "Reporting Software Demo",
7637  "slug": "reporting-demo",
7638  "date": "",
7639  "category": "Videos",
7640  "tags": [
7641    "Reporting",
7642    "Automation",
7643    "Financial Insights",
7644    "SaaS"
7645  ],
7646  "excerpt": "Reporting software in action: demo video showing how to fully automate your reporting process with Smartbooks, fully customizable to your needs.",
7647  "originalUrl": "",
7648  "meta": {
7649    "type_bedrijf": "Financial Services",
7650    "naam_medewerker": "Not Specified",
7651    "functie_medewerker": "Product Specialist",
7652    "logo_bedrijf": "https://example.com/logo.png"
7653  }
7654}
7655---
7656<figure class="wp-block-video"><video controls src="https://example.com/demo.mp4"></video></figure><p>In this demo, we show you how our financial reporting software saves you time and provides deeper insights into your business performance.</p>`,X6=`---json
7657{
7658  "title": "Rapporteren demo - 4 min",
7659  "metaTitle": "Rapportagesoftware demo",
7660  "slug": "rapporteren-demo",
7661  "order": 22,
7662  "date": "2024-10-05 12:33:11",
7663  "category": "Videos",
7664  "tags": [
7665    "Rapporteren"
7666  ],
7667  "excerpt": "Rapportagesoftware in actie: demovideo die laat zien hoe je met Smartbooks je rapportage volledig automatiseert, volledig ingericht op jullie wensen.",
7668  "originalUrl": "https://smartbooks.ai/videos/rapporteren-demo/",
7669  "meta": null,
7670  "enSlug": "reporting-demo"
7671}
7672---
7673<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/Rapporteren.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Rapporteren%20Demo.mp4"></video></figure>
7674
7675
7676
7677<p></p>
7678
7679
7680
7681
7682<div class="wp-block-kadence-column kadence-column2642_d6ee25-c7"><div class="kt-inside-inner-col">
7683<figure class="wp-block-kadence-image kb-image2642_056d95-4d size-full kb-image-is-ratio-size"><div class="kb-is-ratio-image kb-image-ratio-land43"><img src="https://smartbooks.ai/wp-content/uploads/2023/12/shutterstock_1919479694.jpg" alt="" class="kb-img wp-image-1108"/></div></figure>
7684</div></div>
7685
7686
7687
7688<div class="wp-block-kadence-column kadence-column2642_eb8d93-b0"><div class="kt-inside-inner-col">
7689<p class="has-medium-font-size">Bekijk het on-demand webinar:</p>
7690
7691
7692
7693<h2 class="kt-adv-heading2642_2e90cc-b0 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2642_2e90cc-b0">'Rapporteren, plannen en consolideren in 20% van de tijd'</h2>
7694
7695
7696
7697<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns2642_c763e7-da"></div>
7698</div></div>`,eO=`---json
7699{
7700  "title": "Aus Smartbooks in Excel berichten",
7701  "slug": "rapporteren-vanuit-smartbooks-met-excel",
7702  "metaTitle": "Finanzreporting in Excel mit Smartbooks",
7703  "date": "2024-11-05 13:31:21",
7704  "category": "Articles",
7705  "tags": [],
7706  "excerpt": "Finanzreporting in Excel: Holen Sie Ihre Smartbooks-Berichte mit dem Excel-Add-in in Excel und ergänzen Sie sie mit eigenen Formeln und Grafiken.",
7707  "originalUrl": "https://smartbooks.ai/artikelen/rapporteren-vanuit-smartbooks-met-excel/",
7708  "meta": null
7709}
7710---
7711<p>Sie können Smartbooks-Berichte über das Smartbooks Excel-Add-in in Excel holen. Zur Installation folgen Sie diesen Schritten:</p>
7712
7713<ol>
7714<li><strong>Öffnen Sie Excel</strong> und gehen Sie zum Startbildschirm.</li>
7715<li>Klicken Sie in der Menüleiste auf <strong>Add-ins</strong>.</li>
7716<li>Anschließend auf <strong>Weitere Add-ins</strong>.</li>
7717</ol>
7718
7719<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/11/excel-1-1024x647.png" alt="Smartbooks Excel Add-in Installation" class="wp-image-2588"/></figure>
7720
7721<ol start="4">
7722<li>Geben Sie <strong>Smartbooks</strong> in die Suchleiste ein und fügen Sie das Add-in zu Excel hinzu.</li>
7723</ol>
7724
7725<p>Nach der Installation sehen Sie einen neuen Button in der Symbolleiste:</p>
7726
7727<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/11/excel-2-1024x647.png" alt="Smartbooks Add-in Button in Excel" class="wp-image-2589"/></figure>
7728
7729<ol start="5">
7730<li>Klicken Sie auf den <strong>Smartbooks</strong>-Button in der Symbolleiste.</li>
7731<li>Klicken Sie auf <strong>Insert Report</strong>. Es öffnet sich ein Fenster, in dem Sie sich mit Ihren üblichen Smartbooks-Zugangsdaten einloggen.</li>
7732</ol>
7733
7734<p>Nach dem Login sehen Sie eine Auswahlliste:</p>
7735
7736<ol start="7">
7737<li>Wählen Sie Entität, Reporttyp und Spalten (identisch zu den Auswahlmöglichkeiten in Smartbooks).</li>
7738</ol>
7739
7740<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/11/excel-3-2-1024x647.jpg" alt="Smartbooks Excel-Report Optionen" class="wp-image-2590"/></figure>
7741
7742<ol start="8">
7743<li>Klicken Sie auf <strong>Generieren</strong>. Sie erhalten einen Excel-Report, der Ihren Smartbooks-Berichten entspricht.</li>
7744<li>Sind in Smartbooks neue Daten verfügbar (Korrekturen im aktuellen Monat oder ein neuer Monat), reicht in Excel ein Klick auf <strong>Regenerate</strong> — Excel aktualisiert die Daten, ohne dass Sie den Report neu wählen müssen.</li>
7745</ol>
7746
7747<p>Sie können die Excel-Datei mit eigenen Formeln, Zusatzdaten oder Grafiken ergänzen und als PDF speichern:</p>
7748<ol start="10">
7749<li>Gehen Sie auf <strong>Datei → Exportieren → Als PDF herunterladen</strong>.</li>
7750</ol>
7751
7752<p>Wichtig: Die ersten 6 Zeilen (Link zum Smartbooks-Report) müssen erhalten bleiben. Alle Zeilen und Spalten, die aus Smartbooks stammen, können Ihre zusätzlich hinzugefügten Daten nach einem <strong>Regenerate</strong> überschreiben.</p>`,nO=`---json
7753{
7754  "title": "Reporting from Smartbooks with Excel",
7755  "metaTitle": "Financial Reporting in Excel with Smartbooks",
7756  "slug": "reporting-from-smartbooks-with-excel",
7757  "date": "",
7758  "category": "Articles",
7759  "tags": [
7760    "Excel add-in",
7761    "Reporting",
7762    "Smartbooks",
7763    "Data Export",
7764    "Financial Reporting"
7765  ],
7766  "excerpt": "Financial reporting in Excel: export and synchronize your Smartbooks financial reports directly into Excel using our specialized add-in.",
7767  "originalUrl": ""
7768}
7769---
7770<p>You can retrieve the reports available in Smartbooks into Excel by using the Smartbooks Excel add-in. To install it, you need to follow a few steps:&nbsp;</p>
7771
7772<ol start="1"><li>Open Excel and go to the 'Insert' tab.</li><li>Click on 'Get Add-ins'.</li><li>Search for 'Smartbooks' and click 'Add'.</li></ol>
7773
7774<p>After installation, the Smartbooks tab will appear in your Excel ribbon, allowing you to synchronize your financial data for real-time reporting.</p>`,tO=`---json
7775{
7776  "title": "Rapporteren vanuit Smartbooks met Excel",
7777  "metaTitle": "Financieel rapporteren in Excel met Smartbooks",
7778  "slug": "rapporteren-vanuit-smartbooks-met-excel",
7779  "order": 14,
7780  "date": "2024-11-05 13:31:21",
7781  "category": "Articles",
7782  "tags": [],
7783  "excerpt": "Financieel rapporteren in Excel: haal je Smartbooks-rapportages met de Excel add-in binnen en werk ze verder uit met eigen formules en grafieken.",
7784  "originalUrl": "https://smartbooks.ai/artikelen/rapporteren-vanuit-smartbooks-met-excel/",
7785  "meta": null,
7786  "enSlug": "reporting-from-smartbooks-with-excel"
7787}
7788---
7789<p>Je kunt de rapportages die in Smartbooks beschikbaar zijn naar Excel halen door gebruik te maken van de Smartbooks Excel add-in. Om deze te installeren moet je een paar stappen volgen:&nbsp;</p>
7790
7791
7792
7793<ol start="1" class="wp-block-list">
7794<li><strong>Open Excel</strong> en ga naar het startscherm. </li>
7795
7796
7797
7798<li>Klik op <strong>Invoegtoepassingen</strong> in de menubalk. </li>
7799
7800
7801
7802<li>Klik vervolgens op <strong>Meer invoegtoepassingen</strong>. </li>
7803</ol>
7804
7805
7806
7807<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/11/excel-1-1024x647.png" alt="" class="wp-image-2588"/></figure>
7808
7809
7810
7811<ol start="4" class="wp-block-list">
7812<li>Typ <strong>Smartbooks</strong> in de zoekbalk en voeg de toepassing toe aan Excel. </li>
7813</ol>
7814
7815
7816
7817<p>Na het toevoegen van de toepassing zie je een nieuwe knop in je taakbalk:&nbsp;</p>
7818
7819
7820
7821<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/11/excel-2-1024x647.png" alt="" class="wp-image-2589"/></figure>
7822
7823
7824
7825<ol start="5" class="wp-block-list">
7826<li>Klik op de <strong>Smartbooks</strong>-knop in de taakbalk. </li>
7827
7828
7829
7830<li>Klik op <strong>Insert Report</strong>. Er opent een venster waarin je wordt gevraagd in te loggen in Smartbooks met je gebruikelijke inloggegevens. </li>
7831</ol>
7832
7833
7834
7835<p>Na het inloggen zie je een lijst met opties:&nbsp;</p>
7836
7837
7838
7839<ol start="7" class="wp-block-list">
7840<li>Selecteer de gewenste entiteit, het rapportagetype, en de kolommen die we ook in Smartbooks gebruiken. </li>
7841</ol>
7842
7843
7844
7845<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/11/excel-3-2-1024x647.jpg" alt="" class="wp-image-2590"/></figure>
7846
7847
7848
7849<ol start="7" class="wp-block-list">
7850<li>Klik op <strong>Genereren</strong>. Je hebt nu een Excel-rapport dat overeenkomt met de rapporten in Smartbooks. </li>
7851
7852
7853
7854<li>Als er nieuwe gegevens in Smartbooks staan (aangepaste gegevens van de huidige maand óf er is een nieuwe maand toegevoegd), dan kun je in Excel op <strong>Regenerate</strong> klikken en dan ververst Excel de gegevens zonder dat je opnieuw het rapport hoeft te selecteren.</li>
7855</ol>
7856
7857
7858
7859<p>Tot slot kun je dit Excel-bestand aanpassen met eigen formules, extra gegevens of grafieken en ook opslaan als PDF:&nbsp;</p>
7860
7861
7862
7863<ol start="10" class="wp-block-list">
7864<li>Ga naar <strong>Bestand</strong> -> <strong>Exporteren</strong> -> <strong>Downloaden als PDF</strong>. </li>
7865</ol>
7866
7867
7868
7869<p>Let op dat de eerste 6 rijen (is de link naar het Smartbooks rapport) moeten blijven staan en dat&nbsp; alle rijen en kolommen die uit Smartbooks komen je eigen toegevoegde data, na een <strong>Regenerate</strong>, zouden kunnen overschrijven.</p>`,iO=`---json
7870{
7871  "title": "Rentabilität berechnen: Formeln für ROE, ROA und ROI",
7872  "slug": "rentabiliteit-berekenen",
7873  "metaTitle": "Rentabilität berechnen: ROE, ROA und ROI",
7874  "date": "2026-08-18 10:00:00",
7875  "category": "Articles",
7876  "tags": [
7877    "Analyse",
7878    "Reporting",
7879    "Business Control",
7880    "KPI"
7881  ],
7882  "excerpt": "Rentabilität berechnen mit den Formeln für ROE, ROA und ROI: Rechenbeispiel, Richtwerte und der Hebeleffekt des Fremdkapitals.",
7883  "originalUrl": ""
7884}
7885---
7886<h1>Rentabilität berechnen: <strong>Formeln für ROE, ROA und ROI</strong></h1>
7887<p><strong>Rentabilität berechnen</strong> heißt, das Ergebnis dem eingesetzten Kapital gegenüberzustellen. Während der Gewinn ein absoluter Betrag ist, macht die Rentabilität Leistungen vergleichbar. Controller nutzen dafür drei Kennzahlen: Eigenkapitalrentabilität (ROE), Gesamtkapitalrentabilität (ROA) und Return on Investment (ROI).</p>
7888<h2>Die wichtigsten Formeln</h2>
7889<ul>
7890<li><strong>ROE = (Jahresüberschuss / durchschnittliches Eigenkapital) &times; 100</strong></li>
7891<li><strong>ROA = (Betriebsergebnis / durchschnittliche Bilanzsumme) &times; 100</strong></li>
7892<li><strong>ROI = (Ertrag &minus; Kosten der Investition) / Kosten der Investition &times; 100</strong></li>
7893<li><strong>Nettomarge = (Jahresüberschuss / Umsatz) &times; 100</strong></li>
7894</ul>
7895<p>Verwenden Sie bei ROE und ROA das <em>durchschnittliche</em> Kapital aus Anfangs- und Endbilanz.</p>
7896<h2>Rechenbeispiel</h2>
7897<p>Jahresüberschuss 240.000 &euro; bei durchschnittlichem Eigenkapital von 1.200.000 &euro; ergibt einen ROE von <strong>20 %</strong>. Ein Betriebsergebnis von 400.000 &euro; bei einer durchschnittlichen Bilanzsumme von 4.000.000 &euro; ergibt einen ROA von <strong>10 %</strong>.</p>
7898<p>Der ROE liegt über dem ROA &mdash; das ist der Hebeleffekt des Fremdkapitals: Solange der ROA über dem Zinssatz liegt, erhöht Fremdkapital die Eigenkapitalrentabilität.</p>
7899<h2>ROE oder ROA?</h2>
7900<p>Der ROA zeigt, wie gut das Vermögen arbeitet, unabhängig von der Finanzierung. Der ROE zeigt, was für die Gesellschafter bleibt, und wird von der Kapitalstruktur bestimmt. Ein hoher ROE bei niedriger Eigenkapitalquote ist vor allem Schuldenhebel, nicht operative Qualität.</p>
7901<h2>Was ist ein guter Wert?</h2>
7902<p>Ein ROE von etwa <strong>10 % bis 15 %</strong> gilt in vielen Branchen als solide. Aussagekräftig ist aber nur der Vergleich mit der Renditeforderung, dem Fremdkapitalzins und den Branchenwerten &mdash; über mehrere Jahre betrachtet.</p>
7903<h2>Rentabilität verbessern</h2>
7904<ul>
7905<li><strong>Marge erhöhen:</strong> Preise und Herstellkosten adressieren.</li>
7906<li><strong>Kapitalumschlag steigern:</strong> mehr Umsatz mit derselben Bilanzsumme.</li>
7907<li><strong>Working Capital senken:</strong> Vorräte und Forderungen reduzieren.</li>
7908<li><strong>Kapitalstruktur optimieren:</strong> Hebel nutzen, ohne Stabilität zu gefährden.</li>
7909</ul>
7910<h2>Häufige Fragen</h2>
7911<p><strong>Was ist Rentabilität?</strong><br />Das Ergebnis als Prozentsatz des eingesetzten Kapitals.</p>
7912<p><strong>Wie berechnet man den ROE?</strong><br />Jahresüberschuss durch durchschnittliches Eigenkapital, multipliziert mit 100.</p>
7913<p><strong>Unterschied zwischen Rentabilität und Marge?</strong><br />Die Marge bezieht den Gewinn auf den Umsatz, die Rentabilität auf das Kapital.</p>
7914<h2>Monatlich im Blick</h2>
7915<p>
7915In Smartbooks stehen ROE, ROA und Margen standardmäßig in Ihrem <a href="/de/funktionen/berichten">Management-Reporting</a> &mdash; je Gesellschaft und konsolidiert. <a href="/de/demo">Demo buchen</a>.</p>`,rO=`---json
7916{
7917  "title": "Return on equity and assets: formulas for ROE, ROA and ROI",
7918  "slug": "return-on-equity-and-assets",
7919  "metaTitle": "Return on equity and assets: ROE and ROA formula + example",
7920  "date": "2026-08-18 10:00:00",
7921  "category": "Articles",
7922  "tags": [
7923    "Analytics",
7924    "Reporting",
7925    "Business Control",
7926    "KPI"
7927  ],
7928  "excerpt": "Return on equity = net profit / average equity x 100. A case with ROE 20% against ROA 10%, the 10-15% benchmark and what leverage does.",
7929  "originalUrl": ""
7930}
7931---
7932<h1>Return on equity and assets: <strong>formulas for ROE, ROA and ROI</strong></h1>
7933<p><strong>Return on equity</strong> and return on assets express profit as a percentage of the capital used to generate it. Where profit is an absolute amount, these ratios make performance comparable: does a euro of capital earn more in this business than elsewhere? Controllers rely on three core measures: return on equity (ROE), return on assets (ROA) and return on investment (ROI).</p>
7934<h2>The key profitability formulas</h2>
7935<ul>
7936<li><strong>ROE = (net profit / average equity) &times; 100</strong></li>
7937<li><strong>ROA = (operating result / average total assets) &times; 100</strong></li>
7938<li><strong>ROI = (gain from investment &minus; cost of investment) / cost of investment &times; 100</strong></li>
7939<li><strong>Net profit margin = (net profit / revenue) &times; 100</strong></li>
7940</ul>
7941<p>For ROE and ROA, use <em>average</em> capital (opening plus closing balance divided by two). That avoids distortion from a large movement late in the year.</p>
7942<h2>Worked example</h2>
7943<p>A company reports a net profit of &euro;240,000 on average equity of &euro;1,200,000, and an operating result of &euro;400,000 on average total assets of &euro;4,000,000.</p>
7944<table>
7945<thead><tr><th>Measure</th><th>Calculation</th><th>Result</th></tr></thead>
7946<tbody>
7947<tr><td>ROE</td><td>240,000 / 1,200,000</td><td>20%</td></tr>
7948<tr><td>ROA</td><td>400,000 / 4,000,000</td><td>10%</td></tr>
7949</tbody>
7950</table>
7951<p>ROE exceeds ROA here because of financial leverage: as long as ROA is higher than the interest cost on debt, borrowing lifts the return for shareholders.</p>
7952<h2>ROE versus ROA</h2>
7953<p>ROA measures how well the company makes its assets work, regardless of financing. ROE measures what is left for the shareholder and is therefore shaped by the capital structure. Always read them together: a high ROE combined with a low <a href="/en/articles/solvency-ratio">solvency ratio</a> is mostly the result of debt, not of operational quality.</p>
7954<h2>What is a good return on equity?</h2>
7955<p>An ROE of roughly <strong>10% to 15%</strong> is considered solid in many sectors, but the only meaningful test is the comparison with the required return, the interest on debt and industry figures. Look at the multi-year development too: a stable or rising return says more than one good year.</p>
7956<h2>How to improve profitability</h2>
7957<ul>
7958<li><strong>Raise margin:</strong> address pricing and cost of sales, visible in <a href="/en/articles/ebitda-calculation">EBITDA</a>.</li>
7959<li><strong>Increase asset turnover:</strong> more revenue on the same balance sheet.</li>
7960<li><strong>Reduce working capital:</strong> bring down inventory and receivables.</li>
7961<li><strong>Optimise capital structure:</strong> use leverage without undermining resilience.</li>
7962</ul>
7963<h2>Frequently asked questions</h2>
7964<p><strong>What is return on equity?</strong><br />Net profit expressed as a percentage of average equity. It shows how efficiently shareholder capital is converted into profit.</p>
7965<p><strong>How do you calculate ROE?</strong><br />Divide net profit by average equity and multiply by 100.</p>
7966<p><strong>What is the difference between profitability and margin?</strong><br />Margin compares profit to revenue; profitability ratios compare profit to capital. A thin-margin business can still show a high return if asset turnover is high.</p>
7967<p><strong>What is the leverage effect?</strong><br />When return on assets is higher than the interest rate on debt, additional debt raises return on equity &mdash; while also increasing risk.</p>
7968<h2>Profitability in every monthly report</h2>
7969<p>Smartbooks includes ROE, ROA and margins in your <a href="/en/functionalities/reporting">management reporting</a> by default, per entity and consolidated. <a href="/en/demo">Book a demo</a> and see it on your own numbers.</p>`,aO=`---json
7970{
7971  "title": "Rentabiliteit berekenen: formules voor ROE, ROA en ROI",
7972  "slug": "rentabiliteit-berekenen",
7973  "order": 58,
7974  "metaTitle": "Rentabiliteit berekenen: ROE, ROA en ROI",
7975  "date": "2026-08-18 10:00:00",
7976  "category": "Articles",
7977  "tags": [
7978    "Analyse",
7979    "Rapportage",
7980    "Business Control",
7981    "KPI"
7982  ],
7983  "excerpt": "Rentabiliteit berekenen met de formules voor REV (ROE), RTV (ROA) en ROI, inclusief rekenvoorbeeld, normen en het hefboomeffect van vreemd vermogen.",
7984  "originalUrl": "",
7985  "enSlug": "return-on-equity-and-assets"
7986}
7987---
7988<h1>Rentabiliteit berekenen: <strong>formules voor ROE, ROA en ROI</strong></h1>
7989<p><strong>Rentabiliteit berekenen</strong> betekent het resultaat afzetten tegen het vermogen dat daarvoor is ingezet. Waar winst een absoluut bedrag is, maakt rentabiliteit prestaties vergelijkbaar: verdient een euro vermogen in deze onderneming meer dan elders? Controllers gebruiken daarvoor drie hoofdmaatstaven: rentabiliteit van het eigen vermogen (REV/ROE), van het totale vermogen (RTV/ROA) en het rendement op een specifieke investering (ROI).</p>
7990<h2>De belangrijkste rentabiliteitsformules</h2>
7991<ul>
7992<li><strong>REV (ROE) = (nettowinst / gemiddeld eigen vermogen) &times; 100</strong></li>
7993<li><strong>RTV (ROA) = (bedrijfsresultaat / gemiddeld balanstotaal) &times; 100</strong></li>
7994<li><strong>ROI = (opbrengst investering &minus; kosten investering) / kosten investering &times; 100</strong></li>
7995<li><strong>Nettowinstmarge = (nettowinst / omzet) &times; 100</strong></li>
7996</ul>
7997<p>Gebruik bij REV en RTV het <em>gemiddelde</em> vermogen (begin- plus eindbalans gedeeld door twee). Zo voorkom je vertekening door een grote mutatie aan het eind van het jaar.</p>
7998<h2>Rekenvoorbeeld rentabiliteit</h2>
7999<p>Een onderneming realiseert een nettowinst van &euro;240.000 bij een gemiddeld eigen vermogen van &euro;1.200.000 en een bedrijfsresultaat van &euro;400.000 bij een gemiddeld balanstotaal van &euro;4.000.000.</p>
8000<table>
8001<thead><tr><th>
8001Maatstaf</th><th>Berekening</th><th>Uitkomst</th></tr></thead>
8002<tbody>
8003<tr><td>REV (ROE)</td><td>240.000 / 1.200.000</td><td>20%</td></tr>
8004<tr><td>RTV (ROA)</td><td>400.000 / 4.000.000</td><td>10%</td></tr>
8005</tbody>
8006</table>
8007<p>De REV ligt hier boven de RTV. Dat komt door de hefboomwerking van vreemd vermogen: zolang de RTV hoger is dan de rentekosten op het vreemd vermogen, verhoogt schuld het rendement voor de aandeelhouder.</p>
8008<h2>Rentabiliteit van het eigen vermogen versus totale vermogen</h2>
8009<p>RTV meet hoe goed de onderneming haar bezittingen laat renderen, ongeacht de financiering. REV meet wat de aandeelhouder overhoudt en wordt dus mede bepaald door de kapitaalstructuur. Bekijk ze altijd samen: een hoge REV bij een lage <a href="/artikelen/solvabiliteit-berekenen">solvabiliteit</a> is vooral het gevolg van schuld, niet van operationele kwaliteit.</p>
8010<h2>Wat is een goede rentabiliteit?</h2>
8011<p>Een REV van rond de <strong>10% tot 15%</strong> geldt in veel sectoren als solide, maar de enige zinvolle toets is de vergelijking met het geëiste rendement, de rente op vreemd vermogen en de branchecijfers. Kijk ook naar de ontwikkeling over meerdere jaren: een stabiele of stijgende rentabiliteit zegt meer dan één goed jaar.</p>
8012<h2>Rentabiliteit verbeteren</h2>
8013<ul>
8014<li><strong>Marge verhogen:</strong> prijsstelling en kostprijs aanpakken, zichtbaar in de <a href="/artikelen/ebitda-berekenen">EBITDA</a>.</li>
8015<li><strong>Omloopsnelheid verhogen:</strong> meer omzet met hetzelfde balanstotaal.</li>
8016<li><strong>Werkkapitaal verlagen:</strong> voorraden en debiteuren terugbrengen.</li>
8017<li><strong>Kapitaalstructuur optimaliseren:</strong> hefboom benutten zonder de weerbaarheid te ondermijnen.</li>
8018</ul>
8019<h2>Veelgestelde vragen over rentabiliteit</h2>
8020<p><strong>Wat is rentabiliteit?</strong><br />Rentabiliteit is het resultaat uitgedrukt als percentage van het ingezette vermogen. Het geeft aan hoe efficiënt vermogen wordt omgezet in winst.</p>
8021<p><strong>Hoe bereken je de rentabiliteit van het eigen vermogen?</strong><br />Deel de nettowinst door het gemiddelde eigen vermogen en vermenigvuldig met 100.</p>
8022<p><strong>Wat is het verschil tussen rentabiliteit en winstmarge?</strong><br />De winstmarge zet winst tegen de omzet; rentabiliteit zet winst tegen het vermogen. Een bedrijf kan een dunne marge hebben en toch een hoge rentabiliteit, mits de omloopsnelheid hoog is.</p>
8023<p><strong>Wat is het hefboomeffect?</strong><br />Als de rentabiliteit van het totale vermogen hoger is dan de rente op vreemd vermogen, verhoogt extra schuld de rentabiliteit van het eigen vermogen &mdash; en vergroot het tegelijk het risico.</p>
8024<h2>Rentabiliteit maandelijks in beeld</h2>
8025<p>In Smartbooks staan REV, RTV en marges standaard in je <a href="/functionaliteiten/rapporteren">managementrapportage</a>, per entiteit en geconsolideerd. <a href="/demo">Plan een demo</a> en bekijk het op je eigen cijfers.</p>`,oO=`---json
8026{
8027  "title": "Risketeers",
8028  "slug": "risketeers",
8029  "metaTitle": "Fallstudie Risketeers: In einem Tag maßgeschneidert",
8030  "date": "",
8031  "category": "Customer Stories",
8032  "tags": [
8033    "SaaS",
8034    "Maßgeschneidert",
8035    "Effizienz",
8036    "Implementierung"
8037  ],
8038  "excerpt": "Innerhalb eines Tages passgenau auf Risketeers zugeschnitten — schnelle Implementierung und sofortiger Mehrwert.",
8039  "originalUrl": "",
8040  "meta": {
8041    "type_bedrijf": "Risikomanagement",
8042    "naam_medewerker": "Sjoerd Blom",
8043    "functie_medewerker": "Lead Risketeer, Risketeers"
8044  }
8045}
8046---
8047<p>Innerhalb eines Tages passgenau auf unser Unternehmen zugeschnitten — das ist stark!</p>`,sO=`---json
8048{
8049  "title": "Risketeers",
8050  "metaTitle": "Risketeers Case: Tailor-made in One Day",
8051  "slug": "risketeers",
8052  "date": "",
8053  "category": "Customer Stories",
8054  "tags": [
8055    "SaaS",
8056    "Tailor-made",
8057    "Efficiency",
8058    "Implementation"
8059  ],
8060  "excerpt": "A customized solution for our business within a single day-simply outstanding!",
8061  "originalUrl": "",
8062  "meta": {
8063    "type_bedrijf": "Risk Management"
8064  }
8065}
8066---
8067<p>A custom solution tailored to our company within a single day-that is mega!</p>`,lO=`---json
8068{
8069  "title": "Risketeers",
8070  "metaTitle": "Klantcase Risketeers: oplossing op maat",
8071  "slug": "risketeers",
8072  "order": 46,
8073  "date": "2023-11-29 21:12:51",
8074  "category": "Customer Stories",
8075  "tags": [],
8076  "excerpt": "Binnen een dag op maat voor onze onderneming, dat is mega!",
8077  "originalUrl": "https://smartbooks.ai/klantervaringen/risketeers/",
8078  "meta": {
8079    "type_bedrijf": "Talent recruitmentbureau financiële sector",
8080    "naam_medewerker": "Sjoerd Blom",
8081    "functie_medewerker": "Lead Risketeer",
8082    "logo_bedrijf": "918"
8083  },
8084  "enSlug": "risketeers"
8085}
8086---
8087<p>Binnen een dag op maat voor onze onderneming, dat is mega!</p>`,dO=`---json
8088{
8089  "title": "Rolling Forecast",
8090  "slug": "rolling-forecast",
8091  "metaTitle": "Rolling Forecast: kontinuierlich vorausschauen und steuern",
8092  "date": "2023-12-14 13:30:53",
8093  "category": "Articles",
8094  "tags": [
8095    "Planung"
8096  ],
8097  "excerpt": "Ein Rolling Forecast lässt Sie mit Ihrem Team jeden Monat vorausschauen statt zurückblicken — kontinuierlich nachsteuern auf Basis der aktuellsten Zahlen und Marktentwicklungen.",
8098  "originalUrl": "https://smartbooks.ai/artikelen/rolling-forecast/",
8099  "meta": null
8100}
8101---
8102<p><strong>Rolling Forecast: ein durchgehend aktuelles Bild der Zukunft</strong></p>
8103
8104<p>Statische Budgets werden für Unternehmen in dynamischen Märkten zunehmend weniger wirksam. Veränderungen in Marktbedingungen, Kundenbedürfnissen und Technologie verlangen Flexibilität und Adaptionsfähigkeit. Rolling Forecasts bieten hier eine leistungsstarke Alternative — eine Methode, die kontinuierliches Vorausschauen fördert und rechtzeitiges Nachsteuern ermöglicht.</p>
8105
8106<p><strong>Was ist ein Rolling Forecast?</strong></p>
8107
8108<p>Ein Rolling Forecast ist eine dynamische Planungsmethode, bei der periodisch eine neue Perio
8108de zur Budgetplanung hinzugefügt wird. Je nach Vorhersagbarkeit des Geschäfts kann der Horizont zwischen 3 Monaten und 3 Jahren liegen. Kern ist: Sie schauen immer eine feste Anzahl an Monaten oder Quartalen voraus. Jeden Monat — oder jedes Quartal — kommt eine Periode hinzu, eine abgeschlossene Periode fällt weg.</p>
8109
8110<p>Dieser Ansatz sorgt dafür, dass die Organisation nicht nur zurückblickt, sondern sich kontinuierlich nach vorn orientiert. Rolling Forecasts verbinden historische Daten mit aktuellen Marktentwicklungen — Entscheidungen basieren auf den jüngsten Erkenntnissen.</p>
8111
8112<p><strong>Vorteile eines Rolling Forecasts</strong></p>
8113<ol>
8114<li><strong>Flexibilität</strong>: Rolling Forecasts erlauben schnelleres Reagieren auf Marktveränderungen — essenziell in dynamischen Branchen.</li>
8115<li><strong>Bessere Entscheidungen</strong>: Regelmäßige Vorausschau lässt Chancen und Risiken früher erkennen.</li>
8116<li><strong>Kontinuierlicher Überblick</strong>: Statt jährlich anzupassen, bleibt die Organisation dauerhaft informiert über Finanzlage und Zukunftsaussichten.</li>
8117<li><strong>Engagement</strong>: Der Prozess fördert Zusammenarbeit — die Zukunft zu prognostizieren ist eine gemeinsame Aufgabe.</li>
8118</ol>
8119
8120<p><strong>Mögliche Nachteile</strong></p>
8121<ol>
8122<li><strong>Zeitaufwand</strong>: Aufbau und Pflege eines Rolling Forecasts kosten mehr Zeit als ein statisches Budget.</li>
8123<li><strong>Datenabhängigkeit</strong>: Qualität und Verlässlichkeit der Daten entscheiden über die Prognosequalität.</li>
8124<li><strong>Komplexität</strong>: Vor allem in großen Organisationen ist die Balance zwischen Flexibilität und Präzision anspruchsvoll.</li>
8125</ol>
8126
8127<p><strong>Schritte zum Aufsetzen eines Rolling Forecasts</strong></p>
8128<ol>
8129<li><strong>Horizont und Frequenz bestimmen</strong>: Wie weit voraus (Monate/Jahre) und wie oft (monatlich oder quartalsweise)?</li>
8130<li><strong>Passende Tools wählen</strong>: Nutzen Sie Software für historisches Reporting <em>und</em> dynamische Vorausschau — z. B. Smartbooks.</li>
8131<li><strong>Kernvariablen definieren</strong>: Identifizieren Sie die Faktoren, die Ihre Performance treiben — Umsatz, Kosten, Marktbedingungen.</li>
8132<li><strong>Stakeholder einbeziehen</strong>: Finance, Sales, Operations liefern gemeinsam Input.</li>
8133<li><strong>Daten sammeln und analysieren</strong>: Historische Daten mit aktuellen Marktinformationen und Trends kombinieren.</li>
8134<li><strong>Einfach starten</strong>: Beginnen Sie mit einem übersichtlichen Forecast — schärfen Sie ihn mit wachsender Erfahrung.</li>
8135</ol>
8136
8137<p><strong>Rolling Forecast pflegen</strong></p>
8138<ol>
8139<li><strong>Regelmäßige Updates</strong>: Jeden Monat/jedes Quartal eine Periode hinzufügen und frühere Prognosen aktualisieren.</li>
8140<li><strong>Evaluation und Nachsteuerung</strong>: Abweichungen zwischen Prognose und Ist analysieren, Prozesse iterativ verbessern.</li>
8141<li><strong>Kontinuierliche Kommunikation</strong>: Regelmäßige Team-Meetings zur Diskussion neuer Entwicklungen.</li>
8142</ol>
8143
8144<p><strong>Fazit</strong></p>
8145
8146<p>Rolling Forecasts machen Organisationen agil in einem sich wandelnden Umfeld. Die Vorteile in Flexibilität und Entscheidungsqualität überwiegen den Aufwand deutlich. Mit Tools wie Smartbooks und einem strukturierten Prozess lassen sich kurzfristige Chancen und langfristige Strategien optimal nutzen.</p>`,cO=`---json
8147{
8148  "title": "Rolling Forecast",
8149  "metaTitle": "Rolling Forecast: Continuously Look Ahead and Adjust",
8150  "slug": "rolling-forecast",
8151  "date": "2023-12-14 13:30:53",
8152  "category": "Articles",
8153  "tags": [
8154    "Planning"
8155  ],
8156  "excerpt": "A rolling forecast lets you and your team look forward every month instead of back, continuously adjusting to the latest figures and market developments.",
8157  "originalUrl": "https://smartbooks.ai/artikelen/rolling-forecast/",
8158  "meta": null
8159}
8160---
8161<p><strong>Rolling Forecast: A continuously up-to-date view of the future vision</strong></p>
8162
8163
8164
8165<p>The use of static budgets is becoming increasingly less effective for companies operating in a dynamic market. Changes in market conditions, customer needs, and technological developments require organizations to remain flexible and adaptive. Rolling forecasts offer a powerful alternative: a method that encourages continuous forward-looking and enables organizations to make timely adjustments.</p>
8166
8167
8168
8169<p><strong>What is a Rolling Forecast?</strong></p>
8170
8171
8172
8173<p>A rolling forecast is a dynamic planning method where you periodically add a new period to your budget planning. Depending on the predictability of the business, this forecast c
8173an have a horizon ranging from 3 months to 3 years. The key characteristic is that a fixed number of months or quarters is always looked at ahead. Every month, or every quarter, a new period is added and a closed period is removed.</p>
8174
8175
8176
8177<p>This approach ensures that an organization does not just look back at what has happened, but continuously focuses on the future. Rolling forecasts combine historical data with current market developments, ensuring decisions are based on the most recent insights.</p>
8178
8179
8180
8181<p><strong>Advantages of Rolling Forecasts</strong></p>
8182
8183
8184
8185<ol start="1" class="wp-block-list">
8186<li><strong>Flexibility</strong>: Rolling forecasts make it possible to respond more quickly to market changes. This is essential in sectors where unpredictability and dynamism are the norm.</li>
8187
8188
8189
8190<li><strong>Better decision-making</strong>: By looking ahead regularly and updating the forecast, organizations can better anticipate opportunities and risks.</li>
8191
8192
8193
8194<li><strong>Continuous overview</strong>: Instead of adjusting plans annually, companies stay continuously informed about their financial position and future prospects.</li>
8195
8196
8197
8198<li><strong>Engagement</strong>: The process encourages collaboration and commitment within teams, as it requires a collective effort to predict the future.</li>
8199</ol>
8200
8201
8202
8203<p><strong>Potential Disadvantages</strong></p>
8204
8205
8206
8207<ol start="1" class="wp-block-list">
8208<li><strong>Time-intensive</strong>: Developing and maintaining a rolling forecast can require more time and resources than a static budget.</li>
8209
8210
8211
8212<li><strong>Data dependency</strong>: The quality of the forecast stands or falls with the availability and reliability of data. Flawed data can lead to incorrect predictions.</li>
8213
8214
8215
8216<li><strong>Complexity</strong>: Especially for large organizations, it can be difficult to combine the necessary flexibility with accuracy.</li>
8217</ol>
8218
8219
8220
8221<p><strong>Steps to Create a Rolling Forecast</strong></p>
8222
8223
8224
8225<ol start="1" class="wp-block-list">
8226<li><strong>Determine the horizon and frequency</strong>: Choose how many months or years you want to look ahead and how often you want to update the forecast (monthly or quarterly).</li>
8227
8228
8229
8230<li><strong>Select the right tools</strong>: Use software suitable for both historical reporting and dynamic forecasting, such as Smartbooks.</li>
8231
8232
8233
8234<li><strong>Define key variables</strong>: Identify the core factors that influence your organization's performance, such as revenue, costs, and market conditions.</li>
8235
8236
8237
8238<li><strong>Involve relevant stakeholders</strong>: Ensure departments such as finance, sales, and operations collaborate to provide input.</li>
8239
8240
8241
8242<li><strong>Collect and analyze data</strong>: Combine historical data with current market information and trends.</li>
8243
8244
8245
8246<li><strong>Start with a simple setup</strong>: Begin with a manageable forecast to gain experience. As you gain more insight, you can refine the process.</li>
8247</ol>
8248
8249
8250
8251<p><strong>Maintaining a Rolling Forecast</strong></p>
8252
8253
8254
8255<ol start="1" class="wp-block-list">
8256<li><strong>Periodic updates</strong>: Add a new period each month or quarter and revise previous predictions based on current information.</li>
8257
8258
8259
8260<li><strong>Evaluation and adjustment</strong>: Analyze variances between the forecast and actual results to continuously improve your processes.</li>
8261
8262
8263
8264<li><strong>Continuous communication</strong>: Hold regular meetings with teams to discuss new developments and implement adjustments.</li>
8265</ol>
8266
8267
8268
8269<p><strong>Conclusion</strong></p>
8270
8271
8272
8273<p>Rolling forecasts offer organizations the opportunity to remain agile in a volatile environment. Although implementation can require some time and effort, the benefits of flexibility and improved decision-making far outweigh the disadvantages. By using tools like Smartbooks and following a structured process, companies can effectively deploy this method to optimally exploit both short-term opportunities and long-term strategies.</p>`,uO=`---json
8274{
8275  "title": "Rolling Forecast",
8276  "metaTitle": "Rolling forecast: continu vooruitkijken en bijsturen",
8277  "slug": "rolling-forecast",
8278  "order": 43,
8279  "date": "2023-12-14 13:30:53",
8280  "category": "Articles",
8281  "tags": [
8282    "Planning"
8283  ],
8284  "excerpt": "Een rolling forecast laat je iedere maand met je team vooruitkijken in plaats van terug: continu bijsturen op de meest actuele cijfers en marktontwikkelingen.",
8285  "originalUrl": "https://smartbooks.ai/artikelen/rolling-forecast/",
8286  "meta": null,
8287  "enSlug": "rolling-forecast"
8288}
8289---
8290<p><strong>Rolling Forecast: Een continue up-to-date beeld van de toekomstvisie</strong></p>
8291
8292
8293
8294<p>Het gebruik van statische budgetten is voor bedrijven die opereren in een dynamische markt steeds minder effectief. Veranderingen in marktomstandigheden, klantbehoeften en technologische ontwikkelingen vereisen dat organisaties flexibel en adaptief blijven. Rolling forecasts bieden een krachtig alternatief: een methode die continue vooruitkijken stimuleert en organisaties in staat stelt om tijdig bij te sturen.</p>
8295
8296
8297
8298<p><strong>Wat is een Rolling Forecast?</strong></p>
8299
8300
8301
8302<p>Een rolling forecast is een dynamische planningsmethode waarbij je periodiek een nieuwe periode toevoegt aan je budgetplanning. Afhankelijk van de voorspelbaarheid van de business kan deze forecast een horizon hebben van 3 maanden tot 3 jaar. Het belangrijkste kenmerk is dat er altijd een vast aantal maanden of kwartalen vooruit wordt gekeken. Iedere maand, of elk kwartaal, wordt een nieuwe periode toegevoegd en een afgesloten periode verwijderd.</p>
8303
8304
8305
8306<p>Deze aanpak zorgt ervoor dat een organisatie niet alleen terugkijkt na
8306ar wat er is gebeurd, maar zich continu richt op de toekomst. Rolling forecasts combineren historische data met actuele marktontwikkelingen, waardoor beslissingen gebaseerd zijn op de meest recente inzichten.</p>
8307
8308
8309
8310<p><strong>Voordelen van Rolling Forecasts</strong></p>
8311
8312
8313
8314<ol start="1" class="wp-block-list">
8315<li><strong>Flexibiliteit</strong>: Rolling forecasts maken het mogelijk om sneller te reageren op veranderingen in de markt. Dit is essentieel in sectoren waar onvoorspelbaarheid en dynamiek de norm zijn.</li>
8316
8317
8318
8319<li><strong>Betere besluitvorming</strong>: Door regelmatig vooruit te kijken en de forecast bij te werken, kunnen organisaties beter anticiperen op kansen en risico’s.</li>
8320
8321
8322
8323<li><strong>Continu overzicht</strong>: In plaats van jaarlijks plannen bij te stellen, blijven bedrijven continu geïnformeerd over hun financiële positie en toekomstperspectief.</li>
8324
8325
8326
8327<li><strong>Betrokkenheid</strong>: Het proces stimuleert samenwerking en betrokkenheid binnen teams, omdat het een gezamenlijke inspanning vereist om de toekomst te voorspellen.</li>
8328</ol>
8329
8330
8331
8332<p><strong>Mogelijke Nadelen</strong></p>
8333
8334
8335
8336<ol start="1" class="wp-block-list">
8337<li><strong>Tijdsintensief</strong>: Het opstellen en onderhouden van een rolling forecast kan meer tijd en resources vergen dan een statisch budget.</li>
8338
8339
8340
8341<li><strong>Afhankelijkheid van data</strong>: De kwaliteit van de forecast staat of valt met de beschikbaarheid en betrouwbaarheid van data. Gebrekkige gegevens kunnen leiden tot onjuiste voorspellingen.</li>
8342
8343
8344
8345<li><strong>Complexiteit</strong>: Vooral voor grote organisaties kan het lastig zijn om de benodigde flexibiliteit en nauwkeurigheid te combineren.</li>
8346</ol>
8347
8348
8349
8350<p><strong>Stappen om een Rolling Forecast op te Stellen</strong></p>
8351
8352
8353
8354<ol start="1" class="wp-block-list">
8355<li><strong>Bepaal de horizon en frequentie</strong>: Kies hoeveel maanden of jaren je vooruit wilt kijken en hoe vaak je de forecast wilt bijwerken (maandelijks of per kwartaal).</li>
8356
8357
8358
8359<li><strong>Selecteer de juiste tools</strong>: Gebruik software die geschikt is voor zowel historische rapportage als dynamische vooruitblik, zoals Smartbooks.</li>
8360
8361
8362
8363<li><strong>Definieer belangrijke variabelen</strong>: Identificeer de kernfactoren die de prestaties van je organisatie beïnvloeden, zoals omzet, kosten, en marktomstandigheden.</li>
8364
8365
8366
8367<li><strong>Betrek relevante stakeholders</strong>: Zorg ervoor dat afdelingen zoals financiën, sales en operations samenwerken om input te leveren.</li>
8368
8369
8370
8371<li><strong>Verzamel en analyseer data</strong>: Combineer historische gegevens met actuele marktinformatie en trends.</li>
8372
8373
8374
8375<li><strong>Start met een eenvoudige opzet</strong>: Begin met een overzichtelijke forecast om ervaring op te bouwen. Naarmate je meer inzicht krijgt, kun je het proces verfijnen.</li>
8376</ol>
8377
8378
8379
8380<p><strong>Het Onderhouden van een Rolling Forecast</strong></p>
8381
8382
8383
8384<ol start="1" class="wp-block-list">
8385<li><strong>Periodieke updates</strong>: Voeg elke maand of elk kwartaal een nieuwe periode toe en herzie eerdere voorspellingen op basis van actuele informatie.</li>
8386
8387
8388
8389<li><strong>Evaluatie en bijsturing</strong>: Analyseer afwijkingen tussen de forecast en de werkelijke resultaten om je processen continu te verbeteren.</li>
8390
8391
8392
8393<li><strong>Continue communicatie</strong>: Houd regelmatige overlegmomenten met teams om nieuwe ontwikkelingen te bespreken en aanpassingen door te voeren.</li>
8394</ol>
8395
8396
8397
8398<p><strong>Conclusie</strong></p>
8399
8400
8401
8402<p>Rolling forecasts bieden organisaties de mogelijkheid om wendbaar te blijven in een veranderlijke omgeving. Hoewel de implementatie enige tijd en inspanning kan vergen, wegen de voordelen van flexibiliteit en verbeterde besluitvorming ruimschoots op tegen de nadelen. Door tools zoals Smartbooks te gebruiken en een gestructureerd proces te volgen, kunnen bedrijven deze methode effectief inzetten om zowel kortetermijn kansen als langetermijn strategieën optimaal te benutten.</p>`,hO=`---json
8403{
8404  "title": "Smart Story Einführung",
8405  "slug": "smart-story",
8406  "metaTitle": "Financial Storytelling mit Smart Story",
8407  "date": "2025-12-12 09:38:41",
8408  "category": "Videos",
8409  "tags": [
8410    "KI",
8411    "Alex",
8412    "Analyse",
8413    "Business Controller",
8414    "Monatsabschluss",
8415    "Reporting"
8416  ],
8417  "excerpt": "Entdecken Sie in 4 Minuten, wie Financial Storytelling mit Smart Story Ihre monatliche Abweichungsanalyse, Erklärung und Management-Präsentation erstellt.",
8418  "originalUrl": "https://smartbooks.ai/videos/smart-story/",
8419  "meta": null
8420}
8421---
8422<p>
8422Sehen Sie sich dieses 4-minütige Video an und entdecken Sie Financial Storytelling mit Smart Story.</p>
8423
8424
8425
8426<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/Coverpage.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Smart%20Story%20Demo.mp4"></video></figure>`,gO=`---json
8427{
8428  "title": "Smart Story Introduction",
8429  "slug": "smart-story",
8430  "metaTitle": "Financial storytelling with Smart Story",
8431  "date": "",
8432  "category": "Videos",
8433  "tags": [
8434    "Smart Story",
8435    "Variance Analysis",
8436    "Management Reporting",
8437    "Automation"
8438  ],
8439  "excerpt": "Discover in 4 minutes how financial storytelling with Smart Story generates your monthly variance analysis, explanations, and management presentations.",
8440  "originalUrl": "",
8441  "meta": {
8442    "type_bedrijf": "Financial Services",
8443    "naam_medewerker": "Alex",
8444    "functie_medewerker": "Financial Controller"
8445  }
8446}
8447---
8448<p>Watch this 4-minute video to discover financial storytelling with Smart Story</p>
8449
8450<figure class="wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
8451<iframe title="Smart Story Introductie" src="https://player.vimeo.com/video/946393527?dnt=1&amp;app_id=122963" width="640" height="360" frameborder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write" data-ready="true">
8452</div></figure>
8452`,mO=`---json
8453{
8454  "title": "Smart Story introductie",
8455  "slug": "smart-story",
8456  "order": 2,
8457  "metaTitle": "Financial storytelling met Smart Story",
8458  "date": "2025-12-12 09:38:41",
8459  "category": "Videos",
8460  "tags": [
8461    "AI",
8462    "Alex",
8463    "Analyseren",
8464    "Business Controller",
8465    "Maandafsluiting",
8466    "Rapporteren"
8467  ],
8468  "excerpt": "Ontdek in 4 min hoe financial storytelling met Smart Story jullie maandelijkse variantieanalyse, -verklaring en managementpresentatie maakt.",
8469  "originalUrl": "https://smartbooks.ai/videos/smart-story/",
8470  "meta": null,
8471  "enSlug": "smart-story"
8472}
8473---
8474<p>Bekijk deze video van 4 minuten en ontdek financial storytelling met Smart Story</p>
8475
8476
8477
8478<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/Coverpage.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Smart%20Story%20Demo.mp4"></video></figure>
8479
8480
8481
8482
8483<div class="wp-block-kadence-column kadence-column3140_33100a-94"><div class="kt-inside-inner-col">
8484<figure class="wp-block-kadence-image kb-image3140_8f1e36-6d size-full kb-image-is-ratio-size"><div class="kb-is-ratio-image kb-image-ratio-land43"><img src="https://smartbooks.ai/wp-content/uploads/2023/12/shutterstock_1919479694.jpg" alt="" class="kb-img wp-image-1108"/></div></figure>
8485</div></div>
8486
8487
8488
8489<div class="wp-block-kadence-column kadence-column3140_31d33e-1c"><div class="kt-inside-inner-col">
8490<p class="has-medium-font-size">Bekijk het on-demand webinar:</p>
8491
8492
8493
8494<h2 class="kt-adv-heading3140_2bb9a2-d7 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading3140_2bb9a2-d7">'Rapporteren, plannen en consolideren in 20% van de tijd'</h2>
8495
8496
8497
8498<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns3140_a5bbfc-1e"></div>
8499</div></div>`,pO=`---json
8500{
8501  "title": "Smartbooks 2-Minuten-Einführung",
8502  "slug": "smartbooks-2min-introductie",
8503  "metaTitle": "Smartbooks Einführung in 2 Minuten (Video)",
8504  "date": "2024-10-11 12:33:02",
8505  "category": "Videos",
8506  "tags": [
8507    "Konsolidieren",
8508    "Planung",
8509    "Reporting"
8510  ],
8511  "excerpt": "Smartbooks Einführung in 2 Minuten: sehen Sie in diesem kurzen Video, was Smartbooks für Ihre Finance-Arbeit und Ihre Organisation leisten kann.",
8512  "originalUrl": "https://smartbooks.ai/videos/smartbooks-2min-introductie/",
8513  "meta": null
8514}
8515---
8516<p>Diese 2-minütige Smartbooks-Einführung gibt Ihnen einen schnellen Überblick, was die Plattform für Ihre Arbeit und Organisation leisten kann.</p>
8517
8518<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/smartbooks-2min-introductie.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/NL%20SB%20introductie%20kort%20okt%2024.mp4"></video></figure>`,fO=`---json
8519{
8520  "title": "Smartbooks 2-minute introduction",
8521  "metaTitle": "Smartbooks Introduction in 2 Minutes (Video)",
8522  "slug": "smartbooks-2min-introductie",
8523  "date": "",
8524  "category": "Videos",
8525  "tags": [
8526    "Introduction",
8527    "Product Demo",
8528    "Efficiency"
8529  ],
8530  "excerpt": "Smartbooks introduction in 2 minutes: discover in this short video what Smartbooks can do for your workflow and organization.",
8531  "originalUrl": "",
8532  "meta": {
8533    "type_bedrijf": "SaaS"
8534  }
8535}
8536---
8537<p>Watch the 2-minute video below for more information</p>
8538
8539<figure class="`,bO=`---json
8540{
8541  "title": "Smartbooks 2 minuten introductie",
8542  "metaTitle": "Smartbooks introductie in 2 minuten (video)",
8543  "slug": "smartbooks-2min-introductie",
8544  "order": 16,
8545  "date": "2024-10-11 12:33:02",
8546  "category": "Videos",
8547  "tags": [
8548    "Consolideren",
8549    "Planning",
8550    "Rapporteren"
8551  ],
8552  "excerpt": "Smartbooks introductie in 2 minuten: ontdek in deze korte video wat Smartbooks voor jouw werk en organisatie kan betekenen.",
8553  "originalUrl": "https://smartbooks.ai/videos/smartbooks-2min-introductie/",
8554  "meta": null,
8555  "enSlug": "smartbooks-2min-introduction"
8556}
8557---
8558<p>Bekijk onderstaande video van 2 minuten voor meer informatie</p>
8559
8560
8561
8562<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/smartbooks-2min-introductie.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/NL%20SB%20introductie%20kort%20okt%2024.mp4"></video></figure>
8563
8564
8565
8566
8567<div class="wp-block-kadence-column kadence-column2518_f8aa24-49"><div class="kt-inside-inner-col">
8568<figure class="wp-block-kadence-image kb-image2518_4b9e84-c2 size-full kb-image-is-ratio-size"><div class="kb-is-ratio-image kb-image-ratio-land43"><img src="https://smartbooks.ai/wp-content/uploads/2023/12/shutterstock_1919479694.jpg" alt="" class="kb-img wp-image-1108"/></div></figure>
8569</div></div>
8570
8571
8572
8573<div class="wp-block-kadence-column kadence-column2518_34f70f-15"><div class="kt-inside-inner-col">
8574<p class="has-medium-font-size">Bekijk het on-demand webinar:</p>
8575
8576
8577
8578<h2 class="kt-adv-heading2518_26df3e-23 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2518_26df3e-23">'Rapporteren, plannen en consolideren in 20% van de tijd'</h2>
8579
8580
8581
8582<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns2518_3f86c1-86"></div>
8583</div></div>`,vO=`---json
8584{
8585  "title": "Smartbooks 6-Minuten-Einführung",
8586  "slug": "smartbooks-6min-introductie",
8587  "metaTitle": "Smartbooks Erklärvideo in 6 Minuten",
8588  "date": "2024-10-10 12:33:11",
8589  "category": "Videos",
8590  "tags": [],
8591  "excerpt": "Smartbooks Erklärung in 6 Minuten: eine kompakte Einführung in die wichtigsten Funktionen der Finance-Plattform.",
8592  "originalUrl": "https://smartbooks.ai/videos/smartbooks-6min-introductie/",
8593  "meta": null
8594}
8595---
8596<p>Diese Smartbooks-Erklärung in 6 Minuten zeigt die wichtigsten Funktionen der Plattform kompakt zusammengefasst.</p>
8597
8598<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/smartbooks-2min-introductie.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Smartbooks%206min%20introduction.mp4"></video></figure>`,kO=`---json
8599{
8600  "title": "Smartbooks 6-minute introduction",
8601  "metaTitle": "Smartbooks Explained in 6 Minutes (Video)",
8602  "slug": "smartbooks-6min-introductie",
8603  "date": "",
8604  "category": "Videos",
8605  "tags": [
8606    "Introduction",
8607    "Onboarding",
8608    "Automation",
8609    "Efficiency"
8610  ],
8611  "excerpt": "Smartbooks explained in 6 minutes: discover what Smartbooks does with a brief introduction to the core functionalities.",
8612  "originalUrl": "",
8613  "meta": {
8614    "type_bedrijf": "Software as a Service",
8615    "naam_medewerker": "Alex Johnson",
8616    "functie_medewerker": "Product Specialist",
8617    "logo_bedrijf": "smartbooks-logo.png"
8618  }
8619}
8620---
8621<figure class="wp-block-video"><video controls src="https://example.com/video.mp4"></video></figure><p>In this video, we guide you through the ecosystem of Smartbooks. From automated bookkeeping to real-time financial reporting, see how our SaaS solution streamlines your business processes.</p>`,wO=`---json
8622{
8623  "title": "Smartbooks 6 minuten introductie",
8624  "metaTitle": "Smartbooks uitleg in 6 minuten (video)",
8625  "slug": "smartbooks-6min-introductie",
8626  "order": 17,
8627  "date": "2024-10-10 12:33:11",
8628  "category": "Videos",
8629  "tags": [],
8630  "excerpt": "Smartbooks uitleg in 6 minuten: ontdek wat Smartbooks doet met een korte introductie van de belangrijkste functionaliteiten.",
8631  "originalUrl": "https://smartbooks.ai/videos/smartbooks-6min-introductie/",
8632  "meta": null,
8633  "enSlug": "smartbooks-6min-introduction"
8634}
8635---
8636<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/10/smartbooks-2min-introductie.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Smartbooks%206min%20introduction.mp4"></video></figure>
8637
8638
8639
8640<p></p>
8641
8642
8643
8644
8645<div class="wp-block-kadence-column kadence-column2519_e5e229-ab"><div class="kt-inside-inner-col">
8646<figure class="wp-block-kadence-image kb-image2519_8604f4-98 size-full kb-image-is-ratio-size"><div class="kb-is-ratio-image kb-image-ratio-land43"><img src="https://smartbooks.ai/wp-content/uploads/2023/12/shutterstock_1919479694.jpg" alt="" class="kb-img wp-image-1108"/></div></figure>
8647</div></div>
8648
8649
8650
8651<div class="wp-block-kadence-column kadence-column2519_455d6b-be"><div class="kt-inside-inner-col">
8652<p class="has-medium-font-size">Bekijk het on-demand webinar:</p>
8653
8654
8655
8656<h2 class="kt-adv-heading2519_166f69-6a wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2519_166f69-6a">'Rapporteren, plannen en consolideren in 20% van de tijd'</h2>
8657
8658
8659
8660<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns2519_3c65f8-49"></div>
8661</div></div>`,xO=`---json
8662{
8663  "title": "Smartbooks Demo – 12 Minuten",
8664  "slug": "smartbooks-demo",
8665  "metaTitle": "Smartbooks Demo: vollständige Tour (12 Min)",
8666  "date": "2024-10-09 12:33:11",
8667  "category": "Videos",
8668  "tags": [
8669    "Analyse",
8670    "Konsolidieren",
8671    "Monatsabschluss",
8672    "Planung",
8673    "Reporting"
8674  ],
8675  "excerpt": "Smartbooks Demo: sehen Sie in diesem Video, wie Monatsabschluss, Budgetierung, Konsolidierung und Reporting einfacher und belastbarer werden.",
8676  "originalUrl": "https://smartbooks.ai/videos/smartbooks-demo/",
8677  "meta": null
8678}
8679---
8680<p>Diese Smartbooks-Demo zeigt in 12 Minuten, wie Monatsabschluss, Budgetierung, Konsolidierung und Reporting einfacher und belastbarer werden.</p>
8681
8682<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/11/Smartbooks-demo.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Full%20Smartbooks%20demo.mp4"></video></figure>`,yO=`---json
8683{
8684  "title": "Smartbooks demo - 12 min",
8685  "metaTitle": "Smartbooks Demo: Full Product Tour (12 min)",
8686  "slug": "smartbooks-demo",
8687  "date": "",
8688  "category": "Videos",
8689  "tags": [
8690    "Product Tour",
8691    "Financial Reporting",
8692    "Consolidation",
8693    "Budgeting"
8694  ],
8695  "excerpt": "Smartbooks demo: watch how the platform makes month-end closing, budgeting, consolidation and reporting easier and better.",
8696  "originalUrl": "",
8697  "meta": {
8698    "type_bedrijf": "SaaS"
8699  }
8700}
8701---
8702<figure class="wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
8703<iframe title="Smartbooks Product Tour" src="https://player.vimeo.com/video/123456789?dnt=1&amp;
8703app_id=122963" width="1440" height="810" frameborder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media"></iframe>
8704</div></figure>`,jO=`---json
8705{
8706  "title": "Smartbooks demo - 12 min",
8707  "metaTitle": "Smartbooks demo: volledige rondleiding (12 min)",
8708  "slug": "smartbooks-demo",
8709  "order": 18,
8710  "date": "2024-10-09 12:33:11",
8711  "category": "Videos",
8712  "tags": [
8713    "Analyseren",
8714    "Consolideren",
8715    "Maandafsluiting",
8716    "Planning",
8717    "Rapporteren"
8718  ],
8719  "excerpt": "Smartbooks demo: bekijk in deze video hoe je het maandafsluiten, budgetteren, consolideren en rapporteren makkelijker en beter maakt.",
8720  "originalUrl": "https://smartbooks.ai/videos/smartbooks-demo/",
8721  "meta": null,
8722  "enSlug": "smartbooks-demo"
8723}
8724---
8725<figure class="wp-block-video"><video controls poster="https://smartbooks.ai/wp-content/uploads/2024/11/Smartbooks-demo.jpg" preload="none" src="https://144146156.fs1.hubspotusercontent-eu1.net/hubfs/144146156/Full%20Smartbooks%20demo.mp4"></video></figure>
8726
8727
8728
8729<p></p>
8730
8731
8732
8733
8734<div class="wp-block-kadence-column kadence-column2649_21dfbf-5f"><div class="kt-inside-inner-col">
8735<figure class="wp-block-kadence-image kb-image2649_5b4fdf-5e size-full kb-image-is-ratio-size"><div class="kb-is-ratio-image kb-image-ratio-land43"><img src="https://smartbooks.ai/wp-content/uploads/2023/12/shutterstock_1919479694.jpg" alt="" class="kb-img wp-image-1108"/></div></figure>
8736</div></div>
8737
8738
8739
8740<div class="wp-block-kadence-column kadence-column2649_22ec66-17"><div class="kt-inside-inner-col">
8741<p class="has-medium-font-size">Bekijk het on-demand webinar:</p>
8742
8743
8744
8745<h2 class="kt-adv-heading2649_88c4f2-31 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2649_88c4f2-31">'Rapporteren, plannen en consolideren in 20% van de tijd'</h2>
8746
8747
8748
8749<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns2649_4c01fa-a4"></div>
8750</div></div>`,SO=`---json
8751{
8752  "title": "Smarte Finanzkonsolidierung und Reporting mit Power BI",
8753  "metaTitle": "Finanzkonsolidierung mit Power BI und Smartbooks",
8754  "slug": "smartbooks-en-power-bi-de-perfecte-combinatie-voor-financieel-inzicht",
8755  "date": "2024-12-24 10:18:51",
8756  "category": "Articles",
8757  "tags": [
8758    "PowerBI"
8759  ],
8760  "excerpt": "Finanzkonsolidierung mit Power BI: Wie die Kombination aus Power BI und Smartbooks für belastbare Berichte und komplexe Gruppenkonsolidierung sorgt.",
8761  "originalUrl": "https://smartbooks.ai/artikelen/smartbooks-en-power-bi-de-perfecte-combinatie-voor-financieel-inzicht/",
8762  "meta": null
8763}
8764---
8765<p>Power BI ist zweifellos ein starkes Werkzeug, mit dem Unternehmen Daten aus verschiedenen Quellen zusammenführen und in aussagekräftige Dashboards und Berichte verwandeln. Dank benutzerfreundlicher Oberfläche, Flexibilität und breiter Integrationsmöglichkeiten ist Power BI ein Favorit für operative Analysen — Umsatz pro Produkt, Bestandsführung oder Kostenübersichten. Kein Wunder, dass immer mehr Unternehmen Power BI zur Visualisierung und Analyse nutzen.</p>
8766
8767<p>Aber wie stark ist Power BI, wenn es um Finanzkonsolidierung und Reporting geht? Es leistet viel — hat aber auch Grenzen, die man kennen sollte. Für Unternehmen, die es mit Finanzreporting ernst meinen, bietet die Kombination aus Power BI und Smartbooks eine unerreichte Lösung.</p>
8768
8769<hr />
8770
8771<h4>Worauf man bei Finanzreporting mit Power BI achten sollte</h4>
8772
8773<p>Power BI ist mächtig und flexibel, aber kein spezialisiertes Finanzsystem. Daraus ergeben sich mehrere Herausforderungen, wenn Sie direkt in Power BI konsolidieren und finanziell berichten wollen:</p>
8774
8775<ul>
8776<li><strong>Umgang mit vertraulichen Finanzdaten</strong><br>Finanzdaten sind sensibler als operative Daten. Die Verwaltung von Zugriffsrechten für Finanzberichte in Power BI kann komplex sein.</li>
8777<li><strong>Kontrollierte Freigabe von Zahlen</strong><br>Als Finance-Profi wollen Sie neue Zahlen erst nach Abschluss des Monatsabschlusses freigeben. Live-Ansichten von Finanzzahlen können irreführend sein — etwa nicht abgestimmte offene Forderungen oder Umsätze bei noch nicht versandten Rechnungen.</li>
8778<li><strong>Darstellung in einer Business-Kontenstruktur</strong><br>Die Buchhaltung folgt in der Regel der Logik des Steuerberaters. Für die beste Business-Perspektive brauchen Sie oft eine andere Struktur für GuV, Bilanz und Cashflow. Das Umbauen die
8778ser Strukturen ist in Power BI aufwendig und mit erheblichen Einrichtungs- und Pflegekosten verbunden.</li>
8779<li><strong>Kein Eingabemöglichkeiten für Budget oder Forecast</strong><br>Power BI bietet keine Eingabemasken — Unternehmen greifen deshalb häufig zu Excel für Budgets und Forecasts. Das erzeugt zusätzliche Schritte wie Datenimporte und die Pflege von Reporting-Strukturen in mehreren Systemen. Und bei jeder Aktualisierung eines Budgets oder Forecasts muss der manuelle Prozess von Neuem durchlaufen werden.</li>
8780<li><strong>Viel technische und finanzielle Expertise nötig</strong><br>Gute Finanzberichte in Power BI zu entwickeln, erfordert tiefes Know-how — schnell wird daraus ein komplexes und teures Projekt. Sie brauchen eine interne Power-BI-Spezialistin und/oder externe Beratung. Konsolidieren in Power BI ist eine Herausforderung, an der viele Unternehmen scheitern — besonders bei wachsender Komplexität (mehr Gesellschaften, IC-Differenzen, Teilkonsolidierung, Multi-Currency).</li>
8781<li><strong>Starke Abhängigkeit von der Erstellerin</strong><br>Finanz-Excel-Modelle werden über die Zeit oft immer komplexer, und nur die Erstellerin hat den Überblick. Mit der Komplexität steigt das Fehlerrisiko und die Abhängigkeit. Dieselben Risiken entstehen, wenn Sie Finanzmodelle in Power BI selbst bauen oder bauen lassen.</li>
8782</ul>
8783
8784<hr />
8785
8786<h4>So unterstützt Smartbooks Power BI im Finanzreporting</h4>
8787
8788<p>Smartbooks bietet eine innovative Lösung, die perfekt auf die Stärken von Power BI aufsetzt. Der Smartbooks Power BI Connector integriert Finanzdaten strukturiert, effizient und sicher in Power BI. So werden hochwertige Finanzberichte einfacher denn je.</p>
8789
8790<p><strong>Wichtigste Vorteile von Smartbooks:</strong></p>
8791
8792<ul>
8793<li><strong>Kontrollierte Datenfreigabe an Power BI</strong><br>Neue Zahlen werden erst nach Abschluss des Monatsabschlusses an Power BI weitergegeben. Vertrauliche Details wie Gehälter und Management-Fees lassen sich abschirmen.</li>
8794<li><strong>Wunsch-Datenstrukturen einfach einstellen</strong><br>In Smartbooks legen Sie die gewünschte Struktur für GuV, Bilanz und Cashflow einfach fest — inklusive neuer Zwischensummen und Kennzahlen wie Bruttomarge oder EBIT %. Alle Power-BI-Berichte stehen anschließend automatisch in der Struktur zur Verfügung, die für Ihr Unternehmen den besten Einblick liefert.</li>
8795<li><strong>Integriertes, dynamisch aufgebautes Budget und Forecast</strong><br>Business-modellgetriebene Budgets und Forecasts werden direkt in Smartbooks gepflegt. Das spart Zeit und minimiert Fehler. Varianzanalysen zwischen Ist und Budget entstehen automatisch, und monatlich erhalten Sie eine aktualisierte Jahresend-Prognose.</li>
8796<li><strong>Automatisierte Konsolidierung</strong><br>In Smartbooks automatisieren wir Ihre Konsolidierung einfach und schnell. Alle Konsolidierungsberichte stehen direkt auch in Power BI zur Verfügung.</li>
8797<li><strong>Niedrige Kosten und hohe Verlässlichkeit</strong><br>Smartbooks ist ein spezialisiertes Finanzsystem mit viel eingebauter Standardlogik. Dadurch sind die Einführungskosten deutlich niedriger als vergleichbare Projekte in Power BI. Es fällt weniger Wartung an, und die gelieferten Zahlen sind belastbarer.</li>
8798</ul>
8799
8800<hr />
8801
8802<h4>Die perfekte Kombination: Power BI und Smartbooks</h4>
8803
8804<p>Power BI glänzt in Flexibilität, Visualisierung und Datenintegration. Smartbooks ergänzt das perfekt, indem es Finanzdaten so bereitstellt, wie Ihr Unternehmen sie braucht. Gemeinsam bieten sie eine starke Lösung für tiefes Finanzverständnis und operative Analytik.</p>
8805
8806<p>Mit dieser Kombination sparen Sie Zeit und Kosten und schaffen zugleich Konsistenz, Verlässlichkeit und Einblick über alle Daten hinweg. Egal ob detaillierte Finanzübersichten oder strategische Analysen mit kombinierten Daten — Power BI und Smartbooks helfen Ihnen, schneller fundiertere Entscheidungen zu treffen.</p>
8807
8808<p>Mehr erfahren? Besuchen Sie <a href="/de">www.smartbooks.ai</a> und entdecken Sie die Möglichkeiten.</p>`,zO=`---json
8809{
8810  "title": "Smart financial consolidation and reporting with Power BI",
8811  "metaTitle": "Financial Consolidation with Power BI & Smartbooks",
8812  "slug": "fpa-tools-powerbi-complementary-forces-in-business-intelligence",
8813  "date": "",
8814  "category": "Articles",
8815  "tags": [
8816    "Power BI",
8817    "Financial Consolidation",
8818    "Reporting",
8819    "SaaS",
8820    "Business Intelligence"
8821  ],
8822  "excerpt": "Financial consolidation with Power BI: discover how combining Power BI and Smartbooks delivers reliable reporting and complex group consolidation.",
8823  "originalUrl": ""
8824}
8825---
8826<p>Power BI is without a doubt a powerful tool that allows companies to combine data from various sources and transform it into 
8826insightful dashboards and reports. With its user-friendly interface, flexibility, and broad integration capabilities, Power BI is a favorite for operational analysis, such as revenue per product, inventory management, and cost overviews. It is no surprise that more and more companies are using Power BI to visualize and analyze their data.</p>
8827
8828<p>But how effective is Power BI when it comes to financial consolidation and reporting? While it has much to offer, Power BI also has limitations that are important to understand. For companies that are serious about financial reporting, the combination of Power BI with Smartbooks offers an unparalleled solution.</p>
8829
8830<hr class="\\"`,AO=`---json
8831{
8832  "title": "Slimme financiële consolidatie en rapportage met Power BI",
8833  "metaTitle": "Financiële consolidatie met Power BI: 6 knelpunten",
8834  "slug": "smartbooks-en-power-bi-de-perfecte-combinatie-voor-financieel-inzicht",
8835  "order": 11,
8836  "date": "2024-12-24 10:18:51",
8837  "category": "Articles",
8838  "tags": [
8839    "PowerBI"
8840  ],
8841  "excerpt": "Financiële consolidatie met Power BI stuit op rechten, vrijgave en accountstructuur. Consolideer in het financiële systeem, visualiseer in Power BI.",
8842  "originalUrl": "https://smartbooks.ai/artikelen/smartbooks-en-power-bi-de-perfecte-combinatie-voor-financieel-inzicht/",
8843  "meta": null,
8844  "enSlug": "fpa-tools-powerbi-complementary-forces-in-business-intelligence"
8845}
8846---
8847<p>Power BI is zonder twijfel een krachtige tool waarmee bedrijven data uit verschillende bronnen kunnen combineren en transformeren tot inzichtelijke dashboards en rapportages. Met zijn gebruiksvriendelijke interface, flexibiliteit en brede integratiemogelijkheden, is Power BI een favoriet voor operationele analyses, zoals omzet per product, voorraadbeheer en kostenoverzichten. Het is geen verrassing dat steeds meer bedrijven Power BI inzetten om hun data te visualiseren en analyseren.</p>
8848
8849
8850
8851<p>Maar hoe goed is Power BI als het gaat om financiële consolidatie en rapportage? Hoewel het veel te bieden heeft, kent Power BI ook beperkingen die belangrijk zijn om te begrijpen. Voor bedrijven die serieus zijn over financiële rapportages, biedt de combinatie van Power BI met Smartbooks een ongeëvenaarde oplossing.</p>
8852
8853
8854
8855<hr class="wp-block-separator has-alpha-channel-opacity"/>
8856
8857
8858
8859<h4 class="wp-block-heading">Aandachtspunten voor financiële rapportages met Power BI</h4>
8860
8861
8862
8863<p>Power BI is krachtig en flexibel, maar het is geen gespecialiseerd financieel systeem. Dit leidt tot een aantal uitdagingen als je direct in Power BI wilt consolideren en de financiële rapportages wilt maken:</p>
8864
8865
8866
8867<ul class="wp-block-list">
8868<li><strong>Managen van de vertrouwelijke financiële gegevens</strong><br>Financiële data heeft een veel vertrouwelijker karakter dan operationele data. Het beheren van toegangsrechten voor financiële rapportages in Power BI kan complex zijn.</li>
8869
8870
8871
8872<li><strong>Gecontroleerd vrijgeven van cijfers</strong><br>Als finance professional wil je de nieuwe cijfers pas vrijgeven voor het management team nadat de maandafsluiting is afgerond. Live weergave van financiële cijfers kan verwarrend of zelfs misleidend. Denk aan openstaande debiteuren die niet zijn afgeletterd of omzetcijfers terwijl niet alle facturen zijn verstuurd.</li>
8873
8874
8875
8876<li><strong>Presenteren in de business accountstructuur</strong><br>De boekhouding is doorgaans ingericht volgens de logica van de accountant. Voor de beste bedrijfsinzichten wil je meestal een andere accountstructuur voor de V&amp;W, Balans en Cashflow. Het ombouwen van deze structuren is in Power BI een serieuze uitdaging met vaak aanzienlijke kosten voor het inrichten en onderhouden hiervan.</li>
8877
8878
8879
8880<li><strong>Invoeren van Budget of Forecast is niet mogelijk</strong><br>Power BI biedt geen invoerfunctionaliteit, wat betekent dat bedrijven vaak terugvallen op Excel voor budgetten en forecasts. Dit leidt tot extra stappen, zoals het inlezen van gegevens en het beheren van rapportagestructuren in meerdere systemen. En bij elke update van een budget of forecast moet het hele handmatige proces opnieuw doorlopen worden.</li>
8881
8882
8883
8884<li><strong>Veel technische en financiële expertise vereist</strong><br>Het ontwikkelen van goede financiële rapportages in Power BI vereist diepgaande kennis en kan snel uitgroeien tot een complex en duur project. Dit vereist een interne Power BI specialist en/of externe consultants. Consolideren in Power BI is een uitdaging waar veel bedrijven op vastlopen. Zeker als de complexiteit van de consolidatie toeneemt (meer entiteiten, intercompany verschillen, sub-consolidatie, multi-currency)</li>
8885
8886
8887
8888<li><strong>Sterke afhankelijkheid van de maker</strong><br>Financiële Excel modellen worden over tijd vaak steeds complexer, waarbij alleen de maker nog het overzicht heeft. En naarmate de complexiteit toeneemt groet ook het risico op fouten en de afhankelijkheid van de maker. Dezelfde r
8888isico’s loop je ook wanneer je zelf financiële modellen in Power BI gaat of laat maken.</li>
8889</ul>
8890
8891
8892
8893<hr class="wp-block-separator has-alpha-channel-opacity"/>
8894
8895
8896
8897<h4 class="kt-adv-heading2930_b4cb01-17 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading2930_b4cb01-17">Hoe Smartbooks je helpt met het gebruik van Power Bi voor financiële rapportages</h4>
8898
8899
8900
8901<p>Smartbooks biedt een innovatieve oplossing die perfect aansluit op de kracht van Power BI. De Smartbooks Power BI Connector maakt het mogelijk om financiële data op een gestructureerde, efficiënte en veilige manier te integreren in Power BI. Hiermee wordt het eenvoudiger dan ooit om financiële rapportages te maken die voldoen aan de hoogste eisen.</p>
8902
8903
8904
8905<p><strong>Belangrijkste voordelen van Smartbooks:</strong></p>
8906
8907
8908
8909<ul class="wp-block-list">
8910<li><strong>Beheersing van data vrijgave aan Power BI</strong><br>Nieuwe cijfers worden pas doorgegeven aan Power BI nadat de maandafsluiting is afgerond. En vertrouwelijke details, zoals salarissen en managementfees, kunnen worden afgeschermd.</li>
8911
8912
8913
8914<li><strong>Eenvoudig de wenselijke datastructuren instellen</strong><br>In Smartbooks kun je eenvoudig de gewenste structuur voor de V&amp;W, Balans en Cashflow specificeren. Inclusief nieuwe subtotalen en ratio’s zoals Bruto Marge of EBIT%. Alle Power BI rapportages staan daarna automatisch in de structuur die het beste inzicht geeft voor jullie bedrijf.</li>
8915
8916
8917
8918<li><strong>Geïntegreerde en dynamisch opgebouwde Budget en Forecast</strong><br>Business model gedreven budgetten en forecasts kunnen direct binnen Smartbooks worden beheerd. Dit bespaart tijd en minimaliseert fouten. Je hebt automatisch variantie analyses tussen de realisatie en het budget. En elke maand krijg je automatisch een update van de jaareinde prognose.</li>
8919
8920
8921
8922<li><strong>Geautomatiseerde consolidatie</strong><br>In Smartbooks automatiseren wij jullie consolidatie eenvoudig en snel. Alle consolidatie rapportages zijn dan ook direct in Power BI beschikbaar.</li>
8923
8924
8925
8926<li><strong>Lage kosten en hoge betrouwbaarheid</strong><br>Smartbooks is een gespecialiseerd financieel systeem met veel standaard ingebouwde logica. Daardoor zijn onze implementatiekosten factoren lager dan de projectkosten om hetzelfde in Power BI te realiseren. Is er veel minder onderhoud nodig en zijn de aangeleverde cijfers betrouwbaarder.</li>
8927</ul>
8928
8929
8930
8931<hr class="wp-block-separator has-alpha-channel-opacity"/>
8932
8933
8934
8935<h4 class="wp-block-heading">De perfecte combinatie: Power BI en Smartbooks</h4>
8936
8937
8938
8939<p>Power BI excelleert in flexibiliteit, visuele presentaties en het combineren van data uit verschillende bronnen. Smartbooks vult dit perfect aan door financiële data toegankelijk te maken op een manier die specifiek is afgestemd op de behoeften van jullie bedrijf. Samen bieden ze een krachtige oplossing voor bedrijven die zowel diepgaand financieel inzicht als operationele analyses willen combineren.</p>
8940
8941
8942
8943<p>Met deze combinatie bespaar je niet alleen tijd en kosten, maar zorg je ook voor consistentie, betrouwbaarheid en inzicht in al je data. Of het nu gaat om gedetailleerde financiële overzichten of strategische analyses met gecombineerde data, Power BI en Smartbooks helpen je om sneller en beter gefundeerde beslissingen te nemen.</p>
8944
8945
8946
8947<p>Wil je meer weten over hoe de combinatie van Power BI en Smartbooks jouw financiële processen kan optimaliseren? Bezoek onze website op <a href="/">www.smartbooks.ai</a> en ontdek de mogelijkheden!</p>
8948
8949
8950
8951<p></p>`,CO=`---json
8952{
8953  "title": "Smartbooks vs Bright Analytics",
8954  "slug": "smartbooks-vs-bright-analytics",
8955  "metaTitle": "Smartbooks vs Bright Analytics vergleichen",
8956  "date": "2026-04-30 09:00:00",
8957  "category": "Articles",
8958  "tags": [
8959    "Vergleich",
8960    "Bright Analytics"
8961  ],
8962  "excerpt": "Bright Analytics kombiniert BI mit Finanzreporting und Konsolidierung. Smartbooks geht darüber hinaus — mit Planung, Monatsabschluss und Finance-spezifischen Workflows, aufgebaut rund um den Alltag von Controllern.",
8963  "originalUrl": "",
8964  "meta": null
8965}
8966---
8967<style>
8968.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
8969.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
8970.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
8971.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
8972.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
8973.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
8974.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
8975.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px;
8975 margin: 24px 0 30px; }
8976.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
8977.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
8978.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
8979.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
8980.sb-vs .card h3 { margin-top: 0; }
8981.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
8982.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
8983.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
8984.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
8985.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
8986.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
8987.sb-vs .meta-row span strong { color: var(--dark-blue); }
8988@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
8989</style>
8990<div class="sb-vs">
8991<h1>Smartbooks vs Bright Analytics</h1>
8992<p class="author"><em>BI-Tool mit Konsolidierung vs. vollständige Financial- und Business-Control-Plattform</em></p>
8993
8994<div class="summary">
8995<strong>Kurz gesagt</strong>
8996<p>Bright Analytics kombiniert BI mit Finanzreporting und Konsolidierung. Smartbooks geht darüber hinaus — mit Planung, Monatsabschluss und Finance-spezifischen Workflows, aufgebaut rund um den Alltag von Controllern.</p>
8997</div>
8998
8999<div class="meta-row">
9000<span><strong>Zielgruppe Bright Analytics:</strong> Größerer Mittelstand</span>
9001<span><strong>Positionierung:</strong> Reporting &amp; Konsolidierung</span>
9002</div>
9003
9004<h2>Stärken und Grenzen von Bright Analytics</h2>
9005<div class="grid-two">
9006<div class="card">
9007<h3>Stärken</h3>
9008<ul><li>Starke Konsolidierungsfunktionalität</li><li>Strukturierte Finanzberichte</li><li>Klare Anbindung an Buchhaltungsdaten</li></ul>
9009</div>
9010<div class="card">
9011<h3>Grenzen</h3>
9012<ul><li>Weniger Fokus auf Planung und Forecasting</li><li>Keine umfassende Unterstützung für den Monatsabschluss</li><li>Integration nicht-finanzieller Datenquellen ist eingeschränkter</li></ul>
9013</div>
9014</div>
9015
9016<h2>Wann passt welche Lösung?</h2>
9017<div class="grid-two">
9018<div class="card">
9019<h3>Bright Analytics passt, wenn …</h3>
9020<ul><li>Sie vor allem Datenquellen für Reporting kombinieren möchten</li><li>Mehrere Entitäten konsolidiert werden</li><li>Der Schwerpunkt auf Finanzreporting und Gruppenübersichten liegt</li></ul>
9021</div>
9022<div class="card">
9023<h3>Smartbooks passt, wenn …</h3>
9024<ul><li>Planung und Forecasting Kernbestandteile sind</li><li>Sie den gesamten Monatsabschluss unterstützt haben möchten</li><li>Sie Finance-spezifische Workflows statt einer allgemeinen BI-Schicht wollen</li></ul>
9025</div>
9026</div>
9027
9028<h2>Stimme aus dem Markt</h2><blockquote>„Es ist im Grunde Power BI für Leute, die kein Power BI können.“<span class="score">5/10</span></blockquote>
9029
9030<h2>Warum Controller Smartbooks wählen</h2>
9031<ul>
9032<li>Klarer Fokus auf die täglichen Workflows von Controllern</li>
9033<li>Unterstützung des gesamten Monatsprozesses</li>
9034<li>Finance-spezifische Logik und Standardisierung</li>
9035<li>Einfache, kostengünstige und schnelle Implementierung</li>
9036<li>Keine Abhängigkeit von IT oder externen Spezialisten</li>
9037</ul>
9038
9039<div class="verdict">
9040<h3>Fazit</h3>
9041<p>Bright Analytics ist geeignet für alle, die primär Reporting und Konsolidierung suchen. Smartbooks ist breiter einsetzbar — mit stärkerer Position in Planung, Monatsabschluss und Finance-Workflows.</p>
9042</div>
9043
9044<h2>Weiterlesen</h2>
9045<p>Sehen Sie den vollständigen <a href="/de/artikel/vergelijk-business-control-software">Vergleich von Financial- und Business-Control-Software</a> oder lesen Sie, warum Organisationen sich für <a href="/de/warum-smartbooks">Smartbooks</a> entscheiden.</p>
9046</div>`,EO=`---json
9047{
9048  "title": "Smartbooks vs Bright Analytics",
9049  "metaTitle": "Smartbooks vs Bright Analytics Compared",
9050  "slug": "smartbooks-vs-bright-analytics",
9051  "date": "2026-04-30 09:00:00",
9052  "category": "Articles",
9053  "tags": [
9054    "Comparison",
9055    "Bright Analytics"
9056  ],
9057  "excerpt": "Bright Analytics combines BI with financial reporting and consolidation. Smartbooks goes further with planning, month-end close, and finance-specific workflows — built around the daily processes of controllers.",
9058  "originalUrl": "",
9059  "meta": null
9060}
9061---
9062<style>
9063.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
9064.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
9065.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
9066.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
9067.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
9068.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
9069.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
9070.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px;
9070 margin: 24px 0 30px; }
9071.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
9072.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
9073.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
9074.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
9075.sb-vs .card h3 { margin-top: 0; }
9076.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
9077.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
9078.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
9079.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
9080.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
9081.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
9082.sb-vs .meta-row span strong { color: var(--dark-blue); }
9083@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
9084</style>
9085<div class="sb-vs">
9086<h1>Smartbooks vs Bright Analytics</h1>
9087<p class="author"><em>BI tool with consolidation vs. a complete financial and business control platform</em></p>
9088
9089<div class="summary">
9090<strong>In short</strong>
9091<p>Bright Analytics combines BI with financial reporting and consolidation. Smartbooks goes further with planning, month-end close, and finance-specific workflows — built around the daily processes of controllers.</p>
9092</div>
9093
9094<div class="meta-row">
9095<span><strong>Target audience Bright Analytics:</strong> Larger SMB</span>
9096<span><strong>Positioning:</strong> Reporting & consolidation</span>
9097</div>
9098
9099<h2>Strengths and limitations of Bright Analytics</h2>
9100<div class="grid-two">
9101<div class="card">
9102<h3>Strengths</h3>
9103<ul><li>Strong consolidation functionality</li><li>Structured financial reports</li><li>Clear connection to accounting data</li></ul>
9104</div>
9105<div class="card">
9106<h3>Limitations</h3>
9107<ul><li>Less focus on planning and forecasting</li><li>No extensive support for month-end close</li><li>Integration with non-financial data sources is more limited</li></ul>
9108</div>
9109</div>
9110
9111<h2>When does each solution fit?</h2>
9112<div class="grid-two">
9113<div class="card">
9114<h3>Bright Analytics fits when...</h3>
9115<ul><li>You mainly want to combine data sources for reporting</li><li>You want to consolidate multiple entities</li><li>The emphasis is on financial reporting and group overviews</li></ul>
9116</div>
9117<div class="card">
9118<h3>Smartbooks fits when...</h3>
9119<ul><li>Planning and forecasting are a core component</li><li>You want support for the complete month-end close process</li><li>You want finance-specific workflows instead of a generic BI layer</li></ul>
9120</div>
9121</div>
9122
9123<h2>Voice from the market</h2><blockquote>"It is essentially Power BI for people who can’t do Power BI."<span class="score">5/10</span></blockquote>
9124
9125<h2>Why controllers choose Smartbooks</h2>
9126<ul>
9127<li>Clear focus on the daily workflows of controllers</li>
9128<li>Support for the complete monthly process</li>
9129<li>Finance-specific logic and standardisation</li>
9130<li>Simple, affordable, and fast implementation</li>
9131<li>No dependency on IT or external specialists</li>
9132</ul>
9133
9134<div class="verdict">
9135<h3>Conclusion</h3>
9136<p>Bright Analytics suits those primarily looking for reporting and consolidation. Smartbooks is more broadly deployable with a stronger position on planning, month-end close, and finance workflows.</p>
9137</div>
9138
9139<h2>Further reading</h2>
9140<p>See the full <a href="/en/articles/compare-business-control-software">comparison of financial and business control software</a> or read why organisations choose <a href="/en/why-smartbooks">Smartbooks</a>.</p>
9141</div>`,NO=`---json
9142{
9143  "title": "Smartbooks vs Bright Analytics",
9144  "metaTitle": "Smartbooks vs Bright Analytics vergelijken",
9145  "slug": "smartbooks-vs-bright-analytics",
9146  "order": 48,
9147  "date": "2026-04-30 09:00:00",
9148  "category": "Articles",
9149  "tags": [
9150    "Vergelijking",
9151    "Bright Analytics"
9152  ],
9153  "excerpt": "Bright Analytics combineert BI met financiële rapportage en consolidatie. Smartbooks gaat verder met planning, maandafsluiting en finance-specifieke workflows — gebouwd rond de dagelijkse processen van controllers.",
9154  "originalUrl": "",
9155  "enSlug": "smartbooks-vs-bright-analytics"
9156}
9157---
9158<style>
9159.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
9160.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
9161.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
9162.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
9163.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
9164.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
9165.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
9166.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px;
9166 margin: 24px 0 30px; }
9167.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
9168.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
9169.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
9170.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
9171.sb-vs .card h3 { margin-top: 0; }
9172.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
9173.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
9174.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
9175.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
9176.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
9177.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
9178.sb-vs .meta-row span strong { color: var(--dark-blue); }
9179@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
9180</style>
9181<div class="sb-vs">
9182<h1>Smartbooks vs Bright Analytics</h1>
9183<p class="author"><em>BI-tool met consolidatie vs. compleet financial en business control platform</em></p>
9184
9185<div class="summary">
9186<strong>In het kort</strong>
9187<p>Bright Analytics combineert BI met financiële rapportage en consolidatie. Smartbooks gaat verder met planning, maandafsluiting en finance-specifieke workflows — gebouwd rond de dagelijkse processen van controllers.</p>
9188</div>
9189
9190<div class="meta-row">
9191<span><strong>Doelgroep Bright Analytics:</strong> Groter MKB</span>
9192<span><strong>Positionering:</strong> Reporting & consolidatie</span>
9193</div>
9194
9195<h2>Sterke punten en beperkingen van Bright Analytics</h2>
9196<div class="grid-two">
9197<div class="card">
9198<h3>Sterke punten</h3>
9199<ul><li>Sterke consolidatiefunctionaliteit</li><li>Gestructureerde financiële rapportages</li><li>Duidelijke aansluiting op boekhouddata</li></ul>
9200</div>
9201<div class="card">
9202<h3>Beperkingen</h3>
9203<ul><li>Minder focus op planning en forecasting</li><li>Geen uitgebreide ondersteuning voor maandafsluiting</li><li>Integratie met niet-financiële databronnen is beperkter</li></ul>
9204</div>
9205</div>
9206
9207<h2>Wanneer past welke oplossing?</h2>
9208<div class="grid-two">
9209<div class="card">
9210<h3>Bright Analytics past wanneer...</h3>
9211<ul><li>U vooral databronnen wilt combineren voor rapportage</li><li>Meerdere entiteiten wilt consolideren</li><li>Nadruk ligt op financiële rapportage en groepsoverzichten</li></ul>
9212</div>
9213<div class="card">
9214<h3>Smartbooks past wanneer...</h3>
9215<ul><li>Planning en forecasting een kernonderdeel vormen</li><li>U ondersteuning wilt voor het volledige maandafsluitproces</li><li>U finance-specifieke workflows wilt in plaats van een algemene BI-laag</li></ul>
9216</div>
9217</div>
9218
9219<h2>Stem uit de markt</h2><blockquote>"Het is gewoon Power BI voor mensen die geen Power BI kunnen."<span class="score">5/10</span></blockquote>
9220
9221<h2>Waarom controllers voor Smartbooks kiezen</h2>
9222<ul>
9223<li>Duidelijke focus op de dagelijkse workflows van controllers</li>
9224<li>Ondersteuning van het volledige maandelijkse proces</li>
9225<li>Finance-specifieke logica en standaardisatie</li>
9226<li>Eenvoudige, goedkope en snelle implementatie</li>
9227<li>Geen afhankelijkheid van IT of externe specialisten</li>
9228</ul>
9229
9230<div class="verdict">
9231<h3>Conclusie</h3>
9232<p>Bright Analytics is geschikt voor wie primair rapportage en consolidatie zoekt. Smartbooks is breder inzetbaar met een sterkere positie op planning, maandafsluiting en finance-workflows.</p>
9233</div>
9234
9235<h2>Verder lezen</h2>
9236<p>Bekijk de volledige <a href="/artikelen/vergelijk-business-control-software">vergelijking van financial en business control software</a> of lees waarom organisaties kiezen voor <a href="/waarom-smartbooks">Smartbooks</a>.</p>
9237</div>`,IO=`---json
9238{
9239  "title": "Smartbooks vs Finstack",
9240  "slug": "smartbooks-vs-finstack",
9241  "metaTitle": "Smartbooks vs Finstack: Vergleich",
9242  "date": "2026-04-30 09:00:00",
9243  "category": "Articles",
9244  "tags": [
9245    "Vergleich",
9246    "Finstack"
9247  ],
9248  "excerpt": "Finstack hilft Mittelständlern, sich aus Excel zu professionalisieren. Smartbooks deckt den gesamten Financial- und Business-Control-Prozess ab — mit mehr Tiefe in Konsolidierung, Planung und Analyse.",
9249  "originalUrl": "",
9250  "meta": null
9251}
9252---
9253<style>
9254.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
9255.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
9256.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
9257.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
9258.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
9259.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
9260.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
9261.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px;
9261 margin: 24px 0 30px; }
9262.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
9263.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
9264.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
9265.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
9266.sb-vs .card h3 { margin-top: 0; }
9267.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
9268.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
9269.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
9270.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
9271.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
9272.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
9273.sb-vs .meta-row span strong { color: var(--dark-blue); }
9274@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
9275</style>
9276<div class="sb-vs">
9277<h1>Smartbooks vs Finstack</h1>
9278<p class="author"><em>Basis-Business-Control für den Mittelstand vs. vollständige Financial- und Business-Control-Plattform</em></p>
9279
9280<div class="summary">
9281<strong>Kurz gesagt</strong>
9282<p>Finstack hilft Mittelstands­organisationen, sich mit Standardberichten aus Excel heraus zu professionalisieren. Smartbooks unterstützt den gesamten Financial- und Business-Control-Prozess — mit mehr Tiefe in Konsolidierung, Planung und Analyse.</p>
9283</div>
9284
9285<div class="meta-row">
9286<span><strong>Zielgruppe Finstack:</strong> Mittelstand</span>
9287<span><strong>Positionierung:</strong> Business Control light</span>
9288</div>
9289
9290<h2>Stärken und Grenzen von Finstack</h2>
9291<div class="grid-two">
9292<div class="card">
9293<h3>Stärken</h3>
9294<ul><li>Pragmatische Unterstützung von Financial &amp; Business Control</li><li>Übersichtliches Setup</li><li>Niedrige Einstiegshürde</li></ul>
9295</div>
9296<div class="card">
9297<h3>Grenzen</h3>
9298<ul><li>Begrenzte Skalierbarkeit bei starkem Wachstum</li><li>Weniger Unterstützung für fortgeschrittene Szenario-Analysen</li><li>Eingeschränkte Möglichkeiten bei komplexer Konsolidierung</li></ul>
9299</div>
9300</div>
9301
9302<h2>Wann passt welche Lösung?</h2>
9303<div class="grid-two">
9304<div class="card">
9305<h3>Finstack passt, wenn …</h3>
9306<ul><li>Sie Financial Control aus Excel heraus professionalisieren möchten</li><li>Standardberichte und -analysen ausreichen</li><li>Ihre Organisation noch begrenzte Komplexität aufweist</li></ul>
9307</div>
9308<div class="card">
9309<h3>Smartbooks passt, wenn …</h3>
9310<ul><li>Mehrere Entitäten konsolidiert werden müssen</li><li>
9310Sie umfangreiche Planungs- und Forecast-Prozesse abbilden möchten</li><li>Sie Flexibilität in Datenmodellen und Analysen brauchen</li></ul>
9311</div>
9312</div>
9313
9314<h2>Warum Controller Smartbooks wählen</h2>
9315<ul>
9316<li>Klarer Fokus auf die täglichen Workflows von Controllern</li>
9317<li>Unterstützung des gesamten Monatsprozesses</li>
9318<li>Finance-spezifische Logik und Standardisierung</li>
9319<li>Einfache, kostengünstige und schnelle Implementierung</li>
9320<li>Keine Abhängigkeit von IT oder externen Spezialisten</li>
9321</ul>
9322
9323<div class="verdict">
9324<h3>Fazit</h3>
9325<p>Finstack ist ein geeigneter erster Schritt weg von Excel. Smartbooks passt besser zu Organisationen, die strukturell wachsen und mehr Tiefe in Konsolidierung, Planung und Analyse benötigen.</p>
9326</div>
9327
9328<h2>Weiterlesen</h2>
9329<p>Sehen Sie den vollständigen <a href="/de/artikel/vergelijk-business-control-software">Vergleich von Financial- und Business-Control-Software</a> oder lesen Sie, warum Organisationen sich für <a href="/de/warum-smartbooks">Smartbooks</a> entscheiden.</p>
9330</div>`,PO=`---json
9331{
9332  "title": "Smartbooks vs Finstack",
9333  "metaTitle": "Smartbooks vs Finstack: Comparison",
9334  "slug": "smartbooks-vs-finstack",
9335  "date": "2026-04-30 09:00:00",
9336  "category": "Articles",
9337  "tags": [
9338    "Comparison",
9339    "Finstack"
9340  ],
9341  "excerpt": "Finstack helps SMB organisations professionalise from Excel with standard reports. Smartbooks supports the complete financial and business control process with more depth in consolidation, planning, and analysis.",
9342  "originalUrl": "",
9343  "meta": null
9344}
9345---
9346<style>
9347.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
9348.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
9349.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
9350.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
9351.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
9352.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
9353.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
9354.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px; margin: 24px 0 30px; }
9355.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
9356.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
9357.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
9358.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
9359.sb-vs .card h3 { margin-top: 0; }
9360.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
9361.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
9362.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
9363.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
9364.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
9365.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
9366.sb-vs .meta-row span strong { color: var(--dark-blue); }
9367@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
9368</style>
9369<div class="sb-vs">
9370<h1>Smartbooks vs Finstack</h1>
9371<p class="author"><em>Basic business control for SMBs vs. a complete financial and business control platform</em></p>
9372
9373<div class="summary">
9374<strong>In short</strong>
9375<p>Finstack helps SMB organisations professionalise from Excel with standard reports. Smartbooks supports the complete financial and business control process with more depth in consolidation, planning, and analysis.</p>
9376</div>
9377
9378<div class="meta-row">
9379<span><strong>Target audience Finstack:</strong> SMB</span>
9380<span><strong>Positioning:</strong> Business control light</span>
9381</div>
9382
9383<h2>Strengths and limitations of Finstack</h2>
9384<div class="grid-two">
9385<div class="card">
9386<h3>Strengths</h3>
9387<ul><li>
9387Pragmatic support for financial and business control</li><li>Clear setup</li><li>Low entry threshold</li></ul>
9388</div>
9389<div class="card">
9390<h3>Limitations</h3>
9391<ul><li>Limited scalability under strong growth</li><li>Less support for advanced scenario analyses</li><li>Limited capabilities for complex consolidation</li></ul>
9392</div>
9393</div>
9394
9395<h2>When does each solution fit?</h2>
9396<div class="grid-two">
9397<div class="card">
9398<h3>Finstack fits when...</h3>
9399<ul><li>You want to professionalise financial control from Excel</li><li>Standard reports and analyses are sufficient</li><li>Your organisation still has limited complexity</li></ul>
9400</div>
9401<div class="card">
9402<h3>Smartbooks fits when...</h3>
9403<ul><li>You have multiple entities that need to be consolidated</li><li>You want to support extensive planning and forecasting processes</li><li>You need flexibility in data models and analyses</li></ul>
9404</div>
9405</div>
9406
9407
9408
9409<h2>Why controllers choose Smartbooks</h2>
9410<ul>
9411<li>Clear focus on the daily workflows of controllers</li>
9412<li>Support for the complete monthly process</li>
9413<li>Finance-specific logic and standardisation</li>
9414<li>Simple, affordable, and fast implementation</li>
9415<li>No dependency on IT or external specialists</li>
9416</ul>
9417
9418<div class="verdict">
9419<h3>Conclusion</h3>
9420<p>Finstack is a suitable first step away from Excel. Smartbooks fits better for organisations that grow structurally and need more depth in consolidation, planning, and analysis.</p>
9421</div>
9422
9423<h2>Further reading</h2>
9424<p>See the full <a href="/en/articles/compare-business-control-software">comparison of financial and business control software</a> or read why organisations choose <a href="/en/why-smartbooks">Smartbooks</a>.</p>
9425</div>`,TO=`---json
9426{
9427  "title": "Smartbooks vs Finstack",
9428  "metaTitle": "Smartbooks vs Finstack: vergelijking",
9429  "slug": "smartbooks-vs-finstack",
9430  "order": 49,
9431  "date": "2026-04-30 09:00:00",
9432  "category": "Articles",
9433  "tags": [
9434    "Vergelijking",
9435    "Finstack"
9436  ],
9437  "excerpt": "Finstack helpt MKB-organisaties om vanuit Excel te professionaliseren met standaardrapportages. Smartbooks ondersteunt het volledige financial en business control proces met meer diepgang in consolidatie, planning en analyse.",
9438  "originalUrl": "",
9439  "enSlug": "smartbooks-vs-finstack"
9440}
9441---
9442<style>
9443.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
9444.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
9445.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
9446.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
9447.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
9448.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
9449.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
9450.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px; margin: 24px 0 30px; }
9451.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
9452.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
9453.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
9454.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
9455.sb-vs .card h3 { margin-top: 0; }
9456.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
9457.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
9458.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px;
9458 padding: 22px 26px; margin: 30px 0; }
9459.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
9460.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
9461.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
9462.sb-vs .meta-row span strong { color: var(--dark-blue); }
9463@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
9464</style>
9465<div class="sb-vs">
9466<h1>Smartbooks vs Finstack</h1>
9467<p class="author"><em>Basis business control voor het MKB vs. compleet financial en business control platform</em></p>
9468
9469<div class="summary">
9470<strong>In het kort</strong>
9471<p>Finstack helpt MKB-organisaties om vanuit Excel te professionaliseren met standaardrapportages. Smartbooks ondersteunt het volledige financial en business control proces met meer diepgang in consolidatie, planning en analyse.</p>
9472</div>
9473
9474<div class="meta-row">
9475<span><strong>Doelgroep Finstack:</strong> MKB</span>
9476<span><strong>Positionering:</strong> Business control light</span>
9477</div>
9478
9479<h2>Sterke punten en beperkingen van Finstack</h2>
9480<div class="grid-two">
9481<div class="card">
9482<h3>Sterke punten</h3>
9483<ul><li>Pragmatische ondersteuning van financial en business control</li><li>Overzichtelijke inrichting</li><li>Lage instapdrempel</li></ul>
9484</div>
9485<div class="card">
9486<h3>Beperkingen</h3>
9487<ul><li>Beperkte schaalbaarheid bij sterke groei</li><li>Minder ondersteuning voor geavanceerde scenario-analyses</li><li>Beperkte mogelijkheden voor complexe consolidatie</li></ul>
9488</div>
9489</div>
9490
9491<h2>Wanneer past welke oplossing?</h2>
9492<div class="grid-two">
9493<div class="card">
9494<h3>Finstack past wanneer...</h3>
9495<ul><li>U financial control wilt professionaliseren vanuit Excel</li><li>Standaard rapportages en analyses voldoende zijn</li><li>Uw organisatie nog beperkte complexiteit heeft</li></ul>
9496</div>
9497<div class="card">
9498<h3>Smartbooks past wanneer...</h3>
9499<ul><li>U meerdere entiteiten heeft die geconsolideerd moeten worden</li><li>U uitgebreide planning- en forecastingprocessen wilt ondersteunen</li><li>U flexibiliteit nodig heeft in datamodellen en analyses</li></ul>
9500</div>
9501</div>
9502
9503
9504
9505<h2>Waarom controllers voor Smartbooks kiezen</h2>
9506<ul>
9507<li>Duidelijke focus op de dagelijkse workflows van controllers</li>
9508<li>Ondersteuning van het volledige maandelijkse proces</li>
9509<li>Finance-specifieke logica en standaardisatie</li>
9510<li>Eenvoudige, goedkope en snelle implementatie</li>
9511<li>Geen afhankelijkheid van IT of externe specialisten</li>
9512</ul>
9513
9514<div class="verdict">
9515<h3>Conclusie</h3>
9516<p>Finstack is een geschikte eerste stap weg van Excel. Smartbooks past beter bij organisaties die structureel doorgroeien en meer diepgang nodig hebben in consolidatie, planning en analyse.</p>
9517</div>
9518
9519<h2>Verder lezen</h2>
9520<p>Bekijk de volledige <a href="/artikelen/vergelijk-business-control-software">vergelijking van financial en business control software</a> of lees waarom organisaties kiezen voor <a href="/waarom-smartbooks">Smartbooks</a>.</p>
9521</div>`,DO=`---json
9522{
9523  "title": "Smartbooks vs. Lucanet: Welche Finanzsoftware passt am besten zu Ihrer Organisation?",
9524  "metaTitle": "Konsolidierungssoftware wählen: Smartbooks vs. Lucanet",
9525  "slug": "smartbooks-vs-lucanet-welke-financiele-software-past-het-beste-bij-uw-bedrijf",
9526  "date": "2025-02-25 12:47:09",
9527  "category": "Articles",
9528  "tags": [
9529    "Konsolidierung",
9530    "Lucanet"
9531  ],
9532  "excerpt": "Konsolidierungssoftware wählen? Smartbooks und Lucanet im Vergleich: Funktionalität, Budgetierung, Bedienbarkeit und Preis — passend zu Ihrer Organisation.",
9533  "originalUrl": "https://smartbooks.ai/artikelen/smartbooks-vs-lucanet-welke-financiele-software-past-het-beste-bij-uw-bedrijf/",
9534  "meta": null
9535}
9536---
9537<p>Im Markt für Finanzsoftware — insbesondere für Konsolidierung und Reporting — gibt es verschiedene Lösungen. Zwei häufig genannte Optionen sind Smartbooks und Lucanet. Beide Systeme bieten leistungsstarke Funktionen, doch je nach Bedarf können die Stärken unterschiedlich ausfallen. In diesem Beitrag vergleichen wir die wichtigsten Merkmale, damit Sie eine fundierte Wahl treffen können.</p>
9538
9539<p><strong>Funktionalität</strong></p>
9540
9541<p>Lucanet ist bekannt für seine Funktionen rund um Finanzkonsolidierung und Reporting. Das System bietet tiefgehende Möglichkeiten für IC-Eliminierungen, Konsolidierungsstrukturen und gesetzliche Berichte — eine gute Option für Unternehmen mit komplexen Finanzstrukturen. Der Fokus liegt auf Finanzdaten.</p>
9542
9543<p>Smartbooks hebt sich mit fortschrittlicher Budgetierung ab, inklusive Top-down- und Bottom-up-Planung. Unternehmen können damit ihre Geschäftslogik einfach abbilden und Szenarien simulieren. Neben reinen Finanzdaten arbeitet Smartbooks flexibel auch mit operativen Daten. Das macht Smartbooks attraktiv für Organisationen, die neben Konsolidierung auch Budgetierung und Forec
9543asting adressieren wollen.</p>
9544
9545<p><strong>Reporting und Datenanalyse</strong></p>
9546
9547<p>Beide Systeme bieten umfangreiches Reporting, unterscheiden sich aber im Ansatz. Lucanet setzt auf Excel-Integration, mit der Nutzer flexible Berichte auf Basis der letzten Finanzdaten bauen. Für viele Finance-Profis ein vertrautes Vorgehen.</p>
9548
9549<p>Smartbooks bietet dagegen ein Echtzeit-Dashboard, das <em>direkt</em> mit der Hauptbuchhaltung verbunden ist. Nutzer erhalten kontinuierlichen Einblick in ihre Finanzlage — unabhängig von Excel-Exporten. Zusätzlich lassen sich in Smartbooks nicht-finanzielle Datenquellen integrieren. Vorteil für Unternehmen, die direkte, visuelle Managementberichte wünschen, die Finanz- und operative Daten kombinieren.</p>
9550
9551<p><strong>Datenverarbeitung und Geschwindigkeit</strong></p>
9552
9553<p>Lucanet ist auf große Mengen an Finanzdaten und komplexe Konsolidierungen ausgelegt, doch das Laden von Transaktionen kann Zeit kosten, da es keine standardmäßige inkrementelle Ladeoption gibt.</p>
9554
9555<p>Smartbooks bietet schnelle, automatisierte Transaktionsverarbeitung — unter anderem durch Echtzeit-Datenladen. Eine effiziente Wahl für Unternehmen, die schnellen Einblick in Finanz- und operative Daten brauchen.</p>
9556
9557<p><strong>Benutzerfreundlichkeit und Einführung</strong></p>
9558
9559<p>Lucanet bietet eine robuste Plattform mit breitem Funktionsumfang — Implementierung und Schulung erfordern jedoch Zeit. Das ist besonders für Organisationen relevant, die noch keine Erfahrung mit umfassender Konsolidierungssoftware haben.</p>
9560
9561<p>Smartbooks ist benutzerfreundlich und schnell einzuführen. Laut Anwendern kann die Implementierung in wenigen Tagen abgeschlossen sein — ein Vorteil für Teams, die zügig produktiv werden wollen.</p>
9562
9563<p><strong>Kosten und Preismodelle</strong></p>
9564
9565<p>Lucanet arbeitet meist mit Lizenzmodellen, die von Unternehmensgröße und Funktionsumfang abhängen. Die Kosten können höher liegen, dafür erhalten Sie umfassende Konsolidierungs- und Reporting-Möglichkeiten.</p>
9566
9567<p>Smartbooks bietet ein flexibles Preismodell mit niedrigeren Monatskosten und einer kostenlosen 30-tägigen Testphase, in der die Einrichtung vollständig erfolgt. Attraktiv für Organisationen, die eine kosteneffiziente Lösung suchen.</p>
9568
9569<p><strong>Fazit</strong></p>
9570
9571<p>Sowohl Smartbooks als auch Lucanet bieten leistungsstarke Lösungen für Finanzkonsolidierung und Reporting. Die Wahl hängt vom konkreten Bedarf ab:</p>
9572
9573<ul>
9574<li><strong>Lucanet</strong> eignet sich am besten für Organisationen mit komplexen gesetzlichen Konsolidierungsstrukturen und vielen Hauptbuchsystemen. Im Vergleich zu Smartbooks ist die Software aufwendiger in Implementierung und Betrieb und teurer in Anschaffung/Abonnement. Lucanet nutzt für Reporting-Anforderungen viel Excel.</li>
9575</ul>
9576
9577<ul>
9578<li><strong>Smartbooks</strong> passt sehr gut zu Organisationen, die sowohl je Gesellschaft als auch auf Gruppenebene finanzielle und operative Daten berichten wollen. Darüber hinaus bietet Smartbooks Top-down- und Bottom-up-Budgetierung in der Anwendung selbst. Echtzeit-Berichte und Dashboards stehen mehreren Nutzern zur Verfügung und lassen sich auch nach Excel oder PDF exportieren.</li>
9579</ul>`,BO=`---json
9580{
9581  "title": "Smartbooks vs. Lucanet: Which Financial Software Best Suits Your Organization?",
9582  "metaTitle": "Choosing Consolidation Software: Smartbooks vs Lucanet",
9583  "slug": "smartbooks-vs-lucanet-which-financial-software-best-suits-your-company",
9584  "date": "",
9585  "category": "Articles",
9586  "tags": [
9587    "Financial Software",
9588    "Consolidation",
9589    "Smartbooks",
9590    "Lucanet",
9591    "Reporting",
9592    "Budgeting"
9593  ],
9594  "excerpt": "Choosing consolidation software? Compare Smartbooks and Lucanet on functionality, budgeting, ease of use and price to find the best fit for your business.",
9595  "originalUrl": "",
9596  "meta": {
9597    "type_bedrijf": "Financial Services"
9598  }
9599}
9600---
9601<p>In the world of financial software, particularly in the areas of consolidation and reporting, various solutions are available. Two frequently mentioned options are Smartbooks and Lucanet. Both systems offer powerful functionalities, but depending on the needs of your organization, the strengths of each solution may vary. In this blog, we compare the key features of Smartbooks and Lucanet to help you make the best choice.</p>
9602
9603<p><strong>Functionality</strong></p>
9604
9605<p>Lucanet is known for its functionalities for financial consolidation and reporting. It offers in-depth capabilities for intercompany eliminations, consolidation structures, and statutory reporting, making it a good option for companies with complex financial structures. The focus at Lucanet is primarily on financial data.</p>
9606
9607<p>Smartbooks distinguishes itself with advanced budgeting functionalities, including both top-down and bottom-up budgeting. This allows companies to easily model their own business logic and simulate scenarios for forward planning. This means that, in addition to purely financial data, Smartbooks can also utilize operational data with great flexibility. This makes Smartbooks an interesting option for companies that want to focus on budgeting and forecasting alongside consolidation.</p>
9608
9609<p><strong>Reporting and Data Analysis</strong></p>
9610
9611<p>Both systems offer extensive reporting capabilities...`,MO=`---json
9612{
9613  "title": "Smartbooks versus Lucanet: Welke financiële software past het beste bij jouw organisatie?",
9614  "metaTitle": "Consolidatiesoftware kiezen: Smartbooks vs Lucanet",
9615  "slug": "smartbooks-vs-lucanet-welke-financiele-software-past-het-beste-bij-uw-bedrijf",
9616  "order": 8,
9617  "date": "2025-02-25 12:47:09",
9618  "category": "Articles",
9619  "tags": [
9620    "Consolideren",
9621    "Lucanet"
9622  ],
9623  "excerpt": "Consolidatiesoftware kiezen? Vergelijk Smartbooks en Lucanet op functionaliteit, budgettering, gebruiksgemak en prijs en kies wat past bij jouw organisatie.",
9624  "originalUrl": "https://smartbooks.ai/artikelen/smartbooks-vs-lucanet-welke-financiele-software-past-het-beste-bij-uw-bedrijf/",
9625  "meta": null,
9626  "enSlug": "smartbooks-vs-lucanet-which-financial-software-best-suits-your-company"
9627}
9628---
9629<p>In de wereld van financiële software, met name op het gebied van consolidatie en rapportage, zijn er diverse oplossingen beschikbaar. Twee veelgenoemde opties zijn Smartbooks en Lucanet. Beide systemen bieden krachtige functionaliteiten, maar afhankelijk van de behoeften van uw organisatie kunnen de sterke punten per oplossing verschillen. In deze blog vergelijken we de belangrijkste kenmerken van Smartbooks en Lucanet om te helpen de beste keuze te maken.</p>
9630
9631
9632
9633<p><strong>Functionaliteit</strong></p>
9634
9635
9636
9637<p>Lucanet staat bekend om zijn functionaliteiten voor financiële consolidatie en rapportage. Het biedt diepgaande mogelijkheden voor intercompany eliminaties, consolidatiestructuren en wettelijke rapportages, waardoor het een goede opties is voor bedrijven met complexe financiële structuren. De focus bij Lucanet is op financiële gegevens. </p>
9638
9639
9640
9641<p>Smartbooks onderscheidt zich met geavanceerde budgetteringsfunctionaliteiten, inclusief zowel top-down als bottom-up budgettering. Hiermee kunnen bedrijven eenvoudig hun eigen bedrijfslogica modelleren en scenario’s simuleren om vooruit te plannen. Dat betekent dat naast puur financiële gegevsn Smartbooks ook zeer flexibel gebruik kan maken van operationele gegevens. Dit maakt Smartbooks een interessante optie voor bedrijven die naast consolidatie ook aandacht willen besteden aan budgettering en forecasting.</p>
9642
9643
9644
9645<p><strong>Rapportage en Data-analyse</strong></p>
9646
9647
9648
9649<p>Beide systemen bieden uitgebreide rapportagemogelijkheden, maar verschillen in hun aanpak. Lucanet maakt gebruik van een Excel-integratie waarmee gebruikers flexibele rapportages kunnen opstellen op basis van de laatste financiële gegevens. Voor veel finance-professionals is dit een vertrouwde werkwijze.</p>
9650
9651
9652
9653<p>Smartbooks biedt daarentegen een real-time dashboard dat <em>direct </em>is gekoppeld aan de grootboekadministratie. Hierdoor kunnen gebruikers continu inzicht krijgen in hun financiële situatie zonder afhankelijk te zijn van exports naar Excel. Daarnaast kan Smartbooks data integreren vanuit niet-financiële systemen. Dit is een voordeel zijn voor bedrijven die behoefte hebben aan directe, visuele bredere managementrapportages, die financiële en operationele gegevens combineren.</p>
9654
9655
9656
9657<p><strong>Dataverwerking en Snelheid</strong></p>
9658
9659
9660
9661<p>Lucanet is geoptimaliseerd voor grote hoeveelheden financiële data en complexe consolidaties, maar het laden van transacties kan enige tijd in beslag nemen, omdat er geen standaard incrementele laadoptie beschikbaar is.</p>
9662
9663
9664
9665<p>Smartbooks biedt een snelle en geautomatiseerde verwerking van transacties, mede door de mogelijkheid om data in real-time te laden. Dit maakt het een efficiënte 
9665keuze voor bedrijven die behoefte hebben aan snelle inzichten in hun financiële én operationele gegevens.</p>
9666
9667
9668
9669<p><strong>Gebruiksgemak en Implementatie</strong></p>
9670
9671
9672
9673<p>Lucanet biedt een robuust platform met uitgebreide functionaliteiten, maar dit betekent ook dat de implementatie en training enige tijd kunnen vergen. Dit is vooral relevant voor bedrijven die nog geen ervaring hebben met uitgebreide consolidatiesoftware en tijd nodig hebben om zich de mogelijkheden eigen te maken.</p>
9674
9675
9676
9677<p>Smartbooks is een gebruiksvriendelijke en snel te implementeren oplossing. Volgens gebruikers kan de implementatie in slechts enkele dagen voltooid zijn, wat een voordeel kan zijn voor organisaties die snel operationeel willen zijn met nieuwe software.</p>
9678
9679
9680
9681<p><strong>Kosten en Prijsmodellen</strong></p>
9682
9683
9684
9685<p>Lucanet werkt doorgaans met een licentiemodel dat afhankelijk is van de omvang van het bedrijf en de benodigde functionaliteiten. De kosten kunnen hoger uitvallen, maar daar staat een uitgebreide set aan consolidatie- en rapportagemogelijkheden tegenover.</p>
9686
9687
9688
9689<p>Smartbooks biedt een flexibel prijsmodel met lagere maandelijkse kosten en een gratis proefperiode van 30 dagen, waarin de implementatie volledig wordt verzorgd. Dit maakt het een interessante keuze voor bedrijven die een kostenefficiënte oplossing zoeken.</p>
9690
9691
9692
9693<p><strong>Conclusie</strong></p>
9694
9695
9696
9697<p>Zowel Smartbooks als Lucanet bieden krachtige oplossingen voor financiële consolidatie en rapportage, maar de keuze tussen beide hangt af van de specifieke behoeften van uw bedrijf:</p>
9698
9699
9700
9701<ul class="wp-block-list">
9702<li><strong>Lucanet</strong> het meest geschikt is voor organisaties met complexe juridische consolidatie structuren en een veelvoud aan grootboeksystemen. Daar tegenover staat dat de software – ten opzichte van Smartbooks - complexer is voor implementatie en beheer en duurder is in aanschaf/abonnement. Lucanet maakt veel gebruik van Excel om de rapportage behoeften in te vullen.</li>
9703</ul>
9704
9705
9706
9707<ul class="wp-block-list">
9708<li><strong>Smartbooks</strong> is zeer geschikt voor organisaties die zowel per entiteit als op groepsniveau financiële en operationele data willen rapporteren. Daarnaast biedt Smartbooks functionaliteit om top-down en bottom-up te budgetteren binnen de applicatie. De real-time rapportages en dashboards zijn beschikbaar voor meerdere gebruikers, maar kunnen ook naar Excel of pdf worden geëxporteerd.</li>
9709</ul>
9710
9711
9712
9713<p></p>`,FO=`---json
9714{
9715  "title": "Smartbooks vs Lucanet",
9716  "slug": "smartbooks-vs-lucanet",
9717  "metaTitle": "Smartbooks vs Lucanet: Was passt zu Ihnen?",
9718  "date": "2026-04-30 09:00:00",
9719  "category": "Articles",
9720  "tags": [
9721    "Vergleich",
9722    "Lucanet"
9723  ],
9724  "excerpt": "Lucanet ist ein starkes Enterprise-Konsolidierungstool mit ausgeprägter Governance. Smartbooks deckt den gesamten Financial- und Business-Control-Prozess für den größeren Mittelstand ab — schneller einzuführen und mit geringerer Betriebsbelastung.",
9725  "originalUrl": "",
9726  "meta": null
9727}
9728---
9729<style>
9730.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
9731.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
9732.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
9733.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
9734.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
9735.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
9736.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
9737.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px; margin: 24px 0 30px; }
9738.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
9739.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
9740.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
9741.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
9742.sb-vs .card h3 { margin-top: 0; }
9743.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
9744.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
9745.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px;
9745 padding: 22px 26px; margin: 30px 0; }
9746.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
9747.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
9748.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
9749.sb-vs .meta-row span strong { color: var(--dark-blue); }
9750@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
9751</style>
9752<div class="sb-vs">
9753<h1>Smartbooks vs Lucanet</h1>
9754<p class="author"><em>Formale Konsolidierung und Governance vs. vollständige Financial- und Business-Control-Plattform</em></p>
9755
9756<div class="summary">
9757<strong>Kurz gesagt</strong>
9758<p>Lucanet ist ein starkes Enterprise-Konsolidierungstool mit ausgeprägter Governance. Smartbooks deckt den gesamten Financial- und Business-Control-Prozess für den größeren Mittelstand ab — schneller einzuführen und mit geringerer Betriebsbelastung.</p>
9759</div>
9760
9761<div class="meta-row">
9762<span><strong>Zielgruppe Lucanet:</strong> Enterprise</span>
9763<span><strong>Positionierung:</strong> Konsolidierung &amp; Reporting</span>
9764</div>
9765
9766<h2>Stärken und Grenzen von Lucanet</h2>
9767<div class="grid-two">
9768<div class="card">
9769<h3>Stärken</h3>
9770<ul><li>Sehr starke Konsolidierungsfunktionalität</li><li>Umfassende Audit- und Governance-Fähigkeiten</li><li>Geeignet für internationale Strukturen</li></ul>
9771</div>
9772<div class="card">
9773<h3>Grenzen</h3>
9774<ul><li>Relativ aufwendige Einführung</li><li>Höhere Betriebs- und Consulting-Kosten</li><li>Begrenzte Unterstützung für Planung, Monatsabschluss und Analyse</li></ul>
9775</div>
9776</div>
9777
9778<h2>Wann passt welche Lösung?</h2>
9779<div class="grid-two">
9780<div class="card">
9781<h3>Lucanet passt, wenn …</h3>
9782<ul><li>Konsolidierung und Compliance im Zentrum stehen</li><li>Komplexe juristische Strukturen bestehen</li><li>Audit-Trails und Governance kritisch sind</li></ul>
9783</div>
9784<div class="card">
9785<h3>Smartbooks passt, wenn …</h3>
9786<ul><li>Sie den gesamten Financial- und Business-Control-Prozess unterstützen wollen</li><li>Schnelle Einführung und geringe Betriebsbelastung wichtig sind</li><li>Sie nicht von Beratern abhängig sein möchten</li></ul>
9787</div>
9788</div>
9789
9790<h2>Stimme aus dem Markt</h2><blockquote>„Lucanet ist im Grunde ein aufgebohrtes Excel.“<span class="score">6/10</span></blockquote>
9791
9792<h2>Warum Controller Smartbooks wählen</h2>
9793<ul>
9794<li>Klarer Fokus auf die täglichen Workflows von Controllern</li>
9795<li>Unterstützung des gesamten Monatsprozesses</li>
9796<li>Finance-spezifische Logik und Standardisierung</li>
9797<li>Einfache, kostengünstige und schnelle Implementierung</li>
9798<li>Keine Abhängigkeit von IT oder externen Spezialisten</li>
9799</ul>
9800
9801<div class="verdict">
9802<h3>Fazit</h3>
9803<p>Für anspruchsvolle, internationale Konsolidierungsfragen bleibt Lucanet stark. Für den größeren Mittelstand, der Konsolidierung, Monatsabschluss, Planung und Reporting in einer Plattform will, ist Smartbooks eine leichtere und vollständige Lösung.</p>
9804</div>
9805
9806<h2>Weiterlesen</h2>
9807<p>Sehen Sie den vollständigen <a href="/de/artikel/vergelijk-business-control-software">Vergleich von Financial- und Business-Control-Software</a> oder lesen Sie, warum Organisationen sich für <a href="/de/warum-smartbooks">Smartbooks</a> entscheiden.</p>
9808</div>`,RO=`---json
9809{
9810  "title": "Smartbooks vs Lucanet",
9811  "metaTitle": "Smartbooks vs Lucanet: Which Fits You?",
9812  "slug": "smartbooks-vs-lucanet",
9813  "date": "2026-04-30 09:00:00",
9814  "category": "Articles",
9815  "tags": [
9816    "Comparison",
9817    "Lucanet"
9818  ],
9819  "excerpt": "Lucanet is a strong enterprise consolidation tool with heavy governance. Smartbooks covers the complete financial and business control process for the larger SMB — faster to implement and lower in management effort.",
9820  "originalUrl": "",
9821  "meta": null
9822}
9823---
9824<style>
9825.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
9826.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
9827.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
9828.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
9829.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
9830.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
9831.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
9832.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px;
9832 margin: 24px 0 30px; }
9833.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
9834.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
9835.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
9836.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
9837.sb-vs .card h3 { margin-top: 0; }
9838.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
9839.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
9840.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
9841.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
9842.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
9843.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
9844.sb-vs .meta-row span strong { color: var(--dark-blue); }
9845@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
9846</style>
9847<div class="sb-vs">
9848<h1>Smartbooks vs Lucanet</h1>
9849<p class="author"><em>Formal consolidation and governance vs. a complete financial and business control platform</em></p>
9850
9851<div class="summary">
9852<strong>In short</strong>
9853<p>Lucanet is a strong enterprise consolidation tool with heavy governance. Smartbooks covers the complete financial and business control process for the larger SMB — faster to implement and lower in management effort.</p>
9854</div>
9855
9856<div class="meta-row">
9857<span><strong>Target audience Lucanet:</strong> Enterprise</span>
9858<span><strong>Positioning:</strong> Consolidation & reporting</span>
9859</div>
9860
9861<h2>Strengths and limitations of Lucanet</h2>
9862<div class="grid-two">
9863<div class="card">
9864<h3>Strengths</h3>
9865<ul><li>Very strong consolidation functionality</li><li>Extensive audit and governance capabilities</li><li>Suitable for international structures</li></ul>
9866</div>
9867<div class="card">
9868<h3>Limitations</h3>
9869<ul><li>Relatively heavy implementation</li><li>Higher management and consultancy costs</li><li>Limited support for planning, month-end close, and analysis</li></ul>
9870</div>
9871</div>
9872
9873<h2>When does each solution fit?</h2>
9874<div class="grid-two">
9875<div class="card">
9876<h3>Lucanet fits when...</h3>
9877<ul><li>Consolidation and compliance are central</li><li>Complex legal structures</li><li>Audit trails and governance are crucial</li></ul>
9878</div>
9879<div class="card">
9880<h3>Smartbooks fits when...</h3>
9881<ul><li>You want to support the complete financial and business control process</li><li>Fast implementation and low management effort matter</li><li>You do not want to depend on consultants</li></ul>
9882</div>
9883</div>
9884
9885<h2>Voice from the market</h2><blockquote>"Lucanet is essentially a souped-up Excel."<span class="score">6/10</span></blockquote>
9886
9887<h2>Why controllers choose Smartbooks</h2>
9888<ul>
9889<li>Clear focus on the daily workflows of controllers</li>
9890<li>Support for the complete monthly process</li>
9891<li>Finance-specific logic and standardisation</li>
9892<li>Simple, affordable, and fast implementation</li>
9893<li>No dependency on IT or external specialists</li>
9894</ul>
9895
9896<div class="verdict">
9897<h3>Conclusion</h3>
9898<p>For heavy, international consolidation challenges Lucanet remains strong. For the larger SMB that wants consolidation, month-end close, planning, and reporting in one platform, Smartbooks offers a lighter and complete solution.</p>
9899</div>
9900
9901<h2>Further reading</h2>
9902<p>See the full <a href="/en/articles/compare-business-control-software">comparison of financial and business control software</a> or read why organisations choose <a href="/en/why-smartbooks">Smartbooks</a>.</p>
9903</div>`,OO=`---json
9904{
9905  "title": "Smartbooks vs Lucanet",
9906  "metaTitle": "Smartbooks vs Lucanet: welke past bij jou?",
9907  "slug": "smartbooks-vs-lucanet",
9908  "order": 47,
9909  "date": "2026-04-30 09:00:00",
9910  "category": "Articles",
9911  "tags": [
9912    "Vergelijking",
9913    "Lucanet"
9914  ],
9915  "excerpt": "Lucanet is een sterke enterprise consolidatietool met zware governance. Smartbooks dekt het volledige financial en business control proces af voor het grotere MKB — sneller te implementeren en lager in beheerlast.",
9916  "originalUrl": "",
9917  "enSlug": "smartbooks-vs-lucanet"
9918}
9919---
9920<style>
9921.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
9922.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
9923.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
9924.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
9925.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
9926.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
9927.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
9928.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px;
9928 margin: 24px 0 30px; }
9929.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
9930.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
9931.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
9932.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
9933.sb-vs .card h3 { margin-top: 0; }
9934.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
9935.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
9936.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
9937.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
9938.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
9939.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
9940.sb-vs .meta-row span strong { color: var(--dark-blue); }
9941@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
9942</style>
9943<div class="sb-vs">
9944<h1>Smartbooks vs Lucanet</h1>
9945<p class="author"><em>Formele consolidatie en governance vs. compleet financial en business control platform</em></p>
9946
9947<div class="summary">
9948<strong>In het kort</strong>
9949<p>Lucanet is een sterke enterprise consolidatietool met zware governance. Smartbooks dekt het volledige financial en business control proces af voor het grotere MKB — sneller te implementeren en lager in beheerlast.</p>
9950</div>
9951
9952<div class="meta-row">
9953<span><strong>Doelgroep Lucanet:</strong> Enterprise</span>
9954<span><strong>Positionering:</strong> Consolidatie & reporting</span>
9955</div>
9956
9957<h2>Sterke punten en beperkingen van Lucanet</h2>
9958<div class="grid-two">
9959<div class="card">
9960<h3>Sterke punten</h3>
9961<ul><li>Zeer sterke consolidatiefunctionaliteit</li><li>Uitgebreide audit- en governance mogelijkheden</li><li>Geschikt voor internationale structuren</li></ul>
9962</div>
9963<div class="card">
9964<h3>Beperkingen</h3>
9965<ul><li>Relatief zware implementatie</li><li>Hogere beheer- en consultancykosten</li><li>Beperkte ondersteuning voor planning, maandafsluiting en analyse</li></ul>
9966</div>
9967</div>
9968
9969<h2>Wanneer past welke oplossing?</h2>
9970<div class="grid-two">
9971<div class="card">
9972<h3>Lucanet past wanneer...</h3>
9973<ul><li>Consolidatie en compliance centraal staan</li><li>Complexe juridische structuren</li><li>Audit trails en governance cruciaal zijn</li></ul>
9974</div>
9975<div class="card">
9976<h3>Smartbooks past wanneer...</h3>
9977<ul><li>U het volledige financial en business control proces wilt ondersteunen</li><li>Snelle implementatie en lage beheerlast belangrijk zijn</li><li>U niet afhankelijk wilt zijn van consultants</li></ul>
9978</div>
9979</div>
9980
9981<h2>Stem uit de markt</h2><blockquote>"Lucanet is eigenlijk een opgevoerde Excel."<span class="score">6/10</span></blockquote>
9982
9983<h2>Waarom controllers voor Smartbooks kiezen</h2>
9984<ul>
9985<li>Duidelijke focus op de dagelijkse workflows van controllers</li>
9986<li>Ondersteuning van het volledige maandelijkse proces</li>
9987<li>Finance-specifieke logica en standaardisatie</li>
9988<li>Eenvoudige, goedkope en snelle implementatie</li>
9989<li>Geen afhankelijkheid van IT of externe specialisten</li>
9990</ul>
9991
9992<div class="verdict">
9993<h3>Conclusie</h3>
9994<p>Voor zware, internationale consolidatievraagstukken blijft Lucanet sterk. Voor het grotere MKB dat consolidatie, maandafsluiting, planning en rapportage in één platform wil, biedt Smartbooks een lichtere en complete oplossing.</p>
9995</div>
9996
9997<h2>Verder lezen</h2>
9998<p>Bekijk de volledige <a href="/artikelen/vergelijk-business-control-software">vergelijking van financial en business control software</a> of lees waarom organisaties kiezen voor <a href="/waarom-smartbooks">Smartbooks</a>.</p>
9999</div>`,_O=`---json
10000{
10001  "title": "Smartbooks vs Power BI",
10002  "slug": "smartbooks-vs-power-bi",
10003  "metaTitle": "Smartbooks vs Power BI: Finance vs BI",
10004  "date": "2026-04-30 09:00:00",
10005  "category": "Articles",
10006  "tags": [
10007    "Vergleich",
10008    "Power BI"
10009  ],
10010  "excerpt": "Power BI ist eine mächtige Analyseplattform, aber keine Finance-Lösung. Smartbooks bietet Finance-spezifische Logik für Konsolidierung, Planung und Monatsabschluss — ohne aufwendige Datenmodellierung oder IT-Abhängigkeit.",
10011  "originalUrl": "",
10012  "meta": null
10013}
10014---
10015<style>
10016.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
10017.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
10018.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
10019.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
10020.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
10021.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
10022.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
10023.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px;
10023 margin: 24px 0 30px; }
10024.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
10025.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
10026.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
10027.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
10028.sb-vs .card h3 { margin-top: 0; }
10029.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
10030.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
10031.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
10032.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
10033.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
10034.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
10035.sb-vs .meta-row span strong { color: var(--dark-blue); }
10036@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
10037</style>
10038<div class="sb-vs">
10039<h1>Smartbooks vs Power BI</h1>
10040<p class="author"><em>Generisches BI-Tool vs. vollständige Financial- und Business-Control-Plattform</em></p>
10041
10042<div class="summary">
10043<strong>Kurz gesagt</strong>
10044<p>Power BI ist eine mächtige Analyseplattform, aber keine Finance-Lösung. Smartbooks bietet Finance-spezifische Logik für Konsolidierung, Planung und Monatsabschluss — ohne aufwendige Datenmodellierung oder IT-Abhängigkeit.</p>
10045</div>
10046
10047<div class="meta-row">
10048<span><strong>Zielgruppe Power BI:</strong> Alle Segmente</span>
10049<span><strong>Positionierung:</strong> BI &amp; Visualisierung</span>
10050</div>
10051
10052<h2>Stärken und Grenzen von Power BI</h2>
10053<div class="grid-two">
10054<div class="card">
10055<h3>Stärken</h3>
10056<ul><li>Sehr breite Integrationsmöglichkeiten</li><li>Starke Visualisierung und Analyse</li><li>Flexibel für vielfältige Use Cases</li></ul>
10057</div>
10058<div class="card">
10059<h3>Grenzen</h3>
10060<ul><li>Keine Standard-Finance-Logik oder Control-Workflows</li><li>Höhere Einführungs- und Betriebskosten bei Nutzung als Reporting-Lösung</li><li>Erfordert BI-Know-how oder externe Spezialisten</li></ul>
10061</div>
10062</div>
10063
10064<h2>Wann passt welche Lösung?</h2>
10065<div class="grid-two">
10066<div class="card">
10067<h3>Power BI passt, wenn …</h3>
10068<ul><li>Sie viele verschiedene Datenquellen kombinieren möchten</li><li>Sie flexible Dashboards und Analysen benötigen</li><li>Sie internes BI-Know-how oder externe Spezialisten haben</li></ul>
10069</div>
10070<div class="card">
10071<h3>Smartbooks passt, wenn …</h3>
10072<ul><li>Sie Finance-spezifische Prozesse optimieren möchten</li><li>Sie begrenzte IT-Kapazität für Datenmodellierung haben</li><li>Sie eine „Single Source of Truth“ in Finance wollen, ohne selbst Modelle zu bauen</li></ul>
10073</div>
10074</div>
10075
10076<h2>Stimme aus dem Markt</h2><blockquote>„Power BI ist eine Analyseplattform, keine Finance-Lösung.“<span class="score">7/10</span></blockquote>
10077
10078<h2>Warum Controller Smartbooks wählen</h2>
10079<ul>
10080<li>Klarer Fokus auf die täglichen Workflows von Controllern</li>
10081<li>Unterstützung des gesamten Monatsprozesses</li>
10082<li>Finance-spezifische Logik und Standardisierung</li>
10083<li>Einfache, kostengünstige und schnelle Implementierung</li>
10084<li>Keine Abhängigkeit von IT oder externen Spezialisten</li>
10085</ul>
10086
10087<div class="verdict">
10088<h3>Fazit</h3>
10089<p>Power BI ist stark in Visualisierung und Analyse, aber kein Ersatz für Financial- und Business-Control-Software. Smartbooks und Power BI ergänzen sich hervorragend — Smartbooks für Finance-Prozesse, Power BI für breite Datenanalyse.</p>
10090</div>
10091
10092<h2>Weiterlesen</h2>
10093<p>Sehen Sie den vollständigen <a href="/de/artikel/vergelijk-business-control-software">Vergleich von Financial- und Business-Control-Software</a> oder lesen Sie, warum Organisationen sich für <a href="/de/warum-smartbooks">Smartbooks</a> entscheiden.</p>
10094</div>`,LO=`---json
10095{
10096  "title": "Smartbooks vs Power BI",
10097  "metaTitle": "Smartbooks vs Power BI: Finance vs BI",
10098  "slug": "smartbooks-vs-power-bi",
10099  "date": "2026-04-30 09:00:00",
10100  "category": "Articles",
10101  "tags": [
10102    "Comparison",
10103    "Power BI"
10104  ],
10105  "excerpt": "Power BI is a powerful analytics platform, but not a finance solution. Smartbooks offers finance-specific logic for c
10105onsolidation, planning, and month-end close — without heavy data modelling or IT dependency.",
10106  "originalUrl": "",
10107  "meta": null
10108}
10109---
10110<style>
10111.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
10112.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
10113.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
10114.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
10115.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
10116.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
10117.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
10118.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px; margin: 24px 0 30px; }
10119.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
10120.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
10121.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
10122.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
10123.sb-vs .card h3 { margin-top: 0; }
10124.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
10125.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
10126.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
10127.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
10128.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
10129.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
10130.sb-vs .meta-row span strong { color: var(--dark-blue); }
10131@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
10132</style>
10133<div class="sb-vs">
10134<h1>Smartbooks vs Power BI</h1>
10135<p class="author"><em>Generic BI tool vs. a complete financial and business control platform</em></p>
10136
10137<div class="summary">
10138<strong>In short</strong>
10139<p>Power BI is a powerful analytics platform, but not a finance solution. Smartbooks offers finance-specific logic for consolidation, planning, and month-end close — without heavy data modelling or IT dependency.</p>
10140</div>
10141
10142<div class="meta-row">
10143<span><strong>Target audience Power BI:</strong> All segments</span>
10144<span><strong>Positioning:</strong> BI & visualisation</span>
10145</div>
10146
10147<h2>Strengths and limitations of Power BI</h2>
10148<div class="grid-two">
10149<div class="card">
10150<h3>Strengths</h3>
10151<ul><li>Very broad integration capabilities</li><li>Powerful visualisation and analysis</li><li>Flexibly deployable for various use cases</li></ul>
10152</div>
10153<div class="card">
10154<h3>Limitations</h3>
10155<ul><li>No standard finance logic or control workflows</li><li>Higher implementation and management effort when used as a reporting solution</li><li>Requires BI expertise or external specialists</li></ul>
10156</div>
10157</div>
10158
10159<h2>When does each solution fit?</h2>
10160<div class="grid-two">
10161<div class="card">
10162<h3>Power BI fits when...</h3>
10163<ul><li>You want to combine many different data sources</li><li>You need flexible dashboards and analyses</li><li>You have internal BI expertise or external specialists</li></ul>
10164</div>
10165<div class="card">
10166<h3>Smartbooks fits when...</h3>
10167<ul><li>You want to optimise finance-specific processes</li><li>You have limited IT capacity for data modelling</li><li>You want one truth in finance without building models yourself</li></ul>
10168</div>
10169</div>
10170
10171<h2>Voice from the market</h2><blockquote>"Power BI is an analytics platform, not a finance solution."<span class="score">7/10</span></blockquote>
10172
10173<h2>Why controllers choose Smartbooks</h2>
10174<ul>
10175<li>Clear focus on the daily workflows of controllers</li>
10176<li>Support for the complete monthly process</li>
10177<li>Finance-specific logic and standardisation</li>
10178<li>Simple, affordable, and fast implementation</li>
10179<li>No dependency on IT or external specialists</li>
10180</ul>
10181
10182<div class="verdict">
10183<h3>Conclusion</h3>
10184<p>Power BI is strong in visualisation and analysis, but not a replacement for financial and business control softw
10184are. Smartbooks and Power BI complement each other well — Smartbooks for finance processes, Power BI for broad data analysis.</p>
10185</div>
10186
10187<h2>Further reading</h2>
10188<p>See the full <a href="/en/articles/compare-business-control-software">comparison of financial and business control software</a> or read why organisations choose <a href="/en/why-smartbooks">Smartbooks</a>.</p>
10189</div>`,WO=`---json
10190{
10191  "title": "Smartbooks vs Power BI",
10192  "metaTitle": "Smartbooks vs Power BI: finance vs BI",
10193  "slug": "smartbooks-vs-power-bi",
10194  "order": 52,
10195  "date": "2026-04-30 09:00:00",
10196  "category": "Articles",
10197  "tags": [
10198    "Vergelijking",
10199    "Power BI"
10200  ],
10201  "excerpt": "Power BI is een krachtig analyseplatform, maar geen finance-oplossing. Smartbooks biedt finance-specifieke logica voor consolidatie, planning en maandafsluiting — zonder zware datamodellering of IT-afhankelijkheid.",
10202  "originalUrl": "",
10203  "enSlug": "smartbooks-vs-power-bi"
10204}
10205---
10206<style>
10207.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
10208.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
10209.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
10210.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
10211.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
10212.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
10213.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
10214.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px; margin: 24px 0 30px; }
10215.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
10216.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
10217.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
10218.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
10219.sb-vs .card h3 { margin-top: 0; }
10220.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
10221.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
10222.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
10223.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
10224.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
10225.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
10226.sb-vs .meta-row span strong { color: var(--dark-blue); }
10227@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
10228</style>
10229<div class="sb-vs">
10230<h1>Smartbooks vs Power BI</h1>
10231<p class="author"><em>Generieke BI-tool vs. compleet financial en business control platform</em></p>
10232
10233<div class="summary">
10234<strong>In het kort</strong>
10235<p>Power BI is een krachtig analyseplatform, maar geen finance-oplossing. Smartbooks biedt finance-specifieke logica voor consolidatie, planning en maandafsluiting — zonder zware datamodellering of IT-afhankelijkheid.</p>
10236</div>
10237
10238<div class="meta-row">
10239<span><strong>Doelgroep Power BI:</strong> Alle segmenten</span>
10240<span><strong>Positionering:</strong> BI & visualisatie</span>
10241</div>
10242
10243<h2>Sterke punten en beperkingen van Power BI</h2>
10244<div class="grid-two">
10245<div class="card">
10246<h3>Sterke punten</h3>
10247<ul><li>Zeer brede integratiemogelijkheden</li><li>Krachtige visualisatie en analyse</li><li>Flexibel inzetbaar voor diverse use cases</li></ul>
10248</div>
10249<div class="card">
10250<h3>Beperkingen</h3>
10251<ul><li>Geen standaard finance-logica of control-workflows</li><li>Hogere implementatie- en beheerlast bij gebruik als rapportage-oplossing</li><li>Vereist BI-kennis of externe specialisten</li></ul>
10252</div>
10253</div>
10254
10255<h2>Wanneer past welke oplossing?</h2>
10256<div class="grid-two">
10257<div class="card">
10258<h3>Power BI past wanneer...</h3>
10259<ul><li>U veel verschillende databronnen wilt combineren</li><li>U flexibele dashboards en analyses nodig heeft</li><li>U beschikt over interne BI-kennis of externe specialisten</li></ul>
10260</div>
10261<div class="card">
10262<h3>Smartbooks past wanneer...</h3>
10263<ul><li>U finance-specifieke processen wilt optimaliseren</li><li>U beperkte IT-capaciteit heeft voor datamodellering</li><li>U één waarheid in finance wilt zonder zelf modellen te bouwen</li></ul>
10264</div>
10265</div>
10266
10267<h2>Stem uit de markt</h2><blockquote>"PowerBI is een analyseplatform, geen finance-oplossing."<span class="score">7/10</span></blockquote>
10268
10269<h2>Waarom controllers voor Smartbooks kiezen</h2>
10270<ul>
10271<li>Duidelijke focus op de dagelijkse workflows van controllers</li>
10272<li>Ondersteuning van het volledige maandelijkse proces</li>
10273<li>Finance-specifieke logica en standaardisatie</li>
10274<li>Eenvoudige, goedkope en snelle implementatie</li>
10275<li>Geen afhankelijkheid van IT of externe specialisten</li>
10276</ul>
10277
10278<div class="verdict">
10279<h3>Conclusie</h3>
10280<p>Power BI is sterk in visualisatie en analyse, maar geen vervanging voor financial en business control softw
10280are. Smartbooks en Power BI kunnen elkaar prima aanvullen — Smartbooks voor finance-processen, Power BI voor brede data-analyse.</p>
10281</div>
10282
10283<h2>Verder lezen</h2>
10284<p>Bekijk de volledige <a href="/artikelen/vergelijk-business-control-software">vergelijking van financial en business control software</a> of lees waarom organisaties kiezen voor <a href="/waarom-smartbooks">Smartbooks</a>.</p>
10285</div>`,VO=`---json
10286{
10287  "title": "Smartbooks vs Speedbooks",
10288  "slug": "smartbooks-vs-speedbooks",
10289  "metaTitle": "Smartbooks vs Speedbooks vergleichen",
10290  "date": "2026-04-30 09:00:00",
10291  "category": "Articles",
10292  "tags": [
10293    "Vergleich",
10294    "Speedbooks"
10295  ],
10296  "excerpt": "Speedbooks bringt Buchhaltungsdaten effizient nach Excel für das Reporting. Smartbooks ersetzt Excel-Architekturen durch eine professionelle Financial- und Business-Control-Plattform mit Konsolidierung, Planung und Monatsabschluss.",
10297  "originalUrl": "",
10298  "meta": null
10299}
10300---
10301<style>
10302.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
10303.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
10304.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
10305.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
10306.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
10307.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
10308.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
10309.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px; margin: 24px 0 30px; }
10310.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
10311.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
10312.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
10313.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
10314.sb-vs .card h3 { margin-top: 0; }
10315.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
10316.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
10317.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
10318.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
10319.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
10320.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
10321.sb-vs .meta-row span strong { color: var(--dark-blue); }
10322@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
10323</style>
10324<div class="sb-vs">
10325<h1>Smartbooks vs Speedbooks</h1>
10326<p class="author"><em>Excel-Add-on für Reporting vs. vollständige Financial- und Business-Control-Plattform</em></p>
10327
10328<div class="summary">
10329<strong>Kurz gesagt</strong>
10330<p>Speedbooks bringt Buchhaltungsdaten effizient nach Excel für das Reporting. Smartbooks ersetzt Excel-Architekturen durch eine professionelle Financial- und Business-Control-Plattform mit Konsolidierung, Planung und Monatsabschluss.</p>
10331</div>
10332
10333<div class="meta-row">
10334<span><strong>Zielgruppe Speedbooks:</strong> Kleiner Mittelstand</span>
10335<span><strong>Positionierung:</strong> Reporting &amp; Analyse</span>
10336</div>
10337
10338<h2>Stärken und Grenzen von Speedbooks</h2>
10339<div class="grid-two">
10340<div class="card">
10341<h3>Stärken</h3>
10342<ul><li>Schnelle Time-to-Value</li><li>Klare Berichte</li><li>Niedrige Einstiegshürde</li></ul>
10343</div>
10344<div class="card">
10345<h3>Grenzen</h3>
10346<ul><li>Begrenzte Analysetiefe</li><li>Weniger geeignet für komplexere Organisationsstrukturen</li><li>Kein vollwertiges Control-System</li></ul>
10347</div>
10348</div>
10349
10350<h2>Wann passt welche Lösung?</h2>
10351<div class="grid-two">
10352<div class="card">
10353<h3>Speedbooks passt, wenn …</h3>
10354<ul><li>Sie Excel als Reporting-Umgebung beibehalten möchten</li><li>Sie vor allem Copy-Paste und Datenstrukturierung automatisieren wollen</li><li>Zeit und Budget für die Einrichtung begrenzt sind</li></ul>
10355</div>
10356<div class="card">
10357<h3>Smartbooks passt, wenn …</h3>
10358<ul><li>Sie Finance ohne Excel-Abhängigkeit professionalisieren möchten</li><li>Sie modellbasiert budgetieren und planen möchten</li><li>Sie strukturelle Unterstützung für Monatsabschluss und Konsolidierung brauchen</li></ul>
10359</div>
10360</div>
10361
10362<h2>Stimme aus dem Markt</h2><blockquote>„Es ist praktisch, aber kein Control-System.“<span class="score">7/10</span></blockquote>
10363
10364<h2>Warum Controller Smartbooks wählen</h2>
10365<ul>
10366<li>Klarer Fokus auf die täglichen Workflows von Controllern</li>
10367<li>Unterstützung des gesamten Monatsprozesses</li>
10368<li>Finance-spezifische Logik und Standardisierung</li>
10369<li>Einfache, kostengünstige und schnelle Implementierung</li>
10370<li>Keine Abhängigkeit von IT oder externen Spezialisten</li>
10371</ul>
10372
10373<div class="verdict">
10374<h3>Fazit</h3>
10375<p>Speedbooks ist geeignet für alle, die Excel als Reporting-Umgebung behalten wollen. Smartbooks ist die logische Wahl, wenn Sie Excel-Architekturen durch ein professionelles Control-System ersetzen möchten.</p>
10376</div>
10377
10378<h2>Weiterlesen</h2>
10379<p>Sehen Sie den vollständigen <a href="/de/artikel/vergelijk-business-control-software">Vergleich von Financial- und Business-Control-Software</a> oder lesen Sie, warum Organisationen sich für <a href="/de/warum-smartbooks">Smartbooks</a> entscheiden.</p>
10380</div>`,KO=`---json
10381{
10382  "title": "Smartbooks vs Speedbooks",
10383  "metaTitle": "Smartbooks vs Speedbooks Compared",
10384  "slug": "smartbooks-vs-speedbooks",
10385  "date": "2026-04-30 09:00:00",
10386  "category": "Articles",
10387  "tags": [
10388    "Comparison",
10389    "Speedbooks"
10390  ],
10391  "excerpt": "Speedbooks pulls accounting data efficiently into Excel for reporting. Smartbooks replaces Excel architectures with a professional financial and business control platform covering consolidation, planning, and month-end close.",
10392  "originalUrl": "",
10393  "meta": null
10394}
10395---
10396<style>
10397.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
10398.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
10399.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
10400.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
10401.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
10402.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
10403.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
10404.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px; margin: 24px 0 30px; }
10405.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
10406.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
10407.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
10408.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
10409.sb-vs .card h3 { margin-top: 0; }
10410.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
10411.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
10412.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
10413.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
10414.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
10415.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
10416.sb-vs .meta-row span strong { color: var(--dark-blue); }
10417@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
10418</style>
10419<div class="sb-vs">
10420<h1>Smartbooks vs Speedbooks</h1>
10421<p class="author"><em>Excel add-on for reporting vs. a complete financial and business control platform</em></p>
10422
10423<div class="summary">
10424<strong>In short</strong>
10425<p>Speedbooks pulls accounting data efficiently into Excel for reporting. Smartbooks replaces Excel architectures with a professional financial and business control platform covering consolidation, planning, and month-end close.</p>
10426</div>
10427
10428<div class="meta-row">
10429<span><strong>Target audience Speedbooks:</strong> Small SMB</span>
10430<span><strong>Positioning:</strong> Reporting & analysis</span>
10431</div>
10432
10433<h2>Strengths and limitations of Speedbooks</h2>
10434<div class="grid-two">
10435<div class="card">
10436<h3>Strengths</h3>
10437<ul><li>Fast time-to-value</li><li>Clear reports</li><li>Low entry threshold</li></ul>
10438</div>
10439<div class="card">
10440<h3>Limitations</h3>
10441<ul><li>Limited depth in analysis</li><li>Less suitable for more complex organisational structures</li><li>No full-fledged control system</li></ul>
10442</div>
10443</div>
10444
10445<h2>When does each solution fit?</h2>
10446<div class="grid-two">
10447<div class="card">
10448<h3>Speedbooks fits when...</h3>
10449<ul><li>You want to keep using Excel as the reporting environment</li><li>You mainly want to automate copy-pasting and structuring data</li><li>You have limited time and budget for setup</li></ul>
10450</div>
10451<div class="card">
10452<h3>Smartbooks fits when...</h3>
10453<ul><li>You want to professionalise finance without depending on Excel</li><li>You want to budget and plan model-based</li><li>You want structural support for month-end close and consolidation</li></ul>
10454</div>
10455</div>
10456
10457<h2>Voice from the market</h2><blockquote>"It is handy, but not a control system."<span class="score">7/10</span></blockquote>
10458
10459<h2>Why controllers choose Smartbooks</h2>
10460<ul>
10461<li>Clear focus on the daily workflows of controllers</li>
10462<li>Support for the complete monthly process</li>
10463<li>Finance-specific logic and standardisation</li>
10464<li>Simple, affordable, and fast implementation</li>
10465<li>No dependency on IT or external specialists</li>
10466</ul>
10467
10468<div class="verdict">
10469<h3>Conclusion</h3>
10470<p>Speedbooks suits those who want to keep Excel as the reporting environment. Smartbooks is the logical choice when you want to replace Excel architectures with a professional control system.</p>
10471</div>
10472
10473<h2>Further reading</h2>
10474<p>See the full <a href="/en/articles/compare-business-control-software">
10474comparison of financial and business control software</a> or read why organisations choose <a href="/en/why-smartbooks">Smartbooks</a>.</p>
10475</div>`,qO=`---json
10476{
10477  "title": "Smartbooks vs Speedbooks",
10478  "metaTitle": "Smartbooks vs Speedbooks vergelijken",
10479  "slug": "smartbooks-vs-speedbooks",
10480  "order": 51,
10481  "date": "2026-04-30 09:00:00",
10482  "category": "Articles",
10483  "tags": [
10484    "Vergelijking",
10485    "Speedbooks"
10486  ],
10487  "excerpt": "Speedbooks haalt boekhoud­data efficiënt naar Excel voor rapportage. Smartbooks vervangt Excel-architecturen door een professioneel financial en business control platform met consolidatie, planning en maandafsluiting.",
10488  "originalUrl": "",
10489  "enSlug": "smartbooks-vs-speedbooks"
10490}
10491---
10492<style>
10493.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
10494.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
10495.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
10496.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
10497.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
10498.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
10499.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
10500.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px; margin: 24px 0 30px; }
10501.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
10502.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
10503.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
10504.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
10505.sb-vs .card h3 { margin-top: 0; }
10506.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
10507.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
10508.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
10509.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
10510.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
10511.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
10512.sb-vs .meta-row span strong { color: var(--dark-blue); }
10513@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
10514</style>
10515<div class="sb-vs">
10516<h1>Smartbooks vs Speedbooks</h1>
10517<p class="author"><em>Excel-add-on voor rapportage vs. compleet financial en business control platform</em></p>
10518
10519<div class="summary">
10520<strong>In het kort</strong>
10521<p>Speedbooks haalt boekhoud­data efficiënt naar Excel voor rapportage. Smartbooks vervangt Excel-architecturen door een professioneel financial en business control platform met consolidatie, planning en maandafsluiting.</p>
10522</div>
10523
10524<div class="meta-row">
10525<span><strong>Doelgroep Speedbooks:</strong> Klein MKB</span>
10526<span><strong>Positionering:</strong> Rapportage & analyse</span>
10527</div>
10528
10529<h2>Sterke punten en beperkingen van Speedbooks</h2>
10530<div class="grid-two">
10531<div class="card">
10532<h3>Sterke punten</h3>
10533<ul><li>Snelle time-to-value</li><li>Duidelijke rapportages</li><li>Lage instapdrempel</li></ul>
10534</div>
10535<div class="card">
10536<h3>Beperkingen</h3>
10537<ul><li>Beperkte diepgang in analyse</li><li>Minder geschikt voor complexere organisatiestructuren</li><li>Geen volwaardig control-systeem</li></ul>
10538</div>
10539</div>
10540
10541<h2>Wanneer past welke oplossing?</h2>
10542<div class="grid-two">
10543<div class="card">
10544<h3>Speedbooks past wanneer...</h3>
10545<ul><li>U Excel wilt blijven gebruiken als rapportage-omgeving</li><li>U vooral copy-pasten en data structureren wilt automatiseren</li><li>U beperkte tijd en budget heeft voor inrichting</li></ul>
10546</div>
10547<div class="card">
10548<h3>Smartbooks past wanneer...</h3>
10549<ul><li>U finance wilt professionaliseren zonder afhankelijkheid van Excel</li><li>U modelmatig wilt budgetteren en plannen</li><li>U structurele ondersteuning wilt voor maandafsluiting en consolidatie</li></ul>
10550</div>
10551</div>
10552
10553<h2>Stem uit de markt</h2><blockquote>"Het is handig, maar geen control-systeem."<span class="score">7/10</span></blockquote>
10554
10555<h2>Waarom controllers voor Smartbooks kiezen</h2>
10556<ul>
10557<li>Duidelijke focus op de dagelijkse workflows van controllers</li>
10558<li>Ondersteuning van het volledige maandelijkse proces</li>
10559<li>Finance-specifieke logica en standaardisatie</li>
10560<li>Eenvoudige, goedkope en snelle implementatie</li>
10561<li>Geen afhankelijkheid van IT of externe specialisten</li>
10562</ul>
10563
10564<div class="verdict">
10565<h3>Conclusie</h3>
10566<p>Speedbooks is geschikt voor wie Excel als rapportage-omgeving wil houden. Smartbooks is de logische keuze wanneer u Excel-architecturen wilt vervangen door een professioneel control-systeem.</p>
10567</div>
10568
10569<h2>Verder lezen</h2>
10570<p>Bekijk de volledige <a href="/artikelen/vergelijk-business-control-software">
10570vergelijking van financial en business control software</a> of lees waarom organisaties kiezen voor <a href="/waarom-smartbooks">Smartbooks</a>.</p>
10571</div>`,HO=`---json
10572{
10573  "title": "Smartbooks vs Visionplanner",
10574  "slug": "smartbooks-vs-visionplanner",
10575  "metaTitle": "Smartbooks vs Visionplanner vergleichen",
10576  "date": "2026-04-30 09:00:00",
10577  "category": "Articles",
10578  "tags": [
10579    "Vergleich",
10580    "Visionplanner"
10581  ],
10582  "excerpt": "Visionplanner ist stark in periodischem Reporting und Zusammenarbeit mit dem Steuerberater. Smartbooks unterstützt aktives Financial und Business Control: Planung, Konsolidierung, Monatsabschluss und Analyse in einer Plattform.",
10583  "originalUrl": "",
10584  "meta": null
10585}
10586---
10587<style>
10588.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
10589.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
10590.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
10591.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
10592.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
10593.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
10594.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
10595.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px; margin: 24px 0 30px; }
10596.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
10597.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
10598.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
10599.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
10600.sb-vs .card h3 { margin-top: 0; }
10601.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
10602.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
10603.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
10604.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
10605.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
10606.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
10607.sb-vs .meta-row span strong { color: var(--dark-blue); }
10608@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
10609</style>
10610<div class="sb-vs">
10611<h1>Smartbooks vs Visionplanner</h1>
10612<p class="author"><em>Reporting für die Steuerkanzlei vs. vollständige Financial- und Business-Control-Plattform</em></p>
10613
10614<div class="summary">
10615<strong>Kurz gesagt</strong>
10616<p>Visionplanner ist stark in periodischem Reporting und in der Zusammenarbeit mit dem Steuerberater. Smartbooks unterstützt aktives Financial und Business Control: Planung, Konsolidierung, Monatsabschluss und Analyse in einer Plattform.</p>
10617</div>
10618
10619<div class="meta-row">
10620<span><strong>Zielgruppe Visionplanner:</strong> Steuerberater &amp; kleiner Mittelstand</span>
10621<span><strong>Positionierung:</strong> Reporting &amp; Jahresabschluss</span>
10622</div>
10623
10624<h2>Stärken und Grenzen von Visionplanner</h2>
10625<div class="grid-two">
10626<div class="card">
10627<h3>Stärken</h3>
10628<ul><li>Bedienfreundlich für periodische Berichte</li><li>Starke Anbindung an die Steuerkanzlei</li><li>Relativ geringe Einführungs- und Betriebslast</li></ul>
10629</div>
10630<div class="card">
10631<h3>Grenzen</h3>
10632<ul><li>Begrenzte Unterstützung für Control-Prozesse</li><li>Weniger Flexibilität in Analyse und Datenmodellierung</li><li>Keine umfassenden Konsolidierungs- oder Planungsprozesse</li></ul>
10633</div>
10634</div>
10635
10636<h2>Wann passt welche Lösung?</h2>
10637<div class="grid-two">
10638<div class="card">
10639<h3>Visionplanner passt, wenn …</h3>
10640<ul><li>Der Schwerpunkt auf periodischen Berichten und finanzieller Rechenschaft liegt</li><li>Die Zusammenarbeit mit dem Steuerberater eine wichtige Rolle spielt</li><li>
10640Business Control noch keine vollwertige Rolle in Finance einnimmt</li></ul>
10641</div>
10642<div class="card">
10643<h3>Smartbooks passt, wenn …</h3>
10644<ul><li>Sie eine aktive Controllerrolle in Finance ausfüllen</li><li>Sie umfangreiche Planungs- und Forecast-Prozesse wollen</li><li>Sie komplexere Konsolidierungsstrukturen haben</li></ul>
10645</div>
10646</div>
10647
10648<h2>Stimme aus dem Markt</h2><blockquote>„Für uns ist Visionplanner ein günstiges Konsolidierungstool, das uns auf Gruppenebene zeigt, ob wir im Griff sind.“<span class="score">7/10</span></blockquote>
10649
10650<h2>Warum Controller Smartbooks wählen</h2>
10651<ul>
10652<li>Klarer Fokus auf die täglichen Workflows von Controllern</li>
10653<li>Unterstützung des gesamten Monatsprozesses</li>
10654<li>Finance-spezifische Logik und Standardisierung</li>
10655<li>Einfache, kostengünstige und schnelle Implementierung</li>
10656<li>Keine Abhängigkeit von IT oder externen Spezialisten</li>
10657</ul>
10658
10659<div class="verdict">
10660<h3>Fazit</h3>
10661<p>Visionplanner ist eine gute Wahl für Mittelständler, die vor allem an Steuerberater und Management berichten. Smartbooks passt besser, wenn Financial und Business Control eine aktive, tägliche Rolle einnimmt.</p>
10662</div>
10663
10664<h2>Weiterlesen</h2>
10665<p>Sehen Sie den vollständigen <a href="/de/artikel/vergelijk-business-control-software">Vergleich von Financial- und Business-Control-Software</a> oder lesen Sie, warum Organisationen sich für <a href="/de/warum-smartbooks">Smartbooks</a> entscheiden.</p>
10666</div>`,UO=`---json
10667{
10668  "title": "Smartbooks vs Visionplanner",
10669  "metaTitle": "Smartbooks vs Visionplanner Compared",
10670  "slug": "smartbooks-vs-visionplanner",
10671  "date": "2026-04-30 09:00:00",
10672  "category": "Articles",
10673  "tags": [
10674    "Comparison",
10675    "Visionplanner"
10676  ],
10677  "excerpt": "Visionplanner is strong at periodic reporting and collaboration with the accountant. Smartbooks supports active financial and business control: planning, consolidation, month-end close, and analysis in one platform.",
10678  "originalUrl": "",
10679  "meta": null
10680}
10681---
10682<style>
10683.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
10684.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
10685.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
10686.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
10687.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
10688.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
10689.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
10690.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px; margin: 24px 0 30px; }
10691.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
10692.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
10693.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
10694.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
10695.sb-vs .card h3 { margin-top: 0; }
10696.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
10697.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
10698.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
10699.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
10700.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
10701.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
10702.sb-vs .meta-row span strong { color: var(--dark-blue); }
10703@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
10704</style>
10705<div class="sb-vs">
10706<h1>Smartbooks vs Visionplanner</h1>
10707<p class="author"><em>Reporting for the accountancy practice vs. a complete financial and business control platform</em></p>
10708
10709<div class="summary">
10710<strong>In short</strong>
10711<p>Visionplanner is strong at periodic reporting and collaboration with the accountant. Smartbooks supports active financial and business control: planning, consolidation, month-end close, and analysis in one platform.</p>
10712</div>
10713
10714<div class="meta-row">
10715<span><strong>Target audience Visionplanner:</strong> Accountants & small SMB</span>
10716<span><strong>Positioning:</strong> Reporting & annual accounts</span>
10717</div>
10718
10719<h2>Strengths and limitations of Visionplanner</h2>
10720<div class="grid-two">
10721<div class="card">
10722<h3>Strengths</h3>
10723<ul><li>User-friendly for periodic reporting</li><li>Strong fit with the accountancy practice</li><li>Relatively low implementation and management effort</li></ul>
10724</div>
10725<div class="card">
10726<h3>Limitations</h3>
10727<ul><li>Limited support for control processes</li><li>Less flexibility in analysis and data modelling</li><li>No extensive consolidation or planning processes</li></ul>
10728</div>
10729</div>
10730
10731<h2>When does each solution fit?</h2>
10732<div class="grid-two">
10733<div class="card">
10734<h3>Visionplanner fits when...</h3>
10735<ul><li>The emphasis is on periodic reporting and financial accountability</li><li>Collaboration with the accountant plays an important role</li><li>Business control is not yet a full-fledged role within finance</li></ul>
10736</div>
10737<div class="card">
10738<h3>Smartbooks fits when...</h3>
10739<ul><li>You take an active controller role within finance</li><li>You want extensive planning and forecasting processes</li><li>You have more complex consolidation structures</li></ul>
10740</div>
10741</div>
10742
10743<h2>Voice from the market</h2><blockquote>"For us Visionplanner is an inexpensive consolidation tool that shows us at group level whether we are in control."<span class="score">7/10</span></blockquote>
10744
10745<h2>Why controllers choose Smartbooks</h2>
10746<ul>
10747<li>Clear focus on the daily workflows of controllers</li>
10748<li>Support for the complete monthly process</li>
10749<li>Finance-specific logic and standardisation</li>
10750<li>Simple, affordable, and fast implementation</li>
10751<li>No dependency on IT or external specialists</li>
10752</ul>
10753
10754<div class="verdict">
10755<h3>Conclusion</h3>
10756<p>Visionplanner is a good choice for SMB organisations that mainly report to the accountant and management. Smartbooks fits better when financial and business control plays an active, daily role.</p>
10757</div>
10758
10759<h2>Further reading</h2>
10760<p>See the full <a href="/en/articles/compare-business-control-software">
10760comparison of financial and business control software</a> or read why organisations choose <a href="/en/why-smartbooks">Smartbooks</a>.</p>
10761</div>`,GO=`---json
10762{
10763  "title": "Smartbooks vs Visionplanner",
10764  "metaTitle": "Smartbooks vs Visionplanner vergelijken",
10765  "slug": "smartbooks-vs-visionplanner",
10766  "order": 50,
10767  "date": "2026-04-30 09:00:00",
10768  "category": "Articles",
10769  "tags": [
10770    "Vergelijking",
10771    "Visionplanner"
10772  ],
10773  "excerpt": "Visionplanner is sterk in periodieke rapportages en samenwerking met de accountant. Smartbooks ondersteunt actieve financial en business control: planning, consolidatie, maandafsluiting en analyse in één platform.",
10774  "originalUrl": "",
10775  "enSlug": "smartbooks-vs-visionplanner"
10776}
10777---
10778<style>
10779.sb-vs { font-family: 'Montserrat', sans-serif; --dark-blue: #1B3A6B; --mid-blue: #2D5AA0; --light-blue: #EBF3FB; --text: #1a1a2e; --text-muted: #555870; --border: #e0e4ed; }
10780.sb-vs h1 { font-size: 2.2rem; font-weight: 700; color: var(--dark-blue); margin-bottom: 16px; line-height: 1.2; }
10781.sb-vs h2 { font-size: 1.4rem; font-weight: 600; color: var(--dark-blue); margin-top: 40px; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid var(--border); }
10782.sb-vs h3 { font-size: 1.1rem; font-weight: 600; color: var(--dark-blue); margin-top: 24px; margin-bottom: 10px; }
10783.sb-vs p { font-size: 16px; line-height: 1.75; color: var(--text); margin-bottom: 14px; }
10784.sb-vs ul { padding-left: 20px; margin-bottom: 16px; }
10785.sb-vs li { margin-bottom: 6px; line-height: 1.6; color: var(--text); }
10786.sb-vs .summary { background: var(--light-blue); border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 18px 22px; margin: 24px 0 30px; }
10787.sb-vs .summary strong { display: block; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--mid-blue); margin-bottom: 6px; }
10788.sb-vs .summary p { margin: 0; font-size: 1rem; color: var(--dark-blue); font-weight: 500; }
10789.sb-vs .grid-two { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
10790.sb-vs .card { background: #f7f9fc; border: 1px solid var(--border); border-radius: 8px; padding: 18px 22px; }
10791.sb-vs .card h3 { margin-top: 0; }
10792.sb-vs blockquote { background: #eef4fb; border-left: 4px solid var(--mid-blue); border-radius: 0 8px 8px 0; padding: 14px 18px; margin: 16px 0; font-style: italic; color: var(--dark-blue); }
10793.sb-vs blockquote .score { display: inline-block; margin-left: 8px; font-style: normal; font-weight: 600; color: var(--mid-blue); font-size: 0.9rem; }
10794.sb-vs .verdict { background: var(--dark-blue); color: #ffffff; border-radius: 8px; padding: 22px 26px; margin: 30px 0; }
10795.sb-vs .verdict h3 { color: #ffffff; margin-top: 0; }
10796.sb-vs .verdict p { color: #ffffff; margin-bottom: 0; }
10797.sb-vs .meta-row { display: flex; flex-wrap: wrap; gap: 16px; margin: 16px 0 24px; font-size: 0.9rem; color: var(--text-muted); }
10798.sb-vs .meta-row span strong { color: var(--dark-blue); }
10799@media (max-width: 600px) { .sb-vs .grid-two { grid-template-columns: 1fr; } .sb-vs h1 { font-size: 1.7rem; } }
10800</style>
10801<div class="sb-vs">
10802<h1>Smartbooks vs Visionplanner</h1>
10803<p class="author"><em>Rapportage voor accountantspraktijk vs. compleet financial en business control platform</em></p>
10804
10805<div class="summary">
10806<strong>In het kort</strong>
10807<p>Visionplanner is sterk in periodieke rapportages en samenwerking met de accountant. Smartbooks ondersteunt actieve financial en business control: planning, consolidatie, maandafsluiting en analyse in één platform.</p>
10808</div>
10809
10810<div class="meta-row">
10811<span><strong>Doelgroep Visionplanner:</strong> Accountants & klein MKB</span>
10812<span><strong>Positionering:</strong> Rapportage & jaarrekening</span>
10813</div>
10814
10815<h2>Sterke punten en beperkingen van Visionplanner</h2>
10816<div class="grid-two">
10817<div class="card">
10818<h3>Sterke punten</h3>
10819<ul><li>Gebruiksvriendelijk voor periodieke rapportages</li><li>Sterke aansluiting op accountantspraktijk</li><li>Relatief lage implementatie- en beheerlast</li></ul>
10820</div>
10821<div class="card">
10822<h3>Beperkingen</h3>
10823<ul><li>Beperkte ondersteuning voor control processen</li><li>Minder flexibiliteit in analyse en datamodellering</li><li>Geen uitgebreide consolidatie- of planningsprocessen</li></ul>
10824</div>
10825</div>
10826
10827<h2>Wanneer past welke oplossing?</h2>
10828<div class="grid-two">
10829<div class="card">
10830<h3>Visionplanner past wanneer...</h3>
10831<ul><li>Nadruk ligt op periodieke rapportages en financiële verantwoording</li><li>Samenwerking met de accountant een belangrijke rol speelt</li><li>Business control nog geen volwaardige rol is binnen finance</li></ul>
10832</div>
10833<div class="card">
10834<h3>Smartbooks past wanneer...</h3>
10835<ul><li>U een actieve controllersrol invult binnen finance</li><li>U uitgebreide planning- en forecastingprocessen wilt</li><li>U complexere consolidatiestructuren heeft</li></ul>
10836</div>
10837</div>
10838
10839<h2>Stem uit de markt</h2><blockquote>"Voor ons is Visionplanner een goedkope consolidatietool, die ons op groepsniveau laat zien of we in control zijn."<span class="score">7/10</span></blockquote>
10840
10841<h2>Waarom controllers voor Smartbooks kiezen</h2>
10842<ul>
10843<li>Duidelijke focus op de dagelijkse workflows van controllers</li>
10844<li>Ondersteuning van het volledige maandelijkse proces</li>
10845<li>Finance-specifieke logica en standaardisatie</li>
10846<li>Eenvoudige, goedkope en snelle implementatie</li>
10847<li>Geen afhankelijkheid van IT of externe specialisten</li>
10848</ul>
10849
10850<div class="verdict">
10851<h3>Conclusie</h3>
10852<p>Visionplanner is een goede keuze voor MKB-organisaties die vooral rapporteren richting accountant en management. Smartbooks past beter wanneer financial en business control een actieve, dagelijkse rol vervult.</p>
10853</div>
10854
10855<h2>Verder lezen</h2>
10856<p>Bekijk de volledige <a href="/artikelen/vergelijk-business-control-software">
10856vergelijking van financial en business control software</a> of lees waarom organisaties kiezen voor <a href="/waarom-smartbooks">Smartbooks</a>.</p>
10857</div>`,$O=`---json
10858{
10859  "title": "Schnelle Implementierung von Smartbooks",
10860  "slug": "snelle-implementatie-van-smartbooks",
10861  "metaTitle": "Konsolidierungssoftware in einer Woche einführen",
10862  "date": "2024-09-26 15:24:35",
10863  "category": "Articles",
10864  "tags": [],
10865  "excerpt": "Die Einführung einer Konsolidierungssoftware muss nicht lange dauern: Mit Smartbooks sind Sie oft innerhalb einer Woche live. So läuft der Prozess.",
10866  "originalUrl": "https://smartbooks.ai/artikelen/snelle-implementatie-van-smartbooks/",
10867  "meta": null
10868}
10869---
10870<p><strong>Die Einführung einer Konsolidierungssoftware muss nicht lange dauern. Smartbooks ist für Organisationen gemacht, die professionell reporten, konsolidieren, analysieren und budgetieren wollen.</strong></p>
10871
10872<p>Für einen schnellen und effizienten Start folgen wir diesen Schritten:</p>
10873
10874<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/09/Afbeelding9-1024x377.png" alt="Roadmap zur Einführung der Konsolidierungssoftware Smartbooks" class="wp-image-2489"/></figure>
10875
10876<h3>1. Connect &amp; Kick-off</h3>
10877<p>Die Verbindung zur Hauptbuchhaltung erfolgt über ein Verbindungsmenü in Smartbooks und dauert in der Regel nicht länger als 5 Minuten. Auch mehrere Entitäten lassen sich in einem Zug koppeln. Neukunden können die Verbindung eigenständig herstellen; der Smartbooks-Support wird bei erfolgreicher Verbindung automatisch benachrichtigt. Anschließend wird ein Kick-off geplant, in dem wir Ihre Wünsche zu Reporting, Konsolidierung und Budgetierung besprechen und die Implementierungsschritte daran ausrichten.</p>
10878
10879<h3>2. Berichte einrichten</h3>
10880<p>Das Smartbooks-Support-Team richtet Berichte für Bilanz, GuV und Cashflow ein. Zusätzlich werden KPIs — z. B. FTEs oder andere operative Kennzahlen — aktiviert.</p>
10881
10882<h3>3. Konsolidierung einrichten</h3>
10883<p>Bei mehreren Entitäten wird das Konsolidierungsschema eingerichtet — gegebenenfalls inklusive Teilkonsolidierungen und Fremdwährungs­umrechnung. Auf Gruppenebene werden ebenfalls Berichte für Bilanz, GuV und Cashflow bereitgestellt.</p>
10884
10885<h3>4. Budget einrichten</h3>
10886<p>Beim Aufsetzen des Budgetmoduls unterscheiden wir zwischen Top-down- und Bottom-up-Budgetierung. Zusätzlich unterscheiden wir zwischen Budgets für GuV, Bilanz und Cashflow.</p>
10887<p>Ein Top-down-Budget basiert auf dem Kontenplan; das Support-Team richtet ein, dass auf einzelnen Konten oder Zwischensummen budgetiert werden kann. Formeln und saisonale Muster können berücksichtigt werden.</p>
10888<p>Ein Bottom-up-Budget geht von einer Geschäftslogik aus, bei der sowohl Erträge als auch Kosten aus einem Geschäftsmodell abgeleitet werden. So planen Sie detailliert Erträge, Kosten, Investitionen, Finanzierungen sowie erwartete Ein- und Auszahlungen.</p>
10889
10890<h3>5. Feintuning &amp; Training</h3>
10891<p>Der letzte Schritt ist das Feintuning, nachdem die Nutzerinnen die Einrichtung getestet haben. In dieser Phase erhalten die Nutzerinnen auch das Training — inklusive Anpassung von Berichten, Grafiken und Budgetmodellen.</p>
10892
10893<h3>6. Support</h3>
10894<p>Während der Einführung — und selbstverständlich danach — steht das Support-Team per E-Mail und Webcall zur Verfügung.</p>
10895
10896<p>Eine schnelle Einführung ist innerhalb eines halben Tages möglich. Eine komplexere Einführung mit mehreren Entitäten und Budgetmodellen kann einige Tage dauern — spätestens innerhalb einer Woche ist die Implementierung abgeschlossen.</p>`,ZO=`---json
10897{
10898  "title": "Rapid Implementation of Smartbooks",
10899  "metaTitle": "Consolidation Software Implementation in a Week",
10900  "slug": "snelle-implementatie-van-smartbooks",
10901  "date": "",
10902  "category": "Articles",
10903  "tags": [
10904    "Implementation",
10905    "Smartbooks",
10906    "Reporting",
10907    "Consolidation",
10908    "Efficiency"
10909  ],
10910  "excerpt": "Consolidation software implementation doesn't have to take long: with Smartbooks you are often live within a week. Here is the step-by-step plan.",
10911  "originalUrl": "",
10912  "meta": {
10913    "type_bedrijf": "Software Provider"
10914  }
10915}
10916---
10917<p><strong>Consolidation software implementation doesn't have to be slow. Smartbooks is designed for organizations that want to report, consolidate, analyze, and budget professionally.</strong></p>
10918
10919<p>
10919To implement Smartbooks quickly and efficiently, we identify the following steps.</p>
10920
10921<figure class="`,YO=`---json
10922{
10923  "title": "Snelle implementatie van Smartbooks",
10924  "metaTitle": "Implementatie consolidatiesoftware in een week",
10925  "slug": "snelle-implementatie-van-smartbooks",
10926  "order": 25,
10927  "date": "2024-09-26 15:24:35",
10928  "category": "Articles",
10929  "tags": [],
10930  "excerpt": "De implementatie van consolidatiesoftware hoeft niet lang te duren: met Smartbooks ben je vaak binnen een week live. Zo verloopt het stappenplan.",
10931  "originalUrl": "https://smartbooks.ai/artikelen/snelle-implementatie-van-smartbooks/",
10932  "meta": null,
10933  "enSlug": "how-to-connect-smartbooks"
10934}
10935---
10936<p><strong>De implementatie van consolidatiesoftware hoeft niet lang te duren. Smartbooks is gemaakt voor organisaties die professioneel willen rapporteren, consolideren, analyseren en budgetteren.</strong></p>
10937
10938
10939
10940<p>Om Smartbooks snel en efficiënt in gebruik te nemen onderkennen we de volgende stappen.</p>
10941
10942
10943
10944<figure class="wp-block-image size-large"><img src="https://smartbooks.ai/wp-content/uploads/2024/09/Afbeelding9-1024x377.png" alt="Stappenplan implementatie consolidatiesoftware Smartbooks" class="wp-image-2489"/></figure>
10945
10946
10947
10948<h3 class="wp-block-heading">1.     Connect &amp; kick-off</h3>
10949
10950
10951
10952<p>Het maken van een connectieve met de grootboek-administratie gaat via een connectie-menu in Smartbooks en duurt over het algemeen niet langer dan 5 minuten. Ook meerdere entiteiten kunnen in 1 keer gekoppeld worden. Een nieuwe klant kan deze connectie zelfstandig uitvoeren en de Smartbooks helpdesk krijgt een melding als een connectie tot stand is gebracht. Vervolgens wordt er een kick-off gepland waarin we bespreken wat de wensen zijn m.b.t. rapporteren consolideren en budgetteren, zodat we de implementatiestappen daarop aan kunnen passen.</p>
10953
10954
10955
10956<h3 class="wp-block-heading">2.&nbsp;&nbsp;&nbsp;&nbsp; Rapporten inrichten</h3>
10957
10958
10959
10960<p>Het Smartbooks support-team zorg voor het inrichten van rapportages voor de balans, verlies &amp; winst en cashflow. Daarnaast worden KPIs geactiveerd voor bijvoorbeeld FTEs of andere operationele gegevens.</p>
10961
10962
10963
10964<h3 class="wp-block-heading">3.&nbsp;&nbsp;&nbsp;&nbsp; Consolidatie inrichten</h3>
10965
10966
10967
10968<p>Als er meerdere entiteiten zijn, wordt het consolidatieschema ingericht, eventueel met tussen-consolidaties en vreemde valuta omrekeningen. Ook op groepsniveau worden rapporten ingericht voor balans, verlies &amp; winst en cashflow.</p>
10969
10970
10971
10972<h3 class="wp-block-heading">4.&nbsp;&nbsp;&nbsp;&nbsp; Budget inrichten</h3>
10973
10974
10975
10976<p>Bij het inrichten van de budgetmodule maken we onderscheid tussen top-down en bottom-up budgettering. Daarnaast is er een verschil tussen budgetteren van de verlies &amp; winst, de balans en de cash flow.</p>
10977
10978
10979
10980<p>Een top-down budget heeft als uitgangspunt het grootboekrekening schema en het Smartbooks support-team zorgt dat er op verschillende grootboekrekeningen of subtotalen gebudgetteerd kan worden. Hierbij kunnen diverse formules en seizoensinvloeden worden meegenomen.</p>
10981
10982
10983
10984<p>Een bottom-up budget gaat uit van een bepaalde business logica waarbij zowel opbrengsten als kosten op basis van een business model worden ingericht. Op deze wijze kun je heel gedetailleerd opbrengsten, kosten, investeringen financieringen en verwachte inkomende en uitgaande betalingen plannen.</p>
10985
10986
10987
10988<h3 class="wp-block-heading">5.&nbsp;&nbsp;&nbsp;&nbsp; Fine-tunen &amp; training</h3>
10989
10990
10991
10992<p>De laatste stap is om de puntjes op de ‘i’ te zetten, nadat gebruikers de inrichting van Smartbooks hebben getest. Ook wordt in deze stap de training gegeven aan gebruikers. In deze training wordt uitgelegd hoe je zelf aanpassingen kunt maken aan o.a. rapporten, grafieken en budgetteringsmodellen.</p>
10993
10994
10995
10996<h3 class="wp-block-heading">6.&nbsp;&nbsp;&nbsp;&nbsp; Support</h3>
10997
10998
10999
11000<p>Gedurende de implementatie, en uiteraard ook daarna, is het support-team via email en via webcalls beschikbaar om vragen te beantwoorden, aanpassingen te maken of problemen op te lossen.</p>
11001
11002
11003
11004<p>Een snelle implementatie kan binnen een halve dag gereed zijn. Een complexe implementatie met meerdere entiteiten en meerdere budgetteringsmodellen kan enkele dagen duren, maar een implementatie is altijd klaar binnen en week.</p>`,QO=`---json
11005{
11006  "title": "Eigenkapitalquote berechnen: Formel, Richtwert und Bedeutung",
11007  "slug": "solvabiliteit-berekenen",
11008  "metaTitle": "Eigenkapitalquote Formel: Eigenkapital / Gesamtkapital",
11009  "date": "2026-08-18 10:00:00",
11010  "category": "Articles",
11011  "tags": [
11012    "Analyse",
11013    "Reporting",
11014    "Business Control",
11015    "KPI"
11016  ],
11017  "excerpt": "Eigenkapitalquote = Eigenkapital / Gesamtkapital (Bilanzsumme) × 100. Mit Rechenbeispiel, Richtwert von 25–40 % und Tipps zur Verbesserung.",
11018  "originalUrl": ""
11019}
11020---
11021<h1>Eigenkapitalquote berechnen: <strong>
11021Formel, Richtwert und Bedeutung</strong></h1>
11022<p>Die <strong>Eigenkapitalquote</strong> berechnen Sie, indem Sie das Eigenkapital durch die Bilanzsumme teilen. Sie zeigt, welcher Anteil des Vermögens mit eigenen Mitteln finanziert ist und wie gut ein Unternehmen langfristig seine Verpflichtungen erfüllen kann. Für Controller ist sie die zentrale Kennzahl für finanzielle Stabilität.</p>
11023<p>Banken, Investoren und Kreditversicherer prüfen diese Quote, bevor sie Finanzierungen gewähren. Eine niedrige Quote bedeutet eine hohe Abhängigkeit von Fremdkapital &mdash; und damit mehr Risiko bei schwächeren Ergebnissen.</p>
11024<h2>Was bedeutet die Eigenkapitalquote?</h2>
11025<p>Sie beschreibt das Verhältnis von Eigenkapital zur Bilanzsumme. Während Liquidität die kurze Frist betrifft, geht es hier um die lange Frist: Übersteht das Unternehmen mehrere schwächere Jahre?</p>
11026<ul>
11027<li><strong>Hohe Quote:</strong> viel Eigenkapital, wenig Schulden, Spielraum für Rückschläge.</li>
11028<li><strong>Niedrige Quote:</strong> viel Fremdkapital, höhere Zinslast, weniger Verhandlungsspielraum bei der Bank.</li>
11029</ul>
11030<h2>Die Formel</h2>
11031<p><strong>Eigenkapitalquote (%) = (Eigenkapital / Gesamtkapital) &times; 100</strong></p><p>Das Gesamtkapital entspricht der Bilanzsumme: der Summe aller Passiva und damit auch aller Aktiva.</p>
11032<ol>
11033<li>Eigenkapital aus der Bilanz entnehmen (eingezahltes Kapital, Reserven, Gewinnrücklagen).</li>
11034<li>Bilanzsumme ermitteln: die Summe aller Aktiva.</li>
11035<li>Eigenkapital durch Bilanzsumme teilen und mit 100 multiplizieren.</li>
11036</ol>
11037<h2>Rechenbeispiel</h2>
11038<p>Ein Unternehmen weist eine Bilanzsumme von 4.000.000 &euro; und ein Eigenkapital von 1.200.000 &euro; aus.</p>
11039<p>Eigenkapitalquote = (1.200.000 / 4.000.000) &times; 100 = <strong>30 %</strong>.</p>
11040<h2>Was ist ein guter Richtwert?</h2>
11041<p>Als Faustregel gelten <strong>25 % bis 40 %</strong> als gesund, doch der Richtwert unterscheidet sich stark je Branche. Kapitalintensive Unternehmen liegen häufig niedriger, Dienstleister und Softwareunternehmen höher. Vergleichen Sie immer innerhalb der eigenen Branche und betrachten Sie die Entwicklung über mehrere Jahre.</p>
11042<h2>Eigenkapitalquote verbessern</h2>
11043<ul>
11044<li><strong>Gewinne einbehalten:</strong> weniger Ausschüttung stärkt das Eigenkapital.</li>
11045<li><strong>Schulden tilgen:</strong> senkt Fremdkapital und Bilanzsumme.</li>
11046<li><strong>Bilanz verschlanken:</strong> unproduktive Aktiva abbauen.</li>
11047<li><strong>Kapital aufnehmen:</strong> Einlage oder neuer Gesellschafter erhöht das Eigenkapital sofort.</li>
11048</ul>
11049<h2>Häufige Fragen</h2>
11050<p><strong>Wie lautet die Formel?</strong><br />Eigenkapitalquote = (Eigenkapital / Bilanzsumme) &times; 100.</p>
11051<p><strong>Unterschied zur Liquidität?</strong><br />Die Eigenkapitalquote betrifft die langfristige Kapitalstruktur, Liquidität die kurzfristige Zahlungsfähigkeit.</p>
11052<p><strong>Ist eine höhere Quote immer besser?</strong><br />Nicht zwangsläufig: sehr viel Eigenkapital kann bedeuten, dass Kapital zu wenig Rendite erwirtschaftet.</p>
11053<h2>Automatisch im Reporting</h2>
11054<p>In Smartbooks stehen Eigenkapitalquote, Liquidität und Rentabilität standardmäßig in Ihren <a href="/de/funktionen/berichten">Berichten</a> &mdash; je Gesellschaft und konsolidiert. <a href="/de/demo">Demo buchen</a> und auf eigenen Zahlen ansehen.</p>`,JO=`---json
11055{
11056  "title": "Solvency ratio: how to calculate it, formula and benchmarks",
11057  "slug": "solvency-ratio",
11058  "metaTitle": "Solvency ratio: formula, benchmark and meaning",
11059  "date": "2026-08-18 10:00:00",
11060  "category": "Articles",
11061  "tags": [
11062    "Analytics",
11063    "Reporting",
11064    "Business Control",
11065    "KPI"
11066  ],
11067  "excerpt": "How to calculate the solvency ratio: the formula, a worked example, healthy benchmarks per industry and practical ways to improve it.",
11068  "originalUrl": ""
11069}
11070---
11071<h1>Solvency ratio: <strong>how to calculate it, formula and benchmarks</strong></h1>
11072<p>The <strong>solvency ratio</strong> is calculated by dividing equity by total assets. It shows which share of a company's assets is financed with its own money and how well the business can meet its long-term obligations. For controllers it is the key measure of financial resilience.</p>
11073<p>Banks, investors and credit insurers look at this percentage before they provide financing. A low solvency ratio signals heavy reliance on debt &mdash; and therefore more risk when results disappoint.</p>
11074<h2>What does the solvency ratio mean?</h2>
11075<p>Solvency is the relationship between equity and total capital on the balance sheet. Where liquidity is about the short term (can y
11075ou pay this month's bills?), solvency is about the long term: will the company survive a few weaker years?</p>
11076<ul>
11077<li><strong>High solvency:</strong> plenty of equity, little debt, room to absorb shocks.</li>
11078<li><strong>Low solvency:</strong> a lot of debt, higher interest costs and less negotiating room with the bank.</li>
11079</ul>
11080<h2>The solvency ratio formula</h2>
11081<p><strong>Solvency ratio (%) = (equity / total assets) &times; 100</strong></p>
11082<ol>
11083<li>Take equity from the balance sheet (paid-in capital, reserves and retained earnings).</li>
11084<li>Take total assets: the sum of all assets.</li>
11085<li>Divide equity by total assets and multiply by 100.</li>
11086</ol>
11087<p>A common variant is the <strong>debt-to-equity ratio</strong>: liabilities divided by equity. It shows the same relationship, seen from the debt side.</p>
11088<h2>Worked example</h2>
11089<p>A company has total assets of &euro;4,000,000 and equity of &euro;1,200,000.</p>
11090<p>Solvency ratio = (1,200,000 / 4,000,000) &times; 100 = <strong>30%</strong>.</p>
11091<table>
11092<thead><tr><th>Item</th><th>
11092Amount</th></tr></thead>
11093<tbody>
11094<tr><td>Equity</td><td>&euro;1,200,000</td></tr>
11095<tr><td>Liabilities</td><td>&euro;2,800,000</td></tr>
11096<tr><td>Total assets</td><td>&euro;4,000,000</td></tr>
11097<tr><td><strong>Solvency ratio</strong></td><td><strong>30%</strong></td></tr>
11098</tbody>
11099</table>
11100<h2>What is a good solvency ratio?</h2>
11101<p>As a rule of thumb, <strong>25% to 40%</strong> is considered healthy, but the benchmark differs strongly by industry. Capital-intensive businesses (real estate, manufacturing) often sit lower because assets serve as collateral; service and software companies usually sit higher. Always compare within your own sector and look at the multi-year trend rather than a single snapshot.</p>
11102<h2>How to improve solvency</h2>
11103<ul>
11104<li><strong>Retain earnings:</strong> paying out less dividend grows equity.</li>
11105<li><strong>Repay debt:</strong> lowering liabilities shrinks both debt and total assets.</li>
11106<li><strong>Clean up the balance sheet:</strong> dispose of non-productive assets.</li>
11107<li><strong>Raise capital:</strong> a capital contribution or new shareholder lifts equity immediately.</li>
11108</ul>
11109<h2>Solvency in the monthly report</h2>
11110<p>Solvency is often only calculated for the annual accounts, while bank covenants are tested monthly. Include the ratio in your standard reporting set, next to <a href="/en/articles/ebitda-calculation">EBITDA</a> and the liquidity ratios, so deviations show up before they become a problem. With multiple entities, calculate it per entity and at consolidated level.</p>
11111<h2>Frequently asked questions about solvency</h2>
11112<p><strong>What is the solvency ratio formula?</strong><br />Solvency ratio = (equity / total assets) &times; 100. The result is a percentage.</p>
11113<p><strong>What is the difference between solvency and liquidity?</strong><br />Solvency measures the long-term capital structure; liquidity measures whether you can meet short-term payment obligations.</p>
11114<p><strong>Is a higher solvency ratio always better?</strong><br />Not necessarily. Very high equity may mean capital is underused; debt is usually cheaper and works as leverage on returns.</p>
11115<p><strong>What solvency ratio do banks require?</strong><br />It varies by bank and sector, but corporate financing often requires a minimum of around 25% to 30%, sometimes fixed in a covenant.</p>
11116<h2>Solvency automatically in your reporting</h2>
11117<p>Smartbooks includes solvency, liquidity and return ratios in your <a href="/en/functionalities/reporting">reports</a> by default &mdash; per entity and consolidated, without spreadsheet work. <a href="/en/demo">Book a demo</a> and see it on your own numbers.</p>`,XO=`---json
11118{
11119  "title": "Solvabiliteit berekenen: formule, norm en betekenis",
11120  "slug": "solvabiliteit-berekenen",
11121  "order": 56,
11122  "metaTitle": "Solvabiliteit berekenen: formule, norm en betekenis",
11123  "date": "2026-08-18 10:00:00",
11124  "category": "Articles",
11125  "tags": [
11126    "Analyse",
11127    "Rapportage",
11128    "Business Control",
11129    "KPI"
11130  ],
11131  "excerpt": "Solvabiliteit berekenen: de formule, een rekenvoorbeeld, welke norm gezond is per sector en hoe je de solvabiliteit structureel verbetert.",
11132  "originalUrl": "",
11133  "enSlug": "solvency-ratio"
11134}
11135---
11136<h1>Solvabiliteit berekenen: <strong>formule, norm en betekenis</strong></h1>
11137<p><strong>Solvabiliteit berekenen</strong> doe je door het eigen vermogen te delen door het balanstotaal. De solvabiliteit laat zien welk deel van de bezittingen met eigen geld is gefinancierd en hoe goed een onderneming op lange termijn aan haar verplichtingen kan blijven voldoen. Voor controllers is het de belangrijkste maatstaf voor financi&euml;le weerbaarheid.</p>
11138<p>Banken, investeerders en kredietverzekeraars kijken naar dit percentage voordat ze financiering verstrekken. Een lage solvabiliteit betekent een grote afhankelijkheid van vreemd vermogen &mdash; en daarmee een hoger risico bij tegenvallende resultaten.</p>
11139<h2>Wat betekent solvabiliteit?</h2>
11140<p>Solvabiliteit is de verhouding tussen eigen vermogen en het totale vermogen op de balans. Waar liquiditeit gaat over de korte termijn (kun je de rekeningen van deze maand betalen?), gaat solvabiliteit over de lange termijn: blijft de onderneming overeind als het een paar jaar minder gaat?</p>
11141<ul>
11142<li><strong>Hoge solvabiliteit:</strong> veel eigen vermogen, weinig schuld, veel ruimte om schokken op te vangen.</li>
11143<li><strong>Lage solvabiliteit:</strong> veel vreemd vermogen, hogere rentelast en minder onderhandelingsruimte bij de bank.</li>
11144</ul>
11145<h2>De formule om solvabiliteit te berekenen</h2>
11146<p>De meest gebruikte formule is:</p>
11147<p><strong>Solvabiliteit (%) = (eigen vermogen / balanstotaal) &times; 100</strong></p>
11148<ol>
11149<li>Neem het eigen vermogen uit de balans (gestort kapitaal, reserves en onverdeelde winst).</li>
11150<li>Neem het balanstotaal: de som van alle activa.</li>
11151<li>Deel het eigen vermogen door het balanstotaal en vermenigvuldig met 100.</li>
11152</ol>
11153<p>Een veelgebruikte variant is de <strong>debt-to-equity ratio</strong>: vreemd vermogen gedeeld door eigen vermogen. Die laat dezelfde verhouding zien, maar vanuit het perspectief van de schuld.</p>
11154<h2>Rekenvoorbeeld solvabiliteit</h2>
11155<p>Een onderneming heeft een balanstotaal van &euro;4.000.000 en een eigen vermogen van &euro;1.200.000.</p>
11156<p>Solvabiliteit = (1.200.000 / 4.000.000) &times; 100 = <strong>30%</strong>.</p>
11157<table>
11158<thead><tr><th>
11158Post</th><th>Bedrag</th></tr></thead>
11159<tbody>
11160<tr><td>Eigen vermogen</td><td>&euro;1.200.000</td></tr>
11161<tr><td>Vreemd vermogen</td><td>&euro;2.800.000</td></tr>
11162<tr><td>Balanstotaal</td><td>&euro;4.000.000</td></tr>
11163<tr><td><strong>Solvabiliteit</strong></td><td><strong>30%</strong></td></tr>
11164</tbody>
11165</table>
11166<h2>Wat is een goede solvabiliteit?</h2>
11167<p>Als vuistregel geldt een solvabiliteit van <strong>25% tot 40%</strong> als gezond, maar de norm verschilt sterk per sector. Kapitaalintensieve bedrijven (vastgoed, productie) zitten vaak lager omdat bezittingen als onderpand dienen; dienstverleners en softwarebedrijven zitten doorgaans hoger. Vergelijk daarom altijd binnen de eigen branche en kijk naar de trend over meerdere jaren in plaats van naar één momentopname.</p>
11168<h2>Solvabiliteit verbeteren</h2>
11169<ul>
11170<li><strong>Winst inhouden:</strong> minder dividend uitkeren laat het eigen vermogen groeien.</li>
11171<li><strong>Aflossen:</strong> schulden verlagen verkleint het balanstotaal en het vreemd vermogen.</li>
11172<li><strong>Balans opschonen:</strong> niet-productieve activa afstoten.</li>
11173<li><strong>Kapitaal aantrekken:</strong> een agiostorting of nieuwe aandeelhouder verhoogt het eigen vermogen direct.</li>
11174</ul>
11175<h2>Solvabiliteit in de maandrapportage</h2>
11176<p>Solvabiliteit wordt vaak alleen bij de jaarrekening berekend, terwijl bankcovenanten maandelijks worden getoetst. Neem de ratio daarom op in je vaste rapportageset, naast <a href="/artikelen/ebitda-berekenen">EBITDA</a> en de liquiditeitsratio's, zodat afwijkingen opvallen voordat ze een probleem worden. Bij meerdere entiteiten reken je de ratio zowel per entiteit als geconsolideerd door.</p>
11177<h2>Veelgestelde vragen over solvabiliteit</h2>
11178<p><strong>Wat is de formule voor solvabiliteit?</strong><br />Solvabiliteit = (eigen vermogen / balanstotaal) &times; 100. Het antwoord is een percentage.</p>
11179<p><strong>Wat is het verschil tussen solvabiliteit en liquiditeit?</strong><br />Solvabiliteit meet de vermogensstructuur op lange termijn; liquiditeit meet of je op korte termijn aan je betalingsverplichtingen kunt voldoen.</p>
11180<p><strong>Is een hogere solvabiliteit altijd beter?</strong><br />Niet per definitie. Heel veel eigen vermogen kan betekenen dat kapitaal onvoldoende rendeert; vreemd vermogen is doorgaans goedkoper en werkt als hefboom op het rendement.</p>
11181<p><strong>Welke solvabiliteit eist een bank?</strong><br />Dat verschilt per bank en sector, maar bij ondernemingsfinanciering wordt vaak een minimum van rond de 25% tot 30% gevraagd, soms vastgelegd in een covenant.</p>
11182<h2>Solvabiliteit automatisch in je rapportage</h2>
11183<p>In Smartbooks staan solvabiliteit, liquiditeit en rentabiliteit standaard in je <a href="/functionaliteiten/rapporteren">rapportages</a> &mdash; per entiteit en geconsolideerd, zonder Excel-werk. <a href="/demo">Plan een demo</a> en zie het op je eigen cijfers.</p>`,e_=`---json
11184{
11185  "title": "Sachkonten aufteilen für präzise Analysen",
11186  "metaTitle": "Sachkonten aufteilen für präzise Konsolidierung",
11187  "slug": "splitsen-van-grootboekrekeningen-voor-nauwkeurige-analyses",
11188  "date": "2025-05-01 22:28:04",
11189  "category": "Articles",
11190  "tags": [
11191    "Analyse",
11192    "Konsolidierung",
11193    "Monatsabschluss",
11194    "Kontenaufteilung"
11195  ],
11196  "excerpt": "Sachkonten aufteilen pro Kunde oder Lieferant — für korrekte IC-Eliminierung in der Bilanz und feine Sub-Analysen, vollständig automatisch und ohne Excel.",
11197  "originalUrl": "https://smartbooks.ai/artikelen/splitsen-van-grootboekrekeningen-voor-nauwkeurige-analyses/",
11198  "meta": null
11199}
11200---
11201<p><strong>Smarter berichten mit Smartbooks: Sachkonten aufteilen für präzise Analysen</strong></p>
11202
11203<p>Im modernen Finanzreporting dreht sich alles um Einblick, Detail und Verlässlichkeit. Eine der starken Funktionen von Smartbooks ist die automatisierte Aufteilung von Sachkonten. Auf den ersten Blick wirkt sie einfach, in der Praxis bietet sie jedoch überraschend viele Vorteile für Unternehmen, die auf Zahlen steuern wollen. In diesem Beitrag erklären wir, warum diese Aufteilungsfunktion nicht nur praktisch, sondern manchmal sogar unverzichtbar ist.</p>
11204
11205<p><strong>1. Korrekte Eliminierung von Intercompany-Positionen in der Bilanz</strong></p>
11206
11207<p>Viele Unternehmen mit mehreren Gesellschaften kennen das Problem: Intercompany-Transaktionen werden auf Konzernebene in der GuV eliminiert, bleiben aber in der Bilanz sichtbar. Warum? Weil Buchhaltungssysteme meist nur ein Sammelkonto für Forderungen und eines für Verbindlichkeiten führen. Dadurch sind die konsolidierten Forderungen und Verbindlichkeiten überhöht — und das Bild der Vermögens- und Schuldenposition verzerrt.</p>
11208
11209<p>Mit der Aufteilungsfunktion von Smartbooks lösen Sie dieses Problem strukturell. Smartbooks erlaubt es, Bilanzkonten nach Kunde und Lieferant zu spezifizieren. Intercompany-Beträge werden dadurch explizit ausgewiesen und automatisch eliminiert — nicht nur in der GuV, sondern auch in der Bilanz.</p>
11210
11211<p>
11211Damit steigt auch die Qualität wichtiger Kennzahlen wie Days Sales Outstanding (DSO) und Days Payable Outstanding (DPO). Diese Aufteilung erfolgt vollständig automatisch, ohne manuelle Korrekturen in Excel — ein wichtiger Schritt zu verlässlicher, reproduzierbarer Konsolidierung.</p>
11212
11213<p><strong>2. Feingranulare Sub-Analyse pro Kunde oder Lieferant</strong></p>
11214
11215<p>Die Aufteilungsfunktion nützt nicht nur der IC-Eliminierung, sondern auch inhaltlichen Analysen. Beispiel: Sie möchten den Umsatz pro Kunde oder Kundengruppe aufschlüsseln, haben aber alle Buchungen auf einem einzigen Konto „Warenerlöse“. Mit Smartbooks lässt sich dieses Umsatzkonto automatisch in Unterkonten pro Kunde aufteilen. So entsteht ein konsolidierter Überblick mit Umsatz je Kunde.</p>
11216
11217<p>Analog gilt das für Kosten. Das Konto „Wareneinkauf“ lässt sich in Unterkonten pro Lieferant oder Kostenstelle unterteilen. Ohne manuelle Zwischenschritte erhalten Sie Einblick, welche Lieferanten den größten Anteil Ihres Einkaufs ausmachen.</p>
11218
11219<p>Diese zusätzliche Informationsschicht sorgt dafür, dass Ihre Berichte nicht nur stimmen, sondern unmittelbar entscheidungsrelevant sind. Da die Aufteilung regelbasiert erfolgt, bleibt das Reporting aktuell und fehlerfrei.</p>
11220
11221<p><strong>Automatisch, detailliert und fehlerfrei</strong></p>
11222
11223<p>Was Smartbooks von vielen anderen Lösungen unterscheidet, ist der Automatisierungsgrad. Wo klassische Reporting-Ansätze auf Excel-Tabellen und Zwischenrechnungen setzen, arbeitet Smartbooks als intelligente Schicht über den Buchhaltungsdaten. Sachkonten werden automatisch nach Gesellschaft, Kunde, Lieferant oder Kostenstelle aufgeteilt. Das Ergebnis: dynamische Berichte, die ohne zusätzlichen Aufwand stets aktuell sind.</p>
11224
11225<p><strong>Fazit</strong></p>
11226
11227<p>Sachkonten in Smartbooks aufzuteilen bietet weit mehr als reine Detailtiefe. Es ist ein essenzielles Werkzeug für Organisationen, die verlässliche, konsolidierte Berichte ernst nehmen. Ob IC-Eliminierung, verfeinerte Umsatzanalysen oder bessere Kennzahlen wie DSO und DPO — mit Smartbooks behalten Sie die Kontrolle über Ihre Finanzdaten bis ins Detail.</p>
11228
11229<p>Wollen Sie sehen, wie das in Ihrer Organisation funktioniert? Vereinbaren Sie eine Demo oder lassen Sie Ihre eigenen Daten in einer kostenlosen Testphase durch Smartbooks laufen — die Unterschiede zeigen sich oft bereits im ersten Report.</p>`,n_=`---json
11230{
11231  "title": "Splitting General Ledger Accounts for Accurate Analyses",
11232  "metaTitle": "Split General Ledger Accounts for Accurate Analysis",
11233  "slug": "splitsen-van-grootboekrekeningen-voor-nauwkeurige-analyses",
11234  "date": "",
11235  "category": "Articles",
11236  "tags": [
11237    "Financial Reporting",
11238    "General Ledger",
11239    "Intercompany Eliminations",
11240    "Smartbooks",
11241    "Accounting Automation"
11242  ],
11243  "excerpt": "Splitting general ledger accounts by customer or supplier enables precise intercompany eliminations and deeper data insights — fully automatic, without Excel.",
11244  "originalUrl": "",
11245  "meta": {
11246    "type_bedrijf": "Fintech / SaaS"
11247  }
11248}
11249---
11250<p><strong>Smarter reporting with Smartbooks: splitting general ledger accounts for accurate analyses</strong></p>
11251
11252<p>In modern financial reporting, everything revolves around insight, detail, and reliability. One of the powerful features of Smartbooks is the ability to automatically split general ledger accounts. At first glance, this function appears simple, but in practice, it offers a surprising number of benefits for companies that want to steer based on data. In this blog, we explain why this splitting functionality is not just useful, but sometimes even indispensable.</p>
11253
11254<p><strong>1. Correct elimination of intercompany positions on the balance sheet</strong></p>
11255
11256<p>Many companies operating with multiple entities recognize the problem: intercompany transactions are eliminated at the group level in the income statement, but remain visible on the balance sheet. Why? Because accounting software usually uses only one collective account for accounts receivable and one for accounts payable. As a result, consolidated receivables and payables are incorrectly inflated, providing a skewed view of the company’s debt and claim positions.</p>
11257
11258<p>With the splitting function in Smartbooks, you solve this problem structurally. Smartbooks allows you to specify amounts on balance sheet accounts by customer and supplier. This enables intercompany amounts to be explicitly identified and automatically eliminated – not only in the income statement...</p>`,t_=`---json
11259{
11260  "title": "Grootboekrekeningen splitsen voor nauwkeurige analyses",
11261  "metaTitle": "Grootboekrekeningen splitsen voor scherpe analyses",
11262  "slug": "splitsen-van-grootboekrekeningen-voor-nauwkeurige-analyses",
11263  "order": 6,
11264  "date": "2025-05-01 22:28:04",
11265  "category": "Articles",
11266  "tags": [
11267    "Analyseren",
11268    "Consolideren",
11269    "Maandafsluiting",
11270    "Splitsen van grootboekrekening"
11271  ],
11272  "excerpt": "Grootboekrekeningen splitsen per klant of leverancier — voor correcte IC-eliminatie op de balans en verfijnde sub-analyses, volledig automatisch en zonder Excel.",
11273  "originalUrl": "https://smartbooks.ai/artikelen/splitsen-van-grootboekrekeningen-voor-nauwkeurige-analyses/",
11274  "meta": null,
11275  "enSlug": "splitting-ledger-accounts-for-accurate-analyses"
11276}
11277---
11278<p><strong>Slimmer rapporteren met Smartbooks: splitsen van grootboekrekeningen voor nauwkeurige analyses</strong></p>
11279
11280
11281
11282<p>In moderne financiële rapportage draait alles om inzicht, detail en betrouwbaarheid. Eén van de krachtige functies van Smartbooks is de mogelijkheid om grootboekrekeningen geautomatiseerd te splitsen. Deze functie lijkt op het eerste gezicht eenvoudig, maar biedt in de praktijk verrassend veel voordelen voor bedrijven die willen sturen op cijfers. In deze blog leggen we uit waarom deze splitsingsfunctionaliteit niet alleen handig is, maar soms zelfs onmisbaar.</p>
11283
11284
11285
11286<p><strong>1. Correcte eliminatie van intercompany posities op de balans</strong></p>
11287
11288
11289
11290<p>Veel bedrijven die werken met meerdere entiteiten, herkennen het probleem: intercompany transacties worden op groepsniveau geëlimineerd in de resultatenrekening, maar blijven z
11290ichtbaar op de balans. Waarom? Omdat boekhoudpakketten meestal slechts één verzamelrekening gebruiken voor debiteuren en één voor crediteuren. Daardoor zijn de geconsolideerde debiteuren en crediteuren onterecht te hoog, wat een verkeerd beeld geeft van de vorderingen- en schuldenpositie van de onderneming.</p>
11291
11292
11293
11294<p>Met de splitsingsfunctie van Smartbooks los je dit probleem structureel op. Smartbooks stelt je in staat om bedragen op de balansrekeningen te specificeren, naar klant en leverancier. Hierdoor kunnen intercompany bedragen expliciet worden aangeduid en automatisch worden geëlimineerd – niet alleen in de resultatenrekening, maar ook op de balans.</p>
11295
11296
11297
11298<p>Hiermee verbetert ook de kwaliteit van belangrijke kengetallen zoals Days Sales Outstanding (DSO) en Days Payable Outstanding (DPO). Deze splitsing gebeurt volledig automatisch, dus zonder handmatige correcties in Excel – een belangrijke stap richting betrouwbare, reproduceerbare consolidatie.</p>
11299
11300
11301
11302<p><strong>2. Verfijnde sub-analyse per klant of leverancier</strong></p>
11303
11304
11305
11306<p>De splitsingsfunctionaliteit is niet alleen nuttig voor intercompany eliminatie, maar ook voor inhoudelijke analyses. Stel: je wil de omzet verdelen per klant of klantgroep, maar je hebt alle posten op één grootboekrekening ‘Omzet goederen’ geboekt. Met Smartbooks kun je deze omzetrekening automatisch splitsen in sub-rekeningen per klant. Op deze manier kun je dus ook een geconsolideerd overzicht maken met omzet per klant.</p>
11307
11308
11309
11310<p>Hetzelfde geldt voor kosten. De rekening ‘Inkoop goederen’ kun je onderverdelen in sub-rekeningen per leverancier of kostenplaats. Dit maakt het mogelijk om zonder extra handmatige tussenstappen inzicht te krijgen in welke leveranciers het grootste deel van je inkoop vertegenwoordigen.</p>
11311
11312
11313
11314<p>Deze extra informatielaag zorgt ervoor dat je rapportages niet alleen kloppen, maar ook direct bruikbaar zijn voor besluitvorming. En omdat de splitsing gebeurt op basis van vooraf ingestelde regels, blijft de rapportage actueel en foutloos.</p>
11315
11316
11317
11318<p><strong>Automatisch, gedetailleerd en foutloos</strong></p>
11319
11320
11321
11322<p>Wat Smartbooks onderscheidt van veel andere oplossingen, is de mate van automatisering. Waar in traditionele rapportageoplossingen vaak handmatig gewerkt wordt met Excel-sheets en tussenberekeningen, werkt Smartbooks met een slimme laag boven op de boekhouddata. Grootboekrekeningen worden automatisch gesplitst op basis van entiteit, klant, leverancier of kostenplaats. Hierdoor ontstaan dynamische rapportages die altijd up-to-date zijn, zonder extra werk.</p>
11323
11324
11325
11326<p><strong>Conclusie</strong></p>
11327
11328
11329
11330<p>De mogelijkheid om grootboekrekeningen te splitsen in Smartbooks biedt veel meer dan alleen detailinformatie. Het is een essentieel hulpmiddel voor organisaties die serieus werk willen maken van betrouwbare, geconsolideerde rapportages. Of het nu gaat om het elimineren van intercompany saldi, het verfijnen van omzetanalyses, of het verbeteren van kengetallen zoals DSO en DPO: met Smartbooks heb je de controle over je financiële data, tot in de kleinste details.</p>
11331
11332
11333
11334<p>Wil je weten hoe dit werkt voor jouw organisatie? Neem dan contact op voor een demo of laat je eigen data eens in een kosteloze proefperiode door Smartbooks verwerken – de verschillen zijn vaak al in één rapport zichtbaar.</p>`,i_=`---json
11335{
11336  "title": "Automatisch konsolidieren ohne Excel — schnell und fehlerfrei",
11337  "slug": "the-power-of-automation-in-financial-consolidation",
11338  "metaTitle": "Automatische Konsolidierung ohne Excel — schnell & fehlerfrei",
11339  "date": "2024-05-13 14:23:12",
11340  "category": "Articles",
11341  "tags": [
11342    "Finanzkonsolidierung"
11343  ],
11344  "excerpt": "Automatisch konsolidieren ohne Excel: schneller und fehlerfrei. So verbessert Automatisierung die Konsolidierung im Mittelstand.",
11345  "originalUrl": "https://smartbooks.ai/artikelen/the-power-of-automation-in-financial-consolidation/",
11346  "meta": null
11347}
11348---
11349<p><strong>Automatische Konsolidierung macht Finanzkonsolidierung für den Mittelstand schneller und fehlerfrei.</strong></p>
11350<p>Konsolidierung ist für viele mittelständische Unternehmen Pflicht und komplex — besonders bei internationaler Aufstellung. Der überwiegende Teil des Prozesses lässt sich heute automatisieren, mit deutlichen Effizienz- und Genauigkeitsgewinnen.</p>
11351<h3>Was Konsolidierung wirklich bedeutet</h3>
11352<p>Es geht nicht nur um Addition. Intercompany-Transaktionen müssen eliminiert werden, Kontenpläne harmonisiert, Fremdwährungen umgerechnet. Excel skaliert dafür schlecht.</p>
11353<h3>Finanzielle Disziplin als Grundlage</h3>
11354<p>Automatisierung setzt konsistente Buchungspraktiken und pünktliche, saubere Daten in allen Gesellschaften voraus.</p>
11355<h3>Automatisierte Eliminierung</h3>
11356<p>Konsolidierungssoftware erkennt und eliminiert Intercompany-Vorgänge über vordefinierte Regeln — schnell, wiederholbar, fehlerarm. Das Team gewinnt Zeit für Analyse statt Datentransformation.</p>
11357<h3>Vorteile</h3>
11358<ol>
11359<li><strong>Effizienz</strong>: deutlich schnellere Abschlüsse.</li>
11360<li><strong>Genauigkeit</strong>: weniger manuelle Fehler.</li>
11361<li><strong>Konsistenz</strong>: einheitliche Verarbeitung über Gesellschaften, Währungen und Kontenpläne hinweg.</li>
11362</ol>
11363<h3>Optionen für den Mittelstand</h3>
11364<figure><table><thead><tr><th>
11364Lösung</th><th>Vorteile</th><th>Nachteile</th></tr></thead><tbody><tr><td>Excel selbst</td><td>Günstig, kein Setup</td><td>Fehleranfällig, viel Handarbeit</td></tr><tr><td>Auslagerung an den Steuerberater</td><td>Wenig Aufwand intern</td><td>Meist nur jährlich, teuer</td></tr><tr><td>Tool des Steuerberaters</td><td>Professionelle Tools</td><td>Training, Kosten</td></tr><tr><td>Eigenes Finance-Tool</td><td>Vollautomatisiert inkl. Analyse, Budget, Cashflow</td><td>Training, Kosten</td></tr></tbody></table></figure>
11365<p>Für regelmäßige Einblicke ist eine eigene Finance-Lösung die robusteste Wahl.</p>
11366<h3>Einführung</h3>
11367<p>Wählen Sie eine Software, die zu Ihren Buchungspraktiken passt und binden Sie Ihr Finance-Team früh ein.</p>
11368<h3>Fazit</h3>
11369<p>Automatisierte Konsolidierung liefert schnellere Abschlüsse, höhere Genauigkeit und bessere Compliance — vorausgesetzt, die finanzielle Disziplin steht.</p>`,r_=`---json
11370{
11371  "title": "Automated consolidation without Excel; fast and error-free",
11372  "metaTitle": "Automated Consolidation Without Excel: Fast & Accurate",
11373  "slug": "the-power-of-automation-in-financial-consolidation",
11374  "date": "",
11375  "category": "Articles",
11376  "tags": [
11377    "Financial Consolidation",
11378    "Automation",
11379    "Reporting",
11380    "Efficiency",
11381    "Compliance"
11382  ],
11383  "excerpt": "Automated consolidation without Excel: faster and error-free. Discover how automation improves financial consolidation for medium-sized companies.",
11384  "originalUrl": ""
11385}
11386---
11387<p><strong>Automated consolidation makes financial consolidation faster and error-free for medium-sized companies.</strong></p>
11388
11389<p>Financial consolidation is a crucial and usually mandatory process for medium-sized companies that want to formalize their financial reporting and comply with laws and regulations. It involves combining and analyzing financial transactions from different entities to create a single composite financial statement. This can be particularly complex, especially for companies operating in multiple countries. Thanks to technological advancements, however, a large part of this process can be automated, leading to significant improvements in efficiency and accuracy.</p>
11390
11391<h3 class="wp-block-heading">Consolidation without Excel</h3>`,a_=`---json
11392{
11393  "title": "Automatisch consolideren zonder excel; snel en foutloos",
11394  "metaTitle": "Automatisch consolideren zonder Excel: snel & foutloos",
11395  "slug": "the-power-of-automation-in-financial-consolidation",
11396  "order": 34,
11397  "date": "2024-05-13 14:23:12",
11398  "category": "Articles",
11399  "tags": [
11400    "Consolideren"
11401  ],
11402  "excerpt": "Automatisch consolideren zonder Excel: sneller en foutloos. Ontdek hoe automatisering financiële consolidatie voor middelgrote bedrijven verbetert.",
11403  "originalUrl": "https://smartbooks.ai/artikelen/the-power-of-automation-in-financial-consolidation/",
11404  "meta": null,
11405  "enSlug": "the-power-of-automation-in-financial-consolidation"
11406}
11407---
11408<p><strong>Automatisch consolideren maakt financiële consolidatie sneller en foutloos voor middelgrote bedrijven.</strong></p>
11409
11410
11411
11412<p>Financiële consolidatie is een cruciaal en meestal verplicht proces voor middelgrote bedrijven die hun financiële rapportages willen formaliseren en voldoen aan wet- en regelgeving. Het houdt in dat financiële transacties van verschillende entiteiten worden gecombineerd en geanalyseerd om één samengesteld financieel verslag te maken. Dit kan bijzonder complex zijn, vooral voor bedrijven die in meerdere landen opereren. Dankzij technologische vooruitgang kan een groot deel van dit proces echter worden geautomatiseerd, wat leidt tot aanzienlijke verbeteringen in efficiëntie en nauwkeurigheid.</p>
11413
11414
11415
11416<h3 class="wp-block-heading">Wat is financiële consolidatie?</h3>
11417
11418
11419
11420<p>Financiële consolidatie draait niet alleen om het optellen of aftrekken van cijfers van verschillende dochterondernemingen. Bedrijven moeten transacties tussen dochterondernemingen aanpassen om dubbele telling te voorkomen. Dit vereist dat intercompany-transacties en -saldi worden geëlimineerd. Voor middelgrote bedrijven kan dit een uitdagende taak zijn vanwege beperkte middelen en systeemfunctionaliteiten. Vaak maken kleinere bedrijven gebruik van spreadsheets om deze complexe taak uit te voeren. Hoewel dit begrijpelijk is, is het niet aan te raden, noch noo
11420dzakelijk.</p>
11421
11422
11423
11424<h3 class="wp-block-heading">Het belang van financiële discipline</h3>
11425
11426
11427
11428<p>Om de consolidatie effectief te automatiseren, moet een bedrijf een hoog niveau van financiële discipline hebben. Dit betekent het bijhouden van nauwkeurige en tijdige financiële gegevens en het handhaven van consistente boekhoudkundige richtlijnen en procedures binnen alle entiteiten. Financiële discipline zorgt ervoor dat transacties op tijd en op de juiste rekeningen worden geboekt.</p>
11429
11430
11431
11432<h3 class="wp-block-heading">Automatisering van het eliminatieproces</h3>
11433
11434
11435
11436<p>Het elimineren van intercompany-transacties tijdens de consolidatie kan volledig geautomatiseerd worden, mits je over de juiste tools beschikt en een gedisciplineerde financiële aanpak hanteert. Consolidatiesoftware werkt op basis van vooraf gedefinieerde regels om financiële transacties correct aan te passen. Bijvoorbeeld, als twee dochterondernemingen een onderlinge transactie hebben geboekt, kan de software deze detecteren en elimineren uit de geconsolideerde resultaten, zodat er een compliant financieel verslag ontstaat.</p>
11437
11438
11439
11440<p>Deze automatisering bespaart niet alleen tijd, maar verkleint ook de kans op fouten die vaak voorkomen bij handmatige aanpassingen, bijvoorbeeld in Excel. Hierdoor kan het financiële team zich meer richten op analyse in plaats van op de technische details van de consolidatie.</p>
11441
11442
11443
11444<h3 class="wp-block-heading">Voordelen van geautomatiseerde consolidatie</h3>
11445
11446
11447
11448<ol class="wp-block-list">
11449<li><strong>Efficiëntie</strong>: Automatisering versnelt het consolidatieproces aanzienlijk, waardoor financiële rapporten sneller kunnen worden opgesteld. Dit is vooral nuttig tijdens periodes met strakke deadlines, zoals aan het einde van de maand of het boekjaar.</li>
11450
11451
11452
11453<li><strong>Nauwkeurigheid</strong>: Geautomatiseerde systemen verminderen de kans op menselijke fouten, wat zorgt voor nauwkeurigere en betrouwbaardere financiële rapporten.</li>
11454
11455
11456
11457<li><strong>Consistentie</strong>: Automatisering zorgt voor uniformiteit in de verwerking en rapportage van financiële data, wat essentieel is voor bedrijven met meerdere dochterondernemingen die in verschillende valuta opereren en gebruikmaken van verschillende rekeningschema’s en boekhoudstandaarden.</li>
11458</ol>
11459
11460
11461
11462<h3 class="wp-block-heading">Opties voor het automatiseren van je consolidatieproces</h3>
11463
11464
11465
11466<p>Hieronder staan enkele opties voor middelgrote bedrijven om het consolidatieproces uit te voeren, inclusief de voor- en nadelen:</p>
11467
11468
11469
11470<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Oplossingen</strong></th><th><strong>Voordelen</strong></th><th><strong>Nadelen</strong></th></tr></thead><tbody><tr><td><strong>Zelf doen met een spreadsheet</strong></td><td>Goedkoop, geen training of implementatie nodig</td><td>Foutgevoelig, vereist handmatige uploads en acties</td></tr><tr><td><strong>Uitbesteden aan je accountant</strong></td><td>Activiteit is uitbesteed, je hoeft geen software aan te schaffen</td><td>Consolidatie meestal één keer per jaar, mogelijk dure service</td></tr><tr><td><strong>Gebruik van de tool van je accountant</strong></td><td>Training en onboarding via vertrouwde accountant, gebruik van professionele tools</td><td>Vereist training en implementatietijd, software en begeleiding kost geld</td></tr><tr><td><strong>Financiële tool (software)</strong></td><td>Volledig geautomatiseerd, inclusief analyse, budget- en kasstroomoverzichten</td><td>Vereist training en implementatietijd, software kost geld</td></tr></tbody></table></figure>
11471
11472
11473
11474<p>Als het analyseren van geconsolideerde cijfers en kasstromen niet frequent nodig is, kan het uitbesteden aan je accountant de beste keuze zijn. Maar als regelmatige inzichten in geconsolideerde financiële en bedrijfsresultaten nodig zijn, biedt een eigen financiële oplossing de meest robuuste en flexibele optie.</p>
11475
11476
11477
11478<h3 class="wp-block-heading">Implementatie van consolidatie-automatisering</h3>
11479
11480
11481
11482<p>De implementatie van een geautomatiseerd consolidatiesysteem begint met het kiezen van de juiste software die past bij de specifieke behoeften van je bedrijf. Het is belangrijk om softw
11482are te selecteren die kan worden aangepast aan de boekhoudpraktijken en complexiteit van je activiteiten. Het betrekken van je financiële team bij het selecteren en implementeren van de software is ook essentieel, aangezien hun betrokkenheid cruciaal is voor een succesvolle adoptie.</p>
11483
11484
11485
11486<figure class="wp-block-image size-full"><img src="https://smartbooks.ai/wp-content/uploads/2024/07/Afbeelding6.jpg" alt="Automatisch consolideren zonder Excel met Smartbooks" class="wp-image-2159"/></figure>
11487
11488
11489
11490<h3 class="wp-block-heading">Conclusie</h3>
11491
11492
11493
11494<p>Het automatiseren van het consolidatieproces biedt tal van voordelen voor middelgrote bedrijven, van snellere uitvoering tot verbeterde nauwkeurigheid en naleving van regelgeving. Het succes van automatisering hangt echter sterk af van een solide financiële discipline binnen de organisatie. Door ervoor te zorgen dat financiële transacties nauwkeurig en tijdig worden verwerkt, kunnen bedrijven gebruikmaken van automatiseringstools om hun consolidatieproces te stroomlijnen en beter inzicht te krijgen in hun financiële rapportages.</p>`,o_=`---json
11495{
11496  "title": "Tjojs Technologies",
11497  "slug": "tjojs-technologies",
11498  "metaTitle": "Fallstudie Tjojs: Konsolidierung für ein Tech-Unternehmen",
11499  "date": "",
11500  "category": "Customer Stories",
11501  "tags": [
11502    "Finanzplanung",
11503    "Forecasting",
11504    "Business Intelligence",
11505    "SaaS"
11506  ],
11507  "excerpt": "Tjojs Technologies erhöht die finanzielle Transparenz durch die Integration von Actuals und Budgetmodell in einem automatisierten System — mit Echtzeit-Forecast.",
11508  "originalUrl": "",
11509  "meta": {
11510    "type_bedrijf": "SaaS / Technologie",
11511    "naam_medewerker": "Mohamed Alkaduhimi",
11512    "functie_medewerker": "CTO, Tjojs Technologies"
11513  }
11514}
11515---
11516<p>Es ist unglaublich aufschlussreich, unsere Actuals und unser Budgetmodell in einem System zu haben. Jeden Monat sehen wir sofort, ob wir unsere Ziele erreicht haben. Zusätzlich bekommen wir vollautomatisch einen aktuellen Umsatz- und Ergebnisforecast für das gesamte Jahr.</p>`,s_=`---json
11517{
11518  "title": "Tjojs Technologies",
11519  "metaTitle": "Tjojs Case: Consolidation for a Tech Company",
11520  "slug": "tjojs-technologies",
11521  "date": "",
11522  "category": "Customer Stories",
11523  "tags": [
11524    "Financial Planning",
11525    "Forecasting",
11526    "Business Intelligence",
11527    "SaaS"
11528  ],
11529  "excerpt": "Tjojs Technologies enhances financial clarity by integrating actuals and budget models into a single automated system for real-time forecasting.",
11530  "originalUrl": "",
11531  "meta": {
11532    "type_bedrijf": "Technology & SaaS"
11533  }
11534}
11535---
11536<p>It is incredibly insightful to have our actuals and budget model integrated into a single system. Every month, we can immediately see whether we have met our targets. Furthermore, we receive a fully automated, up-to-date revenue and profit forecast for the entire year.</p>`,l_=`---json
11537{
11538  "title": "Tjojs Technologies",
11539  "metaTitle": "Klantcase Tjojs: consolidatie voor een techbedrijf",
11540  "slug": "tjojs-technologies",
11541  "order": 32,
11542  "date": "2024-07-17 10:49:06",
11543  "category": "Customer Stories",
11544  "tags": [],
11545  "excerpt": "Super inzichtelijk om onze actuals en budgetmodel nu in één systeem te hebben. Elke maand zien we zo direct of we onze doelen gehaald hebben. En krijgen we",
11546  "originalUrl": "https://smartbooks.ai/klantervaringen/tjojs-technologies/",
11547  "meta": {
11548    "type_bedrijf": "Software development",
11549    "naam_medewerker": "Mohamed Alkaduhimi",
11550    "functie_medewerker": "CTO",
11551    "logo_bedrijf": "2124"
11552  },
11553  "enSlug": "tjojs-technologies"
11554}
11555---
11556<p>Super inzichtelijk om onze actuals en budgetmodel nu in één systeem te hebben. Elke maand zien we zo direct of we onze doelen gehaald hebben. En krijgen we volledig automatisch een actuele prognose voor de omzet en winst voor het hele jaar.</p>`,d_=`---json
11557{
11558  "title": "Systeme koppeln oder nicht — das ist die Frage",
11559  "slug": "to-interface-or-not-that-is-the-question",
11560  "metaTitle": "Finanzsysteme koppeln: sinnvoll oder überflüssig?",
11561  "date": "2024-05-13 14:37:19",
11562  "category": "Articles",
11563  "tags": [
11564    "Implementierung"
11565  ],
11566  "excerpt": "Finanzsysteme koppeln: Ist eine vollständige Integration wirklich immer nötig? Wir wägen die Vor- und Nachteile für Ihre FP&A-Lösung ab.",
11567  "originalUrl": "https://smartbooks.ai/artikelen/to-interface-or-not-that-is-the-question/",
11568  "meta": null
11569}
11570---
11571<h3><strong>Sollten operative Systeme an Ihre FP&amp;A-Lösung angebunden werden?</strong></h3>
11572<p>Systemintegration klingt nach Best Practice — in der Praxis ist sie oft weder einfach umzusetzen noch notwendig. Drei Kernfragen helfen bei der Entscheidung:</p>
11573<p><strong>1. Verhindern wir damit Daten-Silos?</strong> Nicht jede Abteilung braucht Zugriff auf alle Details. Regelmäßiger, funktionaler Datenaustausch auf need-to-know-Basis vermeidet Silos ebenso — ohne Overkill.</p>
11574<p><strong>2. Erreichen wir vollständige Daten in der nötigen Qualität?</strong> Mehr Daten heißen nicht besser. Zu viel Detail führt zu „Forward Accounting“ — hoher Aufwand, wenig Nutzen.</p>
11575<p><strong>3. Investieren wir in dauerhaft gekoppelte Systeme?</strong> Kopplungen sind teuer, wartungsintensiv und brechen bei Systemänderungen. Für wenige Datenpunkte pro Monat kann ein gut organisierter manueller Prozess die bessere Wahl sein.</p>
11576
11577<h3>Praxis-Tipps</h3>
11578<p>Beim Monatsbericht geht es um Plan-Ist-Vergleich und Ursachenanalyse — finanziell wie operativ. Jede Abteilung besitzt ihre operativen Daten und teilt aggregierte KPIs. Der Controller übersetzt operative Updates in finanzielle Auswirkungen — auf Basis der Prognose, mit gerundeten Zahlen und Cashflow-Update.</p>
11579
11580<h3>Fazit</h3>
11581<p>Wenn jede Abteilung ihre operativen Daten selbst verwaltet, ist eine tiefe Systemintegration oft nicht nötig. Eine API-Kopplung zwischen Hauptbuch und Ihrer Financial-Close/FP&amp;A-Lösung lohnt sich hingegen fast immer.</p>
11582<p>Mehr zu Reporting, Konsolidierung und Budgetierung: <a href="/de">www.smartbooks.ai</a></p>`,c_=`---json
11583{
11584  "title": "To Interface or Not, That is the Question",
11585  "metaTitle": "Connecting Financial Systems: To Interface or Not?",
11586  "slug": "to-interface-or-not-that-is-the-question",
11587  "date": "",
11588  "category": "Articles",
11589  "tags": [
11590    "SaaS integration",
11591    "FinTech",
11592    "API",
11593    "Data exchange",
11594    "Connectivity"
11595  ],
11596  "excerpt": "Connecting financial systems: is full integration always necessary? We weigh the pros and cons of interfacing with your FP&A solution.",
11597  "originalUrl": "",
11598  "meta": {
11599    "type_bedrijf": "Financial Software Provider",
11600    "naam_medewerker": "Jan de Vries",
11601    "functie_medewerker": "Head of Integration Strategy",
11602    "logo_bedrijf": "https://example.com/logo.png"
11603  }
11604}
11605---
11606<h3 class="text-xl font-bold">Strategic Data Integration</h3><p>Connecting financial systems requires a careful choice between real-time API connectivity and structured batch processing. While APIs offer immediate visibility for modern SaaS architectures, traditional file interfaces remain a robust, compliant solution for legacy systems and high-volume transaction reconciliations.
11606</p>`,u_=`---json
11607{
11608  "title": "To interface or not, dat is de vraag",
11609  "metaTitle": "Financiële systemen koppelen: wel of niet?",
11610  "slug": "to-interface-or-not-that-is-the-question",
11611  "order": 33,
11612  "date": "2024-05-13 14:37:19",
11613  "category": "Articles",
11614  "tags": [
11615    "Implementatie"
11616  ],
11617  "excerpt": "Financiële systemen koppelen: is volledige integratie altijd nodig? We wegen de voor- en nadelen van het koppelen aan je FP&A-oplossing.",
11618  "originalUrl": "https://smartbooks.ai/artikelen/to-interface-or-not-that-is-the-question/",
11619  "meta": null,
11620  "enSlug": "to-interface-or-not-that-is-the-question"
11621}
11622---
11623<h3 class="wp-block-heading"><strong>Moet je verschillende operationele systemen koppelen aan je FP&amp;A-oplossing?</strong></h3>
11624
11625
11626
11627<p>Financiële systemen koppelen klinkt logisch: veel bedrijven streven naar een volledig geïntegreerd bedrijfs- en financieel planningsproces om de verschillen tussen gebudgetteerde en werkelijke prestaties te voorspellen en te rapporteren. In deze blog betogen we dat, hoewel het klinkt als een logisch en best practice doel, het daadwerkelijk integreren van meerdere systemen niet eenvoudig te realiseren of noodzakelijk is.</p>
11628
11629
11630
11631<p>De 3 belangrijkste vragen achter de wens om meerdere systemen te integreren en met elkaar te verbinden zijn:</p>
11632
11633
11634
11635<p><strong>1.     Kunnen we het ontstaan van informatiesilo's voorkomen?<br></strong>We moedigen het delen van informatie tussen afdelingen aan, om daarmee het ontstaan van geïsoleerde gegevens te vermijden. De vraag is welk niveau van gegevens moet worden gedeeld tussen afdelingen. Regelmatige communicatie tussen bijvoorbeeld de productieafdeling en de HR-afdeling over wervingsplannen voor geschoold technisch personeel is belangrijk, maar daarvoor is het niet noodzakelijk om een verbinding te maken tussen het HR-platform en de productieplanning. Als een afdeling zijn eigen operationele gegevens beheert en relevante datasets en KPI's met de vereiste regelmaat  deelt, zal er geen sprake zijn van geïsoleerde data, maar van data-uitwisseling op een functionele need-to-know-basis. Dit voorkomt ook dat partijen aan de ontvangende kant een data-overload krijgen.</p>
11636
11637
11638
11639<p>2. <strong>Kunnen we volledigheid van data bereiken met de vereiste datakwaliteit?</strong></p>
11640
11641
11642
11643<p>Veel bedrijven stellen zichzelf deze vraag: hebben we een data lake nodig? Nou, dat hangt ervan af. Als je op dit moment niet volledig ongewis bent over de voortgang van d orgtanisatie, en je hebt geen prangende vragen die alleen uitgebreide datamining in een data lake kan oplossen, dan is een data lake waarschijnlijk niet nodig. Ook kan het hebben van meer gedetailleerde informatie je de illusie geven dat je met de extra gegevens betere analyses en voorspellingen kunt doen, maar meer gegevens verbeteren niet noodzakelijkerwijs de nauwkeurigheid. Te veel focussen op gedetailleerde gegevens kan leiden tot 'forward accounting', een praktijk waarbij je veel tijd besteedt aan het plannen en inschatten van operationele prestaties op detailniveau. De realiteit is meestal anders en de tijd die wordt besteed aan het maken van deze gedetailleerde planning is vaak niet erg nuttig.</p>
11644
11645
11646
11647<p>3. <strong>Moeten we investeren in gekoppelde en automatisch geüpdatete systemen?</strong></p>
11648
11649
11650
11651<ol class="wp-block-list"></ol>
11652
11653
11654
11655<p>Handmatige updates kunnen fouten bevatten, worden soms niet op tijd uitgevoerd en zijn een last voor de persoon die precies moet weten welke gegevens moeten worden gekopieerd en geplakt, en waar deze in het andere systeem moeten terechtkomen. Het antwoord op deze vraag is dus ook afhankelijk van bepaalde vaardigheden, expertise en toegepaste discipline. Maar het koppelen van verschillende systemen aan het financiële systeem kan duur en tijdrovend zijn. Het maken en onderhouden van de verbinding kan een technische uitdaging zijn, vooral wanneer er wijzigingen worden aangebracht in een van de systemen, in welk geval verbindingen of gegevensupdates kunnen mislukken of verkeerde gegevens in het andere systeem kunnen eindigen. Houd er dus rekening mee dat als je elke maand maar een paar datapunten nodig hebt, een goed georganiseerd handmatig proces de betere keuze kan zijn, als je data van het ene systeem naar het andere moet voeren.</p>
11656
11657
11658
11659<h3 class="wp-block-heading">Praktische tips</h3>
11660
11661
11662
11663<p>Een maandelijkse beoordeling van de financiële planning en analyse (FP&amp;A) is het beste gericht op het vergelijken van gebudgetteerde cijfers met werkelijke cijfers. Deze evaluatie moet de redenen voor eventuele afwijkingen verduidelijken. Dit geldt voor financiële cijfers, maar ook voor de operationele doelen die bijvoorbeeld het aantal uitgevoerde en gefactureerde adviesuren kunnen omvatten, het aantal vervaardigde producten per product-categorie of het inwerken van nieuwe medewerkers.</p>
11664
11665
11666
11667<p>Met de voor- en nadelen in het achterhoofd, stellen we dat het planningsproces van een bedrijf de verkoopdirecteur in staat moet stellen toekomstige verkopen te bespreken, de productiemanager productieplannen te schetsen en de HR-manager het wervingsplan te presenteren. Hier bespreek je de operationele details voor elke afdeling op basis van hun KPI's en doelen.</p>
11668
11669
11670
11671<p class="kt-adv-heading1843_4c77bc-2d wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading1843_4c77bc-2d"><em>De begroting is hoe je wilt dat de toekomst eruit ziet, en de prognose is hoe je denkt dat de toekomst eruit zal zien. Vervolgens vergelijk je de Werkelijke cijfers met het Budget en de Forecast en leer je van de verschillen en onderneem je actie...</em></p>
11672
11673
11674
11675<p>
11675De controller kan vervolgens presenteren hoe deze updates van invloed zijn op de financiële prognose, deze vergelijken met het jaarlijkse budget en de werkelijke cijfers, om zo een uitgebreid financieel perspectief te bieden, zonder te verdwalen in de details. Dit betekent dat de financiële impact van deze operationele updates wordt berekend en vergeleken met het budget. De financiële implicaties worden weergegeven met afgeronde getallen en omvatten updates voor de kasstroomprognose.</p>
11676
11677
11678
11679<h3 class="wp-block-heading">Conclusie</h3>
11680
11681
11682
11683<p>Als elke afdelingsmanager eigenaar is van zijn eigen gegevens en zijn eigen rapporten maakt voor operationele KPI's, is het misschien niet nodig om een verbinding tussen verschillende applicaties en de financiële rapportagetool* tot stand te brengen en te onderhouden. Maar een API-verbinding tussen het financiële systeem en elke financial close of FP&amp;A-oplossing is zeker de moeite en investering waard.</p>
11684
11685
11686
11687<p>Voor informatie over rapporteren, consolideren of budgetteren kunt je terecht op www.smartbooks.ai</p>
11688
11689
11690
11691<p></p>`,h_=`---json
11692{
11693  "title": "Die beste Software für Financial und Business Control",
11694  "slug": "vergelijk-business-control-software",
11695  "metaTitle": "Business-Control-Software: 7 Tools für den Mittelstand im Vergleich",
11696  "date": "2026-02-23 21:51:37",
11697  "category": "Articles",
11698  "tags": [],
11699  "excerpt": "Sieben Business-Control-Tools im Vergleich: Smartbooks, Visionplanner, Finstack, Speedbooks, Bright Analytics, Lucanet und Power BI — welche Software passt zu Ihrem Finance-Team?",
11700  "originalUrl": "https://smartbooks.ai/artikelen/vergelijk-business-control-software/",
11701  "meta": null
11702}
11703---
11704<h1>Die beste Software für Financial und Business Control</h1>
11705<p><em>Ein praxisnaher Vergleich von sieben Tools für Controller im Mittelstand: Smartbooks, Visionplanner, Finstack, Speedbooks, Bright Analytics, Lucanet und Power BI.</em></p>
11706
11707<h2>Worauf es Controllern wirklich ankommt</h2>
11708<p>Ein gutes Business-Control-Tool unterstützt den vollständigen Monatsprozess: Konsolidierung, Reporting, Analyse, Budgetierung und Forecast. Es muss verlässlich, standardisiert und für Finance-Teams selbst konfigurierbar sein — ohne dauerhafte Abhängigkeit von IT oder Beratern.</p>
11709
11710<h2>Die sieben Lösungen im Kurzüberblick</h2>
11711<h3>Smartbooks</h3>
11712<p>Speziell für Controller entwickelt. Deckt den gesamten Monatsablauf (Record-to-Report + Plan-to-Perform) in einer Plattform ab. Schnelle Implementierung, geringe Kosten, keine IT-Abhängigkeit. Stark in Multi-Entity-Konsolidierung, Reporting und Forecasting — inklusive AI-Controller-Funktionen.</p>
11713<h3>Visionplanner</h3>
11714<p>Populär bei niederländischen Steuerberatern für einfache KMU-Berichterstattung. Weniger geeignet für komplexere Konsolidierungen oder Groß-Mittelstand.</p>
11715<h3>Finstack</h3>
11716<p>Solides Reporting-Tool für Buchhalter. Fokus auf Standardberichte; weniger Tiefe bei Konsolidierung und Planung.</p>
11717<h3>Speedbooks</h3>
11718<p>Bewährte Reporting-Lösung mit engen Verknüpfungen zu niederländischen ERP-Systemen. Fehlen umfassende Planungs- und Forec
11718ast-Funktionen.</p>
11719<h3>Bright Analytics</h3>
11720<p>Business-Intelligence-Fokus mit Dashboards. Sehr flexibel, benötigt jedoch mehr technisches Setup und Beratung.</p>
11721<h3>Lucanet</h3>
11722<p>Etablierte Enterprise-Konsolidierungslösung. Sehr leistungsfähig, aber komplex und mit hohem Implementierungsaufwand — meist zu schwer für den Mittelstand.</p>
11723<h3>Power BI</h3>
11724<p>Starkes BI- und Visualisierungstool von Microsoft. Kein Finance-spezifisches System: Konsolidierungslogik, Kontenplanharmonisierung und Planung müssen selbst gebaut werden.</p>
11725
11726<h2>Fazit</h2>
11727<p>Für den Mittelstand mit mehreren Entitäten ist Smartbooks in unserer Analyse die Lösung mit dem besten Verhältnis aus Funktionsumfang, Bedienbarkeit und Kosten. Lucanet bleibt der Enterprise-Standard; Power BI ergänzt jedes Setup als Visualisierungs-Layer. Visionplanner, Finstack und Speedbooks eignen sich vor allem für einfachere Reporting-Fälle. Bright Analytics passt gut in datengetriebene Organisationen mit BI-Ressourcen.</p>
11728
11729<p>Detailvergleiche pro Tool: siehe unsere Einzelartikel <a href="/de/artikel/smartbooks-vs-visionplanner">vs. Visionplanner</a>, <a href="/de/artikel/smartbooks-vs-finstack">vs. Finstack</a>, <a href="/de/artikel/smartbooks-vs-speedbooks">vs. Speedbooks</a>, <a href="/de/artikel/smartbooks-vs-bright-analytics">vs. Bright Analytics</a>, <a href="/de/artikel/smartbooks-vs-lucanet">vs. Lucanet</a> und <a href="/de/artikel/smartbooks-vs-power-bi">vs. Power BI</a>.</p>`,g_=`---json
11730{
11731  "title": "The best software for financial and business control",
11732  "slug": "compare-business-control-software",
11733  "metaTitle": "Business control software: 7 tools compared for SMBs",
11734  "date": "2026-02-23 21:51:37",
11735  "category": "Articles",
11736  "tags": [],
11737  "excerpt": "Business control software compared on consolidation, planning, AI, and cost — 7 EPM tools for Dutch SMBs side by side.",
11738  "originalUrl": "",
11739  "meta": null
11740}
11741---
11742<p><strong>An objective comparison of EPM solutions for Dutch SMBs.</strong> Finance teams face rising pressure to report faster and more reliably. This overview compares Lucanet, Smartbooks, Bright Analytics, Finstack, Visionplanner, Speedbooks, and Power BI across positioning, functional coverage, integrations, AI, implementation effort, and cost.</p><p>For the complete long-form article with comparison tables, user interviews (NPS), and detailed vendor sections, see the Dutch edition linked from our knowledge centre or <a href="/en/demo">schedule a demo</a> to discuss your situation.</p><p><strong>Summary takeaway:</strong> enterprise-grade consolidation often points to Lucanet; Smartbooks targets larger SMBs needing end-to-end financial and business control in one platform; lighter SMB stacks often combine Visionplanner or Speedbooks with Excel; Bright Analytics blends BI with finance reporting; Power BI excels at analytics but is not a substitute for finance control workflows.</p>`,m_=`---json
11743{
11744  "title": "De beste software voor financial en business control",
11745  "slug": "vergelijk-business-control-software",
11746  "order": 1,
11747  "metaTitle": "Business control software: 7 tools voor het MKB vergeleken",
11748  "date": "2026-02-23 21:51:37",
11749  "category": "Articles",
11750  "tags": [],
11751  "excerpt": "Business control software vergeleken op consolidatie, planning, AI en kosten — 7 EPM-tools voor het MKB naast elkaar.",
11752  "originalUrl": "https://smartbooks.ai/artikelen/vergelijk-business-control-software/",
11753  "meta": null,
11754  "enSlug": "compare-business-control-software"
11755}
11756---
11757<style>
11758/* Smartbooks artikel - scoped stijlen */
11759.sb-artikel {
11760  --dark-blue: #1B3A6B;
11761  --mid-blue: #2D5AA0;
11762  --light-blue: #EBF3FB;
11763  --text: #1a1a2e;
11764  --text-muted: #555870;
11765  --border: #e0e4ed;
11766  --bg: #ffffff;
11767  --bg-soft: #f7f9fc;
11768  --interview-bg: #eef4fb;
11769}
11770.sb-artikel .article-wrapper {
11771  font-family: 'Montserrat', sans-serif;
11772  font-size: 17px;
11773  line-height: 1.75;
11774  color: var(--text);
11775}
11776.sb-artikel h1 {
11777  font-family: 'Montserrat', sans-serif;
11778  font-size: 2.4rem;
11779  font-weight: 700;
11780  line-height: 1.2;
11781  color: var(--dark-blue);
11782  margin-bottom: 24px;
11783  letter-spacing: -0.02em;
11784}
11785.sb-artikel h2 {
11786  font-family: 'Montserrat', sans-serif;
11787  font-size: 1.55rem;
11788  font-weight: 600;
11789  color: var(--dark-blue);
11790  margin-top: 52px;
11791  margin-bottom: 16px;
11792  padding-bottom: 10px;
11793  border-bottom: 2px solid var(--border);
11794}
11795.sb-artikel h3 {
11796  font-family: 'Montserrat', sans-serif;
11797  font-size: 1.15rem;
11798  font-weight: 600;
11799  color: var(--dark-blue);
11800  margin-top: 36px;
11801  margin-bottom: 12px;
11802}
11803.sb-artikel p {
11804  margin-bottom: 16px;
11805  color: var(--text);
11806  font-family: 'Montserrat', sans-serif;
11807}
11808.sb-artikel ul, .sb-artikel ol {
11809  margin: 8px 0 20px 0;
11810  padding-left: 24px;
11811}
11812.sb-artikel li {
11813  margin-bottom: 6px;
11814  color: var(--text);
11815  font-family: 'Montserrat', sans-serif;
11816}
11817.sb-artikel strong { font-weight: 600; }
11818.sb-artikel .author {
11819  font-size: 0.875rem;
11820  color: var(--text-muted);
11821  font-style: italic;
11822  margin-bottom: 32px;
11823  padding-bottom: 24px;
11824  border-bottom: 1px solid var(--border);
11825}
11826.sb-artikel .summary-box {
11827  background: var(--light-blue);
11828  border-left: 4px solid var(--mid-blue);
11829  border-radius: 0 8px 8px 0;
11830  padding: 20px 24px;
11831  margin: 28px 0 36px;
11832}
11833.sb-artikel .summary-box strong {
11834  display: block;
11835  font-size: 0.8rem;
11836  text-transform: uppercase;
11837  letter-spacing: 0.08em;
11838  color: var(--mid-blue);
11839  margin-bottom: 8px;
11840}
11841.sb-artikel .summary-box p {
11842  margin: 0;
11843  font-size: 1rem;
11844  color: var(--dark-blue);
11845  font-weight: 500;
11846}
11847.sb-artikel .section-detail {
11848  background: var(--bg-soft);
11849  border-radius: 6px;
11850  padding: 12px 16px;
11851  margin-bottom: 10px;
11852  font-size: 0.95rem;
11853}
11854.sb-artikel .list-label {
11855  margin-top: 18px;
11856  margin-bottom: 4px;
11857  font-size: 0.95rem;
11858}
11859.sb-artikel .interview-block {
11860  background: var(--interview-bg);
11861  border-radius: 6px;
11862  padding: 14px 18px;
11863  margin-bottom: 12px;
11864  font-size: 0.95rem;
11865  color: #1a3060;
11866  border-left: 3px solid var(--mid-blue);
11867}
11868.sb-artikel blockquote.interview-quote {
11869  background: var(--interview-bg);
11870  border-left: 4px solid var(--mid-blue);
11871  border-radius: 0 8px 8px 0;
11872  padding: 16px 20px;
11873  margin: 12px 0;
11874  font-style: italic;
11875  font-size: 1.05rem;
11876  color: var(--dark-blue);
11877  font-family: 'Montserrat', sans-serif;
11878  font-weight: 400;
11879}
11880.sb-artikel .table-wrapper {
11881  margin: 36px 0;
11882  overflow-x: auto;
11883  border-radius: 8px;
11884  box-shadow: 0 2px 12px rgba(27,58,107,0.08);
11885}
11886.sb-artikel .vergelijking-tabel {
11887  width: 100%;
11888  border-collapse: collapse;
11889  font-family: 'Montserrat', sans-serif;
11890  font-size: 12.5px;
11891}
11892.sb-artikel .vergelijking-tabel th {
11893  background-color: #1B3A6B;
11894  color: #ffffff;
11895  font-weight: bold;
11896  text-align: center;
11897  padding: 10px 8px;
11898  border: 1px solid #C8CDD4;
11899}
11900.sb-artikel .vergelijking-tabel th:first-child { text-align: left; }
11901.sb-artikel .vergelijking-tabel td {
11902  padding: 8px;
11903  border: 1px solid #C8CDD4;
11904  vertical-align: middle;
11905  color: #1A1A2E;
11906}
11907.sb-artikel .vergelijking-tabel td:first-child {
11908  font-weight: bold;
11909  color: #1B3A6B;
11910  background-color: #ffffff;
11911  text-align: left;
11912}
11913.sb-artikel .vergelijking-tabel td:not(:first-child) {
11914  text-align: center;
11915  background-color: #ffffff;
11916}
11917.sb-artikel .vergelijking-tabel tr.subrow td { background-color: #ECEEF1; font-weight: normal; }
11918.sb-artikel .vergelijking-tabel tr.subrow td:first-child {
11919  padding-left: 24px;
11920  font-weight: normal;
11921  color: #1A1A2E;
11922  background-color: #ECEEF1;
11923}
11924.sb-artikel .vergelijking-tabel .footnote {
11925  font-size: 11px;
11926  color: #6C757D;
11927  font-style: italic;
11928  padding: 6px 8px;
11929  border: 1px solid #C8CDD4;
11930  background-color: #ffffff;
11931}
11932@media (max-width: 600px) {
11933  .sb-artikel h1 { font-size: 1.8rem; }
11934  .sb-artikel h2 { font-size: 1.3rem; }
11935}
11936</style>
11937<link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet">
11938<div class="sb-artikel">
11939<div class="article-wrapper">
11940<p><strong>Wat is de beste software voor financial en business control in Nederland? Een objectieve vergelijking van EPM-oplossingen voor het MKB.</strong><br>EPM (Enterprise Performance Management) is het type software dat de volledige werkzaamheden van de financial en business controller ondersteunt: van maandafsluiting en consolidatie tot budgettering, analyse en managementrapportage.</p>
11941<p>Finance teams staan onder toenemende druk om sneller, consistenter en met meer inzicht te rapporteren. Waar Excel jarenlang voldeed, lopen veel organisaties inmiddels tegen de grenzen aan van handmatige consolidaties, foutgevoelige rapportages en tijdrovende maandafsluitingen. Tegelijk groeit de rol van de business controller van rapporteur naar sparringpartner van het management.</p>
11942<p>
11942Er is inmiddels een breed aanbod aan software dat belooft deze uitdagingen op te lossen. Van gespecialiseerde tools voor bijvoorbeeld consolidatie of planning tot complete oplossingen die de meeste control processen beheersbaarder en efficiënter maken. Het probleem is alleen dat deze systemen sterk van elkaar verschillen in functionaliteit, complexiteit en geschiktheid voor specifieke organisaties.</p>
11943<p>In dit artikel vergelijken we objectief de belangrijkste soorten software voor financial en business control. Het doel is om controllers en finance managers inzicht te geven in welke oplossingen er zijn, waar de verschillen zitten en welk type systeem het beste past bij hun organisatie, zonder marketingclaims of voorkeur voor specifieke leveranciers.</p>
11944<p class="author">Geschreven door Jaap van der Ende, op basis van eigen onderzoek, gebruikersinterviews en het testen van de besproken softwareoplossingen. Laatst bijgewerkt: februari 2026.</p>
11945<div class="summary-box"><strong>In het kort</strong><p>Voor het grotere MKB met meerdere entiteiten en een dedicated controller is Smartbooks de meest complete oplossing voor alle financial en business control processen — van maandafsluiting tot AI-ondersteunde analyse. Lucanet is de sterkste keuze voor complexe, enterprise-achtige consolidatievraagstukken. Zoek je een alternatief voor Lucanet, dan komt Smartbooks in het MKB het dichtst in de buurt: de consolidatie is even sterk, en maandafsluiting, budgettering en planning zitten in hetzelfde systeem. Visionplanner en Speedbooks zijn aanzienlijk goedkoper en passen beter bij kleinere organisaties met eenvoudigere behoeften. Bright Analytics combineert BI met financiële rapportage en consolidatie, maar heeft minder diepgang in planning en procesondersteuning. Power BI is geen financial control software, maar een waardevolle aanvulling om grote hoeveelheden data te combineren en analyseren.</p></div>
11946
11947<h2>Hoe deze vergelijking tot stand is gekomen</h2>
11948<p>Deze vergelijking is tot stand gekomen op basis van een combinatie van desk research, interviews met gebruikers van de verschillende systemen en het zelf testen van de verschillende softwareoplossingen. Het doel daarbij was niet om één beste systeem aan te wijzen, maar om op een objectieve en reproduceerbare manier inzicht te geven in de verschillen tussen oplossingen.</p>
11949<p>Voor de analyse is gebruikgemaakt van verschillende typen bronnen, waaronder:</p>
11950<ul>
11951<li>gesprekken en interviews met gebruikers van de verschillende systemen,</li>
11952<li>het zelf testen van verschillende software systemen,</li>
11953<li>openbare productdocumentatie en websites van softwareleveranciers,</li>
11954<li>beschikbare demo’s, whitepapers en functionele beschrijvingen,</li>
11955<li>marktkennis en ervaringen uit implementaties en vergelijkbare trajecten,</li>
11956<li>veelgestelde vragen en discussies vanuit finance teams en business controllers.</li>
11957<li>en het verwerken van feedback uit de markt.</li>
11958</ul>
11959<p>De systemen zijn beoordeeld aan de hand van vooraf vastgestelde criteria, zoals positionering, doelgroep, functionele dekking, integraties, gebruiksgemak, implementatiebelasting en kostenstructuur. Deze criteria zijn consequent toegepast om onderlinge vergelijking mogelijk te maken.</p>
11960<p>Door deze combinatie van bronnen en invalshoeken is de vergelijking gebaseerd op hoe software in de praktijk wordt gebruikt, niet alleen op hoe deze wordt gepresenteerd. Waar aannames zijn gedaan of informatie beperkt beschikbaar was, is dit zo transparant mogelijk meegenomen in de beoordeling.</p>
11961<p class="interview-block">Voor elk van de besproken softwareoplossingen zijn gebruikers geïnterviewd over hun dagelijkse praktijkervaringen, met uitzondering van Finstack (zie de betreffende sectie). De interviewresultaten zijn verwerkt in de beschrijvingen per aanbieder en vormen een belangrijke onderbouwing van de conclusies in dit artikel. We hebben alle gebruikers ook om een NPS (Net Promoter Score) gevraagd, op een schaal van 0 tot 10.</p>
11962<h2>Voor wie is deze vergelijking bedoeld?</h2>
11963<p>Deze vergelijking is bedoeld voor organisaties met een finance team dat niet enkel de financiële administratie doet, maar ook verantwoordelijk is voor analyse, rapportage en sturing. Met name binnen het grotere MKB en snelgroeiende organisaties ontstaat op een bepaald moment de behoefte aan professionelere ondersteuning van financial en business control.</p>
11964<p class="list-label"><strong>Concreet is dit artikel relevant voor:</strong></p>
11965<ul>
11966<li>Financial controllers die verantwoordelijk zijn voor het consolideren en een betrouwbare en effectieve maandafsluiting.</li>
11967<li>Business controllers die verantwoordelijk zijn voor budgettering, analyses en managementrapportages.</li>
11968<li>Finance managers die zoeken naar betere systeem en AI ondersteuning voor hun team.</li>
11969<li>CFO’s in middelgrote organisaties die willen overstappen van kwetsbare Excel-gedreven processen naar een professioneel en gespecialiseerd finance systeem</li>
11970</ul>
11971<p>De vergelijking richt zich nadrukkelijk niet op zware enterprise systemen die vooral geschikt zijn voor multinationals met grote IT-afdelingen. De focus ligt op software die past bij organisaties met een professioneel finance team, meerdere entiteiten en/of complexere rapportagebehoeften. Maar die een oplossing zoeken die betaalbaar en beheersbaar is in implementatie en gebruik.</p>
11972<p>Als je organisatie vooral op zoek is naar boekhoudsoftware of een ERP-systeem, dan vallen deze oplossingen buiten de scope van dit artikel. Hier kijken we specifiek naar software die controllers helpt om meer grip te krijgen op cijfers, betere analyses te maken en het management tijdig en betrouwbaar te ondersteunen.</p>
11973<h2>
11973Wat is financial en business control software?</h2>
11974<p>Financial en business control software is software die finance teams ondersteunt bij het voorspellen, structureren, analyseren en presenteren van financiële cijfers, operationele KPI’s en inzichten. In tegenstelling tot boekhoudsoftware, die zich richt op het vastleggen van transacties, helpt control software bij het interpreteren van cijfers en het vertalen daarvan naar inzicht en besluitvorming.</p>
11975<p class="list-label"><strong>Deze systemen worden gebruikt voor onder andere:</strong></p>
11976<ul>
11977<li>consolidatie van financiële gegevens uit meerdere entiteiten,</li>
11978<li>controleren van de cijfers en begeleiden van de maandafsluiting</li>
11979<li>slimme en gestructureerde budgettering en forecasting,</li>
11980<li>trendanalyses en variantieanalyses, inclusief verklaringen,</li>
11981<li>het opstellen van managementrapportages, dashboards en presentaties.</li>
11982</ul>
11983<p>Een belangrijk kenmerk van control software is dat het werkt bovenop bestaande bronsystemen, zoals boekhoudpakketten of ERP-systemen. De software verzamelt, structureert en verrijkt financiële data, zodat controllers met consistente en betrouwbare cijfers kunnen werken.</p>
11984<p>Binnen finance worden control systemen vaak ook aangeduid als FP&amp;A software. In de praktijk is FP&amp;A echter slechts een onderdeel van financial en business control. FP&amp;A richt zich primair op planning, forecasting en het vergelijken van actuals met budgetten. Control systemen gaan verder en ondersteunen daarnaast ook processen zoals de maandafsluiting, consolidatie van meerdere entiteiten, bredere financiële en operationele analyses, managementrapportages en presentaties. Bovendien helpen zij business controllers bij het beantwoorden van ad-hoc vragen over financiële cijfers en business KPI’s, waarmee zij hun rol als financieel sparringpartner van het management invullen.</p>
11985<h2>Welke problemen lost financial en business control software op?</h2>
11986<p>Veel finance teams werken nog grotendeels met spreadsheets om cijfers te consolideren, analyses te maken en rapportages op te stellen. Hoewel dit in het begin vaak voldoende is, ontstaan er bij groei snel structurele problemen.</p>
11987<p class="list-label"><strong>Veelvoorkomende uitdagingen zijn:</strong></p>
11988<ul>
11989<li>handmatige consolidaties die foutgevoelig en tijdrovend zijn,</li>
11990<li>verschillende versies van dezelfde rapportage,</li>
11991<li>beperkte transparantie in aannames en berekeningen,</li>
11992<li>afhankelijkheid van de Excel eigenaar,</li>
11993<li>lange doorlooptijden tijdens de maandafsluiting.</li>
11994</ul>
11995<p>Daarnaast maken spreadsheets het lastig om vooruit te kijken. Scenario-analyses, forecasts en budgetten zijn moeilijk schaalbaar en vereisen vaak veel handmatig werk. Dit beperkt de tijd die business controllers kunnen besteden aan analyse en inhoudelijke ondersteuning van het management.</p>
11996<p>Control software pakt deze problemen aan door processen te begeleiden en deels te automatiseren. Dat zorgt voor meer consistentie, betere controle over cijfers en ruimte voor de controller om zich te richten op waarde toevoegende analyses in plaats van operationeel handwerk.</p>
11997<h2>Wat is het verschil tussen control software, BI-tools en ERP?</h2>
11998<p>Bij het zoeken naar software voor financiële sturing ontstaat vaak verwarring tussen control software, BI-tools en ERP-systemen. Hoewel deze oplossingen elkaar deels overlappen, vervullen ze fundamenteel verschillende rollen binnen de finance functie.</p>
11999<p>ERP-systemen zijn primair gericht op het vastleggen en verwerken van transacties. Ze vormen de operationele ruggengraat van de organisatie en zijn sterk in standaardprocessen zoals boekhouding, inkoop en verkoop. Voor analyse en rapportage zijn ERP-systemen vaak beperkt of sterk afhankelijk van maatwerk.</p>
12000<p>BI-tools richten zich op dataverzameling, datavisualisatie en analyse. Ze zijn krachtig in het combineren van verschillende databronnen en het maken van dashboards. BI-tools bieden geen praktische ondersteuning voor financial of business control processen. Zoals bijvoorbeeld de maandafsluiting, consolidatie, budget modellen, scenario’s en audit trails. Hierdoor zijn ze niet geschikt als operationeel systeem voor financial en business control.</p>
12001<p>
12001Control software is het operationele systeem voor de financial en business controller. Net zoals marketing en sales bijvoorbeeld systemen zoals Hubspot nodig hebben en klantenserviceteams bijvoorbeeld Zendesk. Control systemen zijn specifiek ontworpen voor finance teams en ondersteunt processen zoals consolidatie, planning, forecasting en managementrapportage.</p>
12002<p>In de praktijk worden deze systemen vaak gecombineerd. ERP als bron, control systeem voor de finance processen en BI-tools om data uit alle systemen te combineren en overkoepelende analyses te doen. Of je alle drie de systemen nodig hebt hangt af van de complexiteit van de organisatie en de rol die finance daarin vervult.</p>
12003<h2>Welke categorieën financial en business control software zijn er?</h2>
12004<p>Een volwaardig EPM-systeem ondersteunt alle kernprocessen van financial en business control: maandafsluiting, consolidatie, planning, analyse, rapportage en presentatie. In de praktijk hebben maar weinig MKB-organisaties zo'n compleet systeem ingericht.</p>
12005<p>De meest voorkomende situatie is dat Excel centraal staat, soms aangevuld met één of meer gespecialiseerde tools — voor BI, rapportage, consolidatie of planning. De controller brengt alles handmatig bij elkaar. Dat werkt tot op een bepaald punt, maar het is foutgevoelig, tijdrovend en niet toekomstbestendig. Zeker voor organisaties die serieus gebruik willen maken van AI, geldt: zonder een gestructureerde en betrouwbare informatiebasis levert AI weinig op.</p>
12006<p>Het softwarelandschap voor financial en business control weerspiegelt deze gefragmenteerde praktijk. Er bestaan verschillende typen oplossingen, elk met een eigen focus. Het is belangrijk om deze verschillen te begrijpen voordat aanbieders met elkaar worden vergeleken.</p>
12007<p class="list-label"><strong>De meest voorkomende categorieën zijn:</strong></p>
12008<p>Brede financial en business control systemen (volledig EPM-systeem) Dit zijn de enige oplossingen die alle kernprocessen van financial en business control in één platform samenbrengen: maandafsluiting, consolidatie, planning, analyse, rapportage en presentatie. Ze zijn specifiek ontwikkeld voor controllers en bieden veel finance-specifieke functionaliteit. Geschikt voor grotere MKB-organisaties en scale-ups met een dedicated finance team dat wil professionaliseren zonder afhankelijk te blijven van Excel en losse tools.</p>
12009<p>Planning en forecasting software (FP&amp;A) Deze tools richten zich vooral op budgettering, forecasting, scenario's en variantieanalyses. Geschikt voor organisaties waar vooruitkijken belangrijker is dan historische rapportage, en waar geen behoefte is aan betere beheersing van de andere control activiteiten. Denk aan snelgroeiende start-ups met een sterke planningsbehoefte maar nog beperkte consolidatie- of rapportagecomplexiteit.</p>
12010<p><a href="/consolidatie-software">Consolidatiesoftware</a> Deze oplossingen zijn sterk in het samenvoegen van cijfers uit meerdere entiteiten en het toepassen van consolidatieregels. Ze worden vaak ingezet in grote of complexe organisaties die specifiek behoefte hebben aan robuuste groepsrapportage en governance, en zich een gespecialiseerd systeem kunnen veroorloven.</p>
12011<p>BI-gedreven finance-oplossingen Dit zijn BI-tools die zijn uitgebreid met financiële modellen en templates. Ze bieden flexibiliteit in visualisatie en data-analyse, maar vereisen meer inrichting en doorlopend onderhoud door BI-consultants of de eigen IT-afdeling. Met name interessant voor bedrijven waar de business control eenvoudig is en waar primair op operationele cijfers wordt gestuurd — zoals in veel projectorganisaties.</p>
12012<p>ERP-modules voor financial en business control Sommige ERP-systemen bieden uitbreidingen voor planning en rapportage. Logisch als alles binnen één systeem moet blijven, maar ze bieden minder flexibiliteit en minder diepgaande control-ondersteuning dan gespecialiseerde tools. Met name interessant voor kleinere bedrijven waarbij de consolidatie eenvoudig is en niet actief op budgetten wordt gestuurd.</p>
12013<p>Welke categorie het beste past, hangt af van de complexiteit van de organisatie, de volwassenheid van het finance team en de mate waarin processen gestandaardiseerd of flexibel moeten z
12013ijn.</p>
12014<h2>Welke criteria gebruik je om finance software objectief te vergelijken?</h2>
12015<p>Om software voor financial en business control objectief te vergelijken, is het belangrijk om verder te kijken dan losse functionaliteiten. Tools verschillen sterk in hun positionering, doelgroep en mate waarin ze aansluiten op de dagelijkse praktijk van controllers. Onderstaande criteria worden in dit artikel gebruikt om aanbieders op een consistente en transparante manier te beoordelen.</p>
12016<p class="section-detail"><strong>Positionering en focus van de tool</strong> Wat is het primaire doel van de software?</p>
12017<p class="section-detail"><strong>Doelgroep en organisatietype</strong> Voor welk type organisatie is de tool ontworpen?</p>
12018<p class="section-detail"><strong>Functionele dekking</strong> Consolidatie, maandafsluiting, planning, analyse, managementrapportage en aanvullende functionaliteiten.</p>
12019<p class="section-detail"><strong>Gebruiksgemak voor controllers</strong></p>
12020<p class="section-detail"><strong>Integraties met databronnen</strong> Boekhoudsystemen en andere databronnen.</p>
12021<p class="section-detail"><strong>Visualisatie en dashboards</strong></p>
12022<p class="section-detail"><strong>AI-integratie en ondersteuning</strong></p>
12023<p class="section-detail"><strong>Implementatie en beheerbelasting</strong></p>
12024<p class="section-detail"><strong>Kosten en prijsmodel</strong> Implementatiekosten, softwarekosten en beheerkosten.</p>
12025<h2>Vergelijking van populaire business control software</h2>
12026<p>Op basis van de objectieve criteria uit dit artikel vergelijken we in deze sectie een selectie van softwareoplossingen die in de Nederlandse MKB-markt veel worden gebruikt door finance teams. De focus ligt op tools die specifiek zijn ontworpen om processen zoals consolidatie, planning, analyse en managementrapportages te ondersteunen.</p>
12027<p>In deze vergelijking nemen we de volgende softwareoplossingen mee:</p>
12028<ul>
12029  <li>Lucanet</li>
12030  <li>Smartbooks</li>
12031  <li>Bright Analytics</li>
12032  <li>Finstack</li>
12033  <li>Visionplanner</li>
12034  <li>Speedbooks</li>
12035  <li>Power BI</li>
12036</ul>
12037<p>Deze selectie is gebaseerd op gebruik binnen Nederlandse organisaties, relevantie voor de rol van de controller en zichtbaarheid binnen finance-communities.</p>
12038<p>Elke oplossing wordt volgens dezelfde structuur beschreven zodat verschillen goed zichtbaar worden. Daarbij kijken we nadrukkelijk naar hoe de software in de praktijk aansluit op de werkzaamheden van controllers, in termen van functionaliteit, doelgroep, integraties, implementatie en kosten.</p>
12039<div class="table-wrapper"><style>
12040.vergelijking-tabel {
12041    width: 100%;
12042    border-collapse: collapse;
12043    font-family: Arial, sans-serif;
12044    font-size: 13px;
12045}
12046.vergelijking-tabel th {
12047    background-color: #1B3A6B;
12048    color: #ffffff;
12049    font-weight: bold;
12050    text-align: center;
12051    padding: 10px 8px;
12052    border: 1px solid #C8CDD4;
12053}
12054.vergelijking-tabel th:first-child {
12055    text-align: left;
12056}
12057.vergelijking-tabel td {
12058    padding: 8px;
12059    border: 1px solid #C8CDD4;
12060    vertical-align: middle;
12061    color: #1A1A2E;
12062}
12063.vergelijking-tabel td:first-child {
12064    font-weight: bold;
12065    color: #1B3A6B;
12066    background-color: #ffffff;
12067    text-align: left;
12068}
12069.vergelijking-tabel td:not(:first-child) {
12070    text-align: center;
12071    background-color: #ffffff;
12072}
12073.vergelijking-tabel tr.subrow td {
12074    background-color: #ECEEF1;
12075    font-weight: normal;
12076}
12077.vergelijking-tabel tr.subrow td:first-child {
12078    padding-left: 24px;
12079    font-weight: normal;
12080    color: #1A1A2E;
12081    background-color: #ECEEF1;
12082}
12083.vergelijking-tabel .footnote {
12084    font-size: 11px;
12085    color: #6C757D;
12086    font-style: italic;
12087    padding: 6px 8px;
12088    border: 1px solid #C8CDD4;
12089    background-color: #ffffff;
12090}
12091</style>
12092
12093<table class="vergelijking-tabel">
12094  <thead>
12095    <tr>
12096      <th>Criterium</th>
12097      <th>Lucanet</th>
12098      <th>Smartbooks</th>
12099      <th>Bright Analytics</th>
12100      <th>Finstack</th>
12101      <th>Visionplanner</th>
12102      <th>Speedbooks</th>
12103      <th>Power BI</th>
12104    </tr>
12105  </thead>
12106  <tbody>
12107    <tr>
12108      <td>1. Doelgroep</td>
12109      <td>Enterprise</td>
12110      <td>Groter MKB</td>
12111      <td>Groter MKB</td>
12112      <td>MKB</td>
12113      <td>Accountants & klein MKB</td>
12114      <td>Klein MKB</td>
12115      <td>Alle segmenten</td>
12116    </tr>
12117    <tr>
12118      <td>2. Positionering / focus</td>
12119      <td>Consolidatie & reporting</td>
12120      <td>Consolidatie, planning &amp; rapportage (EPM)</td>
12121      <td>Reporting & consolidatie</td>
12122      <td>Business control light</td>
12123      <td>Rapportage & jaarrekening</td>
12124      <td>Rapportage & analyse</td>
12125      <td>BI & visualisatie</td>
12126    </tr>
12127    <tr>
12128      <td>3. Functionele dekking</td>
12129      <td>Beperkt</td>
12130      <td>Zeer sterk</td>
12131      <td>Sterk</td>
12132      <td>Redelijk</td>
12133      <td>Beperkt</td>
12134      <td>Beperkt</td>
12135      <td>Niet aanwezig</td>
12136    </tr>
12137    <tr class="subrow">
12138      <td>Consolidatie</td>
12139      <td>Zeer sterk</td>
12140      <td>Zeer sterk</td>
12141      <td>Sterk</td>
12142      <td>Sterk</td>
12143      <td>Beperkt</td>
12144      <td>Beperkt</td>
12145      <td>Niet aanwezig</td>
12146    </tr>
12147    <tr class="subrow">
12148      <td>Maandafsluiting</td>
12149      <td>Beperkt</td>
12150      <td>Zeer sterk</td>
12151      <td>Beperkt</td>
12152      <td>Niet aanwezig</td>
12153      <td>Beperkt</td>
12154      <td>Niet aanwezig</td>
12155      <td>Niet aanwezig</td>
12156    </tr>
12157    <tr class="subrow">
12158      <td>Planning</td>
12159      <td>Beperkt</td>
12160      <td>Zeer sterk</td>
12161      <td>Beperkt</td>
12162      <td>Redelijk</td>
12163      <td>Redelijk</td>
12164      <td>Beperkt</td>
12165      <td>Niet aanwezig</td>
12166    </tr>
12167    <tr class="subrow">
12168      <td>Analyse</td>
12169      <td>Beperkt</td>
12170      <td>Sterk</td>
12171      <td>Redelijk</td>
12172      <td>Redelijk</td>
12173      <td>Redelijk</td>
12174      <td>Beperkt</td>
12175      <td>Sterk</td>
12176    </tr>
12177    <tr class="subrow">
12178      <td>Managementrapportage</td>
12179      <td>Redelijk</td>
12180      <td>Zeer sterk</td>
12181      <td>Sterk</td>
12182      <td>Redelijk</td>
12183      <td>Redelijk</td>
12184      <td>Redelijk</td>
12185      <td>Sterk</td>
12186    </tr>
12187    <tr class="subrow">
12188      <td>Extra functionaliteiten</td>
12189      <td>Governance, audit</td>
12190      <td>Workflows, AI</td>
12191      <td>Templates</td>
12192      <td>In-app samenwerking</td>
12193      <td>Jaarrekening</td>
12194      <td>Jaarrekening</td>
12195      <td>AI, visualisatie</td>
12196    </tr>
12197    <tr>
12198      <td>4. Gebruiksgemak</td>
12199      <td>Laag-middel</td>
12200      <td>Hoog</td>
12201      <td>Hoog</td>
12202      <td>Gemiddeld</td>
12203      <td>Hoog</td>
12204      <td>Gemiddeld</td>
12205      <td>Laag-middel</td>
12206    </tr>
12207    <tr>
12208      <td>5. Integraties</td>
12209      <td>Breed</td>
12210      <td>Breed</td>
12211      <td>Breed</td>
12212      <td>Redelijk</td>
12213      <td>Breed</td>
12214      <td>Breed</td>
12215      <td>Breed</td>
12216    </tr>
12217    <tr>
12218      <td>6. Visualisatie</td>
12219      <td>Beperkt</td>
12220      <td>Sterk</td>
12221      <td>Sterk</td>
12222      <td>Beperkt</td>
12223      <td>Beperkt</td>
12224      <td>Beperkt</td>
12225      <td>Sterk</td>
12226    </tr>
12227    <tr>
12228      <td>7. AI-ondersteuning</td>
12229      <td>Beperkt</td>
12230      <td>Sterk</td>
12231      <td>Beperkt</td>
12232      <td>Niet aanwezig</td>
12233      <td>Beperkt</td>
12234      <td>Beperkt</td>
12235      <td>Beperkt</td>
12236    </tr>
12237    <tr>
12238      <td>8. Implementatie & beheerbelasting</td>
12239      <td>Hoog</td>
12240      <td>Laag</td>
12241      <td>
12241Middel</td>
12242      <td>Middel</td>
12243      <td>Laag</td>
12244      <td>Laag</td>
12245      <td>Hoog</td>
12246    </tr>
12247    <tr>
12248      <td>9. Kosten</td>
12249      <td>Hoog</td>
12250      <td>Laag</td>
12251      <td>Middel</td>
12252      <td>Laag</td>
12253      <td>Laag</td>
12254      <td>Laag</td>
12255      <td>Middel</td>
12256    </tr>
12257    <tr class="subrow">
12258      <td>Implementatiekosten</td>
12259      <td>Hoog</td>
12260      <td>Laag</td>
12261      <td>Middel</td>
12262      <td>Laag</td>
12263      <td>Laag</td>
12264      <td>Laag</td>
12265      <td>Middel</td>
12266    </tr>
12267    <tr class="subrow">
12268      <td>Softwarekosten (MRR)</td>
12269      <td>Hoog</td>
12270      <td>Middel</td>
12271      <td>Middel</td>
12272      <td>Middel</td>
12273      <td>Laag</td>
12274      <td>Laag</td>
12275      <td>Laag</td>
12276    </tr>
12277    <tr class="subrow">
12278      <td>Beheerkosten</td>
12279      <td>Hoog</td>
12280      <td>Laag</td>
12281      <td>Middel</td>
12282      <td>Laag</td>
12283      <td>Laag</td>
12284      <td>Laag</td>
12285      <td>Middel</td>
12286    </tr>
12287    <tr>
12288      <td>10. Gebruikersscore (NPS)*</td>
12289      <td>7,5 / 10</td>
12290      <td>8 / 10</td>
12291      <td>6,5 / 10</td>
12292      <td>&ndash;</td>
12293      <td>7 / 10</td>
12294      <td>7 / 10</td>
12295      <td>7 / 10</td>
12296    </tr>
12297  </tbody>
12298  <tfoot>
12299    <tr>
12300      <td colspan="8" class="footnote">* NPS-scores zijn gebaseerd op een beperkt aantal interviews per systeem.</td>
12301    </tr>
12302  </tfoot>
12303</table></div>
12304
12305<h3>Lucanet - formele consolidatie en governance</h3>
12306<p class="section-detail"><strong>Positionering en focus</strong> Lucanet is sterk gericht op formele consolidatie, governance en compliance. De software wordt veel gebruikt in organisaties met complexe structuren, meerdere entiteiten en hoge eisen aan auditability.</p>
12307<p class="list-label"><strong>Beste keuze als</strong></p>
12308<ul>
12309<li>consolidatie en compliance centraal staan,</li>
12310<li>je werkt met complexe juridische structuren,</li>
12311<li>audit trails en governance cruciaal zijn.</li>
12312</ul>
12313<p class="list-label"><strong>Minder geschikt als</strong></p>
12314<ul>
12315<li>je een lichte, snel implementeerbare oplossing zoekt,</li>
12316<li>je bredere ondersteuning zoekt voor financial en business control processen.</li>
12317</ul>
12318<p class="list-label"><strong>Sterke punten</strong></p>
12319<ul>
12320<li>zeer sterke consolidatiefunctionaliteit,</li>
12321<li>uitgebreide audit- en governance mogelijkheden,</li>
12322<li>geschikt voor internationale structuren.</li>
12323</ul>
12324<p class="list-label"><strong>Beperkingen en aandachtspunten</strong></p>
12325<ul>
12326<li>relatief zware implementatie,</li>
12327<li>hogere beheer- en consultancykosten.</li>
12328</ul>
12329<p class="section-detail"><strong>Implementatie en beheer</strong> Implementatie vraagt vaak aanzienlijke tijd en externe ondersteuning. Beheer is intensiever dan bij MKB-oplossingen.</p>
12330<p class="section-detail"><strong>Integraties</strong> Integraties met boekhoudsystemen en ERP’s zijn goed, maar vereisen vaak configuratie.</p>
12331<p class="section-detail"><strong>Kosten en waarde</strong> Kosten liggen hoger dan bij MKB-oplossingen. De waarde zit in compliance, betrouwbaarheid en schaalbaarheid.</p>
12332<p class="section-detail"><strong>AI-ondersteuning</strong> AI-ondersteuning richt zich vooral op ondersteuning van consolidatie en analyse, afhankelijk van productontwikkeling.</p>
12333<p class="list-label"><strong>Ervaringen uit de praktijk</strong></p>
12334<p class="interview-block">Voor LucaNet hebben we twee interviews in dit artikel opgenomen omdat de ervaringen ver uit elkaar liggen.</p>
12335<p class="interview-block">Gebruiker 1 — Grote, complexe internationale organisatie, puur ingezet voor groepsconsolidatie waarbij alle dochtermaatschappijen zelf cijfers aanleveren in de groepsstructuur. De gebruiker was zelf niet verantwoordelijk voor de finance van de dochters. Score: 8,5/10.</p>
12336<blockquote class="interview-quote">&quot;Ik ben zelf echt groot fan van Lucanet. Voor consolideren is het gewoon een hele sterke tool.&quot;</blockquote>
12337<blockquote class="interview-quote">&quot;Daar maak je gewoon je consolidatieboekingen en die kun je maand op maand volgen.&quot;</blockquote>
12338<blockquote class="interview-quote">&quot;Voor een internationale organisatie is die multi currency echt heel fijn.&quot;</blockquote>
12339<p class="interview-block">Gebruiker 2 — Groter MKB, wilde Lucanet breder inzetten dan alleen consolidatie en was zelf verantwoordelijk voor zowel finance binnen de dochters als de groepsconsolidatie. Wilde cijfers van dochters direct consolideren zonder tussenstructuur. Score: 6/10.</p>
12340<blockquote class="interview-quote">&quot;Lucanet is eigenlijk een opgevoerde Excel.&quot;</blockquote>
12341<blockquote class="interview-quote">&quot;
12341IC verschillen vinden is een tijdrovende zoektocht.&quot;</blockquote>
12342<blockquote class="interview-quote">&quot;AI functionaliteiten nog niet gezien, echt smart kan ik het niet noemen.&quot;</blockquote>
12343<blockquote class="interview-quote">&quot;NPS 6, het is gewoon omslachtig in gebruik.&quot;</blockquote>
12344<p class="interview-block">Beide gebruikers bevestigen dat Lucanet sterk is in formele consolidatie en het naast elkaar ondersteunen van meerdere rapportagestandaarden (bijv. Dutch GAAP en IFRS). De gemiddelde consultancykosten bij de tweede gebruiker bedroegen circa €15.000 per jaar. Budgettering gebeurt bij beide gebruikers volledig via Excel.</p>
12345
12346<h3>Smartbooks – uitgebreid systeem voor financial en business control processen</h3>
12347<p class="section-detail"><strong>Positionering en focus</strong> Smartbooks is gepositioneerd als operationeel systeem voor de moderne financial en business controller. De software richt zich expliciet op het ondersteunen en deels automatiseren van terugkerende control processen, zoals maandafsluiting, analyse, variantieberekeningen, managementrapportages en managementpresentaties. De focus ligt niet op losse analyses, maar op het beheersbaar maken van de volledige control processen. Voor de rapportagekant beschrijft Smartbooks dit uitgebreider op de pagina over <a href="/rapportage-software">financiële rapportage software</a>.</p>
12348<p class="list-label"><strong>Beste keuze als</strong></p>
12349<ul>
12350<li>financial en business control duidelijke rollen zijn binnen finance,</li>
12351<li>de consolidatie en maandafsluiting veel tijd kost,</li>
12352<li>managementrapportages elke maand opnieuw veel handmatig werk vragen,</li>
12353<li>je minder afhankelijk wilt zijn van spreadsheets voor kernprocessen,</li>
12354<li>je zoekt naar een finance-specifiek systeem in plaats van een generieke BI-tool.</li>
12355</ul>
12356<p class="list-label"><strong>Minder geschikt als</strong></p>
12357<ul>
12358<li>je control eenvoudig is en geen tijd kost,</li>
12359<li>je primair een generieke BI-oplossing zoekt voor brede data-analyse,</li>
12360<li>control processen nog nauwelijks zijn ingericht,</li>
12361<li>je organisatie vooral behoefte heeft aan zware governance en enterprise consolidatie.</li>
12362</ul>
12363<p class="list-label"><strong>Sterke punten</strong></p>
12364<ul>
12365<li>duidelijke focus op de dagelijkse workflows van controllers,</li>
12366<li>ondersteuning van het volledige maandelijkse proces,</li>
12367<li>finance-specifieke logica en standaardisatie,</li>
12368<li>eenvoudige, goedkope en snelle implementatie,</li>
12369<li>geen afhankelijkheid van IT of externe specialisten.</li>
12370</ul>
12371<p class="list-label"><strong>Beperkingen en aandachtspunten</strong></p>
12372<ul>
12373<li>minder geschikt als centrale BI-laag voor alle niet-financiële data.</li>
12374</ul>
12375<p class="section-detail"><strong>Implementatie en beheer</strong> De implementatie is doorgaans binnen een week afgerond. Omdat dit zo makkelijk en efficiënt kan bieden ze een gratis proefperiode van 1 maand aan.</p>
12376<p class="section-detail"><strong>Integraties</strong> Primaire focus op integraties met boekhoudsystemen en financiële databronnen. Daarnaast kan ook gekoppeld worden met operationele systemen voor de integratie van belangrijke business KPI’s. Data kan daarnaast worden geëxporteerd naar Excel of met de beschikbare API’s naar andere systemen.</p>
12377<p class="section-detail"><strong>Kosten en waarde</strong> De softwarekosten liggen doorgaans hoger dan bij generieke tools maar de implementatie en beheerkosten liggen aanzienlijk lager. Dit komt doordat het een gespecialiseerd finance systeem is waarin veel finance processen al ingericht zijn. Met de automatisering van veel finance processen levert het ook meer toegevoegde aarden dan de goedkopere generieke tools.</p>
12378<p class="section-detail"><strong>AI-ondersteuning</strong> Uitgebreide AI-functionaliteiten ondersteunen de belangrijkste financial en business control processen. Bijvoorbeeld controle van de boekingen, intercompany reconciliatie, variantieanalyses, variantieverklaringen en het opstellen van de managementpresentatie.</p>
12379<p>Binnen Smartbooks is dit uitgewerkt in de vorm van Alex, een virtuele AI business controller. Alex ondersteunt bij terugkerende taken zoals het opstellen van variantieverklaringen, het signaleren van afwijkingen in boekingen en het genereren van een managementpresentatie op basis van een vast template. Naar de toekomst toe wordt dit uitgebreid met een “ask me anything finance”-functionaliteit, waarbij de CFO of controller via API- of MCP-toegang direct complexe vragen kan stellen aan het volledige financiële datamodel — van investeringsanalyses tot gedetailleerde prognoses — en binnen seconden een onderbouwd antwoord ontvangt.</p>
12380<p class="list-label"><strong>Ervaringen uit de praktijk</strong></p>
12381<p class="interview-block">Een Group Business Controller bij een internationaal dienstverlenend bedrijf (±220 medewerkers, 7 entiteiten) gebruikt Smartbooks al
12381s centraal platform voor alle business control processen: consolidatie, budgettering, maandafsluiting, analyse en managementrapportage. De gebruiker geeft Smartbooks een score van 8/10.</p>
12382<blockquote class="interview-quote">&quot;Smartbooks heeft onze Excel-architectuur vervangen door een professioneel systeem.&quot;</blockquote>
12383<blockquote class="interview-quote">&quot;Wij zijn van brandjes blussen naar vooruitkijken gegaan.&quot;</blockquote>
12384<blockquote class="interview-quote">&quot;Voor het eerst hebben we één waarheid in finance.&quot;</blockquote>
12385<blockquote class="interview-quote">&quot;AI werkt hier omdat de basis klopt.&quot;</blockquote>
12386<p class="interview-block">In aanvulling op dit interview bevestigen praktijkcases dat Smartbooks snel in gebruik te nemen is: bij Primus Wafer Paper bedroeg de tijdsinvestering voor implementatie 10 uur en werd de maandafsluiting met 5 dagen verkort. Bij Glomar Group ging de doorlooptijd van managementrapportages van 4-5 dagen naar 2 uur per maand.</p>
12387<h3>Bright Analytics – BI-tool met consolidatie en rapportage</h3>
12388<p class="section-detail"><strong>Positionering en focus</strong> Bright Analytics is een op finance gerichte BI-tool met financiële consolidatie en gestructureerde rapportages. De software wordt vaak ingezet als rapportage- en consolidatielaag boven bestaande boekhoudsystemen.</p>
12389<p class="list-label"><strong>Beste keuze als</strong></p>
12390<ul>
12391<li>je verschillende databronnen wilt combineren,</li>
12392<li>je meerdere entiteiten wilt consolideren,</li>
12393<li>de nadruk ligt op financiële rapportage en groepsoverzichten,</li>
12394<li>je relatief snel wilt rapporteren zonder zware BI-inrichting.</li>
12395</ul>
12396<p class="list-label"><strong>Minder geschikt als</strong></p>
12397<ul>
12398<li>planning en forecasting een kernonderdeel vormen van business control,</li>
12399<li>ondersteuning wilt voor meer financial en business control processen,</li>
12400<li>je uitgebreide scenario-analyses en flexibiliteit in datamodellen nodig hebt.</li>
12401</ul>
12402<p class="list-label"><strong>Sterke punten</strong></p>
12403<ul>
12404<li>sterke consolidatiefunctionaliteit,</li>
12405<li>gestructureerde financiële rapportages,</li>
12406<li>duidelijke aansluiting op boekhouddata.</li>
12407</ul>
12408<p class="list-label"><strong>Beperkingen en aandachtspunten</strong></p>
12409<ul>
12410<li>minder focus op planning en forecasting,</li>
12411<li>integratie met niet-financiële databronnen is beperkter dan bij echte BI-tools.</li>
12412</ul>
12413<p class="section-detail"><strong>Implementatie en beheer</strong> De implementatie is wat zwaarder dan bij andere gespecialiseerde finance systemen, maar eenvoudiger dan voor generieke oplossingen zoals PowerBI waar vaak meer implementatie consultancy bij komt kijken. Na de implementatie is het meestal goed beheersbaar voor finance teams, afhankelijk van de complexiteit van de consolidatiestructuur en het aantal bronsystemen.</p>
12414<p class="section-detail"><strong>Integraties</strong> Primair gericht op boekhoudsystemen en financiële databronnen. Secondair kunnen ook andere operationele databronnen worden aangesloten.</p>
12415<p class="section-detail"><strong>Kosten en waarde</strong> Kosten en implementatie-inspanning passen doorgaans bij het grotere MKB. De waarde zit vooral in betrouwbare consolidatie en rapportagesnelheid.</p>
12416<p class="section-detail"><strong>AI-ondersteuning</strong> Op dit moment heeft het een aantal slimme functionaliteiten die waarschijnlijk gebruik maken van AI-ondersteuning. Zo is er anomaliedetectie, automatische inzichten en samenvattingenen en Automatische intercompany matching.</p>
12417<p class="list-label"><strong>Ervaringen uit de praktijk</strong></p>
12418<p class="interview-block">Een controller bij een grotere organisatie beoordeelt Bright Analytics met een score van 5/10 totaal en 8/10 specifiek voor visualisatie. De gebruiker omschrijft de tool als sterk in dashboards en visuele rapportage, maar fundamenteel beperkt voor controllers die ook consolidatie en procesondersteuning nodig hebben.</p>
12419<blockquote class="interview-quote">&quot;Het is gewoon Power BI voor mensen die geen Power BI kunnen.&quot;</blockquote>
12420<blockquote class="interview-quote">&quot;In Bright Analytics kan je geen boekingen maken. Bright Analytics is gewoon puur een visual.&quot;</blockquote>
12421<blockquote class="interview-quote">&quot;
12421Die visuals zijn echt top. Even snel een andere doorsnede maken, dat gaat in Bright veel makkelijker dan in Power BI.&quot;</blockquote>
12422<blockquote class="interview-quote">&quot;Wat ik echt miste, is dat je nergens notities kwijt kunt. Als je een afwijking ziet, kun je dat niet goed vastleggen voor later.&quot;</blockquote>
12423<p class="interview-block">Over de kostenstructuur: de instapprijs is laag, maar aanvullende modules en implementaties lopen snel op. De gebruiker noemt als concreet voorbeeld dat bij het koppelen van 17 entiteiten met een identieke grootboekstructuur per entiteit afzonderlijk implementatiekosten in rekening werden gebracht. Totaaloordeel: &quot;Voor wat ze beloven is die 5 eigenlijk nog te hoog.&quot;</p>
12424<h3>Finstack - basis business control voor het MKB</h3>
12425<p class="section-detail"><strong>Positionering en focus</strong> Finstack ondersteunt basis business control processen en richt zich op het MKB dat behoefte heeft aan meer inzicht en structuur dan spreadsheets bieden, zonder zware tooling.</p>
12426<p class="list-label"><strong>Beste keuze als</strong></p>
12427<ul>
12428<li>je financial control wilt professionaliseren vanuit Excel,</li>
12429<li>je behoefte hebt aan standaard rapportages en analyses,</li>
12430<li>je organisatie nog beperkte complexiteit heeft.</li>
12431</ul>
12432<p class="list-label"><strong>Minder geschikt als</strong></p>
12433<ul>
12434<li>je uitgebreide consolidatie- of planningsprocessen nodig hebt,</li>
12435<li>je veel flexibiliteit in datamodellen vereist.</li>
12436</ul>
12437<p class="list-label"><strong>Sterke punten</strong></p>
12438<ul>
12439<li>pragmatische ondersteuning van financial en business control,</li>
12440<li>overzichtelijke inrichting.</li>
12441</ul>
12442<p class="list-label"><strong>Beperkingen en aandachtspunten</strong></p>
12443<ul>
12444<li>beperkte schaalbaarheid bij sterke groei,</li>
12445<li>minder ondersteuning voor geavanceerde scenario-analyses.</li>
12446</ul>
12447<p class="section-detail"><strong>Implementatie en beheer</strong> De implementatie is doorgaans eenvoudig en beheersbaar.</p>
12448<p class="section-detail"><strong>Integraties</strong> Integraties zijn vooral gericht op boekhoudsystemen.</p>
12449<p class="section-detail"><strong>Kosten en waarde</strong> Kosten passen bij het MKB. De waarde zit in structuur en basisinzicht.</p>
12450<p class="section-detail"><strong>AI-ondersteuning</strong> Op het moment van deze vergelijking waren er geen AI-functionaliteit.</p>
12451<p class="list-label"><strong>Ervaringen uit de praktijk</strong></p>
12452<p class="interview-block">Voor Finstack zijn geen gebruikers gevonden voor interviews. De beschrijving van Finstack in dit artikel is gebaseerd op desk research en openbare productinformatie. Ervaringen van gebruikers zijn daarom niet meegenomen in de beoordeling van deze aanbieder.</p>
12453<h3>Visionplanner - rapportage en aansluiting met accountant</h3>
12454<p class="section-detail"><strong>Positionering en focus</strong> Visionplanner is primair gericht op financiële rapportages en inzicht, vaak in nauwe samenwerking met accountants. De software wordt veel gebruikt voor periodieke rapportages, jaarrekeningvoorbereiding en het presenteren van financiële resultaten aan de DGA en het management team.</p>
12455<p class="list-label"><strong>Beste keuze als</strong></p>
12456<ul>
12457<li>de nadruk ligt op periodieke rapportages en financiële verantwoording,</li>
12458<li>samenwerking met de accountant een belangrijke rol speelt,</li>
12459<li>je behoefte hebt aan overzichtelijke rapportages zonder zware inrichting,</li>
12460<li>business control nog geen volwaardige rol is binnen finance.</li>
12461</ul>
12462<p class="list-label"><strong>Minder geschikt als</strong></p>
12463<ul>
12464<li>je uitgebreide planning- en forecastingprocessen wilt ondersteunen,</li>
12465<li>je complexe consolidatiestructuren hebt,</li>
12466<li>business control processen sterk geformaliseerd zijn.</li>
12467</ul>
12468<p class="list-label"><strong>Sterke punten</strong></p>
12469<ul>
12470<li>gebruiksvriendelijk voor rapportages,</li>
12471<li>sterke aansluiting op accountantspraktijk,</li>
12472<li>relatief lage implementatie- en beheerlast.</li>
12473</ul>
12474<p class="list-label"><strong>Beperkingen en aandachtspunten</strong></p>
12475<ul>
12476<li>beperkte ondersteuning voor control processen,</li>
12477<li>minder flexibiliteit in analyse en datamodellering.</li>
12478</ul>
12479<p class="section-detail"><strong>Implementatie en beheer</strong> Visionplanner is doorgaans snel te implementeren en vraagt weinig technisch beheer vanuit de organisatie.</p>
12480<p class="section-detail"><strong>Integraties</strong> Sterke focus op integraties met boekhoudsystemen en accountantssoftware.</p>
12481<p class="section-detail"><strong>Kosten en waarde</strong> Kosten zijn overzichtelijk en passen goed bij kleinere en middelgrote organisaties. De waarde zit vooral in eenvoud en betrouwbare rapportages.</p>
12482<p class="section-detail"><strong>AI-ondersteuning</strong> De AI-ondersteuning is met name gericht op de administratieve taken van de accountant (rechtsvorm advies, dossiers aanmaken, 
12482klantkaarten vullen, etc.). Daarnaast ondersteunt het ook bij de analyse van de financiële data.</p>
12483<p class="list-label"><strong>Ervaringen uit de praktijk</strong></p>
12484<p class="interview-block">Een DGA bij een bedrijf met 9 entiteiten (geen dedicated controller, administratie bij accountant) gebruikt Visionplanner als eenvoudige consolidatietool voor groepsinzicht. Training was noodzakelijk voor goed gebruik. Kosten: €175/maand voor 9 BV's. Score: 7/10.</p>
12485<blockquote class="interview-quote">&quot;Voor ons is Visionplanner een goedkope consolidatietool, die ons op groepsniveau laat zien of we in control zijn. Gedetailleerde analyses doen we in Excel.&quot;</blockquote>
12486<p class="interview-block">De gebruiker geeft aan dat budgettering niet actief wordt gebruikt, dat AI-functionaliteit in de kinderschoenen staat, en dat de synchronisatie 's nachts plaatsvindt wat als beperking wordt ervaren. Managementrapportages worden buiten de tool gemaakt omdat de opmaak niet aan de wensen voldoet.</p>
12487<h3>Speedbooks - snelle rapportage en inzicht</h3>
12488<p class="section-detail"><strong>Positionering en focus</strong> Speedbooks richt zich op het sneller en gestructureerd beschikbaar maken van financiële rapportages in Excel. In Speedbooks stel je de koppeling met databronnen en de data structuren in. Vervolgens worden de rapportages in Excel templates gegenereerd.</p>
12489<p class="list-label"><strong>Beste keuze als</strong></p>
12490<ul>
12491<li>je Excel wilt blijven gebruiken als analyse en rapportage omgeving,</li>
12492<li>het copy-pasten en data structureren wilt automatiseren,</li>
12493<li>je zelf de jaarrekening wilt opstellen voor de KvK,</li>
12494<li>je beperkte tijd en budget hebt voor inrichting en beheer.</li>
12495</ul>
12496<p class="list-label"><strong>Minder geschikt als</strong></p>
12497<ul>
12498<li>finance wilt professionaliseren zonder afhankelijkheid van Excel voor kernprocessen,</li>
12499<li>optimaal voorbereid wilt zijn op verdere automatisering met AI,</li>
12500<li>je uitgebreide financial en business control procesondersteuning wilt,</li>
12501<li>modelmatig wilt budgetteren en plannen.</li>
12502</ul>
12503<p class="list-label"><strong>Sterke punten</strong></p>
12504<ul>
12505<li>snelle time-to-value,</li>
12506<li>duidelijke rapportages,</li>
12507<li>lage instapdrempel.</li>
12508</ul>
12509<p class="list-label"><strong>Beperkingen en aandachtspunten</strong></p>
12510<ul>
12511<li>beperkte diepgang in analyse,</li>
12512<li>minder geschikt voor complexere organisatiestructuren.</li>
12513</ul>
12514<p class="section-detail"><strong>Implementatie en beheer</strong> Implementatie is doorgaans eenvoudig en snel. Beheerlast is beperkt.</p>
12515<p class="section-detail"><strong>Integraties</strong> Primair gericht op boekhoudsystemen.</p>
12516<p class="section-detail"><strong>Kosten en waarde</strong> Kosten zijn relatief laag. De waarde zit in snelheid en eenvoud, niet in procesoptimalisatie of professionalisering.</p>
12517<p class="section-detail"><strong>AI-ondersteuning</strong> Beperkte AI-ondersteuning, vooral gericht op het makkelijker specificeren van rapportages.</p>
12518<p class="list-label"><strong>Ervaringen uit de praktijk</strong></p>
12519<p class="interview-block">Een Financieel Administratief Medewerker bij een regionaal handelsbedrijf (±35 medewerkers, 2 BV's) gebruikt Speedbooks Online al drie jaar, uitsluitend voor gestructureerde data-export naar Excel. Alle analyses, rapportages en de jaarlijkse consolidatie gebeuren buiten de tool. Score: 7/10.</p>
12520<blockquote class="interview-quote">&quot;Wij gebruiken Speedbooks vooral om data naar Excel te halen.&quot;</blockquote>
12521<blockquote class="interview-quote">&quot;De echte verwerking doen we buiten het systeem.&quot;</blockquote>
12522<blockquote class="interview-quote">&quot;Het is handig, maar geen control-systeem.&quot;</blockquote>
12523<blockquote class="interview-quote">&quot;Voor onze grootte is het voldoende.&quot;</blockquote>
12524<p class="interview-block">De gebruiker geeft aan dat Speedbooks Online voor de schaal van de organisatie goed past, maar dat voor verdere professionalisering de tool te beperkt is.</p>
12525<h3>Power BI - generieke BI-tool voor analyse en visualisatie</h3>
12526<p class="section-detail"><strong>Positionering en focus</strong> Power BI is een generieke business intelligence tool die uitblinkt in het combineren, modelleren en visualiseren van data uit vrijwel alle denkbare databronnen. De kracht ligt in flexibiliteit en analysemogelijkheden, niet in finance-specifieke procesondersteuning.</p>
12527<p class="list-label"><strong>Beste keuze als</strong></p>
12528<ul>
12529<li>je veel verschillende databronnen wilt combineren,</li>
12530<li>je behoefte hebt aan flexibele analyses en dashboards,</li>
12531<li>je beschikt over interne BI-kennis of externe specialisten.</li>
12532</ul>
12533<p class="list-label"><strong>Minder geschikt als</strong></p>
12534<ul>
12535<li>je finance-specifieke processen zoals maandafsluiting, planning of consolidatie wilt optimaliseren,</li>
12536<li>je beperkte IT capaciteit hebt voor datamodellering en beheer.</li>
12537</ul>
12538<p class="list-label"><strong>Sterke punten</strong></p>
12539<ul>
12540<li>zeer brede integratiemogelijkheden,</li>
12541<li>krachtige visualisatie en analysemogelijkheden,</li>
12542<li>flexibel inzetbaar voor uiteenlopende use cases.</li>
12543</ul>
12544<p class="list-label"><strong>Beperkingen en aandachtspunten</strong></p>
12545<ul>
12546<li>geen standaard finance-logica of finance control workflows,</li>
12547<li>hogere implementatie- en beheerlast bij gebruik als centrale rapportage-oplossing.</li>
12548</ul>
12549<p class="section-detail"><strong>Implementatie en beheer</strong> Power BI vraagt vaak aanzienlijke inrichting en doorlopend beheer, vooral wanneer het als primaire rapportagelaag voor finance wordt ingezet.</p>
12550<p class="section-detail"><strong>Integraties</strong> Zeer breed, van boekhoudsystemen tot operationele en externe databronnen.</p>
12551<p class="section-detail"><strong>Kosten en waarde</strong> De licentiekosten zijn relatief laag, maar de total cost of ownership wordt vaak bepaald door complexe implementatie, datamodellering en onderhoud. De waarde zit vooral in flexibiliteit en datacombinatie.</p>
12552<p class="section-detail"><strong>AI-ondersteuning</strong> Net als de tool zelf is de AI-ondersteuning generiek en gericht op het sneller bouwen, analyseren en bevragen van datasets en dashboards. De AI helpt niet bij de optimalisatie van financial en business control processen.</p>
12553<p class="list-label"><strong>Ervaringen uit de praktijk</strong></p>
12554<p class="interview-block">Een Financial Controller bij een middelgroot internationaal handelsbedrijf (±180 medewerkers, 6 BV's) gebruikt Power BI al vier jaar voor analyse en rapportage. Consolidatie, budgettering en maandafsluiting worden volledig buiten Power BI gedaan. Score: 7/10.</p>
12555<blockquote class="interview-quote">&quot;PowerBI is een analyseplatform, geen finance-oplossing.&quot;</blockquote>
12556<blockquote class="interview-quote">&quot;Budgetteren en consolideren doen wij volledig buiten PowerBI.&quot;</blockquote>
12557<blockquote class="interview-quote">&quot;PowerBI helpt ons kijken, niet sturen.&quot;</blockquote>
12558<blockquote class="interview-quote">&quot;Zonder Excel en andere tools red je het niet.&quot;</blockquote>
12559<p class="interview-block">De gebruiker benadrukt dat Power BI technisch krachtig is, maar dat het framework voor financial control volledig ontbreekt. Voor consolidatie, budgettering en maandafsluiting zijn altijd aanvullende tools nodig. De AI-functies worden nauwelijks ingezet voor control-werk.</p>
12560<h3>Welk type software past bij jouw organisatie?</h3>
12561<p>Op basis van de vergelijking en de gehanteerde criteria wordt duidelijk dat verschillende typen organisaties andere eisen stellen aan software voor financial en business control. Door de juiste categorie te bepalen, wordt het eenvoudiger om te kiezen voor een oplossing die aansluit bij de rol van finance en de dagelijkse praktijk van controllers.</p>
12562<h3>Klein tot middelgroot MKB met een beperkt finance team</h3>
12563<p>In deze categorie vallen organisaties waarbij finance wordt uitgevoerd door een klein team of enkele medewerkers. Business control is hier vaak nog geen aparte functie, maar onderdeel van bredere financiële verantwoordelijkheden. De behoefte ligt vooral bij snelle en betrouwbare standaardrapportages, zonder hoge kosten of beheerlast.</p>
12564<p class="list-label"><strong>Kenmerken van deze groep:</strong></p>
12565<ul>
12566<li>Beperkt aantal entiteiten</li>
12567<li>Finance taken gecombineerd binnen één team of persoon</li>
12568<li>Sterke afhankelijkheid van boekhoudsystemen</li>
12569<li>Beperkte tijd en capaciteit voor inrichting en beheer</li>
12570</ul>
12571<p class="list-label"><strong>Oplossingen die hier vaak goed passen en wanneer je hiervoor kiest:</strong></p>
12572<p><strong>Visionplanner</strong> Kies je vooral wanneer de focus ligt op periodieke rapportages, ja
12572arrekeningvoorbereiding en aansluiting met de accountant.</p>
12573<p><strong>Speedbooks</strong> Ideaal als je in Excel wilt blijven werken maar veel handmatige data import en data structurering wilt automatiseren.</p>
12574<p><strong>Finstack</strong> Past bij organisaties die basis financial en business control willen professionaliseren.</p>
12575<p>Deze tools bieden overzicht en structuur, maar zijn minder gericht op het actief ondersteunen van complexere control processen.</p>
12576<h3>Groter MKB en scale-ups met dedicated business control</h3>
12577<p>In deze groep is business control een duidelijke rol binnen finance. De organisatie groeit, de complexiteit neemt toe en Excel wordt een structurele bottleneck. Hier ontstaat behoefte aan software die niet alleen rapporteert, maar ook processen ondersteunt en beheersbaar maakt.</p>
12578<p class="list-label"><strong>Kenmerken van deze groep:</strong></p>
12579<ul>
12580<li>Meerdere entiteiten of complexere structuren</li>
12581<li>Duidelijke scheiding tussen accounting, financial control en business control</li>
12582<li>Behoefte aan consolidatie, planning en managementrapportages</li>
12583<li>Focus op versnellen en structureren van maandafsluiting</li>
12584</ul>
12585<p class="list-label"><strong>Oplossingen die hier vaak goed passen en wanneer je hiervoor kiest:</strong></p>
12586<p><strong>Smartbooks</strong> Kies je wanneer je op zoek bent naar een gespecialiseerd systeem voor financial en business controllers. Smartbooks richt zich expliciet op het ondersteunen en automatiseren van kernprocessen zoals maandafsluiting, variantie-analyses, managementrapportages en presentaties.</p>
12587<p><strong>Bright Analytics</strong> Geschikt wanneer de nadruk ligt op BI in combinatie met financiële consolidatie en gestructureerde rapportages, met minder mogelijkheden voor planning en proces ondersteuning.</p>
12588<p><strong>Power BI</strong> Kies je wanneer flexibiliteit in analyse en datacombinatie centraal staat. Power BI is vooral geschikt als aanvulling op finance-specifieke tooling, niet als vervanging daarvan.</p>
12589<p>In deze categorie maakt de combinatie van finance-specifieke software en BI vaak het verschil.</p>
12590<h3>Enterprise-achtige organisaties met complexe finance structuren</h3>
12591<p>Bij organisaties die qua omvang, governance en internationale complexiteit verder zijn gegroeid, verschuiven de eisen richting formele consolidatie, compliance en strakke procesbeheersing. Business control is hier sterk geformaliseerd en ingebed in vaste governance-structuren.</p>
12592<p class="list-label"><strong>Kenmerken van deze groep:</strong></p>
12593<ul>
12594<li>Veel entiteiten, vaak internationaal</li>
12595<li>Strenge eisen aan consolidatie en auditability</li>
12596<li>Complexe planning- en rapportagecycli</li>
12597<li>Hogere tolerantie voor implementatie- en beheerkosten</li>
12598</ul>
12599<p class="list-label"><strong>Oplossingen die hier vaak de voorkeur krijgen en wanneer je hiervoor kiest:</strong></p>
12600<p><strong>Lucanet</strong> Kies je wanneer consolidatie, governance en compliance centraal staan. Lucanet biedt de robuustheid die nodig is in complexe finance omgevingen, maar vraagt ook meer implementatie-inspanning.</p>
12601<h2>Alternatieven voor Lucanet</h2>
12602<p>Lucanet is sterk in formele consolidatie, maar wordt in het MKB vaak als zwaar en kostbaar in beheer ervaren. De gebruikers die we spraken noemden consultancykosten van circa €15.000 per jaar en intercompany-verschillen die met de hand gezocht moeten worden. Ook blijft de budgettering volledig in Excel. Wie om die redenen een alternatief voor Lucanet zoekt, heeft grofweg drie opties.</p>
12603<p><strong>Smartbooks – het meest vergelijkbare alternatief voor Lucanet in het MKB.</strong> In deze vergelijking scoort Smartbooks op consolidatie even sterk als Lucanet. Daarnaast ondersteunt het de maandafsluiting, budgettering, planning en managementrapportage, inclusief AI-ondersteuning bij de intercompany-reconciliatie. De implementatie is doorgaans binnen een week afgerond, zonder externe specialisten. Smartbooks past vooral bij organisaties met meerdere entiteiten die meer willen dan alleen consolidatie, of die de beheerlast en consultancykosten van Lucanet willen terugbrengen.</p>
12604<p><strong>Bright Analytics – als BI en visualisatie centraal staan.</strong> Bright Analytics combineert financiële consolidatie met BI-rapportage over meerdere databronnen. Het biedt minder diepgang in planning en in de ondersteuning van de maandafsluiting.</p>
12605<p><strong>Visionplanner en Speedbooks – als de consolidatie eenvoudig is.</strong> Deze tools zijn aanzienlijk goedkoper, maar hun consolidatiefunctionaliteit is beperkt. Ze passen bij kleinere organisaties die vooral standaardrapportages nodig hebben.</p>
12606<p><strong>Wanneer blijft Lucanet de beste keuze?</strong> Voor grote internationale groepen met veel entiteiten, strenge eisen aan auditability en meerdere rapportagestandaarden naast elkaar. Daar is Lucanet sterker dan de MKB-alternatieven in dit overzicht.</p>
12607
12608<h2>Welke fouten worden het meest gemaakt bij het kiezen van finance softw
12608are?</h2>
12609<p>Bij de selectie van software voor financial en business control worden in de praktijk vaak dezelfde fouten gemaakt. Niet omdat organisaties onzorgvuldig zijn, maar omdat de verschillen tussen oplossingen lastig te doorgronden zijn en de impact van de keuze vaak wordt onderschat. Hieronder bespreken we de meest voorkomende valkuilen.</p>
12610<h3>1. Kiezen voor een te zwaar of te complex systeem</h3>
12611<p>Een veelgemaakte fout is het selecteren van software die beter past bij grote enterprise-organisaties dan bij het eigen bedrijf. Dergelijke systemen bieden uitgebreide functionaliteit, maar vragen ook om zware implementaties, veel configuratie en structureel beheer.</p>
12612<p>Voor veel MKB-organisaties leidt dit tot lange implementatietrajecten, hoge externe consultancykosten en lage adoptie door het finance team. Meer functionaliteit betekent niet automatisch meer waarde. Een systeem moet passen bij de schaal, volwassenheid en dagelijkse praktijk van de organisatie.</p>
12613<h3>2. BI-tools verwarren met financial en business control software</h3>
12614<p>BI-tools worden regelmatig gezien als alternatief voor financial en business control software, omdat ze sterke visualisatie- en analysemogelijkheden bieden. In de praktijk ontbreekt het BI-tools echter aan finance-specifieke logica voor processen zoals consolidatie, planning en maandafsluiting.</p>
12615<p>Het gevolg is dat dure BI consultants nog veel werk hebben om de BI-tool in te rechten. En dat de controller nog steeds onnodig veel werk in Excel moet blijven doen. BI is waardevol, maar voldoet niet als operationeel systeem voor financial en business controllers.</p>
12616<h3>3. De implementatie- en beheerimpact onderschatten</h3>
12617<p>Bij softwareselecties ligt de focus vaak op functionaliteit, terwijl de impact op de eigen organisatie wordt onderschat. Denk aan:</p>
12618<ul>
12619<li>tijdsinvestering van het finance team,</li>
12620<li>afhankelijkheid van externe consultants,</li>
12621<li>doorlopende beheerlast na livegang.</li>
12622<li>Software die in theorie goed past, kan in de praktijk te zwaar blijken wanneer implementatie en beheer onvoldoende worden meegewogen.</li>
12623</ul>
12624<h3>4. Te sterk focussen op licentiekosten in plaats van totale kosten en toegevoegde waarde</h3>
12625<p>Een veelvoorkomende valkuil is het vergelijken van software vooral op basis van licentiekosten, zonder de total cost of ownership en de geleverde toegevoegde waarde mee te nemen.</p>
12626<p>Generieke tools zoals BI-oplossingen hebben vaak lage softwarekosten, maar vereisen in de praktijk aanzienlijke investeringen in implementatie, maatwerk en doorlopend beheer. Vaak zijn gespecialiseerde consultants of data-analisten nodig om de oplossing werkend en actueel te houden.</p>
12627<p>Daartegenover staan gespecialiseerde financial en business control systemen die op papier duurder lijken, maar vaak bijna plug-and-play zijn. Deze oplossingen zijn ingericht rondom finance-specifieke processen, vragen weinig technisch beheer en leveren extra waarde doordat ze werkzaamheden zoals maandafsluiting, variantie-analyse en managementrapportage structureel efficiënter maken.</p>
12628<p>Het vergelijken van kosten zonder naar totale impact en opbrengst te kijken, leidt daardoor regelmatig tot suboptimale keuzes.</p>
12629<h3>5. Te weinig aandacht voor het maandafsluitproces</h3>
12630<p>Veel organisaties kiezen software op basis van rapportage of dashboards, maar besteden weinig aandacht aan hoe het systeem het maandafsluitproces ondersteunt. Juist hier wordt veel tijd gewonnen of verloren.</p>
12631<p>Zonder ondersteuning voor workflows, statusoverzichten en consistente definities blijft de maandafsluiting arbeidsintensief, ook met nieuwe software.</p>
12632<h3>6. Kiezen op features in plaats van op dagelijkse processen</h3>
12633<p>Vergelijkingen worden vaak gemaakt op basis van featurelijsten, terwijl de dagelijkse werkzaamheden van de controllers onvoldoende centraal staan. De belangrijkste vraag zou niet moeten zijn wat een systeem allemaal kan, maar welke taken het daadwerkelijk eenvoudiger en efficiënter maakt.</p>
12634<p>Software die goed aansluit op bestaande processen levert in de praktijk meer waarde dan een oplossing met een uitgebreide maar weinig gebruikte functionaliteit.</p>
12635<h3>7. Onvoldoende vooruitkijken naar toekomstige groei</h3>
12636<p>Tot slot wordt software soms gekozen voor de huidige situatie, zonder rekening te houden met groei. Extra entiteiten, internationale uitbreiding of zwaardere rapportage-eisen kunnen ervoor zorgen dat een systeem snel opnieuw vervangen moet worden.</p>
12637<p>Een goede keuze houdt rekening met zowel de huidige behoefte als de verwachte ontwikkeling van de organisatie.</p>
12638<h3>Samenvattend</h3>
12639<p>
12639De grootste valkuil bij het kiezen van finance software is het maken van een keuze op basis van enkel de softwarekosten en featurelijsten. Zonder voldoende aandacht voor de total cost of ownership en de echte toegevoegde waarde die het systeem voor jullie kan leveren. Wil je zeker weten of een software systeem goed bij jullie past, kijk dan of er een gratis proefperiode mogelijk is.</p>
12640<h2>Conclusie - hoe maak je de juiste keuze?</h2>
12641<p>De vergelijking laat zien dat er geen universeel beste software bestaat voor financial en business control. De juiste keuze hangt af van de omvang en complexiteit van de organisatie, de volwassenheid van het finance team en de rol die business control speelt binnen de besluitvorming.</p>
12642<p>Voor kleinere en middelgrote MKB-organisaties ligt de nadruk vaak op overzicht en betrouwbare rapportages met een beperkte implementatie- en beheerlast. Naarmate organisaties groeien en business control een meer centrale rol krijgt, ontstaat behoefte aan software die niet alleen rapporteert, maar ook kernprocessen zoals maandafsluiting, consolidatie, planning en analyse actief ondersteunt en structureel efficiënter maakt. In meer complexe, enterprise-achtige omgevingen verschuift de focus richting formele consolidatie, governance en compliance.</p>
12643<p>Bij het maken van een keuze is het belangrijk om verder te kijken dan functionaliteit en licentiekosten alleen. Gebruiksgemak voor controllers, implementatie- en beheerbelasting, integratiemogelijkheden en de totale kosten over de levensduur van de software zijn minstens zo bepalend voor succes. Daarbij speelt ook de toegevoegde waarde een belangrijke rol: software die processen structureel verbetert, levert vaak meer op dan een goedkopere generieke oplossing.</p>
12644<p class="list-label"><strong>De beste keuze is uiteindelijk de software die:</strong></p>
12645<ul>
12646<li>aansluit bij de dagelijkse werkzaamheden van de controllers,</li>
12647<li>past bij de huidige en toekomstige complexiteit van de organisatie,</li>
12648<li>finance teams helpt om minder tijd kwijt te zijn aan handmatig werk en meer waarde toe te voegen aan de business.</li>
12649</ul>
12650<h2>Veelgestelde vragen over business control software</h2>
12651<h3>Wat is het verschil tussen financial en business control en FP&amp;A?</h3>
12652<p>FP&amp;A is een onderdeel van financial en business control. Financial en business control richt zich op alle processen van de controllers, zoals planning, forecasting, analyses, maandafsluiting, consolidatie, rapportage, presentatie etc. FP&amp;A richt zich enkel op planning, forecasting en variantie-analyses.</p>
12653<h3>Wanneer is Excel niet meer geschikt voor financial en business control?</h3>
12654<p>Excel loopt tegen zijn grenzen aan wanneer consolidatie, versiebeheer, maandafsluiting en scenario-analyses structureel veel handmatig werk vragen en foutgevoelig worden.</p>
12655<h3>Is financial en business control software alleen geschikt voor grote bedrijven?</h3>
12656<p>Nee. Juist binnen het MKB en bij scale-ups helpt control software om grip te houden op groei en complexiteit, ook met kleinere finance teams.</p>
12657<h3>Kan een BI-tool zoals Power BI financial en business control software vervangen?</h3>
12658<p>In de meeste gevallen niet volledig. BI-tools zijn sterk in analyse en visualisatie, maar missen finance-specifieke proceslogica voor bijvoorbeeld consolidatie, planning en maandafsluiting.</p>
12659<h3>Wat is belangrijker: lage softwarekosten of toegevoegde waarde?</h3>
12660<p>De totale kosten over de levensduur van de software in relatie tot de toegevoegde waarde zijn belangrijker dan alleen de licentiekosten.</p>
12661<h3>Hoe lang duurt een implementatie van financial en business control software?</h3>
12662<p>Dit varieert sterk per type oplossing en organisatie. Sommige systemen zijn binnen enkele dagen operationeel, andere vragen maanden en externe ondersteuning.</p>
12663<h3>Welke rol speelt AI in business control software?</h3>
12664<p>AI wordt nu vooral ingezet ter ondersteuning van analyse, signalering van afwijkingen en het genereren van toelichtingen bij rapportages. Maar naar de toekomst toe gaat deze rol steeds meer toenemen. Het is daarom essentieel dat je een finance systeem kiest die een goede, complete en gestructureerde databron met API biedt. Dit is een essentiële randvoorwaarde om in de toekomst maximaal van AI te kunnen profiteren.</p>
12665<h3>
12665Hoe kies ik de juiste financial en business control software voor mijn organisatie?</h3>
12666<p>Door eerst te bepalen welke rol financial en business control speelt binnen finance, welke processen centraal staan en welke complexiteit moet worden ondersteund. Pas daarna vergelijk je tooling.</p>
12667<h3>Welke software integreert met Exact Online en AFAS voor financial en business control?</h3>
12668<p>Zowel Smartbooks als Bright Analytics, Visionplanner en Speedbooks bieden directe integraties met veelgebruikte Nederlandse boekhoudpakketten zoals Exact Online, Twinfield en AFAS. Smartbooks biedt daarnaast ook integraties met operationele bronsystemen voor de koppeling van business KPI’s. Bij Lucanet en Power BI zijn integraties doorgaans meer configuratie-intensief en vereisen ze soms aanvullende implementatiewerkzaamheden.</p>
12669<h3>Wat is een EPM-systeem en wanneer heb je dat nodig?</h3>
12670<p>EPM staat voor Enterprise Performance Management. Een EPM-systeem ondersteunt alle kernprocessen van financial en business control: consolidatie, planning en forecasting, budgettering, analyse, rapportage en managementpresentaties. Je hebt een EPM-systeem nodig wanneer Excel te beperkt wordt voor de complexiteit van de organisatie, wanneer meerdere entiteiten moeten worden geconsolideerd, of wanneer de controller meer tijd wil besteden aan analyse en minder aan handmatig werk.</p>
12671<h3>Wat is het verschil tussen Smartbooks en Bright Analytics?</h3>
12672<p>Bright Analytics is primair een BI-gedreven rapportage- en consolidatietool met financiële focus. Smartbooks is een breder EPM-platform dat naast rapportage en consolidatie ook de maandafsluiting, budgettering, planning, variantieanalyse en managementpresentaties actief ondersteunt. Bright Analytics heeft sterkere BI-functionaliteit voor het combineren van databronnen; Smartbooks biedt meer diepgang in de specifieke processen van de financial en business controller.</p>
12673<h3>Wat is een goed alternatief voor Lucanet?</h3>
12674<p>Voor het MKB en het grotere MKB met meerdere entiteiten is Smartbooks het meest vergelijkbare alternatief voor Lucanet. De consolidatie is even sterk, en maandafsluiting, budgettering en planning zitten in hetzelfde systeem. De implementatie is doorgaans binnen een week afgerond, zonder externe specialisten. Staan BI en visualisatie over meerdere databronnen centraal, dan is Bright Analytics een optie. Voor kleinere organisaties met eenvoudige consolidatie zijn Visionplanner en Speedbooks goedkoper. Voor grote internationale groepen met zware governance-eisen blijft Lucanet zelf de sterkste keuze.</p>
12675<h3>Wat is het verschil tussen Smartbooks en LucaNet?</h3>
12676<p>LucaNet is gespecialiseerd in formele financiële consolidatie en compliance, en is met name geschikt voor grotere organisaties met complexe juridische structuren en strikte governance-eisen. Smartbooks richt zich op het brede palet aan financial en business control processen binnen het grotere MKB, met een nadruk op gebruiksgemak, snelle implementatie en AI-ondersteuning. LucaNet vraagt meer implementatie-inspanning en is duurder in beheer; Smartbooks is sneller operationeel en toegankelijker voor kleinere finance teams.</p>
12677<p><strong>Tot slot</strong></p>
12678<p>Deze veelgestelde vragen zijn gebaseerd op vragen die controllers en finance managers regelmatig stellen. Ze vormen een aanvulling op de vergelijking en helpen om de juiste context te bepalen bij het kiezen van software voor business control.</p>
12679</div>
12680</div>
12681
12682
12683
12684<p></p>`,p_=`---json
12685{
12686  "title": "Verrechnung von Wechselkursdifferenzen in Smartbooks.AI",
12687  "metaTitle": "Wechselkursdifferenzen bei der Konsolidierung verrechnen",
12688  "slug": "verrekening-van-koersverschillen-in-smartbooks-ai",
12689  "date": "2025-02-19 13:28:40",
12690  "category": "Articles",
12691  "tags": [],
12692  "excerpt": "Wechselkursdifferenzen verrechnen: wie Smartbooks.AI Fremdwährungen bei der Konsolidierung umrechnet und Kursdifferenzen automatisch bucht — inklusive Rechenbeispiel.",
12693  "originalUrl": "https://smartbooks.ai/artikelen/verrekening-van-koersverschillen-in-smartbooks-ai/",
12694  "meta": null
12695}
12696---
12697<p>Smartbooks.AI ist eine Plattform, die Analyse, Reporting, Konsolidierung und Budgetierung von Finanz- und operativen Daten intelligent automatisiert. Dieser Artikel erläutert, wie das System Fremdwährungen umrechnet und welche automatische Buchung entsteht, um das Ergebnis aus Wechselkursdifferenzen auszuweisen.</p>
12698
12699<p><strong>Ausgangssituation</strong></p>
12700
12701<ul>
12702<li>Eine Tochtergesellschaft berichtet in <strong>USD</strong>, die Muttergesellschaft in <strong>EUR</strong> — es handelt sich um eine 100 %-Tochter; Smartbooks.AI konsolidiert aber auch Beteiligungen mit geringerem Anteil automatisch.</li>
12703<li><strong>Bewegungen im Eigenkapital in der Bilanz</strong>: Umrechnung zum <strong>Stichtagskurs</strong> pro Monat.</li>
12704<li><strong>Gewinn- und Verlustrechnung</strong>: Umrechnung zum <strong>Durchschnittskurs des Monats</strong>.</li>
12705<li><strong>Wechselkursdifferenzen</strong> werden auf ein <strong>Konto für Kursdifferenzen (GuV)</strong> gebucht.</li>
12706</ul>
12707
12708<p><strong>Beispieldaten</strong></p>
12709
12710<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Monat</strong></td><td class="has-text-align-center" data-align="center"><strong>Durchschnittskurs (EUR/USD)</strong></td><td class="has-text-align-center" data-align="center"><strong>Stichtagskurs (EUR/USD)</strong></td></tr></thead><tbody><tr><td>Jan</td><td class="has-text-align-center" data-align="center">1.10</td><td class="has-text-align-center" data-align="center">1.12</td></tr><tr><td>Feb</td><td class="has-text-align-center" data-align="center">1.08</td><td class="has-text-align-center" data-align="center">1.09</td></tr><tr><td>Mrz</td><td class="has-text-align-center" data-align="center">1.05</td><td class="has-text-align-center" data-align="center">1.07</td></tr></tbody></table></figure>
12711
12712<p><strong>Tochtergesellschaft in USD</strong></p>
12713
12714<ul>
12715<li><strong>Umsatz</strong> pro Monat: <strong>100.000 USD</strong></li>
12716<li><strong>Kosten</strong> pro Monat: <strong>
1271670.000 USD</strong></li>
12717</ul>
12718
12719<p><strong>Umrechnung der GuV in EUR</strong></p>
12720
12721<p>Monatliche Umsätze und Kosten werden zum Durchschnittskurs des Monats umgerechnet.</p>
12722
12723<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Monat</strong></td><td class="has-text-align-right" data-align="right"><strong>Umsatz ($)</strong></td><td class="has-text-align-center" data-align="center"><strong>Durchschnittskurs</strong></td><td class="has-text-align-right" data-align="right"><strong>Umsatz (€)</strong></td><td class="has-text-align-right" data-align="right"><strong>Kosten ($)</strong></td><td class="has-text-align-right" data-align="right"><strong>Kosten (€)</strong></td><td class="has-text-align-right" data-align="right"><strong>Gewinn (€)</strong></td></tr></thead><tbody><tr><td>Jan</td><td class="has-text-align-right" data-align="right">100.000</td><td class="has-text-align-center" data-align="center">1,10</td><td class="has-text-align-right" data-align="right">90.909</td><td class="has-text-align-right" data-align="right">70.000</td><td class="has-text-align-right" data-align="right">63.636</td><td class="has-text-align-right" data-align="right">27.273</td></tr><tr><td>Feb</td><td class="has-text-align-right" data-align="right">100.000</td><td class="has-text-align-center" data-align="center">1,08</td><td class="has-text-align-right" data-align="right">92.593</td><td class="has-text-align-right" data-align="right">70.000</td><td class="has-text-align-right" data-align="right">64.815</td><td class="has-text-align-right" data-align="right">27.778</td></tr><tr><td>Mrz</td><td class="has-text-align-right" data-align="right">100.000</td><td class="has-text-align-center" data-align="center">1,05</td><td class="has-text-align-right" data-align="right">95.238</td><td class="has-text-align-right" data-align="right">70.000</td><td class="has-text-align-right" data-align="right">66.667</td><td class="has-text-align-right" data-align="right">28.571</td></tr><tr><td><strong>Summe</strong></td><td class="has-text-align-right" data-align="right">300.000</td><td class="has-text-align-center" data-align="center">-</td><td class="has-text-align-right" data-align="right">278.740</td><td class="has-text-align-right" data-align="right">210.000</td><td class="has-text-align-right" data-align="right">195.118</td><td class="has-text-align-right" data-align="right"><strong>83.622</strong></td></tr></tbody></table></figure>
12724
12725<p><strong>Berechnung der Wechselkursdifferenz</strong></p>
12726
12727<p>Die GuV wird zum Durchschnittskurs umgerechnet, die Bilanz zum Stichtagskurs. Die Differenz wird als Ergebnis aus Wechselkursdifferenzen gebucht.</p>
12728
12729<ol>
12730<li><strong>Umrechnung Gewinn (EUR) auf Basis Durchschnittskurs:</strong>
12731<ul><li>Gewinn gesamt aus der GuV: <strong>83.622 EUR</strong></li></ul>
12732</li>
12733<li><strong>Umrechnung Gewinn (EUR) auf Basis Stichtagskurs:</strong>
12734<ul><li>YTD-Gewinn in USD (90.000) umgerechnet zum Stichtagskurs (1,07): <strong>84.112 EUR</strong></li></ul>
12735</li>
12736<li><strong>Wechselkursdifferenz</strong>
12737<ul><li><strong>84.112 EUR (Bilanz) − 83.622 EUR (GuV) = 490 EUR</strong></li><li>Diese Differenz wird als <strong>Ergebnis aus Wechselkursdifferenzen</strong> gebucht.</li></ul>
12738</li>
12739</ol>`,f_=`---json
12740{
12741  "title": "Settlement of exchange rate differences in Smartbooks.AI",
12742  "metaTitle": "Settlement of Exchange Rate Differences Explained",
12743  "slug": "verrekening-van-koersverschillen-in-smartbooks-ai",
12744  "date": "",
12745  "category": "Articles",
12746  "tags": [
12747    "Foreign Currency",
12748    "Consolidation",
12749    "Exchange Rate Differences",
12750    "Smartbooks AI"
12751  ],
12752  "excerpt": "Settlement of exchange rate differences: learn how Smartbooks.AI automates foreign currency translation and posts exchange rate gains and losses accurately.",
12753  "originalUrl": ""
12754}
12755---
12756<p>Smartbooks.AI is a platform that smartly automates the analysis, reporting, consolidation, and budgeting of both financial and operational data. This article explains how the system converts foreign currencies and which automatic entries are made to report the results on exchange rate differences.</p>
12757
12758<p><strong>Situation</strong></p>
12759
12760<ul class="list">
12761<li>Foreign currency translation in Smartbooks.AI</li>
12762<li>
12762Automatic journal entries for exchange rate differences</li>
12763<li>Financial consolidation and reporting</li>
12764</ul>`,b_=`---json
12765{
12766  "title": "Verrekening van koersverschillen in Smartbooks.AI",
12767  "metaTitle": "Verrekening koersverschillen bij consolidatie",
12768  "slug": "verrekening-van-koersverschillen-in-smartbooks-ai",
12769  "order": 9,
12770  "date": "2025-02-19 13:28:40",
12771  "category": "Articles",
12772  "tags": [],
12773  "excerpt": "Verrekening van koersverschillen: hoe Smartbooks.AI vreemde valuta omrekent bij consolidatie en koersverschillen automatisch boekt — inclusief rekenvoorbeeld.",
12774  "originalUrl": "https://smartbooks.ai/artikelen/verrekening-van-koersverschillen-in-smartbooks-ai/",
12775  "meta": null,
12776  "enSlug": "settlement-of-exchange-rate-differences"
12777}
12778---
12779<p>Smartbooks.AI is een platform dat analyseren, rapporteren, consolideren en budgetteren van financiële én operationele gegevens slim automatiseert. Dit artikel licht toe hoe het systeem vreemde valuta omrekent en welke automatische boeking wordt gemaakt om het resultaat op de koersverschillen te rapporteren.</p>
12780
12781
12782
12783<p><strong>Situatie</strong></p>
12784
12785
12786
12787<ul class="wp-block-list">
12788<li>Een dochtermaatschappij rapporteert in <strong>USD</strong>, terwijl de moedermaatschappij rapporteert in <strong>EUR </strong>– dit is een 100% dochter, maar Smartbooks.AI kan ook automatisch deelnemingen met een kleiner percentage eigendom consolideren</li>
12789
12790
12791
12792<li><strong>Mutatie eigen vermogen in de balans</strong>: Omrekening tegen de <strong>eindkoers</strong> per maand</li>
12793
12794
12795
12796<li><strong>Winst- en verliesrekening</strong>: Omrekening tegen de <strong>gemiddelde maandkoers</strong></li>
12797
12798
12799
12800<li><strong>Koersverschillen</strong> worden geboekt op een <strong>resultaat koersverschillen-rekening</strong></li>
12801</ul>
12802
12803
12804
12805<p><strong>Voorbeeldgegevens</strong></p>
12806
12807
12808
12809<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Maand</strong></td><td class="has-text-align-center" data-align="center"><strong>Gemiddelde maandkoers (EUR/USD)</strong></td><td class="has-text-align-center" data-align="center"><strong>Eindkoers (EUR/USD)</strong></td></tr></thead><tbody><tr><td>Jan</td><td class="has-text-align-center" data-align="center">1.10</td><td class="has-text-align-center" data-align="center">1.12</td></tr><tr><td>Feb</td><td class="has-text-align-center" data-align="center">1.08</td><td class="has-text-align-center" data-align="center">1.09</td></tr><tr><td>Mrt</td><td class="has-text-align-center" data-align="center">1.05</td><td class="has-text-align-center" data-align="center">1.07</td></tr></tbody></table></figure>
12810
12811
12812
12813<p></p>
12814
12815
12816
12817<p><strong>Dochteronderneming in USD</strong></p>
12818
12819
12820
12821<ul class="wp-block-list">
12822<li><strong>Omzet</strong> per maand: <strong>100.000 USD</strong></li>
12823
12824
12825
12826<li><strong>Kosten</strong> per maand: <strong>70.000 USD</strong></li>
12827</ul>
12828
12829
12830
12831<p><strong>Omrekening naar EUR van de Winst- en Verliesrekening</strong></p>
12832
12833
12834
12835<p>Maandelijkse omzet en kosten worden omgerekend tegen de gemiddelde maandkoers.</p>
12836
12837
12838
12839<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Maand</strong></td><td class="has-text-align-right" data-align="right"><strong>Omzet ($)</strong></td><td class="has-text-align-center" data-align="center"><strong>Gem. maandkoers</strong></td><td class="has-text-align-right" data-align="right"><strong>Omzet (€)</strong></td><td class="has-text-align-right" data-align="right"><strong>Kosten ($)</strong></td><td class="has-text-align-right" data-align="right"><strong>Kosten (€)</strong></td><td class="has-text-align-right" data-align="right"><strong>Winst (€)</strong></td></tr></thead><tbody><tr><td>Jan</td><td class="has-text-align-right" data-align="right">100.000</td><td class="has-text-align-center" data-align="center">1,10</td><td class="has-text-align-right" data-align="right">90.909</td><td class="has-text-align-right" data-align="right">70.000</td><td class="has-text-align-right" data-align="right">63.636</td><td class="has-text-align-right" data-align="right">27.273</td></tr><tr><td>Feb</td><td class="has-text-align-right" data-align="right">100.000</td><td class="has-text-align-center" data-align="center">1,08</td><td class="has-text-align-right" data-align="right">92.593</td><td class="has-text-align-right" data-align="right">70.000</td><td class="has-text-align-right" data-align="right">64.815</td><td class="has-text-align-right" data-align="right">27.778</td></tr><tr><td>Mrt</td><td class="has-text-align-right" data-align="right">100.000</td><td class="has-text-align-center" data-align="center">1,05</td><td class="has-text-align-right" data-align="right">95.238</td><td class="has-text-align-right" data-align="right">70.000</td><td class="has-text-align-right" data-align="right">66.667</td><td class="has-text-align-right" data-align="right">28.571</td></tr><tr><td><strong>Totaal</strong></td><td class="has-text-align-right" data-align="right">300.000</td><td class="has-text-align-center" data-align="center">-</td><td class="has-text-align-right" data-align="right">278.740</td><td class="has-text-align-right" data-align="right">210.000</td><td class="has-text-align-right" data-align="right">195.118</td><td class="has-text-align-right" data-align="right"><strong>83.622</strong></td></tr></tbody></table></figure>
12840
12841
12842
12843<p></p>
12844
12845
12846
12847<p><strong>Koersverschilberekening</strong></p>
12848
12849
12850
12851<p>
12851De winst en verliesrekening wordt omgerekend tegen de gemiddelde maandkoers, terwijl de balans tegen de eindkoers wordt omgerekend. Het verschil wordt geboekt als resultaat koersverschillen.</p>
12852
12853
12854
12855<ol start="1" class="wp-block-list">
12856<li><strong>Omrekening winst (EUR) op basis van maandkoersen:</strong>
12857<ul class="wp-block-list">
12858<li>Winst totaal uit de V&amp;W: <strong>83.622 EUR</strong></li>
12859</ul>
12860</li>
12861
12862
12863
12864<li><strong>Omrekening winst (EUR) op basis van eindkoersen:</strong>
12865<ul class="wp-block-list">
12866<li>YTD Winst in USD (90.000) omgerekend tegen eindkoers (1,07): <strong>84.112 EUR</strong></li>
12867</ul>
12868</li>
12869
12870
12871
12872<li><strong>Koersverschil</strong>
12873<ul class="wp-block-list">
12874<li><strong>84.112 EUR (balans) – 83.622 EUR (V&amp;W) = 490 EUR</strong></li>
12875
12876
12877
12878<li>Dit verschil wordt geboekt als <strong>resultaat koersverschillen</strong>.</li>
12879</ul>
12880</li>
12881</ol>`,v_=`---json
12882{
12883  "title": "Unterschiede und Gemeinsamkeiten von FP&A und EPM",
12884  "slug": "verschillen-en-overeenkomsten-tussen-fpa-en-epm",
12885  "metaTitle": "FP&A vs EPM: Unterschiede und Gemeinsamkeiten",
12886  "date": "2023-12-14 13:34:24",
12887  "category": "Articles",
12888  "tags": [
12889    "Planung"
12890  ],
12891  "excerpt": "FP&A vs EPM: Gemeinsamkeiten und Unterschiede beider Finanzdisziplinen — und wie sie sich gegenseitig stärken.",
12892  "originalUrl": "https://smartbooks.ai/artikelen/verschillen-en-overeenkomsten-tussen-fpa-en-epm/",
12893  "meta": null
12894}
12895---
12896<p>Fragt man ChatGPT nach den Gemeinsamkeiten und Unterschieden zwischen Enterprise Performance Management (EPM) und Financial Planning and Analysis (FP&A), erhält man folgende Antwort: „Beide Disziplinen teilen einige Ziele, es gibt aber auch wesentliche Unterschiede. Ein Blick auf beide.</p>
12897
12898<h2>Gemeinsamkeiten:</h2>
12899<ol>
12900<li>Daten: EPM und FP&A basieren auf Daten, um fundierte Entscheidungen zu treffen. Beide nutzen historische und Echtzeit-Finanzdaten für Analyse und strategische Planung.</li>
12901<li>Zielausrichtung: EPM und FP&A stellen finanzielle Ziele in Einklang mit den Unternehmens­zielen und unterstützen die Umsetzung der Strategie durch Bewertung der Finanzperformance.</li>
12902<li>Reporting und Analyse: Beide beinhalten die Erstellung von Berichten und tiefergehende Analysen.</li>
12903<li>Planung und Forecasting: Sowohl EPM als auch FP&A blicken voraus, erstellen und pflegen Budgets sowie Szenarien für die zukünftige finanzielle Entwicklung.</li>
12904</ol>
12905
12906<h2>Unterschiede:</h2>
12907<ol>
12908<li>Scope: EPM umfasst mehr als nur Finanzen — inklusive Unternehmensstrategie, Risikomanagement und Compliance. FP&A fokussiert vor allem auf Finanzprognosen, Budgetierung und Kostenkontrolle.</li>
12909<li>Horizont: EPM verfolgt eine langfristige Perspektive mit Fokus auf Mehrjahres­planung und strategischer Ausrichtung. FP&A arbeitet meist mit Jahres- oder Quartalsbudgets und -prognosen.</li>
12910<li>Zielgruppe: FP&A bedient primär die Finanzabteilung und das Top-Management. EPM strahlt in die gesamte Organisation aus — HR, Operations, Marketing eingeschlossen.</li>
12911<li>Technologie: EPM setzt oft fortgeschrittenere Technologie ein — Performance-Management-Software und Analytics-Tools für komplexe, multidimensionale Daten. FP&A stützt sich häufiger auf Spreadsheets und Finanzplanungssoftware.</li>
12912</ol>
12913
12914<p>EPM und FP&A sind beide essenziell für das Management der finanziellen Gesundheit eines Unternehmens. Trotz Überschneidungen bei datengetriebener Entscheidungsfindung und Zielausrichtung machen unterschiedliche Scopes, Zeithorizonte, Zielgruppen und Technologiean­forderungen die jeweils eigene Rolle im Finanzmanagement deutlich. Unternehmen profitieren häufig davon, beide Funktionen zu integrieren, um Performance und finanziellen Erfolg gesamthaft zu steigern.“</p>
12915
12916<p>Genau an der Schnittstelle von EPM und FP&A ermöglicht Smartbooks — bewusst ohne Spreadsheets — kurzfristige Analyse und Reporting ebenso wie langfristige Planung inklusive Szenarien und Cashflow-Prognosen.</p>`,k_=`---json
12917{
12918  "title": "Differences and similarities between FP&A and EPM",
12919  "metaTitle": "FP&A vs EPM: Differences and Similarities",
12920  "slug": "differences-and-similarities-between-fpa-and-epm",
12921  "date": "",
12922  "category": "Articles",
12923  "tags": [
12924    "FP&A",
12925    "EPM",
12926    "Financial Planning",
12927    "Performance Management"
12928  ],
12929  "excerpt": "FP&A vs EPM: discover the similarities and differences between both financial disciplines and how they reinforce each other.",
12930  "originalUrl": "",
12931  "meta": {
12932    "type_bedrijf": "Financial Services"
12933  }
12934}
12935---
12936<p>If you ask ChatGPT about the similarities and differences between Enterprise Performance Management (EPM) and Financial Planning and Analysis (FP&amp;A), you get the following answer: 'While they share some common objectives, there are also key differences. Let's dive into the similarities and distinctions between EPM and FP&amp;A.'</p>
12937
12938<h2 class=\\"`,w_=`---json
12939{
12940  "title": "Verschillen en overeenkomsten tussen FP&A en EPM",
12941  "metaTitle": "FP&A vs EPM: verschillen en overeenkomsten",
12942  "slug": "verschillen-en-overeenkomsten-tussen-fpa-en-epm",
12943  "order": 37,
12944  "date": "2023-12-14 13:34:24",
12945  "category": "Articles",
12946  "tags": [
12947    "Planning"
12948  ],
12949  "excerpt": "FP&A vs EPM: ontdek de overeenkomsten en verschillen tussen beide financiële disciplines en hoe ze elkaar versterken.",
12950  "originalUrl": "https://smartbooks.ai/artikelen/verschillen-en-overeenkomsten-tussen-fpa-en-epm/",
12951  "meta": null,
12952  "enSlug": "differences-and-similarities-between-fpa-and-epm"
12953}
12954---
12955<p>Als je aan ChatGPT vraagt wat de overeenkomsten en verschillen zijn tussen Enterprise Performance Management (EPM) en Financial Planning and Analysis (FP&amp;A) krijg je het volgende antwoord. ‘Hoewel ze enkele gemeenschappelijke doelstellingen delen, zijn er ook belangrijke verschillen. Laten we duiken in de overeenkomsten en onderscheidingen tussen EPM en FP&amp;A.</p>
12956
12957
12958
12959<h2 class="wp-block-heading">Overeenkomsten:</h2>
12960
12961
12962
12963<ol>
12964<li>Data: Zowel EPM als FP&amp;A vertrouwen op gegevens om geïnformeerde beslissingen te nemen. Ze maken gebruik van historische en real-time financiële gegevens om prestaties te analyseren en strategische planning te stimuleren.</li>
12965
12966
12967
12968<li>Doelafstemming: EPM en FP&amp;A streven ernaar financiële doelen af te stemmen op de algemene bedrijfsdoelstellingen. Ze ondersteunen het behalen van bedrijfsstrategieën door financiële prestaties te evalueren.</li>
12969
12970
12971
12972<li>Rapportage en Analyse: Beide functies omvatten het maken van rapporten en het uitvoeren van diepgaande analyses.</li>
12973
12974
12975
12976<li>Planning en Forecasting: Zowel EPM als FP&amp;A kijken vooruit en maken en beheren een budget en vaak ook verschillende scenario’s voor toekomstige financiële resultaten.&nbsp;</li>
12977</ol>
12978
12979
12980
12981<h2 class="wp-block-heading">Verschillen:</h2>
12982
12983
12984
12985<ol>
12986<li>Scope: EPM omvat een breder scala aan activiteiten dan alleen financiën, waaronder bedrijfsstrategie, risicobeheer en naleving. FP&amp;A richt zich voornamelijk op financiële prognoses, budgettering en kostenbeheersing.</li>
12987
12988
12989
12990<li>Horizon: EPM neemt een langetermijnvisie aan, met de nadruk op meerjarige planning en strategische afstemming. FP&amp;A daarentegen houdt zich vaak bezig met jaarlijkse of kwartaalbudgetten en prognoses.</li>
12991
12992
12993
12994<li>Doelgroep: FP&amp;A bedient voornamelijk de financiële afdeling en het hoger management, terwijl EPM zijn invloed uitbreidt naar de hele organisatie, inclusief afdelingen zoals HR, operaties en marketing.</li>
12995
12996
12997
12998<li>Technologie: EPM maakt vaak gebruik van geavanceerdere technologie, zoals prestatiebeheersoftware en analysetools, om complexe, multidimensionale gegevens te verwerken. FP&amp;A vertrouwt op spreadsheets en financiële planningssoftware.</li>
12999</ol>
13000
13001
13002
13003<p>EPM en FP&amp;A zijn essentieel voor het beheer van de financiële gezondheid van een bedrijf. Hoewel ze overeenkomsten hebben op het gebied van datagedreven besluitvorming en doelafstemming, benadrukken hun verschillende scopes, tijdsbestekken, doelgroepen en technologische vereisten hun eigen rol in het financieel beheer. Bedrijven halen vaak voordeel uit de integratie van deze functies om uitgebreide prestatieverbetering en financieel succes te stimuleren.’</p>
13004
13005
13006
13007<p>En exact op het raakvlak van EPM en FP&amp;A zorg Smartbooks ervoor dat, juist zonder gebruik van spreadsheets, de korte termijn analyse en rapportage gemaakt kan worden, maar ook de langere termijn planning, inclusief scenarioplanning en cashflow prognoses.</p>`,x_=`---json
13008{
13009  "title": "Wann Spreadsheets für komplexe Finanzanalysen an Grenzen stoßen",
13010  "slug": "wanneer-zijn-spreadsheets-minder-geschikt-voor-complexe-financiele-analyses",
13011  "metaTitle": "Excel für Finanzanalysen: die Grenzen",
13012  "date": "2024-08-12 17:10:36",
13013  "category": "Articles",
13014  "tags": [
13015    "Analyse"
13016  ],
13017  "excerpt": "Ist Excel noch geeignet für Ihre Finanzanalyse? Wir zeigen, wann Spreadsheets bei komplexen Finanzanalysen an Grenzen stoßen.",
13018  "originalUrl": "https://smartbooks.ai/artikelen/wanneer-zijn-spreadsheets-minder-geschikt-voor-complexe-financiele-analyses/",
13019  "meta": null
13020}
13021---
13022<p>Für Finanzanalysen in Excel gilt: Spreadsheets sind ausgezeichnete Werkzeuge für tägliche Aufgaben wie Listen, einfache Berechnungen und Grafiken. Bei großen Datenmengen oder komplexen Finanzanalysen zeigen sich aber ihre Grenzen. Hier sind einige Gründe, warum Sie für bestimmte Aufgaben Alternativen prüfen sollten.</p>
13023
13024<h3>1. Erleben Sie Performance-Probleme bei großen Datenmengen?</h3>
13025<p>Werden Ihre Spreadsheets langsam bei umfangreichen Datensätzen? Bei tausenden Zeilen und Spalten können Filter- und Sortierfunktionen viel Zeit kosten — besonders bei der Analyse historischer Buchhaltungsdaten.</p>
13026
13027<h3>2. Haben Sie Probleme mit Versionierung und Datenintegrität?</h3>
13028<p>Stoßen Sie regelmäßig auf mehrere Versionen desselben Spreadsheets durch E-Mail-Hin-und-Her oder lokales Speichern? Das führt zu Verwirrung und Inkonsistenzen — Genauigkeit und Verlässlichkeit leiden.</p>
13029
13030<h3>3. Entstehen Fehler durch unzuverlässige Dateneingabe?</h3>
13031<p>Haben Sie Fehler durch versehentlich ausgeblendete Spalten/Zeilen oder falsch eingegebene Daten? Das führt zu Fehlern in Formeln und Analysen und gefährdet die Datenqualität.</p>
13032
13033<h3>4. Bremsen manuelle Prozesse in Spreadsheets Ihre Arbeit?</h3>
13034<p>Führt das Fehlen automatischer Updates und Integrationen zu zeitaufwendigen manuellen Anpassungen? Das erhöht das Fehlerrisiko und verlangsamt Ihre Prozesse.</p>
13035
13036<h3>Professionelle Alternativen prüfen</h3>
13037<p>Spreadsheets bleiben für viele tägliche Aufgaben unverzichtbar. Für k
13037omplexere Datenanalysen und Finanzmanagement lohnt sich der Blick auf professionelle Lösungen — mit Vorteilen bei Verlässlichkeit, Automatisierung und Kosten. Das erhöht Effizienz und schafft mehr Ruhe und Übersicht in Ihren Finanzprozessen.</p>
13038
13039<p>Entdecken Sie, wie Smartbooks strukturiertes Arbeiten unterstützt. Kontaktieren Sie uns für eine unverbindliche <a href="/de/demo">Demo</a> und erleben Sie die Vorteile einer professionellen Lösung.</p>`,y_=`---json
13040{
13041  "title": "When Spreadsheets are Less Suitable for Complex Financial Analyses",
13042  "metaTitle": "Financial Analysis in Excel: The Limits",
13043  "slug": "wanneer-zijn-spreadsheets-minder-geschikt-voor-complexe-financiele-analyses",
13044  "date": "2024-08-12 17:10:36",
13045  "category": "Articles",
13046  "tags": [
13047    "Analyseren"
13048  ],
13049  "excerpt": "Is Excel still suitable for your financial analysis? We discuss when spreadsheets fall short for complex financial analyses.",
13050  "originalUrl": "https://smartbooks.ai/artikelen/wanneer-zijn-spreadsheets-minder-geschikt-voor-complexe-financiele-analyses/",
13051  "meta": null
13052}
13053---
13054<p></p>
13055
13056
13057
13058<p>For financial analysis in Excel, spreadsheets are excellent tools for daily tasks such as creating lists, simple calculations, and charts. However, when working with large volumes of data or complex financial analyses, they can also show their limitations. Here are several reasons why you might need to consider using alternatives for certain tasks</p>
13059
13060
13061
13062<h6 class="wp-block-heading">1. <strong>Do You Experience Performance Issues with Large Data Volumes?</strong></h6>
13063
13064
13065
13066<p>Have you noticed that your spreadsheets become slow when working with extensive datasets? With thousands of rows and columns, functions such as filtering and sorting can take a lot of time, especially when analyzing or comparing historical accounting data.</p>
13067
13068
13069
13070<h6 class="wp-block-heading">2. <strong>Do You Have Problems with Version Control and Data Integrity?</strong></h6>
13071
13072
13073
13074<p>Do you often encounter issues with multiple versions of the same spreadsheet due to emailing back and forth or local saving? This can lead to confusion and inconsistencies in your data, affecting accuracy and reliability</p>
13075
13076
13077
13078<h6 class="wp-block-heading">3. <strong>Do You Experience Errors Due to Unreliable Data Entry?</strong></h6>
13079
13080
13081
13082<p>Have you experienced issues due to the unintentional hiding of columns or rows, or by incorrectly entering data into your spreadsheets? This can lead to errors in formulas and analyses, compromising the reliability of your data.</p>
13083
13084
13085
13086<h6 class="wp-block-heading">4. <strong>Do You Notice Work Delays Due to Manual Processes in Spreadsheets?</strong></h6>
13087
13088
13089
13090<p>Have you noticed that the lack of automatic updates and integrations in your spreadsheets leads to time-consuming manual adjustments? This increases the risk of errors and slows down your work processes.</p>
13091
13092
13093
13094<h6 class="wp-block-heading">Consider Professional Alternatives</h6>
13095
13096
13097
13098<p>While spreadsheets are indispensable for many daily tasks, it may be useful to consider alternatives for more complex data analysis and financial management. Professional applications offer advantages such as reliability, automation, and cost savings. This can not only increase your efficiency but also provide more peace of mind and overview in your financial processes.</p>
13099
13100
13101
13102<p>Discover how Smartbooks helps you work in a structured way. Contact us for a non-binding <a href="/en/demo">demo</a> and experience the benefits of a professional solution for yourself</p>`,j_=`---json
13103{
13104  "title": "Wanneer Spreadsheets Minder Geschikt zijn voor Complexe Financiële Analyses",
13105  "metaTitle": "Excel voor financiële analyse: de grenzen",
13106  "slug": "wanneer-zijn-spreadsheets-minder-geschikt-voor-complexe-financiele-analyses",
13107  "order": 28,
13108  "date": "2024-08-12 17:10:36",
13109  "category": "Articles",
13110  "tags": [
13111    "Analyseren"
13112  ],
13113  "excerpt": "Is Excel nog geschikt voor je financiële analyse? We bespreken wanneer spreadsheets tekortschieten bij complexe financiële analyses.",
13114  "originalUrl": "https://smartbooks.ai/artikelen/wanneer-zijn-spreadsheets-minder-geschikt-voor-complexe-financiele-analyses/",
13115  "meta": null,
13116  "enSlug": "spreadsheets-for-budgeting-planning-and-forecasting"
13117}
13118---
13119<p></p>
13120
13121
13122
13123<p>Voor financiële analyse in Excel geldt: spreadsheets zijn uitstekende tools voor dagelijkse taken zoals het maken van lijstjes, eenvoudige berekeningen en grafieken. Echter, bij het werken met grote hoeveelheden data of bij complexe financiële analyses kunnen ze ook hun beperkingen tonen. Hier zijn enkele redenen waarom je misschien moet overwegen om alternatieven te gebruiken voor bepaalde taken</p>
13124
13125
13126
13127<h6 class="wp-block-heading">1. <strong>Ervaar je Prestatieproblemen bij Grote Datahoeveelheden?</strong></h6>
13128
13129
13130
13131<p>Heb je gemerkt dat je spreadsheets traag worden wanneer je werkt met omvangrijke datasets? Bij duizenden regels en kolommen kunnen functies zoals filteren en sorteren veel tijd kosten, vooral wanneer je historische boekhouddata analyseert of vergelijkt.</p>
13132
13133
13134
13135<h6 class="wp-block-heading">2. <strong>Heb je Problemen met Versiebeheer en Data-integriteit?</strong></h6>
13136
13137
13138
13139<p>Kom je vaak problemen tegen met meerdere versies van hetzelfde spreadsheet door het heen en weer mailen of lokaal opslaan? Dit 
13139kan leiden tot verwarring en inconsistenties in je gegevens, wat de nauwkeurigheid en betrouwbaarheid beïnvloedt</p>
13140
13141
13142
13143<h6 class="wp-block-heading">3. <strong>Ervaar je Fouten door Onbetrouwbare Gegevensinvoer?</strong></h6>
13144
13145
13146
13147<p>Heb je problemen ervaren door het onbedoeld verbergen van kolommen of rijen, of door het verkeerd invoeren van gegevens in je spreadsheets? Dit kan leiden tot fouten in formules en analyses, wat de betrouwbaarheid van je gegevens in gevaar brengt.</p>
13148
13149
13150
13151<h6 class="wp-block-heading">4. <strong>Merk Je Werkvertraging door Handmatige Processen in Spreadsheets?</strong></h6>
13152
13153
13154
13155<p>Heb je gemerkt dat het ontbreken van automatische updates en integraties in je spreadsheets leidt tot tijdrovende handmatige aanpassingen? Dit verhoogt het risico op fouten en vertraagt je werkprocessen.</p>
13156
13157
13158
13159<h6 class="wp-block-heading">Overweeg Professionele Alternatieven</h6>
13160
13161
13162
13163<p>Hoewel spreadsheets onmisbaar zijn voor veel dagelijkse taken, is het misschien nuttig om alternatieven te overwegen voor complexere data-analyse en financieel management. Professionele applicaties bieden voordelen zoals betrouwbaarheid, automatisering, en kostenbesparing. Dit kan niet alleen je efficiëntie verhogen, maar ook zorgen voor meer rust en overzicht in je financiële processen.</p>
13164
13165
13166
13167<p>Ontdek hoe SmartBooks je helpt gestructureerd te werken. Neem contact met ons op voor een vrijblijvende <a href="/demo">demo</a> en ervaar zelf de voordelen van een professionele oplossing</p>`,S_=`---json
13168{
13169  "title": "Was kostet Smartbooks?",
13170  "slug": "wat-kost-smartbooks",
13171  "metaTitle": "Was kostet Konsolidierungssoftware?",
13172  "date": "2024-09-26 15:18:47",
13173  "category": "Articles",
13174  "tags": [
13175    "Implementierung",
13176    "Kosten",
13177    "Preis"
13178  ],
13179  "excerpt": "Was kostet Konsolidierungssoftware? Smartbooks bietet drei transparente Pakete für Reporting, Konsolidierung und Budgetierung.",
13180  "originalUrl": "https://smartbooks.ai/artikelen/wat-kost-smartbooks/",
13181  "meta": null
13182}
13183---
13184<p><strong>Was kostet Konsolidierungssoftware? Smartbooks ist für Organisationen gemacht, die professionell reporten, konsolidieren, analysieren und budgetieren wollen.</strong></p>
13185
13186<p>Smartbooks bietet 3 Standardpakete. Alle Preise mit detaillierter Funktionsübersicht finden Sie hier: <a href="/de/preise">Preise</a>.</p>
13187
13188<h4>1. Finance Professional</h4>
13189<p>Dieses Paket enthält Funktionalität, um Bilanz und GuV monatlich automatisch mit auszureporten. Sie konfigurieren operative KPIs — z. B. FTEs oder verkaufte Produkte je Produktgruppe. Auch berechnete KPIs wie Umsatz pro Mitarbeitendem sind möglich.</p>
13190<p>Preis: 50 EUR pro Monat je Betriebsgesellschaft und 25 EUR pro Monat je Holding. Zusätzlich eine Basisgebühr von 50 EUR pro Monat je Hauptbuch-Verbindung.</p>
13191<p>Für die Einrichtung von Berichten für Bilanz, GuV, Cashflow und Top-down-Budgetierung fällt einmalig 400 EUR + 1 × Monatsgebühr an. Für ein oder mehrere Bottom-up-Modelle gilt ein Stundensatz von 125 EUR. Ein Modell ist oft in wenigen Stunden fertig; nur bei sehr hoher Komplexität dauert es bis zu 2 Tage.</p>
13192
13193<h4>2. Finance Leader</h4>
13194<p>Erweiterte Funktionalität mit automatischer Cashflow-Berechnung sowie Top-down- und Bottom-up-Budgetierung. Zusätzlich stehen mehrere Szenarien zur Verfügung.</p>
13195<p>Preis: 75 EUR pro Monat je Betriebsgesellschaft und 35 EUR pro Monat je Holding. Basisgebühr 75 EUR pro Monat je Hauptbuch-Verbindung.</p>
13196<p>Einrichtung: einmalig 500 EUR + 2 × Monatsgebühr. Bottom-up-Modelle zu 125 EUR/Stunde.</p>
13197
13198<h4>3. Finance Enterprise</h4>
13199<p>Das vollständigste Paket — inklusive Multi-Currency-Konsolidierung, Drill-down auf Hauptbuch-Ebene mit PDF der Ein- oder Ausgangsrechnung, und einer ChatGPT-Anbindung für KI-basierte Alerts zu Auffälligkeiten oder unerwarteten Plan-Ist-Abweichungen.</p>
13200<p>Preis: 35 EUR pro Betriebsgesellschaft und 35 EUR pro Holding. Basisgebühr 500 EUR pro Monat je Hauptbuch-Verbindung.</p>
13201<p>Einrichtung: einmalig 1.000 EUR + 3 × Monatsgebühr. Bottom-up-Modelle zu 125 EUR/Stunde.</p>
13202
13203<h4>Testphase</h4>
13204<p>Die Testphase dauert 30 Tage. In dieser Zeit richten wir Smartbooks so ein, dass Nutzerinnen viel Funktionalität sinnvoll nutzen können. Häufig setzen wir bereits erste Bottom-up-Planungsmodelle auf. So steht während der Testphase eine voll nutzbare Smartbooks-Umgebung bereit.</p>
13205<p>Am Ende der Testphase entscheidet der Kunde frei über die Fortsetzung; bei Nichtfortsetzung fallen keine Kosten an. Die allermeisten Kunden entscheiden sich für die Fortsetzung — dann startet die formale Nutzung.</p>
13206
13207<h4>
13207Angebot und Fakturierung</h4>
13208<p>Während der Testphase senden wir ein Angebot, das elektronisch unterzeichnet werden kann. Unsere AGB sind Bestandteil des Angebots.</p>
13209<p>Smartbooks fakturiert die Abonnementgebühr jährlich im Voraus. Das erlaubt uns, unsere Software kontinuierlich weiterzuentwickeln, und reduziert den Verwaltungsaufwand beidseitig. Die Rechnung für Abonnement und einmalige Einrichtung wird am Ende der Testphase versendet und ist dann fällig.</p>
13210
13211<p>So bietet Smartbooks eine flexible und transparente Lösung für Organisationen, die ihre Finanzprozesse optimieren wollen.</p>`,z_=`---json
13212{
13213  "title": "What does Smartbooks cost?",
13214  "metaTitle": "What Does Consolidation Software Cost?",
13215  "slug": "what-does-smartbooks-cost",
13216  "date": "",
13217  "category": "Articles",
13218  "tags": [
13219    "pricing",
13220    "financial software",
13221    "consolidation",
13222    "budgeting"
13223  ],
13224  "excerpt": "What is the cost of consolidation software? Smartbooks offers three transparent packages for reporting, consolidation, and budgeting.",
13225  "originalUrl": ""
13226}
13227---
13228<p><strong>What does consolidation software cost? Smartbooks is designed for organizations that want to report, consolidate, analyze, and budget professionally.</strong></p>
13229
13230<p>Smartbooks offers 3 standard packages. All prices, including a detailed explanation of the functionality, can be found via the following link: <a href=\\"`,A_=`---json
13231{
13232  "title": "Wat kost Smartbooks?",
13233  "metaTitle": "Wat kost consolidatiesoftware?",
13234  "slug": "wat-kost-smartbooks",
13235  "order": 26,
13236  "date": "2024-09-26 15:18:47",
13237  "category": "Articles",
13238  "tags": [
13239    "Implementatie",
13240    "Kosten",
13241    "Prijs"
13242  ],
13243  "excerpt": "Wat zijn de kosten van consolidatiesoftware? Smartbooks biedt drie transparante pakketten voor rapporteren, consolideren en budgetteren.",
13244  "originalUrl": "https://smartbooks.ai/artikelen/wat-kost-smartbooks/",
13245  "meta": null,
13246  "enSlug": "what-does-smartbooks-cost"
13247}
13248---
13249<p><strong>Wat kost consolidatiesoftware? Smartbooks is gemaakt voor organisaties die professioneel willen rapporteren, consolideren, analyseren en budgetteren.</strong></p>
13250
13251
13252
13253<p>Smartbooks biedt 3 standaard pakketten aan. Alle prijzen met een gedetailleerde toelichting op de functionaliteit is te vinden op via de volgende link:  <a href="/prijzen">Prijzen</a></p>
13254
13255
13256
13257<h4 class="wp-block-heading">1.     Finance Professional</h4>
13258
13259
13260
13261<p>Dit pakket biedt functionaliteit om de balans en de verlies &amp; winst maandelijks automatisch mee te rapporteren. Je kunt operationele KPIs configureren en op die manier bijvoorbeeld FTEs of het aantal verkochte producten per productgroep meenemen in de rapportages. Ook berekende KPIs, zoals omzet per medewerker zijn mogelijk.</p>
13262
13263
13264
13265<p>Dit pakket kost € 50 euro per maand voor iedere werkmaatschappij en € 25 per maand voor holdings. Daarnaast is er een basis fee van € 50 per maand voor iedere grootboek-connectie.</p>
13266
13267
13268
13269<p>Voor de inrichting van rapportages voor Balans, Verlies &amp; Winst, de cashflow en top-down budgetteren wordt een eenmalig een bedrag gerekend; deze kosten bedragen € 400 + 1 x de maandfee. Voor het inrichten van één of meer bottom-up modellen wordt een uurtarief van € 125,- gerekend. Het maken van één of meer modellen kan binnen enkele uren klaar zijn, en alleen in hele complexe gevallen kan dit oplopen tot 2 dagen.</p>
13270
13271
13272
13273<h4 class="wp-block-heading">2.     Finance Leader</h4>
13274
13275
13276
13277<p>Het tweede pakket heeft uitgebreidere functionaliteit waarmee een automatische cashflow wordt berekend en je kunt zowel top-down als bottom-up budgetteren. Daarnaast is er de mogelijkheid om meerdere scenario’s te gebruiken.</p>
13278
13279
13280
13281<p>Dit pakket kost € 75 euro per maand voor iedere werkmaatschappij en € 35 per maand voor holdings. Daarnaast is er een basis fee van € 75 per maand voor iedere grootboek-connectie.</p>
13282
13283
13284
13285<p>Voor de inrichting van rapportages voor Balans, Verlies &amp; Winst, de cashflow en top-down budgetteren wordt een eenmalig een bedrag gerekend; deze kosten bedragen € 500 + 2 x de maandfee. Voor het inrichten van één of meer bottom-up modellen wordt een uurtarief van € 125,- gerekend. Het maken van één of meer modellen kan binnen enkele uren klaar zijn, en alleen in hele complexe gevallen kan dit oplopen tot 2 dagen.</p>
13286
13287
13288
13289<h4 class="wp-block-heading">3.     Finance Enterprise</h4>
13290
13291
13292
13293<p>Het meest complete pakket biedt als extra functionaliteit o.a. multi-currency consolidatie en de optie om door te drillen naar de grootboektransacties, inclusief bijbehorende pdf van de inkoop- of verkoopfactuur. Daarnaast is er een koppeling met ChatGPT om via AI alerts te krijgen over afwijkende bedragen of onverwachte afwijkingen tussen budget en werkelijke bedragen.</p>
13294
13295
13296
13297<p>De kosten van dit pakket bedragen € 35 per werkmaatschappij en € 35 per holding. Daarnaast is er een basis fee van € 500 per maand voor iedere grootboek-connectie.</p>
13298
13299
13300
13301<p>Voor de inrichting van rapportages voor Balans, Verlies &amp; Winst, de cashflow en top-down budgetteren wordt een eenmalig een bedrag gerekend; deze kosten bedragen € 1.000 + 3 x de maandfee. Voor het inrichten van één of meer bottom-up modellen wordt een uurtarief van € 125,- gerekend. Het maken van één of meer modellen kan binnen enkele uren klaar zijn, en alleen in hele complexe gevallen kan dit oplopen tot 2 dagen.</p>
13302
13303
13304
13305<h4 class="wp-block-heading">Proefperiode</h4>
13306
13307
13308
13309<p>De proefperiode duurt 30 dagen en gedurende deze tijd richten wij Smartbooks in zodat gebruikers nuttig gebruik kunnen maken van veel van de functionaliteit. Vaak maken we ook een eerste opzet van de bottom-up planningsmodellen. Op deze manier staat er tijdens de proefperiode al een volledig bruikbare Smartbooks-omgeving.</p>
13310
13311
13312
13313<p>Aan het einde van de proefperiode staat het de klant volledig vrij om niet verder te gaan met Smartbooks, in dat geval wordt er niets in rekening gebracht. Bijna al onze klanten besluiten om door te gaan, en dan start na de proefperiode de het formele gebruik van Smartbooks.</p>
13314
13315
13316
13317<h4 class="wp-block-heading">Offerte en Facturatie</h4>
13318
13319
13320
13321<p>Tijdens de proefperiode sturen wij een offerte die elektronisch kan worden ondertekend. Met de offerte sturen we onze Algemene Voorwaarden mee.</p>
13322
13323
13324
13325<p>Smartbooks factureert de abonnement-fee een jaar vooruit, dat geeft ons het voordeel dat we onze software door kunnen blijven ontwikkelen, en vermindert de administratieve last voor kleine facturen van beide kanten. De factuur voor het abonnement en de eenmalige kosten wordt aan het einde van de proefperiode verstuurd en is direct betaalbaar op dat moment.</p>
13326
13327
13328
13329<p>Zo biedt Smartbooks een flexibele en transparante oplossing voor organisaties die hun financiële processen willen optimaliseren.</p>`,C_=`---json
13330{
13331  "title": "Working Capital berechnen: Formel, Richtwert und Beispiel",
13332  "slug": "werkkapitaal-berekenen",
13333  "metaTitle": "Working Capital berechnen: Formel und Richtwert",
13334  "date": "2026-08-21 10:00:00",
13335  "category": "Articles",
13336  "tags": [
13337    "Analyse",
13338    "Cashflow",
13339    "Business Control",
13340    "KPI"
13341  ],
13342  "excerpt": "Working Capital berechnen: Formel, Rechenbeispiel mit Bilanzposten, gesunde Richtwerte und konkrete Wege zur Verbesserung.",
13343  "originalUrl": ""
13344}
13345---
13346<h1>Working Capital berechnen: <strong>Formel, Richtwert und Beispiel</strong></h1>
13347<p><strong>Working Capital berechnen</strong> Sie, indem Sie die kurzfristigen Verbindlichkeiten vom Umlaufvermögen abziehen. Das Working Capital zeigt, wie viel Geld im laufenden Geschäft gebunden ist und ob ein Unternehmen seine kurzfristigen Verpflichtungen ohne zusätzliche Finanzierung erfüllen kann.</p>
13348<p>Für Controller und CFOs im Mittelstand ist das Working Capital das Scharnier zwischen Ergebnis und Liquidität: Ein profitables Unternehmen kann dennoch in Liquiditätsprobleme geraten, wenn Vorräte und Forderungen zu viel Geld binden.</p>
13349<h2>Was ist Working Capital?</h2>
13350<p>Das Working Capital ist die Differenz zwischen Vermögenswerten, die innerhalb eines Jahres zu Geld werden, und Schulden, die innerhalb eines Jahres fällig sind. Zwei Definitionen sind gängig:</p>
13351<ul>
13352<li><strong>Netto-Working-Capital:</strong> gesamtes Umlaufvermögen minus alle kurzfristigen Verbindlichkeiten, inklusive liquider Mittel und Kontokorrentkredit. Das ist die breite, bilanzorientierte Definition.</li>
13353<li><strong>Operatives Working Capital:</strong>
13353 Vorräte plus Forderungen minus Verbindlichkeiten aus Lieferungen und Leistungen. Diese Definition lässt Kasse und Finanzierung außen vor und misst rein, wie viel Geld der operative Betrieb bindet.</li>
13354</ul>
13355<p>Für die Steuerung ist die operative Variante meist am nützlichsten: Diese Posten werden direkt von Einkauf, Vertrieb und Forderungsmanagement beeinflusst.</p>
13356<h2>Die Formel für das Working Capital</h2>
13357<p><strong>Netto-Working-Capital = Umlaufvermögen &minus; kurzfristige Verbindlichkeiten</strong></p>
13358<p><strong>Operatives Working Capital = Vorräte + Forderungen &minus; Verbindlichkeiten</strong></p>
13359<ol>
13360<li>Addieren Sie das Umlaufvermögen: Vorräte, Forderungen, sonstige Forderungen und liquide Mittel.</li>
13361<li>Addieren Sie die kurzfristigen Verbindlichkeiten: Lieferantenverbindlichkeiten, Steuer- und Lohnverbindlichkeiten, Kontokorrentkredit und weitere Verpflichtungen innerhalb eines Jahres.</li>
13362<li>Ziehen Sie die kurzfristigen Verbindlichkeiten vom Umlaufvermögen ab.</li>
13363<li>Berechnen Sie zusätzlich das operative Working Capital, um zu sehen, welcher Teil im Betrieb selbst gebunden ist.</li>
13364</ol>
13365<p>Das Ergebnis ist ein Betrag, keine Kennzahl. Für das Verhältnis als Faktor nutzen Sie die <a href="/de/artikel/current-ratio-berekenen">Current Ratio</a>: Umlaufvermögen geteilt durch kurzfristige Verbindlichkeiten.</p>
13366<h2>Rechenbeispiel Working Capital</h2>
13367<table>
13368<thead><tr><th>Bilanzposten</th><th>Betrag</th></tr></thead>
13369<tbody>
13370<tr><td>Vorräte</td><td>&euro;300.000</td></tr>
13371<tr><td>Forderungen</td><td>&euro;450.000</td></tr>
13372<tr><td>Liquide Mittel</td><td>&euro;150.000</td></tr>
13373<tr><td><strong>Umlaufvermögen</strong></td><td><strong>&euro;900.000</strong></td></tr>
13374<tr><td>Lieferantenverbindlichkeiten</td><td>&euro;400.000</td></tr>
13375<tr><td>Sonstige kurzfristige Verbindlichkeiten</td><td>&euro;200.000</td></tr>
13376<tr><td><strong>Kurzfristige Verbindlichkeiten</strong></td><td><strong>&euro;600.000</strong></td></tr>
13377<tr><td><strong>Netto-Working-Capital</strong></td><td><strong>&euro;300.000</strong></td></tr>
13378<tr><td><strong>Operatives Working Capital</strong></td><td><strong>&euro;350.000</strong></td></tr>
13379</tbody>
13380</table>
13381<p>Netto-Working-Capital = 900.000 &minus; 600.000 = <strong>&euro;300.000</strong>. Operatives Working Capital = 300.000 + 450.000 &minus; 400.000 = <strong>&euro;350.000</strong>. Der operative Wert ist hier höher, weil Kasse und sonstige kurzfristige Verbindlichkeiten unberücksichtigt bleiben.</p>
13382<h2>Was ist ein gesundes Working Capital?</h2>
13383<p>Es gibt keinen universellen Richtwert. Der Bedarf hängt vom Geschäftsmodell ab: Ein Supermarkt verkauft Vorräte innerhalb von Tagen und kauft auf Kredit ein &mdash; er arbeitet strukturell mit negativem Working Capital, und das ist völlig gesund. Ein Maschinenbauer mit langen Durchlaufzeiten, der Material vorfinanziert, braucht dagegen ein hohes positives Working Capital.</p>
13384<ul>
13385<li><strong>Zu niedrig:</strong> zu wenig Puffer, um Lieferanten, Lohnsteuer und Umsatzsteuer fristgerecht zu zahlen. Jede Verzögerung beim Kunden wird sofort zum Liquiditätsproblem.</li>
13386<li><strong>Zu hoch:</strong> Kapital liegt in Vorräten und Forderungen brach und drückt die Kapitalrendite &mdash; siehe <a href="/de/artikel/rentabiliteit-berekenen">Rentabilität berechnen</a>.</li>
13387</ul>
13388<p>Beurteilen Sie das Working Capital daher immer in Prozent vom Umsatz, im Trend über mehrere Monate und im Branchenvergleich. Kombinieren Sie es mit der <a href="/de/artikel/solvabiliteit-berekenen">Eigenkapitalquote</a> für die langfristige Sicht.</p>
13389<h2>Working-Capital-Bedarf und der Cash Conversion Cycle</h2>
13390<p>Der Working-Capital-Bedarf ergibt sich aus der Zeit zwischen Zahlen und Bezahlt-Werden. Diese Zeit messen Sie mit dem Cash Conversion Cycle (CCC) aus drei Kennzahlen in Tagen:</p>
13391<ul>
13392<li><strong>DSO</strong> (days sales outstanding): durchschnittliche Zahlungsdauer der Kunden.</li>
13393<li><strong>DIO</strong> (days inventory outstanding): durchschnittliche Lagerdauer der Vorräte.</li>
13394<li><strong>DPO</strong> (days payables outstanding): durchschnittliche Dauer, bis Sie Lieferanten zahlen.</li>
13395</ul>
13396<p><strong>CCC = DSO + DIO &minus; DPO</strong></p>
13397<p>Bei DSO 45, DIO 60 und DPO 30 beträgt der CCC 75 Tage: Das Unternehmen finanziert rund zweieinhalb Monatsumsätze selbst vor. Jeder Tag, den Sie vom CCC abziehen, wird unmittelbar als Liquidität frei. Bei &euro;12 Millionen Umsatz entspricht ein Tag etwa &euro;33.000.</p>
13398<h2>Working Capital verbessern</h2>
13399<ul>
13400<li><strong>Forderungsmanagement:</strong>
13400 direkt nach Leistung fakturieren, mit einer festen Aging-Analyse arbeiten und ein strukturiertes Mahnwesen aufsetzen. Ein sinkender DSO ist der schnellste Effekt.</li>
13401<li><strong>Bestandsmanagement:</strong> Umschlagshäufigkeit je Warengruppe analysieren, Langsamdreher abbauen und den Einkauf an der aktuellen Nachfrage ausrichten statt an historischen Bestellmustern.</li>
13402<li><strong>Zahlungsziele bei Lieferanten:</strong> realistische Fristen verhandeln und voll nutzen, dabei Skonto gegen die Zinskosten des Kredits abwägen.</li>
13403<li><strong>Anzahlungen und Teilrechnungen:</strong> bei langen Projekten verlagert das die Finanzierungslast zum Kunden.</li>
13404</ul>
13405<h2>Working Capital in der Praxis überwachen</h2>
13406<p>Das Working Capital verändert sich täglich, wird aber in vielen Organisationen nur zum Jahresabschluss berechnet. Smartbooks ermittelt Netto- und operatives Working Capital, DSO, DIO und DPO direkt aus der Buchhaltung und zeigt das Forderungs- und Verbindlichkeiten-Aging je Einheit und konsolidiert. Damit stehen die Working-Capital-Zahlen im selben <a href="/de/funktionen/berichten">Berichtspaket</a> wie das Ergebnis und schließen an die <a href="/de/funktionen/cashflow-planung">13-Wochen-Cashflow-Planung</a> an.</p>
13407<h2>Häufige Fragen zum Working Capital</h2>
13408<p><strong>Wie berechnet man das Working Capital?</strong><br />Ziehen Sie die kurzfristigen Verbindlichkeiten vom Umlaufvermögen ab. Für das operative Working Capital rechnen Sie Vorräte plus Forderungen minus Verbindlichkeiten.</p>
13409<p><strong>Was ist der Unterschied zwischen Working Capital und Current Ratio?</strong><br />Das Working Capital ist ein Betrag (eine Differenz), die Current Ratio ein Faktor (ein Verhältnis). Beide nutzen dieselben Bilanzposten.</p>
13410<p><strong>Ist negatives Working Capital immer schlecht?</strong><br />Nein. Im Handel und in der Gastronomie ist negatives Working Capital normal, weil Kunden sofort zahlen und auf Kredit eingekauft wird. Bei langen Durchlaufzeiten ist es ein Warnsignal.</p>
13411<p><strong>Wie viel Working Capital brauche ich?</strong><br />Das folgt aus dem Cash Conversion Cycle: Je länger die Zeit zwischen Zahlen und Bezahlt-Werden, desto mehr Working Capital ist zur Finanzierung des Umsatzes nötig.</p>
13412<h2>Working Capital automatisch im Reporting</h2>
13413<p>In Smartbooks stehen Working Capital, Aging und Liquiditätskennzahlen standardmäßig im Monatsreporting &mdash; je Einheit und konsolidiert, ohne Excel-Arbeit. <a href="/de/demo">Demo vereinbaren</a> und auf den eigenen Zahlen sehen.</p>`,E_=`---json
13414{
13415  "title": "Working capital: calculation, formula and benchmarks",
13416  "slug": "working-capital",
13417  "metaTitle": "Working capital calculation: formula and norms",
13418  "date": "2026-08-21 10:00:00",
13419  "category": "Articles",
13420  "tags": [
13421    "Analytics",
13422    "Cash Flow",
13423    "Business Control",
13424    "KPI"
13425  ],
13426  "excerpt": "Working capital calculation explained: the formula, a worked example with balance sheet items, healthy benchmarks and how to improve it.",
13427  "originalUrl": ""
13428}
13429---
13430<h1>Working capital: <strong>calculation, formula and benchmarks</strong></h1>
13431<p><strong>Working capital</strong> is calculated by subtracting current liabilities from current assets. It shows how much cash is tied up in day-to-day operations and whether a company can meet its short-term obligations without additional financing.</p>
13432<p>
13432For controllers and CFOs in mid-sized companies, working capital is the hinge between profit and cash: a profitable business can still run into liquidity problems when inventory and receivables absorb too much money.</p>
13433<h2>What is working capital?</h2>
13434<p>Working capital is the difference between assets that convert into cash within a year and liabilities that fall due within a year. Two definitions are commonly used:</p>
13435<ul>
13436<li><strong>Net working capital:</strong> all current assets minus all current liabilities, including cash and short-term bank debt. This is the broad, balance-sheet definition.</li>
13437<li><strong>Operating working capital:</strong> inventory plus receivables minus payables. This definition excludes cash and financing and therefore measures purely how much money the operation itself locks up.</li>
13438</ul>
13439<p>For management information the operating variant is usually the most useful: those items are directly influenced by purchasing, sales and credit control.</p>
13440<h2>The working capital formula</h2>
13441<p><strong>Net working capital = current assets &minus; current liabilities</strong></p>
13442<p><strong>
13442Operating working capital = inventory + receivables &minus; payables</strong></p>
13443<ol>
13444<li>Add up current assets: inventory, trade receivables, other receivables and cash.</li>
13445<li>Add up current liabilities: trade payables, tax and payroll liabilities, overdraft facilities and other obligations due within a year.</li>
13446<li>Subtract current liabilities from current assets.</li>
13447<li>Also calculate operating working capital, so you can see how much is tied up in the operation itself.</li>
13448</ol>
13449<p>The result is an amount, not a ratio. To express the same items as a factor, use the <a href="/en/articles/current-ratio">current ratio</a>: current assets divided by current liabilities.</p>
13450<h2>Worked example: working capital calculation</h2>
13451<table>
13452<thead><tr><th>Balance sheet item</th><th>Amount</th></tr></thead>
13453<tbody>
13454<tr><td>Inventory</td><td>&euro;300,000</td></tr>
13455<tr><td>Trade receivables</td><td>&euro;450,000</td></tr>
13456<tr><td>Cash</td><td>&euro;150,000</td></tr>
13457<tr><td><strong>Current assets</strong></td><td><strong>&euro;900,000</strong></td></tr>
13458<tr><td>Trade payables</td><td>&euro;400,000</td></tr>
13459<tr><td>Other current liabilities</td><td>&euro;200,000</td></tr>
13460<tr><td><strong>Current liabilities</strong></td><td><strong>&euro;600,000</strong></td></tr>
13461<tr><td><strong>Net working capital</strong></td><td><strong>&euro;300,000</strong></td></tr>
13462<tr><td><strong>
13462Operating working capital</strong></td><td><strong>&euro;350,000</strong></td></tr>
13463</tbody>
13464</table>
13465<p>Net working capital = 900,000 &minus; 600,000 = <strong>&euro;300,000</strong>. Operating working capital = 300,000 + 450,000 &minus; 400,000 = <strong>&euro;350,000</strong>. The operating figure is higher here because cash and other current liabilities are excluded.</p>
13466<h2>What is a healthy level of working capital?</h2>
13467<p>There is no universal benchmark. The amount required depends on the business model: a supermarket sells inventory within days and buys on credit, so it structurally operates with negative working capital &mdash; perfectly healthy. A machine builder with long lead times that pre-finances materials needs substantial positive working capital.</p>
13468<ul>
13469<li><strong>Too low:</strong> not enough buffer to pay suppliers, payroll taxes and VAT on time. Any delay on the customer side immediately becomes a cash problem.</li>
13470<li><strong>Too high:</strong> capital sits idle in inventory and receivables, which depresses the return on capital &mdash; see <a href="/en/articles/return-on-equity-and-assets">return on equity and assets</a>.</li>
13471</ul>
13472<p>Always assess working capital as a percentage of revenue, as a trend over several months and against the industry norm. Combine it with the <a href="/en/articles/solvency-ratio">solvency ratio</a> for the longer-term picture.</p>
13473<h2>Working capital requirement and the cash conversion cycle</h2>
13474<p>The working capital requirement is driven by the time between paying and getting paid. That time is measured with the cash conversion cycle (CCC), built from three durations in days:</p>
13475<ul>
13476<li><strong>DSO</strong> (days sales outstanding): the average number of days customers take to pay.</li>
13477<li><strong>DIO</strong> (days inventory outstanding): the average number of days inventory stays on the balance sheet.</li>
13478<li><strong>DPO</strong> (days payables outstanding): the average number of days before you pay suppliers.</li>
13479</ul>
13480<p><strong>CCC = DSO + DIO &minus; DPO</strong></p>
13481<p>With DSO 45, DIO 60 and DPO 30, the CCC is 75 days: the company self-finances roughly two and a half months of revenue. Every day removed from the CCC is released as cash. At &euro;12 million revenue, one day is about &euro;33,000.</p>
13482<h2>How to improve working capital</h2>
13483<ul>
13484<li><strong>Credit control:</strong> invoice immediately after delivery, work with a fixed aging analysis and run a structured dunning process. A falling DSO is the quickest win.</li>
13485<li><strong>Inventory management:</strong> analyse turnover per product group, clear slow-moving items and align purchasing with current demand rather than historical ordering patterns.</li>
13486<li><strong>Supplier payment terms:</strong> negotiate realistic terms and use them fully, but weigh early-payment discounts against the interest cost of credit.</li>
13487<li><strong>Prepayments and milestone billing:</strong> on long projects this shifts the financing burden to the customer.</li>
13488</ul>
13489<h2>
13489Monitoring working capital in practice</h2>
13490<p>Working capital changes daily, yet in many organisations it is only calculated at year-end. Smartbooks derives net and operating working capital, DSO, DIO and DPO directly from the ledgers and shows receivables and payables aging per entity and consolidated. That puts the working capital figures in the same <a href="/en/functionalities/reporting">reporting set</a> as the result, connected to the <a href="/en/articles/13-week-cashflow-planning-peace-of-mind">13-week cash flow plan</a>.</p>
13491<h2>Frequently asked questions about working capital</h2>
13492<p><strong>How do you calculate working capital?</strong><br />Subtract current liabilities from current assets. For operating working capital, take inventory plus receivables minus payables.</p>
13493<p><strong>What is the difference between working capital and the current ratio?</strong><br />Working capital is an amount (a difference), the current ratio is a factor (a proportion). Both use the same balance sheet items.</p>
13494<p><strong>Is negative working capital always bad?</strong><br />No. In retail and hospitality negative working capital is normal, because customers pay immediately and purchasing happens on credit. With long lead times it is a warning signal.</p>
13495<p><strong>How much working capital do I need?</strong><br />That follows from the cash conversion cycle: the longer the gap between paying and being paid, the more working c
13495apital is needed to finance revenue.</p>
13496<h2>Working capital in your reporting, automatically</h2>
13497<p>In Smartbooks, working capital, aging and liquidity ratios are part of your monthly reporting by default &mdash; per entity and consolidated, without Excel work. <a href="/en/demo">Book a demo</a> and see it on your own numbers.</p>`,N_=`---json
13498{
13499  "title": "Werkkapitaal berekenen: formule, norm en voorbeeld",
13500  "slug": "werkkapitaal-berekenen",
13501  "order": 59,
13502  "metaTitle": "Werkkapitaal berekenen: formule en norm",
13503  "date": "2026-08-21 10:00:00",
13504  "category": "Articles",
13505  "tags": [
13506    "Analyse",
13507    "Cashflow",
13508    "Business Control",
13509    "KPI"
13510  ],
13511  "excerpt": "Werkkapitaal berekenen: de formule, een rekenvoorbeeld met balansposten, wat een gezond werkkapitaal is en hoe je het structureel verbetert.",
13512  "originalUrl": "",
13513  "enSlug": "working-capital"
13514}
13515---
13516<h1>Werkkapitaal berekenen: <strong>formule, norm en voorbeeld</strong></h1>
13517<p><strong>Werkkapitaal berekenen</strong> doe je door de kortlopende schulden af te trekken van de vlottende activa. Het werkkapitaal laat zien hoeveel geld er in de dagelijkse bedrijfsvoering vastzit en of een onderneming haar lopende verplichtingen kan betalen zonder extra financiering.</p>
13518<p>Voor controllers en CFO's in het MKB is werkkapitaal het scharnierpunt tussen resultaat en kas: een winstgevende onderneming kan alsnog in liquiditeitsproblemen komen wanneer voorraden en debiteuren te veel geld opslokken.</p>
13519<h2>Wat is werkkapitaal?</h2>
13520<p>Werkkapitaal is het verschil tussen de bezittingen die binnen een jaar in geld worden omgezet en de schulden die binnen een jaar moeten worden betaald. Er zijn twee gangbare definities:</p>
13521<ul>
13522<li><strong>Netto werkkapitaal:</strong> alle vlottende activa minus alle kortlopende schulden, inclusief liquide middelen en kortlopend bankkrediet. Dit is de brede, balansgerichte definitie.</li>
13523<li><strong>Operationeel werkkapitaal:</strong> voorraad plus debiteuren minus crediteuren. Deze definitie laat kas en financiering buiten beschouwing en meet dus zuiver hoeveel geld de operatie zelf vastlegt.</li>
13524</ul>
13525<p>Voor stuurinformatie is de operationele variant meestal het nuttigst: die posten zijn direct beïnvloedbaar door inkoop, verkoop en debiteurenbeheer.</p>
13526<h2>De formule om werkkapitaal te berekenen</h2>
13527<p><strong>Netto werkkapitaal = vlottende activa &minus; kortlopende schulden</strong></p>
13528<p><strong>Operationeel werkkapitaal = voorraad + debiteuren &minus; crediteuren</strong></p>
13529<ol>
13530<li>Tel de vlottende activa op: voorraden, debiteuren, overige vorderingen en liquide middelen.</li>
13531<li>Tel de kortlopende schulden op: crediteuren, belasting- en loonheffingsschulden, rekening-courantkrediet en overige verplichtingen binnen een jaar.</li>
13532<li>Trek de kortlopende schulden af van de vlottende activa.</li>
13533<li>Bereken daarnaast het operationele werkkapitaal, zodat je ziet welk deel in de operatie zelf vastzit.</li>
13534</ol>
13535<p>De uitkomst is een bedrag, geen ratio. Wil je de verhouding in een factor uitdrukken, gebruik dan de <a href="/artikelen/current-ratio-berekenen">current ratio</a>: vlottende activa gedeeld door kortlopende schulden.</p>
13536<h2>Rekenvoorbeeld werkkapitaal</h2>
13537<table>
13538<thead><tr><th>Balanspost</th><th>Bedrag</th></tr></thead>
13539<tbody>
13540<tr><td>Voorraden</td><td>&euro;300.000</td></tr>
13541<tr><td>Debiteuren</td><td>&euro;450.000</td></tr>
13542<tr><td>Liquide middelen</td><td>&euro;150.000</td></tr>
13543<tr><td><strong>Vlottende activa</strong></td><td><strong>&euro;900.000</strong></td></tr>
13544<tr><td>Crediteuren</td><td>&euro;400.000</td></tr>
13545<tr><td>Overige kortlopende schulden</td><td>&euro;200.000</td></tr>
13546<tr><td><strong>Kortlopende schulden</strong></td><td><strong>&euro;600.000</strong></td></tr>
13547<tr><td><strong>Netto werkkapitaal</strong></td><td><strong>&euro;300.000</strong></td></tr>
13548<tr><td><strong>Operationeel werkkapitaal</strong></td><td><strong>&euro;350.000</strong></td></tr>
13549</tbody>
13550</table>
13551<p>Netto werkkapitaal = 900.000 &minus; 600.000 = <strong>&euro;300.000</strong>. Operationeel werkkapitaal = 300.000 + 450.000 &minus; 400.000 = <strong>&euro;350.000</strong>. Het operationele werkkapitaal is hier hoger dan het netto werkkapitaal, omdat kas en overige kortlopende schulden buiten de berekening blijven.</p>
13552<h2>Wat is een gezond werkkapitaal?</h2>
13553<p>Er is geen universele norm voor werkkapitaal. Het benodigde bedrag hangt af van het businessmodel: een supermarkt verkoopt voorraad binnen dagen en koopt op krediet in, en werkt daardoor structureel met een negatief werkkapitaal &mdash; volkomen gezond. Een machinebouwer met lange doorlooptijden en voorfinanciering van materiaal heeft juist een groot positief werkkapitaal nodig.</p>
13554<ul>
13555<li><strong>Te laag:</strong> onvoldoende buffer om leveranciers, loonheffingen en btw op tijd te betalen. Elke vertraging bij een klant wordt direct een kasprobleem.</li>
13556<li><strong>Te hoog:</strong> kapitaal ligt stil in voorraad en debiteuren. Dat drukt het rendement op het vermogen &mdash; zie <a href="/artikelen/rentabiliteit-berekenen">rentabiliteit berekenen</a>.</li>
13557</ul>
13558<p>Beoordeel werkkapitaal daarom altijd als percentage van de omzet, in de trend over meerdere maanden en tegen de sectornorm. Combineer het met de <a href="/artikelen/solvabiliteit-berekenen">solvabiliteit</a>
13558 voor het beeld op langere termijn.</p>
13559<h2>Werkkapitaalbehoefte en de cash conversion cycle</h2>
13560<p>De werkkapitaalbehoefte wordt bepaald door de tijd tussen betalen en betaald worden. Die tijd meet je met de cash conversion cycle (CCC), opgebouwd uit drie doorlooptijden in dagen:</p>
13561<ul>
13562<li><strong>DSO</strong> (days sales outstanding): gemiddeld aantal dagen dat klanten erover doen om te betalen.</li>
13563<li><strong>DIO</strong> (days inventory outstanding): gemiddeld aantal dagen dat voorraad op de balans staat.</li>
13564<li><strong>DPO</strong> (days payables outstanding): gemiddeld aantal dagen voordat je zelf leveranciers betaalt.</li>
13565</ul>
13566<p><strong>CCC = DSO + DIO &minus; DPO</strong></p>
13567<p>Bij DSO 45, DIO 60 en DPO 30 is de CCC 75 dagen: het bedrijf financiert ruim tweeënhalve maand omzet zelf voor. Elke dag die je van de CCC afhaalt, komt direct als kas vrij. Bij een omzet van &euro;12 miljoen is één dag ongeveer &euro;33.000.</p>
13568<h2>Werkkapitaal verbeteren</h2>
13569<ul>
13570<li><strong>Debiteurenbeheer:</strong> factureer direct na levering, werk met een vaste aging-analyse en zet een gestructureerd aanmaanproces neer. Een dalende DSO is de snelste winst.</li>
13571<li><strong>Voorraadbeheer:</strong> analyseer omloopsnelheid per artikelgroep, saneer traag lopende artikelen en stem inkoop af op de actuele vraag in plaats van op historische bestelpatronen.</li>
13572<li><strong>Betalingstermijnen leveranciers:</strong> onderhandel realistische termijnen en benut ze volledig, maar weeg betalingskorting af tegen de rentelast van het krediet.</li>
13573<li><strong>Voorschotten en termijnfacturatie:</strong> bij lange projecten verschuift dit de financieringslast naar de klant.</li>
13574</ul>
13575<h2>Werkkapitaal monitoren in de praktijk</h2>
13576<p>Werkkapitaal verandert dagelijks, terwijl het in veel organisaties alleen bij de jaarrekening wordt uitgerekend. Smartbooks berekent netto en operationeel werkkapitaal, DSO, DIO en DPO rechtstreeks uit de administratie en toont de debiteuren- en crediteurenaging per entiteit en geconsolideerd. Daarmee staan de werkkapitaalcijfers in dezelfde <a href="/functionaliteiten/rapporteren">rapportageset</a> als het resultaat, en sluiten ze aan op de <a href="/artikelen/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening">13-weken cashflowplanning</a>.</p>
13577<h2>Veelgestelde vragen over werkkapitaal</h2>
13578<p><strong>Hoe bereken je werkkapitaal?</strong><br />Trek de kortlopende schulden af van de vlottende activa. Voor het operationele werkkapitaal reken je voorraad plus debiteuren minus crediteuren.</p>
13579<p><strong>Wat is het verschil tussen werkkapitaal en current ratio?</strong><br />Werkkapitaal is een bedrag (een verschil), de current ratio is een factor (een verhouding). Ze gebruiken dezelfde balansposten.</p>
13580<p><strong>Is negatief werkkapitaal altijd slecht?</strong><br />Nee. In retail en horeca is negatief werkkapitaal normaal, omdat er direct wordt afgerekend en op krediet wordt ingekocht. Bij lange doorlooptijden is het wel een waarschuwingssignaal.</p>
13581<p><strong>Hoeveel werkkapitaal heb ik nodig?</strong><br />Dat volgt uit de cash conversion cycle: hoe langer de periode tussen betalen en betaald worden, hoe meer werkkapitaal nodig is om de omzet te financieren.</p>
13582<h2>Werkkapitaal automatisch in je rapportage</h2>
13583<p>In Smartbooks staan werkkapitaal, aging en liquiditeitsratio's standaard in je maandrapportage &mdash; per entiteit en geconsolideerd, zonder Excel-werk. <a href="/demo">Plan een demo</a> en zie het op je eigen cijfers.</p>`,sz=["Articles","Videos","Case Studies","Customer Stories"],lz=["Alle",...sz];function ex(e){return e&&lz.includes(e)?e:"Alle"}const I_=lz,yd=`---json
13584`,nx=`
13585---
13586`;function P_(e,n){if(!e.startsWith(yd))throw new Error(`[content] ${n}: file must start with "${yd.trim()}" frontmatter marker`);const t=e.indexOf(nx,yd.length);if(t===-1)throw new Error(`[content] ${n}: missing closing "---" frontmatter marker`);const i=e.slice(yd.length,t),a=e.slice(t+nx.length);let o;try{o=JSON.parse(i)}catch(s){throw new Error(`[content] ${n}: invalid JSON frontmatter — ${s.message}`)}return{data:o,body:a}}function T_(e){const t=e.replace(/\\/g,"/").match(/([^/]+)\/(nl|en|de)\.md$/);if(!t)throw new Error(`[content] unexpected content file path: ${e}`);return{folder:t[1],locale:t[2]}}const wn=e=>typeof e=="string"?e:"",cg=e=>typeof e=="string"?e:void 0,ug=e=>Array.isArray(e)?e.filter(n=>typeof n=="string"):[],hg=e=>e&&typeof e=="object"?e:void 0;function gg(e,n,t){for(const i of n)if(!(i in e))throw new Error(`[content] ${t}: missing required frontmatter field "${i}"`)}function D_(e){const n=new Map;for(const[l,d]of Object.entries(e)){const{folder:c,locale:u}=T_(l),h=n.get(c)??{};if(h[u])throw new Error(`[content] duplicate ${u}.md for article "${c}"`);h[u]={...P_(d,l),path:l},n.set(c,h)}const t=[],i=new Map,a=[],o=[],s={};for(const[l,d]of n){const c=`${l}/nl.md`;if(!d.nl)throw new Error(`[content] article folder "${l}" has no nl.md`);if(!d.en)throw new Error(`[content] article "${l}" has no en.md — English content is required for every NL article`);const u=d.nl;
13586gg(u.data,["title","slug","enSlug","date","category","tags","excerpt","originalUrl"],c);const h=wn(u.data.slug);if(h!==l)throw new Error(`[content] ${c}: frontmatter slug "${h}" does not match folder name "${l}"`);const g=wn(u.data.category);if(!sz.includes(g))throw new Error(`[content] ${c}: unknown category "${g}"`);const m=wn(u.data.enSlug);if(!m)throw new Error(`[content] ${c}: empty enSlug`);const p=d.en;gg(p.data,["title","slug"],`${l}/en.md`);const f=wn(p.data.slug);if(f!==h&&f!==m)throw new Error(`[content] ${l}/en.md: slug "${f}" matches neither the NL slug "${h}" nor enSlug "${m}"`);const w=typeof u.data.order=="number"?u.data.order:void 0;if(w!==void 0&&i.set(h,w),t.push({title:wn(u.data.title),slug:h,enSlug:m,date:wn(u.data.date),category:g,tags:ug(u.data.tags),content:u.body,excerpt:wn(u.data.excerpt),originalUrl:wn(u.data.originalUrl),metaTitle:cg(u.data.metaTitle),meta:hg(u.data.meta)}),s[h]=g,a.push({title:wn(p.data.title),slug:f,date:wn(p.data.date),category:wn(p.data.category),tags:ug(p.data.tags),content:p.body,excerpt:wn(p.data.excerpt),originalUrl:wn(p.data.originalUrl),metaTitle:cg(p.data.metaTitle),meta:hg(p.data.meta)}),d.de){const k=d.de;gg(k.data,["title","slug"],`${l}/de.md`),o.push({title:wn(k.data.title),slug:wn(k.data.slug),date:wn(k.data.date),category:wn(k.data.category),tags:ug(k.data.tags),content:k.body,excerpt:wn(k.data.excerpt),originalUrl:wn(k.data.originalUrl),metaTitle:cg(k.data.metaTitle),meta:hg(k.data.meta)})}}return t.sort((l,d)=>{const c=i.get(l.slug)??Number.MAX_SAFE_INTEGER,u=i.get(d.slug)??Number.MAX_SAFE_INTEGER;return c-u||l.slug.localeCompare(d.slug)}),{articles:t,enArticles:a,deArticles:o,nlSlugToCategory:s}}const B_=Object.assign({"/src/content/articles/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening/de.md":WF,"/src/content/articles/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening/en.md":VF,"/src/content/articles/13-weken-cashflowplanning-rust-in-je-hoofd-en-op-je-bankrekening/nl.md":KF,"/src/content/articles/accountancy-automatiseren/en.md":qF,"/src/content/articles/accountancy-automatiseren/nl.md":HF,"/src/content/articles/ace-company/de.md":UF,"/src/content/articles/ace-company/en.md":GF,"/src/content/articles/ace-company/nl.md":$F,"/src/content/articles/achieving-efficiency-and-effectiveness-in-financial-planning-analysis/de.md":ZF,"/src/content/articles/achieving-efficiency-and-effectiveness-in-financial-planning-analysis/en.md":YF,"/src/content/articles/achieving-efficiency-and-effectiveness-in-financial-planning-analysis/nl.md":QF,"/src/content/articles/ai-boekhouden/en.md":JF,"/src/content/articles/ai-boekhouden/nl.md":XF,"/src/content/articles/ai-controller/de.md":eR,"/src/content/articles/ai-controller/en.md":nR,"/src/content/articles/ai-controller/nl.md":tR,"/src/content/articles/ai-supported-analyse-van-verlies-winst-rapportages/de.md":iR,"/src/content/articles/ai-supported-analyse-van-verlies-winst-rapportages/en.md":rR,"/src/content/articles/ai-supported-analyse-van-verlies-winst-rapportages/nl.md":aR,"/src/content/articles/ai-voor-serieuze-business-control-finance-taken/de.md":oR,"/src/content/articles/ai-voor-serieuze-business-control-finance-taken/en.md":sR,"/src/content/articles/ai-voor-serieuze-business-control-finance-taken/nl.md":lR,"/src/content/articles/alex-virtuele-business-controller/de.md":dR,"/src/content/articles/alex-virtuele-business-controller/en.md":cR,"/src/content/articles/alex-virtuele-business-controller/nl.md":uR,"/src/content/articles/anove/de.md":hR,"/src/content/articles/anove/en.md":gR,"/src/content/articles/anove/nl.md":mR,"/src/content/articles/artificial-intelligence/de.md":pR,"/src/content/articles/artificial-intelligence/en.md":fR,"/src/content/articles/artificial-intelligence/nl.md":bR,"/src/content/articles/best-practices-in-rapportages/de.md":vR,"/src/content/articles/best-practices-in-rapportages/en.md":kR,"/src/content/articles/best-practices-in-rapportages/nl.md":wR,"/src/content/articles/boekhouden-als-record-to-report-proces/de.md":xR,"/src/content/articles/boekhouden-als-record-to-report-proces/en.md":yR,"/src/content/articles/boekhouden-als-record-to-report-proces/nl.md":jR,"/src/content/articles/break-even-omzet-berekenen/en.md":SR,"/src/content/articles/break-even-omzet-berekenen/nl.md":zR,"/src/content/articles/brutomarge-berekenen/en.md":AR,"/src/content/articles/brutomarge-berekenen/nl.md":CR,"/src/content/articles/budgetteren-demo/de.md":ER,"/src/content/articles/budgetteren-demo/en.md":NR,"/src/content/articles/budgetteren-demo/nl.md":IR,"/src/content/articles/cash-conversion-cycle/en.md":PR,"/src/content/articles/cash-conversion-cycle/nl.md":TR,"/src/content/articles/cashflow-berekenen/en.md":DR,"/src/content/articles/cashflow-berekenen/nl.md":BR,"/src/content/articles/consolideren-demo/de.md":MR,"/src/content/articles/consolideren-demo/en.md":FR,"/src/content/articles/consolideren-demo/nl.md":RR,"/src/content/articles/crediteurenbeheer/en.md":OR,"/src/content/articles/crediteurenbeheer/nl.md":_R,"/src/content/articles/current-ratio-berekenen/de.md":LR,"/src/content/articles/current-ratio-berekenen/en.md":WR,"/src/content/articles/current-ratio-berekenen/nl.md":VR,"/src/content/articles/de-kracht-van-smartbooks-een-interview-met-fractional-cfo-marcel-vlug-over-innovatie-in-consolidatiesystemen/de.md":KR,"/src/content/articles/de-kracht-van-smartbooks-een-interview-met-fractional-cfo-marcel-vlug-over-innovatie-in-consolidatiesystemen/en.md":qR,"/src/content/articles/de-kracht-van-smartbooks-een-interview-met-fractional-cfo-marcel-vlug-over-innovatie-in-consolidatiesystemen/nl.md":HR,"/src/content/articles/de-vier-kerncompetenties-van-een-best-in-class-finance-organisatie/de.md":UR,"/src/content/articles/de-vier-kerncompetenties-van-een-best-in-class-finance-organisatie/en.md":GR,"/src/content/articles/de-vier-kerncompetenties-van-een-best-in-class-finance-organisatie/nl.md":$R,"/src/content/articles/debiteurenbeheer-automatiseren/en.md":ZR,"/src/content/articles/debiteurenbeheer-automatiseren/nl.md":YR,"/src/content/articles/design-your-annual-planning-cycle-and-monthly-budget-update-as-an-end-to-end-process/de.md":QR,"/src/content/articles/design-your-annual-planning-cycle-and-monthly-budget-update-as-an-end-to-end-process/en.md":JR,"/src/content/articles/design-your-annual-planning-cycle-and-monthly-budget-update-as-an-end-to-end-process/nl.md":XR,"/src/content/articles/dso-berekenen/en.md":e6,"/src/content/articles/dso-berekenen/nl.md":n6,"/src/content/articles/ebitda-berekenen/de.md":t6,"/src/content/articles/ebitda-berekenen/en.md":i6,"/src/content/articles/ebitda-berekenen/nl.md":r6,"/src/content/articles/esg-rapportage/de.md":a6,"/src/content/articles/esg-rapportage/en.md":o6,"/src/content/articles/esg-rapportage/nl.md":s6,"/src/content/articles/financiele-consolidatie-masteren-praktische
13586-stappen-voor-succes/de.md":l6,"/src/content/articles/financiele-consolidatie-masteren-praktische-stappen-voor-succes/en.md":d6,"/src/content/articles/financiele-consolidatie-masteren-praktische-stappen-voor-succes/nl.md":c6,"/src/content/articles/glomar/de.md":u6,"/src/content/articles/glomar/en.md":h6,"/src/content/articles/glomar/nl.md":g6,"/src/content/articles/het-nut-van-een-business-plan/de.md":m6,"/src/content/articles/het-nut-van-een-business-plan/en.md":p6,"/src/content/articles/het-nut-van-een-business-plan/nl.md":f6,"/src/content/articles/het-verschil-tussen-plannen-budgetteren-en-forecasten/de.md":b6,"/src/content/articles/het-verschil-tussen-plannen-budgetteren-en-forecasten/en.md":v6,"/src/content/articles/het-verschil-tussen-plannen-budgetteren-en-forecasten/nl.md":k6,"/src/content/articles/hoe-ai-het-maandafsluitingsproces-en-financiele-rapportages-gaat-veranderen/de.md":w6,"/src/content/articles/hoe-ai-het-maandafsluitingsproces-en-financiele-rapportages-gaat-veranderen/en.md":x6,"/src/content/articles/hoe-ai-het-maandafsluitingsproces-en-financiele-rapportages-gaat-veranderen/nl.md":y6,"/src/content/articles/intermax/de.md":j6,"/src/content/articles/intermax/en.md":S6,"/src/content/articles/intermax/nl.md":z6,"/src/content/articles/lifewatcher/de.md":A6,"/src/content/articles/lifewatcher/en.md":C6,"/src/content/articles/lifewatcher/nl.md":E6,"/src/content/articles/liquiditeitsbegroting-maken/de.md":N6,"/src/content/articles/liquiditeitsbegroting-maken/en.md":I6,"/src/content/articles/liquiditeitsbegroting-maken/nl.md":P6,"/src/content/articles/maandafsluiting-demo/de.md":T6,"/src/content/articles/maandafsluiting-demo/en.md":D6,"/src/content/articles/maandafsluiting-demo/nl.md":B6,"/src/content/articles/maandafsluiting/de.md":M6,"/src/content/articles/maandafsluiting/en.md":F6,"/src/content/articles/maandafsluiting/nl.md":R6,"/src/content/articles/omloopsnelheid-voorraad-berekenen/en.md":O6,"/src/content/articles/omloopsnelheid-voorraad-berekenen/nl.md":_6,"/src/content/articles/plan-to-perform/de.md":L6,"/src/content/articles/plan-to-perform/en.md":W6,"/src/content/articles/plan-to-perform/nl.md":V6,"/src/content/articles/plannen-en-budgetteren-top-down-bottom-up-of-op-basis-van-het-business-model/de.md":K6,"/src/content/articles/plannen-en-budgetteren-top-down-bottom-up-of-op-basis-van-het-business-model/en.md":q6,"/src/content/articles/plannen-en-budgetteren-top-down-bottom-up-of-op-basis-van-het-business-model/nl.md":H6,"/src/content/articles/primus-wafer-paper/de.md":U6,"/src/content/articles/primus-wafer-paper/en.md":G6,"/src/content/articles/primus-wafer-paper/nl.md":$6,"/src/content/articles/quick-ratio-berekenen/en.md":Z6,"/src/content/articles/quick-ratio-berekenen/nl.md":Y6,"/src/content/articles/rapporteren-demo/de.md":Q6,"/src/content/articles/rapporteren-demo/en.md":J6,"/src/content/articles/rapporteren-demo/nl.md":X6,"/src/content/articles/rapporteren-vanuit-smartbooks-met-excel/de.md":eO,"/src/content/articles/rapporteren-vanuit-smartbooks-met-excel/en.md":nO,"/src/content/articles/rapporteren-vanuit-smartbooks-met-excel/nl.md":tO,"/src/content/articles/rentabiliteit-berekenen/de.md":iO,"/src/content/articles/rentabiliteit-berekenen/en.md":rO,"/src/content/articles/rentabiliteit-berekenen/nl.md":aO,"/src/content/articles/risketeers/de.md":oO,"/src/content/articles/risketeers/en.md":sO,"/src/content/articles/risketeers/nl.md":lO,"/src/content/articles/rolling-forecast/de.md":dO,"/src/content/articles/rolling-forecast/en.md":cO,"/src/content/articles/rolling-forecast/nl.md":uO,"/src/content/articles/smart-story/de.md":hO,"/src/content/articles/smart-story/en.md":gO,"/src/content/articles/smart-story/nl.md":mO,"/src/content/articles/smartbooks-2min-introductie/de.md":pO,"/src/content/articles/smartbooks-2min-introductie/en.md":fO,"/src/content/articles/smartbooks-2min-introductie/nl.md":bO,"/src/content/articles/smartbooks-6min-introductie/de.md":vO,"/src/content/articles/smartbooks-6min-introductie/en.md":kO,"/src/content/articles/smartbooks-6min-introductie/nl.md":wO,"/src/content/articles/smartbooks-demo/de.md":xO,"/src/content/articles/smartbooks-demo/en.md":yO,"/src/content/articles/smartbooks-demo/nl.md":jO,"/src/content/articles/smartbooks-en-power-bi-de-perfecte-combinatie-voor-financieel-inzicht/de.md":SO,"/src/content/articles/smartbooks-en-power-bi-de-perfecte-combinatie-voor-financieel-inzicht/en.md":zO,"/src/content/articles/smartbooks-en-power-bi-de-perfecte-combinatie-voor-financieel-inzicht/nl.md":AO,"/src/content/articles/smartbooks-vs-bright-analytics/de.md":CO,"/src/content/articles/smartbooks-vs-bright-analytics/en.md":EO,"/src/content/articles/smartbooks-vs-bright-analytics/nl.md":NO,"/src/content/articles/smartbooks-vs-finstack/de.md":IO,"/src/content/articles/smartbooks-vs-finstack/en.md":PO,"/src/content/articles/smartbooks-vs-finstack/nl.md":TO,"/src/content/articles/smartbooks-vs-lucanet-welke-financiele-software-past-het-beste-bij-uw-bedrijf/de.md":DO,"/src/content/articles/smartbooks-vs-lucanet-welke-financiele-software-past-het-beste-bij-uw-bedrijf/en.md":BO,"/src/content/articles/smartbooks-vs-lucanet-welke-financiele-software-past-het-beste-bij-uw-bedrijf/nl.md":MO,"/src/content/articles/smartbooks-vs-lucanet/de.md":FO,"/src/content/articles/smartbooks-vs-lucanet/en.md":RO,"/src/content/articles/smartbooks-vs-lucanet/nl.md":OO,"/src/content/articles/smartbooks-vs-power-bi/de.md":_O,"/src/content/articles/smartbooks-vs-power-bi/en.md":LO,"/src/content/articles/smartbooks-vs-power-bi/nl.md":WO,"/src/content/articles/smartbooks-vs-speedbooks/de.md":VO,"/src/content/articles/smartbooks-vs-speedbooks/en.md":KO,"/src/content/articles/smartbooks-vs-speedbooks/nl.md":qO,"/src/content/articles/smartbooks-vs-visionplanner/de.md":HO,"/src/content/articles/smartbooks-vs-visionplanner/en.md":UO,"/src/content/articles/smartbooks-vs-visionplanner/nl.md":GO,"/src/content/articles/snelle-implementatie-van-smartbooks/de.md":$O,"/src/content/articles/snelle-implementatie-van-smartbooks/en.md":ZO,"/src/content/articles/snelle-implementatie-van-smartbooks/nl.md":YO,"/src/content/articles/solvabiliteit-berekenen/de.md":QO,"/src/content/articles/solvabiliteit-berekenen/en.md":JO,"/src/content/articles/solvabiliteit-berekenen/nl.md":XO,"/src/content/articles/splitsen-van-grootboekrekeningen-voor-nauwkeurige-analyses/de.md":e_,"/src/content/articles/splitsen-van-grootboekrekeningen-voor-nauwkeurige-analyses/en.md":n_,"/src/content/articles/splitsen-van-grootboekrekeningen-voor-nauwkeurige-analyses/nl.md":t_,"/src/content/articles/the-power-of-automation-in-financial-consolidation/de.md":i_,"/src/content/articles/the-power-of-automation-in-financial-consolidation/en.md":r_,"/src/content/articles/the-power-of-automation-in-financial-consolidation/nl.md":a_,"/src/content/articles/tjojs-technologies/de.md":o_,"/src/content/articles/tjojs-technologies/en.md":s_,"/src/content/articles/tjojs-technologies/nl.md":l_,"/src/content/articles/to-interface-or-not-that-is-the-question/de.md":d_,"/src/content/articles/to-interface-or-not-that-is-the-question/en.md":c_,"/src/content/articles/to-interface-or-not-that-is-the-question/nl.md":u_,"/src/content/articles/vergelijk-business-control-software/de.md":h_,"/src/content/articles/vergelijk-business-control-software/en.md":g_,"/src/content/articles/vergelijk-business-control-software/nl.md":m_,"/src/content/articles/verrekening-van-koersverschillen-in-smartbooks-ai/de.md":p_,"/src/content/articles/verrekening-van-koersverschillen-in-smartbooks-ai/en.md":f_,"/src/content/articles/verrekening-van-koersverschillen-in-smartbooks-ai/nl.md":b_,"/src/content/articles/verschillen-en-overeenkomsten-tussen-fpa-en-epm/de.md":v_,"/src/content/articles/verschillen-en-overeenkomsten-tussen-fpa-en-epm/en.md":k_,"/src/content/articles/verschillen-en-overeenkomsten-tussen-fpa-en-epm/nl.md":w_,"/src/content/articles/wanneer-zijn-spreadsheets-minder-geschikt-voor-complexe-financiele-analyses/de.md":x_,"/src/content/articles/wanneer-zijn-spreadsheets-minder-geschikt-voor-complexe-financiele-analyses/en.md":y_,"/src/content/articles/wanneer-zijn-spreadsheets-minder-geschikt-voor-complexe-financiele-analyses/nl.md":j_,"/src/content/articles/wat-kost-smartbooks/de.md":S_,"/src/content/articles/wat-kost-smartbooks/en.md":z_,"/src/content/articles/wat-kost-smartbooks/nl.md":A_,"/src/content/articles/werkkapitaal-berekenen/de.md":C_,"/src/content/articles/werkkapitaal-berekenen/en.md":E_,"/src/content/articles/werkkapitaal-berekenen/nl.md":N_}),Ab=D_(B_),Li=Ab.articles,Cb=Ab.deArticles,ru=["cfo","controller","aandeelhouders","accountants","stakeholders"],M_=Zi.roles,bp=e=>M_[e]??e,dz=e=>{if(ru.includes(e))return e;for(const n of ru)if(bp(n)===e)return n},tx=new Set(Cb.map(e=>
13586e.slug)),Eb=Zi.static,Zr=Zi.dynamic,F_=Zi.articleCategoryBases;function R_(e){const n=Li.find(i=>i.slug===e),t=n?F_[n.category]??"artikelDetail":"artikelDetail";return Zr[t]}const O_=e=>e.startsWith("/")?e:`/${e}`,Nb=e=>e.length>1&&e.endsWith("/")?e.slice(0,-1):e,ix=e=>Nb(e)||"/",cz=(e,n)=>{const t=O_(e);return t==="/"?n:`${n}${t}`},Ri=e=>cz(e,"/en"),fl=e=>cz(e,"/de"),B=(e,n)=>{const t=Eb[e];if(!t)throw new Error(`[localeRoutes] unknown static slug key: ${String(e)}`);return n==="nl"?t.nl:n==="en"?Ri(t.en):fl(t.de)},je=e=>{const n=Eb[e];if(!n)throw new Error(`[localeRoutes] unknown static slug key: ${String(e)}`);return{nl:n.nl,en:Ri(n.en),de:fl(n.de)}},Pt=(e,n)=>{const t=Li.find(a=>a.slug===e),i=R_(e);return t?n==="nl"?`${i.nl}/${t.slug}`:n==="en"?Ri(`${i.en}/${t.enSlug}`):tx.has(t.slug)?fl(`${i.de}/${t.slug}`):Ri(`${i.en}/${t.enSlug}`):n==="nl"?`${i.nl}/${e}`:n==="en"?Ri(`${i.en}/${e}`):tx.has(e)?fl(`${i.de}/${e}`):Ri(`${i.en}/${e}`)},__=e=>({nl:Pt(e,"nl"),en:Pt(e,"en"),de:Pt(e,"de")}),na=(e,n)=>{const t=Zr.voorWie;return n==="nl"?`${t.nl}/${e}`:Ri(n==="en"?`${t.en}/${bp(e)}`:`${t.en}/${bp(e)}`)},L_=e=>({nl:na(e,"nl"),en:na(e,"en"),de:na(e,"de")}),Ib=e=>e==="/en"||e.startsWith("/en/")?"en":e==="/de"||e.startsWith("/de/")?"de":"nl",uz=e=>e==="/en"||e==="/de"?"/":e.startsWith("/en/")||e.startsWith("/de/")?e.slice(3):e,W_={"/functionaliteiten":"functionaliteiten","/functionalities":"functionaliteiten","/funktionen":"functionaliteiten","/functionaliteiten/rapporteren":"rapporteren","/functionalities/reporting":"rapporteren","/funktionen/berichten":"rapporteren","/functionaliteiten/consolidatie":"consolideren","/functionaliteiten/consolideren":"consolideren","/functionalities/consolidation":"consolideren","/funktionen/konsolidieren":"consolideren","/functionaliteiten/budgetteren-cashflow":"budgetterenCashflow","/functionalities/cashflow-planning":"budgetterenCashflow","/funktionen/cashflow-planung":"budgetterenCashflow","/functionaliteiten/maandafsluiten":"close","/functionalities/close":"close","/funktionen/monatsabschluss":"close","/functionaliteiten/virtuele-controller":"virtueleController","/functionalities/virtual-controller":"virtueleController","/funktionen/ai-controller":"virtueleController"},V_=(e,n)=>{const t=ix(e),i=W_[t];if(i)return i;for(const[a,o]of Object.entries(Eb))if(ix(o[n])===t)return a},K_=(e,n)=>{const t=[Zr.artikelDetail[n],Zr.klantervaringen[n],Zr.klantcase[n],Zr.videos[n]];for(const i of t){const a=`${i}/`;if(!e.startsWith(a))continue;const o=Nb(e.slice(a.length));if(!(!o||o.includes("/")))if(n==="en"){const s=Li.find(l=>l.enSlug===o);if(s)return{nlSlug:s.slug}}else{const s=Li.find(l=>l.slug===o);if(s)return{nlSlug:s.slug}}}},q_=(e,n)=>{if(n==="de")return;const i=`${Zr.voorWie[n]}/`;if(!e.startsWith(i))return;const a=Nb(e.slice(i.length));if(!(!a||a.includes("/")))return dz(a)},H_=e=>{const n=Ib(e),t=uz(e),i=V_(t,n);if(i)return{kind:"static",key:i};const a=K_(t,n);if(a)return{kind:"article",nlSlug:a.nlSlug};const o=q_(t,n);if(o)return{kind:"role",key:o}},vp=(e,n)=>{const t=H_(e);if(t)return t.kind==="static"?B(t.key,n):t.kind==="article"?Pt(t.nlSlug,n):na(t.key,n);const i=uz(e);return n==="nl"?i:n==="en"?Ri(i):fl(i)},jd={reporting:"rapporteren",consolidation:"consolideren",budgetterenCashflow:"budgetterenCashflow",close:"close",virtualController:"virtueleController"},rx=[{key:"articles",category:"Articles",icon:To},{key:"videos",category:"Videos",icon:rS}],Sd=[{code:"nl",label:"NL"},{code:"en",label:"EN"},{code:"de",label:"DE"}],Ee=()=>{const[e,n]=b.useState(!1),[t,i]=b.useState(!1),[a,o]=b.useState(!1),[s,l]=b.useState(!1),[d,c]=b.useState(!1),[u,h]=b.useState(!1),[g,m]=b.useState(!1),[p,f]=b.useState(!1),[w,k]=b.useState(!1),[v,x]=b.useState(!1),y=b.useRef(null),j=b.useRef(null),z=b.useRef(null),S=b.useRef(null),A=b.useRef(null),E=b.useRef(null),C=dt(),O=Fu(),{t:T,i18n:W}=Y(),F=Sd.find(I=>I.code===W.language)??Sd[0],L=W.language==="de"?"de":W.language!=="nl"?"en":"nl",G=lc.flatMap(I=>[B(jd[I],"nl"),B(jd[I],"en")]),X=B("functionaliteiten","nl"),D=B("functionaliteiten","en"),M=G.some(I=>C.pathname===I)||C.pathname===X||C.pathname===D,K=B("kenniscentrum","nl"),Q=B("kenniscentrum","en"),$=C.pathname===K||C.pathname.startsWith(`${K}/`)||C.pathname===Q||C.pathname.startsWith(`${Q}/`),se=[B("overOns","nl"),B("overOns","en"),B("contact","nl"),B("contact","en"),B("waaromSmartbooks","
13586nl"),B("waaromSmartbooks","en")].includes(C.pathname),le=[{key:"team",label:T("nav.about.team"),subtitle:T("nav.about.teamSubtitle"),href:B("overOns",L),icon:zi},{key:"whySmartbooks",label:T("nav.about.why"),subtitle:T("nav.about.whySubtitle"),href:B("waaromSmartbooks",L),icon:q2},{key:"contact",label:T("nav.about.contact"),subtitle:T("nav.about.contactSubtitle"),href:B("contact",L),icon:Y2}],we=[{label:T("nav.pricing"),href:B("prijzen",L)},{label:T("nav.projects"),href:B("projecten",L)},{label:T("nav.customerStories"),href:B("klantverhalen",L)}],Re=I=>{const de=I==="en"?"en":I==="de"?"de":"nl",he=vp(C.pathname,de);W.changeLanguage(I),O(`${he}${C.search}${C.hash}`),f(!1),k(!1)};return b.useEffect(()=>{const I=de=>{y.current&&!y.current.contains(de.target)&&i(!1),j.current&&!j.current.contains(de.target)&&l(!1),z.current&&!z.current.contains(de.target)&&h(!1),S.current&&!S.current.contains(de.target)&&f(!1),A.current&&!A.current.contains(de.target)&&k(!1),E.current&&!E.current.contains(de.target)&&x(!1)};return document.addEventListener("mousedown",I),()=>document.removeEventListener("mousedown",I)},[]),r.jsxs("nav",{className:"sticky top-0 z-50 glass border-b-0",children:[r.jsx("div",{className:"absolute bottom-0 left-0 right-0 h-[1px] bg-gradient-to-r from-transparent via-[#00B4D8]/50 to-transparent"}),r.jsxs("div",{className:"w-full flex items-center justify-between h-[72px] px-3 sm:px-4 md:px-6 lg:px-8 gap-2",children:[r.jsx(_,{to:B("index",L),className:"flex items-center mr-2 md:mr-6 lg:mr-10 shrink-0 min-w-0",children:r.jsx("img",{src:Yu,alt:"Smartbooks",className:"h-7 md:h-8 w-auto"})}),r.jsxs("div",{className:"hidden lg:flex items-center gap-8",children:[r.jsxs("div",{ref:y,className:"relative",children:[r.jsxs("button",{onClick:()=>{i(!t),l(!1),h(!1)},onMouseEnter:()=>{i(!0),l(!1),h(!1)},className:`flex items-center gap-1 text-[15px] font-medium transition-colors duration-200 ${M?"text-white font-semibold":"text-white/70 hover:text-white"}`,style:{letterSpacing:"0.01em"},children:[T("nav.product"),r.jsx(Ut,{className:`h-3.5 w-3.5 transition-transform duration-200 ${t?"rotate-180":""}`})]}),t&&r.jsxs("div",{className:"absolute top-full left-1/2 -translate-x-1/2 mt-2 w-64 rounded-xl bg-midnight/95 backdrop-blur-xl border border-white/[0.08] shadow-2xl py-2 z-50",onMouseLeave:()=>i(!1),children:[lc.map(I=>{const de=fp[I],he=B(jd[I],L),Z=C.pathname===he;return r.jsxs(_,{to:he,onClick:()=>i(!1),className:`flex items-center gap-3 px-4 py-3 text-sm transition-colors ${Z?"text-teal bg-teal/10":"text-white/70 hover:text-white hover:bg-white/[0.06]"}`,children:[r.jsx(de,{className:"h-4 w-4 shrink-0"}),r.jsx("div",{children:r.jsx("span",{className:"font-medium",children:T(`featureCategories.pillars.${I}`)})})]},I)}),r.jsxs(_,{to:B("aiKoppelingen",L),onClick:()=>i(!1),className:`flex items-center gap-3 px-4 py-3 text-sm transition-colors ${C.pathname===B("aiKoppelingen",L)?"text-teal bg-teal/10":"text-white/70 hover:text-white hover:bg-white/[0.06]"}`,children:[r.jsx(qa,{className:"h-4 w-4 shrink-0"}),r.jsx("span",{className:"font-medium",children:T("nav.aiConnectors")})]}),r.jsx("div",{className:"border-t border-white/[0.06] mt-1 pt-1",children:r.jsxs(_,{to:B("functionaliteiten",L),onClick:()=>i(!1),className:"block px-4 py-2.5 text-xs text-white/50 hover:text-white/80 transition-colors",children:[T("features.viewAll")," →"]})})]})]}),we.map(I=>r.jsx(_,{to:I.href,className:`text-[15px] font-medium transition-colors duration-200 ${C.pathname===I.href?"text-white font-semibold":"text-white/70 hover:text-white"}`,style:{letterSpacing:"0.01em"},children:I.label},I.href)),r.jsxs("div",{ref:j,className:"relative",children:[r.jsxs("button",{onClick:()=>{l(!s),i(!1),h(!1)},onMouseEnter:()=>{l(!0),i(!1),h(!1)},className:`flex items-center gap-1 text-[15px] font-medium transition-colors duration-200 ${$?"text-white font-semibold":"text-white/70 hover:text-white"}`,style:{letterSpacing:"0.01em"},children:[T("nav.knowledgeCenter"),r.jsx(Ut,{className:`h-3.5 w-3.5 transition-transform duration-200 ${s?"rotate-180":""}`})]}),s&&r.jsxs("div",{className:"absolute top-full left-1/2 -translate-x-1/2 mt-2 w-[300px] rounded-xl bg-midnight/95 backdrop-blur-xl border border-white/[0.08] shadow-2xl p-2 z-50",onMouseLeave:()=>l(!1),children:[r.jsxs(_,{to:B("kenniscentrum",L),onClick:()=>l(!1),className:"block px-3 py-2 text-xs font-medium text-teal hover:text-teal/80 transition-colors",children:[T("nav.knowledge.viewAll")," →"]}),r.jsx("div",{className:"border-t border-white/[0.06] my-1"}),r.jsxs("div",{className:"flex flex-col",children:[rx.map(I=>
13586{const de=I.icon,he=new URLSearchParams(C.search),Z=B("kenniscentrum",L),ke=he.get("category"),ce=C.pathname===Z&&ke===I.category;return r.jsxs(_,{to:`${Z}?category=${encodeURIComponent(I.category)}`,onClick:()=>l(!1),className:`flex items-center gap-3 px-3 py-2.5 rounded-lg transition-colors ${ce?"text-teal bg-teal/10":"text-white/70 hover:text-white hover:bg-white/[0.06]"}`,children:[r.jsx(de,{className:"h-4 w-4 shrink-0"}),r.jsx("span",{className:"text-sm font-medium",children:T(`nav.knowledge.categories.${I.key}.title`)})]},I.key)}),r.jsxs(_,{to:B("integraties",L),onClick:()=>l(!1),className:"flex items-center gap-3 px-3 py-2.5 rounded-lg text-white/70 hover:text-white hover:bg-white/[0.06] transition-colors",children:[r.jsx(qa,{className:"h-4 w-4 shrink-0"}),r.jsx("span",{className:"text-sm font-medium",children:L==="nl"?"Integraties":L==="de"?"Integrationen":"Integrations"})]}),r.jsxs(_,{to:B("onboarding",L),onClick:()=>l(!1),className:"flex items-center gap-3 px-3 py-2.5 rounded-lg text-white/70 hover:text-white hover:bg-white/[0.06] transition-colors",children:[r.jsx(rp,{className:"h-4 w-4 shrink-0"}),r.jsx("span",{className:"text-sm font-medium",children:"Onboarding"})]}),r.jsxs(_,{to:B("onboardingMeeting",L),onClick:()=>l(!1),className:"flex items-center gap-3 px-3 py-2.5 rounded-lg text-white/70 hover:text-white hover:bg-white/[0.06] transition-colors",children:[r.jsx(kw,{className:"h-4 w-4 shrink-0"}),r.jsx("span",{className:"text-sm font-medium",children:T("nav.knowledge.onboardingMeeting")})]})]})]})]}),r.jsxs("div",{ref:z,className:"relative",children:[r.jsxs("button",{onClick:()=>{h(!u),i(!1),l(!1)},onMouseEnter:()=>{h(!0),i(!1),l(!1)},className:`flex items-center gap-1 text-[15px] font-medium transition-colors duration-200 ${se?"text-white font-semibold":"text-white/70 hover:text-white"}`,style:{letterSpacing:"0.01em"},children:[T("nav.aboutUs"),r.jsx(Ut,{className:`h-3.5 w-3.5 transition-transform duration-200 ${u?"rotate-180":""}`})]}),u&&r.jsx("div",{className:"absolute top-full left-1/2 -translate-x-1/2 mt-2 w-64 rounded-xl bg-midnight/95 backdrop-blur-xl border border-white/[0.08] shadow-2xl py-2 z-50",onMouseLeave:()=>h(!1),children:le.map(I=>{const de=I.icon,he=C.pathname===I.href;return r.jsxs(_,{to:I.href,onClick:()=>h(!1),className:`flex items-start gap-3 px-4 py-3 text-sm transition-colors ${he?"text-teal bg-teal/10":"text-white/70 hover:text-white hover:bg-white/[0.06]"}`,children:[r.jsx(de,{className:"h-4 w-4 shrink-0 mt-0.5"}),r.jsxs("div",{children:[r.jsx("div",{className:"font-medium",children:I.label}),r.jsx("div",{className:"text-xs text-white/50 mt-0.5",children:I.subtitle})]})]},I.key)})})]})]}),r.jsxs("div",{className:"hidden lg:flex items-center gap-3",children:[r.jsxs("div",{ref:S,className:"relative",children:[r.jsxs("button",{onClick:()=>f(!p),className:"flex items-center gap-1.5 text-white/60 hover:text-white transition-colors duration-200 text-sm font-medium px-2 py-1.5 rounded-lg hover:bg-white/[0.06]",children:[r.jsx(dg,{code:F.code,className:"h-3.5 w-5 rounded-sm shadow-sm shrink-0"}),F.label,r.jsx(Ut,{className:`h-3.5 w-3.5 transition-transform duration-200 ${p?"rotate-180":""}`})]}),p&&r.jsx("div",{className:"absolute top-full right-0 mt-2 w-32 rounded-xl bg-midnight/95 backdrop-blur-xl border border-white/[0.08] shadow-2xl py-1 z-50",children:Sd.map(I=>r.jsxs("button",{onClick:()=>Re(I.code),className:`w-full flex items-center gap-2 px-3 py-2 text-sm transition-colors ${W.language===I.code?"text-teal bg-teal/10":"text-white/70 hover:text-white hover:bg-white/[0.06]"}`,children:[r.jsx(dg,{code:I.code,className:"h-3.5 w-5 rounded-sm shadow-sm shrink-0"}),I.label]},I.code))})]}),r.jsxs("div",{ref:E,className:"relative",children:[r.jsx("button",{onClick:()=>x(!v),"aria-label":"Account",className:"flex items-center justify-center w-10 h-10 rounded-full bg-white/[0.06] border border-white/[0.08] text-white/70 hover:text-white hover:bg-white/[0.10] transition-colors",children:r.jsx(iS,{className:"h-4.5 w-4.5"})}),v&&r.jsxs("div",{className:"absolute top-full right-0 mt-2 w-56 rounded-xl bg-midnight/95 backdrop-blur-xl border border-white/[0.08] shadow-2xl py-2 z-50",children:[r.jsxs("a",{href:"https://login.smartbooks.ai/u/login?state=hKFo2SBSa3cyT0tDSFhwVUJodVpIVzhfV0FuODFTbVA2ZkdlZaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIGJqdXA4NzRrNE9odzU4RnYyXzNVR0RlWEFTUUlZQTcyo2NpZNkgcjBlWG5FcG5EZngwNzd2dXI1N3hsS0o3dTVGQnNsaTE",target:"_blank",rel:"noopener noreferrer",onClick:()=>x(!1),className:"flex items-center gap-3 px-4 py-3 text-sm text-white/70 hover:text-white hover:bg-white/[0.06] transition-colors",children:[r.jsx(ng,{className:"h-4 w-4 shrink-0"}),r.jsx("span",{className:"font-medium",children:T("nav.account.login")})]}),r.jsxs("a",{href:"https://login.smartbooks.ai/u/signup?state=hKFo2SBMMWtrMThHSDBhcm1mOWtKOS1odHp1cmR3VGNpUjJDcaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEt1U1I4NUNGV0R5VDdlb1Q5Z3dJMG10dUYwTzZreUdDo2NpZNkgcjBlWG5FcG5EZngwNzd2dXI1N3hsS0o3dTVGQnNsaTE",target:"_blank",rel:"noopener noreferrer",onClick:()=>x(!1),className:"flex items-center gap-3 px-4 py-3 text-sm text-white/70 hover:text-white hover:bg-white/[0.06] transition-colors",children:[r.jsx(jw,{className:"h-4 w-4 shrink-0"}),r.jsx("span",{className:"font-medium",children:T("nav.account.signup")})]})]})]}),r.jsx(jn,{asChild:!0,className:"btn-primary h-auto px-6 py-2.5 text-sm",children:r.jsx(_,{to:B("planDemo",L),children:T("nav.planDemo")})}),r.jsx(jn,{asChild:!0,variant:"outline",className:"hidden h-auto border-teal/40 bg-transparent px-4 py-2.5 text-sm text-teal hover:bg-teal/10 hover:text-teal 2xl:inline-flex",children:r.jsx(_,{to:B("onboardingMeeting",L),children:T("onboardingMeeting.cta")})})]}),r.jsxs("div",{className:"flex lg:hidden items-center gap-2 shrink-0",children:[r.jsxs("a",{href:"https://login.smartbooks.ai/u/login?state=hKFo2SBSa3cyT0tDSFhwVUJodVpIVzhfV0FuODFTbVA2ZkdlZaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIGJqdXA4NzRrNE9odzU4RnYyXzNVR0RlWEFTUUlZQTcyo2NpZNkgcjBlWG5FcG5EZngwNzd2dXI1N3hsS0o3dTVGQnNsaTE",target:"_blank",rel:"noopener noreferrer",className:"inline-flex h-10 items-center gap-1.5 rounded-lg border border-teal/40 px-3 text-xs font-semibold text-teal hover:bg-teal/10 transition-colors whitespace-nowrap",children:[r.jsx(ng,{className:"h-3.5 w-3.5"}),T("nav.account.login")]}),r.jsx("button",{className:"text-white/70 p-2 -mr-1 shrink-0",onClick:()=>n(!e),"aria-label":e?"Sluit menu":"Open menu",children:e?r.jsx(xi,{className:"h-6 w-6"}):r.jsx(pD,{className:"h-6 w-6"})})]})]}),e&&r.jsxs("div",{className:"lg:hidden bg-midnight border-t border-white/[0.06] px-5 pb-6 pt-4 space-y-1 overflow-y-auto overscroll-contain",style:{maxHeight:"calc(100vh - 72px)",WebkitOverflowScrolling:"touch"},children:[r.jsxs("button",{onClick:()=>o(!a),className:"flex items-center justify-between w-full text-[15px] font-medium text-white/70 hover:text-white py-3",children:[T("nav.product"),r.jsx(Ut,{className:`h-4 w-4 transition-transform ${a?"rotate-180":""}`})]}),a&&r.jsxs("div",{className:"pl-4 space-y-1 pb-2",children:[lc.map(I=>{const de=fp[I];return r.jsxs(_,{to:B(jd[I],L),onClick:()=>{n(!1),o(!1)},className:"flex items-center gap-2 text-sm text-white/60 hover:text-white py-2",children:[r.jsx(de,{className:"h-3.5 w-3.5"}),T(`featureCategories.pillars.${I}`)]},I)}),r.jsxs(_,{to:B("aiKoppelingen",L),onClick:()=>{n(!1),o(!1)},className:"flex items-center gap-2 text-sm text-white/60 hover:text-white py-2",children:[r.jsx(qa,{className:"h-3.5 w-3.5"}),T("nav.aiConnectors")]})]}),we.map(I=>r.jsx(_,{to:I.href,className:"block text-[15px] font-medium text-white/70 hover:text-white py-3",onClick:()=>n(!1),children:I.label},I.href)),r.jsxs("button",{onClick:()=>c(!d),className:"flex items-center justify-between w-full text-[15px] font-medium text-white/70 hover:text-white py-3",children:[T("nav.knowledgeCenter"),r.jsx(Ut,{className:`h-4 w-4 transition-transform ${d?"rotate-180":""}`})]}),d&&r.jsxs("div",{className:"pl-4 space-y-1 pb-2",children:[r.jsxs(_,{to:B("kenniscentrum",L),onClick:()=>{n(!1),c(!1)},className:"block text-xs text-teal hover:text-teal/80 py-2",children:[T("nav.knowledge.viewAll")," →"]}),rx.map(I=>{const de=I.icon,he=B("kenniscentrum",L);return r.jsxs(_,{to:`${he}?category=${encodeURIComponent(I.category)}`,onClick:()=>{n(!1),c(!1)},className:"flex items-center gap-2 text-sm text-white/60 hover:text-white py-2",children:[r.jsx(de,{className:"h-3.5 w-3.5"}),T(`nav.knowledge.categories.${I.key}.title`)]},I.key)}),r.jsxs(_,{to:B("integraties",L),onClick:()=>{n(!1),c(!1)},className:"flex items-center gap-2 text-sm text-white/60 hover:text-white py-2",children:[r.jsx(qa,{className:"h-3.5 w-3.5"}),L==="nl"?"Integraties":L==="de"?"Integrationen":"Integrations"]}),r.jsxs(_,{to:B("onboarding",L),onClick:()=>{n(!1),c(!1)},className:"flex items-center gap-2 text-sm text-white/60 hover:text-white py-2",children:[r.jsx(rp,{className:"h-3.5 w-3.5"}),"Onboarding"]}),r.jsxs(_,{to:B("onboardingMeeting",L),onClick:()=>{n(!1),c(!1)},className:"flex items-center gap-2 text-sm text-white/60 hover:text-white py-2",children:[r.jsx(kw,{className:"h-3.5 w-3.5"}),T("nav.knowledge.onboardingMeeting")]})]}),r.jsxs("button",{onClick:()=>m(!g),className:"flex items-center justify-between w-full text-[15px] font-medium text-white/70 hover:text-white py-3",children:[T("nav.aboutUs"),r.jsx(Ut,{className:`h-4 w-4 transition-transform ${g?"rotate-180":""}`})]}),g&&r.jsx("div",{className:"pl-4 space-y-1 pb-2",children:le.map(I=>{const de=I.icon;return r.jsxs(_,{to:I.href,onClick:()=>{n(!1),m(!1)},className:"flex items-center gap-2 text-sm text-white/60 hover:text-white py-2",children:[r.jsx(de,{className:"h-3.5 w-3.5"}),I.label]},I.key)})}),r.jsxs("div",{className:"border-t border-white/[0.06] mt-3 pt-4 space-y-3",children:[r.jsx(_,{to:B("planDemo",L),onClick:()=>n(!1),className:"btn-primary flex w-full items-center justify-center gap-2 py-3 text-sm",children:T("nav.planDemo")}),r.jsx(jn,{asChild:!0,variant:"outline",className:"h-auto w-full border-teal/40 bg-transparent py-3 text-sm text-teal hover:bg-teal/10 hover:text-teal",children:r.jsx(_,{to:B("onboardingMeeting",L),onClick:()=>n(!1),children:T("onboardingMeeting.cta")})}),r.jsx("div",{className:"flex items-center gap-2 py-1",children:Sd.map(I=>r.jsxs("button",{onClick:()=>Re(I.code),className:`flex flex-1 items-center justify-center gap-2 rounded-lg border px-3 py-2 text-sm font-medium transition-colors ${W.language===I.code?"border-teal/40 text-teal bg-teal/10":"border-white/[0.08] text-white/70 hover:text-white hover:bg-white/[0.06]"}`,children:[r.jsx(dg,{code:I.code,className:"h-3.5 w-5 rounded-sm shadow-sm shrink-0"}),I.label]},I.code))}),r.jsxs("a",{href:"https://login.smartbooks.ai/u/login?state=hKFo2SBSa3cyT0tDSFhwVUJodVpIVzhfV0FuODFTbVA2ZkdlZaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIGJqdXA4NzRrNE9odzU4RnYyXzNVR0RlWEFTUUlZQTcyo2NpZNkgcjBlWG5FcG5EZngwNzd2dXI1N3hsS0o3dTVGQnNsaTE",target:"_blank",rel:"noopener noreferrer",onClick:()=>n(!1),className:"flex items-center gap-3 text-[15px] font-medium text-white/70 hover:text-white py-3",children:[r.jsx(ng,{className:"h-4 w-4"}),T("nav.account.login")]}),r.jsxs("a",{href:"https://login.smartbooks.ai/u/signup?state=hKFo2SBMMWtrMThHSDBhcm1mOWtKOS1odHp1cmR3VGNpUjJDcaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEt1U1I4NUNGV0R5VDdlb1Q5Z3dJMG10dUYwTzZreUdDo2NpZNkgcjBlWG5FcG5EZngwNzd2dXI1N3hsS0o3dTVGQnNsaTE",target:"_blank",rel:"noopener noreferrer",onClick:()=>n(!1),className:"flex items-center gap-3 text-[15px] font-medium text-white/70 hover:text-white py-3",children:[r.jsx(jw,{className:"h-4 w-4"}),T("nav.account.signup")]})]})]})]})},Pb=b.createContext({});function Tb(e){const n=b.useRef(null);return n.current===null&&(n.current=e()),n.current}const U_=typeof window<"u",hz=U_?b.useLayoutEffect:b.useEffect,Ju=b.createContext(null);function Db(e,n){e.indexOf(n)===-1&&e.push(n)}function au(e,n){const t=e.indexOf(n);t>-1&&e.splice(t,1)}const ji=(e,n,t)=>t>n?n:t<e?e:t;let Xu=()=>{},yo=()=>{};const zr={},gz=e=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(e);function mz(e){return typeof e=="object"&&e!==null}const pz=e=>/^0[^.\s]+$/u.test(e);function fz(e){let n;return()=>(n===void 0&&(n=e()),n)}const Tt=e=>e,G_=(e,n)=>t=>n(e(t)),Pl=(...e)=>e.reduce(G_),bl=(e,n,t)=>{const i=n-e;return i===0?1:(t-e)/i};class Bb{constructor(){this.subscriptions=[]}add(n){return Db(this.subscriptions,n),()=>au(this.subscriptions,n)}notify(n,t,i){const a=this.subscriptions.length;if(a)if(a===1)this.subscriptions[0](n,t,i);else for(let o=0;o<a;o++){const s=this.subscriptions[o];s&&s(n,t,i)}}getSize(){return this.subscriptions.length}clear(){this.subscriptions.length=0}}const st=e=>e*1e3,Nt=e=>e/1e3;function bz(e,n){return n?e*(1e3/n):0}const vz=(e,n,t)=>(((1-3*t+3*n)*e+(3*t-6*n))*e+3*n)*e,$_=1e-7,Z_=12;function Y_(e,n,t,i,a){let o,s,l=0;do s=n+(t-n)/2,o=vz(s,i,a)-e,o>0?t=s:n=s;while(Math.abs(o)>$_&&++l<Z_);return s}function Tl(e,n,t,i){if(e===n&&t===i)return Tt;const a=o=>Y_(o,0,1,e,t);return o=>o===0||o===1?o:vz(a(o),n,i)}const kz=e=>n=>n<=.5?e(2*n)/2:(2-e(2*(1-n)))/2,wz=e=>n=>1-e(1-n),xz=Tl(.33,1.53,.69,.99),Mb=wz(xz),yz=kz(Mb),jz=e=>e>=1?1:(e*=2)<1?.5*Mb(e):.5*(2-Math.pow(2,-10*(e-1))),Fb=e=>1-Math.sin(Math.acos(e)),Sz=wz(Fb),zz=kz(Fb),Q_=Tl(.42,0,1,1),J_=Tl(0,0,.58,1),Az=Tl(.42,0,.58,1),X_=e=>Array.isArray(e)&&typeof e[0]!="number",Cz=e=>Array.isArray(e)&&typeof e[0]=="number",ax={linear:Tt,easeIn:Q_,easeInOut:Az,easeOut:J_,circIn:Fb,circInOut:zz,circOut:Sz,backIn:Mb,backInOut:yz,backOut:xz,anticipate:jz},eL=e=>typeof e=="string",ox=e=>{if(Cz(e)){yo(e.length===4,"Cubic bezier arrays must contain four numerical values.","cubic-bezier-length");const[n,t,i,a]=e;return Tl(n,t,i,a)}else if(eL(e))return yo(ax[e]!==void 0,`Invalid easing type '${e}
13586'`,"invalid-easing-type"),ax[e];return e},zd=["setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender"],sx={value:null,addProjectionMetrics:null};function nL(e,n){let t=new Set,i=new Set,a=!1,o=!1;const s=new WeakSet;let l={delta:0,timestamp:0,isProcessing:!1},d=0;function c(h){s.has(h)&&(u.schedule(h),e()),d++,h(l)}const u={schedule:(h,g=!1,m=!1)=>{const f=m&&a?t:i;return g&&s.add(h),f.add(h),h},cancel:h=>{i.delete(h),s.delete(h)},process:h=>{if(l=h,a){o=!0;return}a=!0;const g=t;t=i,i=g,t.forEach(c),n&&sx.value&&sx.value.frameloop[n].push(d),d=0,t.clear(),a=!1,o&&(o=!1,u.process(h))}};return u}const tL=40;function Ez(e,n){let t=!1,i=!0;const a={delta:0,timestamp:0,isProcessing:!1},o=()=>t=!0,s=zd.reduce((x,y)=>(x[y]=nL(o,n?y:void 0),x),{}),{setup:l,read:d,resolveKeyframes:c,preUpdate:u,update:h,preRender:g,render:m,postRender:p}=s,f=()=>{const x=zr.useManualTiming,y=x?a.timestamp:performance.now();t=!1,x||(a.delta=i?1e3/60:Math.max(Math.min(y-a.timestamp,tL),1)),a.timestamp=y,a.isProcessing=!0,l.process(a),d.process(a),c.process(a),u.process(a),h.process(a),g.process(a),m.process(a),p.process(a),a.isProcessing=!1,t&&n&&(i=!1,e(f))},w=()=>{t=!0,i=!0,a.isProcessing||e(f)};return{schedule:zd.reduce((x,y)=>{const j=s[y];return x[y]=(z,S=!1,A=!1)=>(t||w(),j.schedule(z,S,A)),x},{}),cancel:x=>{for(let y=0;y<zd.length;y++)s[zd[y]].cancel(x)},state:a,steps:s}}const{schedule:He,cancel:Ar,state:Dn,steps:mg}=Ez(typeof requestAnimationFrame<"u"?requestAnimationFrame:Tt,!0);let dc;function iL(){dc=void 0}const Gn={now:()=>(dc===void 0&&Gn.set(Dn.isProcessing||zr.useManualTiming?Dn.timestamp:performance.now()),dc),set:e=>{dc=e,queueMicrotask(iL)}},Nz=e=>n=>typeof n=="string"&&n.startsWith(e),Iz=Nz("--"),rL=Nz("var(--"),Rb=e=>rL(e)?aL.test(e.split("/*")[0].trim()):!1,aL=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;function lx(e){return typeof e!="string"?!1:e.split("/*")[0].includes("var(--")}const Oo={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},vl={...Oo,transform:e=>ji(0,1,e)},Ad={...Oo,default:1},Os=e=>Math.round(e*1e5)/1e5,Ob=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function oL(e){return e==null}const sL=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,_b=(e,n)=>t=>!!(typeof t=="string"&&sL.test(t)&&t.startsWith(e)||n&&!oL(t)&&Object.prototype.hasOwnProperty.call(t,n)),Pz=(e,n,t)=>i=>{if(typeof i!="string")return i;const[a,o,s,l]=i.match(Ob);return{[e]:parseFloat(a),[n]:parseFloat(o),[t]:parseFloat(s),alpha:l!==void 0?parseFloat(l):1}},lL=e=>ji(0,255,e),pg={...Oo,transform:e=>Math.round(lL(e))},Yr={test:_b("rgb","red"),parse:Pz("red","green","blue"),transform:({red:e,green:n,blue:t,alpha:i=1})=>"rgba("+pg.transform(e)+", "+pg.transform(n)+", "+pg.transform(t)+", "+Os(vl.transform(i))+")"};function dL(e){let n="",t="",i="",a="";return e.length>5?(n=e.substring(1,3),t=e.substring(3,5),i=e.substring(5,7),a=e.substring(7,9)):(n=e.substring(1,2),t=e.substring(2,3),i=e.substring(3,4),a=e.substring(4,5),n+=n,t+=t,i+=i,a+=a),{red:parseInt(n,16),green:parseInt(t,16),blue:parseInt(i,16),alpha:a?parseInt(a,16)/255:1}}const kp={test:_b("#"),parse:dL,transform:Yr.transform},Dl=e=>({test:n=>typeof n=="string"&&n.endsWith(e)&&n.split(" ").length===1,parse:parseFloat,transform:n=>`${n}${e}`}),er=Dl("deg"),bi=Dl("%"),te=Dl("px"),cL=Dl("vh"),uL=Dl("vw"),dx={...bi,parse:e=>bi.parse(e)/100,transform:e=>bi.transform(e*100)},Ha={test:_b("hsl","hue"),parse:Pz("hue","saturation","lightness"),transform:({hue:e,saturation:n,lightness:t,alpha:i=1})=>"hsla("+Math.round(e)+", "+bi.transform(Os(n))+", "+bi.transform(Os(t))+", "+Os(vl.transform(i))+")"},bn={test:e=>Yr.test(e)||kp.test(e)||Ha.test(e),parse:e=>Yr.test(e)?Yr.parse(e):Ha.test(e)?Ha.parse(e):kp.parse(e),transform:e=>typeof e=="string"?e:e.hasOwnProperty("red")?Yr.transform(e):Ha.transform(e),getAnimatableNone:e=>{const n=bn.parse(e);return n.alpha=0,bn.transform(n)}},hL=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function gL(e){return isNaN(e)&&typeof e=="string"&&(e.match(Ob)?.length||0)+(e.match(hL)?.length||0)>0}const Tz="number",Dz="color",mL="var",pL="var(",cx="${}",fL=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function jo(e){const n=e.toString(),t=[],i={color:[],number:[],var:[]},a=[];let o=0;const l=n.replace(fL,d=>(bn.test(d)?(i.color.push(o),a.push(Dz),t.push(bn.parse(d))):d.startsWith(pL)?(i.var.push(o),a.push(mL),t.push(d)):(i.number.push(o),a.push(Tz),t.push(parseFloat(d))),++o,cx)).split(cx);return{values:t,split:l,indexes:i,types:a}}function bL(e){return jo(e).values}function Bz({split:e,types:n}){const t=e.length;return i=>{let a="";for(let o=0;o<t;o++)if(a+=e[o],i[o]!==void 0){const s=n[o];s===Tz?a+=Os(i[o]):s===Dz?a+=bn.transform(i[o]):a+=i[o]}return a}}function vL(e){return Bz(jo(e))}const kL=e=>typeof e=="number"?0:bn.test(e)?bn.getAnimatableNone(e):e,wL=(e,n)=>typeof e=="number"?n?.trim().endsWith("/")?e:0:kL(e);function xL(e){const n=jo(e);return Bz(n)(n.values.map((i,a)=>wL(i,n.split[a])))}const Yt={test:gL,parse:bL,createTransformer:vL,getAnimatableNone:xL};function fg(e,n,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?e+(n-e)*6*t:t<1/2?n:t<2/3?e+(n-e)*(2/3-t)*6:e}function yL({hue:e,saturation:n,lightness:t,alpha:i}
vendor: 86,456 bytes, line 13586
13586){e/=360,n/=100,t/=100;let a=0,o=0,s=0;if(!n)a=o=s=t;else{const l=t<.5?t*(1+n):t+n-t*n,d=2*t-l;a=fg(d,l,e+1/3),o=fg(d,l,e),s=fg(d,l,e-1/3)}return{red:Math.round(a*255),green:Math.round(o*255),blue:Math.round(s*255),alpha:i}}function ou(e,n){return t=>t>0?n:e}const Je=(e,n,t)=>e+(n-e)*t,bg=(e,n,t)=>{const i=e*e,a=t*(n*n-i)+i;return a<0?0:Math.sqrt(a)},jL=[kp,Yr,Ha],SL=e=>jL.find(n=>n.test(e));function ux(e){const n=SL(e);if(Xu(!!n,`'${e}' is not an animatable color. Use the equivalent color code instead.`,"color-not-animatable"),!n)return!1;let t=n.parse(e);return n===Ha&&(t=yL(t)),t}const hx=(e,n)=>{const t=ux(e),i=ux(n);if(!t||!i)return ou(e,n);const a={...t};return o=>(a.red=bg(t.red,i.red,o),a.green=bg(t.green,i.green,o),a.blue=bg(t.blue,i.blue,o),a.alpha=Je(t.alpha,i.alpha,o),Yr.transform(a))},wp=new Set(["none","hidden"]);function zL(e,n){return wp.has(e)?t=>t<=0?e:n:t=>t>=1?n:e}function AL(e,n){return t=>Je(e,n,t)}function Lb(e){return typeof e=="number"?AL:typeof e=="string"?Rb(e)?ou:bn.test(e)?hx:NL:Array.isArray(e)?Mz:typeof e=="object"?bn.test(e)?hx:CL:ou}function Mz(e,n){const t=[...e],i=t.length,a=e.map((o,s)=>Lb(o)(o,n[s]));return o=>{for(let s=0;s<i;s++)t[s]=a[s](o);return t}}function CL(e,n){const t={...e,...n},i={};for(const a in t)e[a]!==void 0&&n[a]!==void 0&&(i[a]=Lb(e[a])(e[a],n[a]));return a=>{for(const o in i)t[o]=i[o](a);return t}}function EL(e,n){const t=[],i={color:0,var:0,number:0};for(let a=0;a<n.values.length;a++){const o=n.types[a],s=e.indexes[o][i[o]],l=e.values[s]??0;t[a]=l,i[o]++}return t}const NL=(e,n)=>{const t=Yt.createTransformer(n),i=jo(e),a=jo(n);return i.indexes.var.length===a.indexes.var.length&&i.indexes.color.length===a.indexes.color.length&&i.indexes.number.length>=a.indexes.number.length?wp.has(e)&&!a.values.length||wp.has(n)&&!i.values.length?zL(e,n):Pl(Mz(EL(i,a),a.values),t):(Xu(!0,`Complex values '${e}' and '${n}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`,"complex-values-different"),ou(e,n))};function Fz(e,n,t){return typeof e=="number"&&typeof n=="number"&&typeof t=="number"?Je(e,n,t):Lb(e)(e,n)}const IL=e=>{const n=({timestamp:t})=>e(t);return{start:(t=!0)=>He.update(n,t),stop:()=>Ar(n),now:()=>Dn.isProcessing?Dn.timestamp:Gn.now()}},Rz=(e,n,t=10)=>{let i="";const a=Math.max(Math.round(n/t),2);for(let o=0;o<a;o++)i+=Math.round(e(o/(a-1))*1e4)/1e4+", ";return`linear(${i.substring(0,i.length-2)})`},su=2e4;function Wb(e){let n=0;const t=50;let i=e.next(n);for(;!i.done&&n<su;)n+=t,i=e.next(n);return n>=su?1/0:n}function PL(e,n=100,t){const i=t({...e,keyframes:[0,n]}),a=Math.min(Wb(i),su);return{type:"keyframes",ease:o=>i.next(a*o).value/n,duration:Nt(a)}}const rn={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1};function xp(e,n){return e*Math.sqrt(1-n*n)}const TL=12;function DL(e,n,t){let i=t;for(let a=1;a<TL;a++)i=i-e(i)/n(i);return i}const vg=.001;function BL({duration:e=rn.duration,bounce:n=rn.bounce,velocity:t=rn.velocity,mass:i=rn.mass}){let a,o;Xu(e<=st(rn.maxDuration),"Spring duration must be 10 seconds or less","spring-duration-limit");let s=1-n;s=ji(rn.minDamping,rn.maxDamping,s),e=ji(rn.minDuration,rn.maxDuration,Nt(e)),s<1?(a=c=>{const u=c*s,h=u*e,g=u-t,m=xp(c,s),p=Math.exp(-h);return vg-g/m*p},o=c=>{const h=c*s*e,g=h*t+t,m=Math.pow(s,2)*Math.pow(c,2)*e,p=Math.exp(-h),f=xp(Math.pow(c,2),s);return(-a(c)+vg>0?-1:1)*((g-m)*p)/f}):(a=c=>{const u=Math.exp(-c*e),h=(c-t)*e+1;return-vg+u*h},o=c=>{const u=Math.exp(-c*e),h=(t-c)*(e*e);return u*h});const l=5/e,d=DL(a,o,l);if(e=st(e),isNaN(d))return{stiffness:rn.stiffness,damping:rn.damping,duration:e};{const c=Math.pow(d,2)*i;return{stiffness:c,damping:s*2*Math.sqrt(i*c),duration:e}}}const ML=["duration","bounce"],FL=["stiffness","damping","mass"];function gx(e,n){return n.some(t=>e[t]!==void 0)}function RL(e){let n={velocity:rn.velocity,stiffness:rn.stiffness,damping:rn.damping,mass:rn.mass,isResolvedFromDuration:!1,...e};if(!gx(e,FL)&&gx(e,ML))if(n.velocity=0,e.visualDuration){const t=e.visualDuration,i=2*Math.PI/(t*1.2),a=i*i,o=2*ji(.05,1,1-(e.bounce||0))*Math.sqrt(a);n={...n,mass:rn.mass,stiffness:a,damping:o}}else{const t=BL({...e,velocity:0});n={...n,...t,mass:rn.mass},n.isResolvedFromDuration=!0}return n}function lu(e=rn.visualDuration,n=rn.bounce){const t=typeof e!="object"?{visualDuration:e,keyframes:[0,1],bounce:n}:e;let{restSpeed:i,restDelta:a}=t;const o=t.keyframes[0],s=t.keyframes[t.keyframes.length-1],l={done:!1,value:o},{stiffness:d,damping:c,mass:u,duration:h,velocity:g,isResolvedFromDuration:m}=RL({...t,velocity:-Nt(t.velocity||0)}),p=g||0,f=c/(2*Math.sqrt(d*u)),w=s-o,k=Nt(Math.sqrt(d/u)),v=Math.abs(w)<5;i||(i=v?rn.restSpeed.granular:rn.restSpeed.default),a||(a=v?rn.restDelta.granular:rn.restDelta.default);let x,y,j,z,S,A;if(f<1)j=xp(k,f),z=(p+f*k*w)/j,x=C=>{const O=Math.exp(-f*k*C);return s-O*(z*Math.sin(j*C)+w*Math.cos(j*C))},S=f*k*z+w*j,A=f*k*w-z*j,y=C=>Math.exp(-f*k*C)*(S*Math.sin(j*C)+A*Math.cos(j*C));else if(f===1){x=O=>s-Math.exp(-k*O)*(w+(p+k*w)*O);const C=p+k*w;y=O=>Math.exp(-k*O)*(k*C*O-p)}else{const C=k*Math.sqrt(f*f-1);x=F=>{const L=Math.exp(-f*k*F),G=Math.min(C*F,300);return s-L*((p+f*k*w)*Math.sinh(G)+C*w*Math.cosh(G))/C};const O=(p+f*k*w)/C,T=f*k*O-w*C,W=f*k*w-O*C;y=F=>{const L=Math.exp(-f*k*F),G=Math.min(C*F,300);return L*(T*Math.sinh(G)+W*Math.cosh(G))}}const E={calculatedDuration:m&&h||null,velocity:C=>st(y(C)),next:C=>{if(!m&&f<1){const T=Math.exp(-f*k*C),W=Math.sin(j*C),F=Math.cos(j*C),L=s-T*(z*W+w*F),G=st(T*(S*W+A*F));return l.done=Math.abs(G)<=i&&Math.abs(s-L)<=a,l.value=l.done?s:L,l}const O=x(C);if(m)l.done=C>=h;else{const T=st(y(C));l.done=Math.abs(T)<=i&&Math.abs(s-O)<=a}return l.value=l.done?s:O,l},toString:()=>{const C=Math.min(Wb(E),su),O=Rz(T=>E.next(C*T).value,C,30);return C+"ms "+O},toTransition:()=>{}};return E}lu.applyToOptions=e=>{const n=PL(e,100,lu);return e.ease=n.ease,e.duration=st(n.duration),e.type="keyframes",e};const OL=5;function Oz(e,n,t){const i=Math.max(n-OL,0);return bz(t-e(i),n-i)}function yp({keyframes:e,velocity:n=0,power:t=.8,timeConstant:i=325,bounceDamping:a=10,bounceStiffness:o=500,modifyTarget:s,min:l,max:d,restDelta:c=.5,restSpeed:u}){const h=e[0],g={done:!1,value:h},m=A=>l!==void 0&&A<l||d!==void 0&&A>d,p=A=>l===void 0?d:d===void 0||Math.abs(l-A)<Math.abs(d-A)?l:d;let f=t*n;const w=h+f,k=s===void 0?w:s(w);k!==w&&(f=k-h);const v=A=>-f*Math.exp(-A/i),x=A=>k+v(A),y=A=>{const E=v(A),C=x(A);g.done=Math.abs(E)<=c,g.value=g.done?k:C};let j,z;const S=A=>{m(g.value)&&(j=A,z=lu({keyframes:[g.value,p(g.value)],velocity:Oz(x,A,g.value),damping:a,stiffness:o,restDelta:c,restSpeed:u}))};return S(0),{calculatedDuration:null,next:A=>{let E=!1;return!z&&j===void 0&&(E=!0,y(A),S(A)),j!==void 0&&A>=j?z.next(A-j):(!E&&y(A),g)}}}function _L(e,n,t){const i=[],a=t||zr.mix||Fz,o=e.length-1;for(let s=0;s<o;s++){let l=a(e[s],e[s+1]);if(n){const d=Array.isArray(n)?n[s]||Tt:n;l=Pl(d,l)}i.push(l)}return i}function LL(e,n,{clamp:t=!0,ease:i,mixer:a}={}){const o=e.length;if(yo(o===n.length,"Both input and output ranges must be the same length","range-length"),o===1)return()=>n[0];if(o===2&&n[0]===n[1])return()=>n[1];const s=e[0]===e[1];e[0]>e[o-1]&&(e=[...e].reverse(),n=[...n].reverse());const l=_L(n,i,a),d=l.length,c=u=>{if(s&&u<e[0])return n[0];let h=0;if(d>1)for(;h<e.length-2&&!(u<e[h+1]);h++);const g=bl(e[h],e[h+1],u);return l[h](g)};return t?u=>c(ji(e[0],e[o-1],u)):c}function WL(e,n){const t=e[e.length-1];for(let i=1;i<=n;i++){const a=bl(0,n,i);e.push(Je(t,1,a))}}function VL(e){const n=[0];return WL(n,e.length-1),n}function KL(e,n){return e.map(t=>t*n)}function qL(e,n){return e.map(()=>n||Az).splice(0,e.length-1)}function _s({duration:e=300,keyframes:n,times:t,ease:i="easeInOut"}){const a=X_(i)?i.map(ox):ox(i),o={done:!1,value:n[0]},s=KL(t&&t.length===n.length?t:VL(n),e),l=LL(s,n,{ease:Array.isArray(a)?a:qL(n,a)});return{calculatedDuration:e,next:d=>(o.value=l(d),o.done=d>=e,o)}}const HL=e=>e!==null;function eh(e,{repeat:n,repeatType:t="loop"},i,a=1){const o=e.filter(HL),l=a<0||n&&t!=="loop"&&n%2===1?0:o.length-1;return!l||i===void 0?o[l]:i}const UL={decay:yp,inertia:yp,tween:_s,keyframes:_s,spring:lu};function _z(e){typeof e.type=="string"&&(e.type=UL[e.type])}class Vb{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(n=>{this.resolve=n})}notifyFinished(){this.resolve()}then(n,t){return this.finished.then(n,t)}}const GL=e=>e/100;class du extends Vb{constructor(n){super(),this.state="idle",this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.delayState={done:!1,value:void 0},this.stop=()=>{const{motionValue:t}=this.options;t&&t.updatedAt!==Gn.now()&&this.tick(Gn.now()),this.isStopped=!0,this.state!=="idle"&&(this.teardown(),this.options.onStop?.())},this.options=n,this.initAnimation(),this.play(),n.autoplay===!1&&this.pause()}initAnimation(){const{options:n}=this;_z(n);const{type:t=_s,repeat:i=0,repeatDelay:a=0,repeatType:o,velocity:s=0}=n;let{keyframes:l}=n;const d=t||_s;d!==_s&&typeof l[0]!="number"&&(this.mixKeyframes=Pl(GL,Fz(l[0],l[1])),l=[0,100]);const c=d({...n,keyframes:l});o==="mirror"&&(this.mirroredGenerator=d({...n,keyframes:[...l].reverse(),velocity:-s})),c.calculatedDuration===null&&(c.calculatedDuration=Wb(c));const{calculatedDuration:u}=c;this.calculatedDuration=u,this.resolvedDuration=u+a,this.totalDuration=this.resolvedDuration*(i+1)-a,this.generator=c}updateTime(n){const t=Math.round(n-this.startTime)*this.playbackSpeed;this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=t}tick(n,t=!1){const{generator:i,totalDuration:a,mixKeyframes:o,mirroredGenerator:s,resolvedDuration:l,calculatedDuration:d}=this;if(this.startTime===null)return i.next(0);const{delay:c=0,keyframes:u,repeat:h,repeatType:g,repeatDelay:m,type:p,onUpdate:f,finalKeyframe:w}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,n):this.speed<0&&(this.startTime=Math.min(n-a/this.speed,this.startTime)),t?this.currentTime=n:this.updateTime(n);const k=this.currentTime-c*(this.playbackSpeed>=0?1:-1),v=this.playbackSpeed>=0?k<0:k>a;this.currentTime=Math.max(k,0),this.state==="finished"&&this.holdTime===null&&(this.currentTime=a);let x=this.currentTime,y=i;if(h){const A=Math.min(this.currentTime,a)/l;let E=Math.floor(A),C=A%1;!C&&A>=1&&(C=1),C===1&&E--,E=Math.min(E,h+1),!!(E%2)&&(g==="reverse"?(C=1-C,m&&(C-=m/l)):g==="mirror"&&(y=s)),x=ji(0,1,C)*l}let j;v?(this.delayState.value=u[0],j=this.delayState):j=y.next(x),o&&!v&&(j.value=o(j.value));let{done:z}=j;!v&&d!==null&&(z=this.playbackSpeed>=0?this.currentTime>=a:this.currentTime<=0);const S=this.holdTime===null&&(this.state==="finished"||this.state==="running"&&z);return S&&p!==yp&&(j.value=eh(u,this.options,w,this.speed)),f&&f(j.value),S&&this.finish(),j}then(n,t){return this.finished.then(n,t)}get duration(){return Nt(this.calculatedDuration)}get iterationDuration(){const{delay:n=0}=this.options||{};return this.duration+Nt(n)}get time(){return Nt(this.currentTime)}set time(n){n=st(n),this.currentTime=n,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=n:this.driver&&(this.startTime=this.driver.now()-n/this.playbackSpeed),this.driver?this.driver.start(!1):(this.startTime=0,this.state="paused",this.holdTime=n,this.tick(n))}getGeneratorVelocity(){const n=this.currentTime;if(n<=0)return this.options.velocity||0;if(this.generator.velocity)return this.generator.velocity(n);const t=this.generator.next(n).value;return Oz(i=>this.generator.next(i).value,n,t)}get speed(){return this.playbackSpeed}set speed(n){const t=this.playbackSpeed!==n;t&&this.driver&&this.updateTime(Gn.now()),this.playbackSpeed=n,t&&this.driver&&(this.time=Nt(this.currentTime))}play(){if(this.isStopped)return;const{driver:n=IL,startTime:t}=this.options;this.driver||(this.driver=n(a=>this.tick(a))),this.options.onPlay?.();const i=this.driver.now();this.state==="finished"?(this.updateFinished(),this.startTime=i):this.holdTime!==null?this.startTime=i-this.holdTime:this.startTime||(this.startTime=t??i),this.state==="finished"&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state="running",this.driver.start()}pause(){this.state="paused",this.updateTime(Gn.now()),this.holdTime=this.currentTime}complete(){this.state!=="running"&&this.play(),this.state="finished",this.holdTime=null}finish(){this.notifyFinished(),this.teardown(),this.state="finished",this.options.onComplete?.()}cancel(){this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),this.options.onCancel?.()}teardown(){this.state="idle",this.stopDriver(),this.startTime=this.holdTime=null}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(n){return this.startTime=0,this.tick(n,!0)}attachTimeline(n){return this.options.allowFlatten&&(this.options.type="keyframes",this.options.ease="linear",this.initAnimation()),this.driver?.stop(),n.observe(this)}}function $L(e){for(let n=1;n<e.length;n++)e[n]??(e[n]=e[n-1])}const Qr=e=>e*180/Math.PI,jp=e=>{const n=Qr(Math.atan2(e[1],e[0]));return Sp(n)},ZL={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:e=>(Math.abs(e[0])+Math.abs(e[3]))/2,rotate:jp,rotateZ:jp,skewX:e=>Qr(Math.atan(e[1])),skewY:e=>Qr(Math.atan(e[2])),skew:e=>(Math.abs(e[1])+Math.abs(e[2]))/2},Sp=e=>(e=e%360,e<0&&(e+=360),e),mx=jp,px=e=>Math.sqrt(e[0]*e[0]+e[1]*e[1]),fx=e=>Math.sqrt(e[4]*e[4]+e[5]*e[5]),YL={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:px,scaleY:fx,scale:e=>(px(e)+fx(e))/2,rotateX:e=>Sp(Qr(Math.atan2(e[6],e[5]))),rotateY:e=>Sp(Qr(Math.atan2(-e[2],e[0]))),rotateZ:mx,rotate:mx,skewX:e=>Qr(Math.atan(e[4])),skewY:e=>Qr(Math.atan(e[1])),skew:e=>(Math.abs(e[1])+Math.abs(e[4]))/2};function zp(e){return e.includes("scale")?1:0}function Ap(e,n){if(!e||e==="none")return zp(n);const t=e.match(/^matrix3d\(([-\d.e\s,]+)\)$/u);let i,a;if(t)i=YL,a=t;else{const l=e.match(/^matrix\(([-\d.e\s,]+)\)$/u);i=ZL,a=l}if(!a)return zp(n);const o=i[n],s=a[1].split(",").map(JL);return typeof o=="function"?o(s):s[o]}const QL=(e,n)=>{const{transform:t="none"}=getComputedStyle(e);return Ap(t,n)};function JL(e){return parseFloat(e.trim())}const _o=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],Lo=new Set(_o),bx=e=>e===Oo||e===te,XL=new Set(["x","y","z"]),e8=_o.filter(e=>!XL.has(e));function n8(e){const n=[];return e8.forEach(t=>{const i=e.getValue(t);i!==void 0&&(n.push([t,i.get()]),i.set(t.startsWith("scale")?1:0))}),n}const ur={width:({x:e},{paddingLeft:n="0",paddingRight:t="0",boxSizing:i})=>{const a=e.max-e.min;return i==="border-box"?a:a-parseFloat(n)-parseFloat(t)},height:({y:e},{paddingTop:n="0",paddingBottom:t="0",boxSizing:i})=>{const a=e.max-e.min;return i==="border-box"?a:a-parseFloat(n)-parseFloat(t)},top:(e,{top:n})=>parseFloat(n),left:(e,{left:n})=>parseFloat(n),bottom:({y:e},{top:n})=>parseFloat(n)+(e.max-e.min),right:({x:e},{left:n})=>parseFloat(n)+(e.max-e.min),x:(e,{transform:n})=>Ap(n,"x"),y:(e,{transform:n})=>Ap(n,"y")};ur.translateX=ur.x;ur.translateY=ur.y;const ta=new Set;let Cp=!1,Ep=!1,Np=!1;function Lz(){if(Ep){const e=Array.from(ta).filter(i=>i.needsMeasurement),n=new Set(e.map(i=>i.element)),t=new Map;n.forEach(i=>{const a=n8(i);a.length&&(t.set(i,a),i.render())}),e.forEach(i=>i.measureInitialState()),n.forEach(i=>{i.render();const a=t.get(i);a&&a.forEach(([o,s])=>{i.getValue(o)?.set(s)})}),e.forEach(i=>i.measureEndState()),e.forEach(i=>{i.suspendedScrollY!==void 0&&window.scrollTo(0,i.suspendedScrollY)})}Ep=!1,Cp=!1,ta.forEach(e=>e.complete(Np)),ta.clear()}function Wz(){ta.forEach(e=>{e.readKeyframes(),e.needsMeasurement&&(Ep=!0)})}function t8(){Np=!0,Wz(),Lz(),Np=!1}class Kb{constructor(n,t,i,a,o,s=!1){this.state="pending",this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...n],this.onComplete=t,this.name=i,this.motionValue=a,this.element=o,this.isAsync=s}scheduleResolve(){this.state="scheduled",this.isAsync?(ta.add(this),Cp||(Cp=!0,He.read(Wz),He.resolveKeyframes(Lz))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:n,name:t,element:i,motionValue:a}=this;if(n[0]===null){const o=a?.get(),s=n[n.length-1];if(o!==void 0)n[0]=o;else if(i&&t){const l=i.readValue(t,s);l!=null&&(n[0]=l)}n[0]===void 0&&(n[0]=s),a&&o===void 0&&a.set(n[0])}$L(n)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(n=!1){this.state="complete",this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,n),ta.delete(this)}cancel(){this.state==="scheduled"&&(ta.delete(this),this.state="pending")}resume(){this.state==="pending"&&this.scheduleResolve()}}const i8=e=>e.startsWith("--");function Vz(e,n,t){i8(n)?e.style.setProperty(n,t):e.style[n]=t}const r8={};function Kz(e,n){const t=fz(e);return()=>r8[n]??t()}const a8=Kz(()=>window.ScrollTimeline!==void 0,"scrollTimeline"),qz=Kz(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch{return!1}return!0},"linearEasing"),zs=([e,n,t,i])=>`cubic-bezier(${e}, ${n}, ${t}, ${i})`,vx={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:zs([0,.65,.55,1]),circOut:zs([.55,0,1,.45]),backIn:zs([.31,.01,.66,-.59]),backOut:zs([.33,1.53,.69,.99])};function Hz(e,n){if(e)return typeof e=="function"?qz()?Rz(e,n):"ease-out":Cz(e)?zs(e):Array.isArray(e)?e.map(t=>Hz(t,n)||vx.easeOut):vx[e]}function o8(e,n,t,{delay:i=0,duration:a=300,repeat:o=0,repeatType:s="loop",ease:l="easeOut",times:d}={},c=void 0){const u={[n]:t};d&&(u.offset=d);const h=Hz(l,a);Array.isArray(h)&&(u.easing=h);const g={delay:i,duration:a,easing:Array.isArray(h)?"linear":h,fill:"both",iterations:o+1,direction:s==="reverse"?"alternate":"normal"};return c&&(g.pseudoElement=c),e.animate(u,g)}function Uz(e){return typeof e=="function"&&"applyToOptions"in e}function s8({type:e,...n}){return Uz(e)&&qz()?e.applyToOptions(n):(n.duration??(n.duration=300),n.ease??(n.ease="easeOut"),n)}class Gz extends Vb{constructor(n){if(super(),this.finishedTime=null,this.isStopped=!1,this.manualStartTime=null,!n)return;const{element:t,name:i,keyframes:a,pseudoElement:o,allowFlatten:s=!1,finalKeyframe:l,onComplete:d}=n;this.isPseudoElement=!!o,this.allowFlatten=s,this.options=n,yo(typeof n.type!="string",`Mini animate() doesn't support "type" as a string.`,"mini-spring");const c=s8(n);this.animation=o8(t,i,a,c,o),c.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!o){const u=eh(a,this.options,l,this.speed);this.updateMotionValue&&this.updateMotionValue(u),Vz(t,i,u),this.animation.cancel()}d?.(),this.notifyFinished()}}play(){this.isStopped||(this.manualStartTime=null,this.animation.play(),this.state==="finished"&&this.updateFinished())}pause(){this.animation.pause()}complete(){this.animation.finish?.()}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;const{state:n}=this;n==="idle"||n==="finished"||(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){const n=this.options?.element;!this.isPseudoElement&&n?.isConnected&&this.animation.commitStyles?.()}get duration(){const n=this.animation.effect?.getComputedTiming?.().duration||0;return Nt(Number(n))}get iterationDuration(){const{delay:n=0}=this.options||{};return this.duration+Nt(n)}get time(){return Nt(Number(this.animation.currentTime)||0)}set time(n){const t=this.finishedTime!==null;this.manualStartTime=null,this.finishedTime=null,this.animation.currentTime=st(n),t&&this.animation.pause()}get speed(){return this.animation.playbackRate}set speed(n){n<0&&(this.finishedTime=null),this.animation.playbackRate=n}get state(){return this.finishedTime!==null?"finished":this.animation.playState}get startTime(){return this.manualStartTime??Number(this.animation.startTime)}set startTime(n){this.manualStartTime=this.animation.startTime=n}attachTimeline({timeline:n,rangeStart:t,rangeEnd:i,observe:a}){return this.allowFlatten&&this.animation.effect?.updateTiming({easing:"linear"}),this.animation.onfinish=null,n&&a8()?(this.animation.timeline=n,t&&(this.animation.rangeStart=t),i&&(this.animation.rangeEnd=i),Tt):a(this)}}const $z={anticipate:jz,backInOut:yz,circInOut:zz};function l8(e){return e in $z}function d8(e){typeof e.ease=="string"&&l8(e.ease)&&(e.ease=$z[e.ease])}const kg=10;class c8 extends Gz{constructor(n){d8(n),_z(n),super(n),n.startTime!==void 0&&n.autoplay!==!1&&(this.startTime=n.startTime),this.options=n}updateMotionValue(n){const{motionValue:t,onUpdate:i,onComplete:a,element:o,...s}=this.options;if(!t)return;if(n!==void 0){t.set(n);return}const l=new du({...s,autoplay:!1}),d=Math.max(kg,Gn.now()-this.startTime),c=ji(0,kg,d-kg),u=l.sample(d).value,{name:h}=this.options;o&&h&&Vz(o,h,u),t.setWithVelocity(l.sample(Math.max(0,d-c)).value,u,c),l.stop()}}const kx=(e,n)=>n==="zIndex"?!1:!!(typeof e=="number"||Array.isArray(e)||typeof e=="string"&&(Yt.test(e)||e==="0")&&!e.startsWith("url("));function u8(e){const n=e[0];if(e.length===1)return!0;for(let t=0;t<e.length;t++)if(e[t]!==n)return!0}function h8(e,n,t,i){const a=e[0];if(a===null)return!1;if(n==="display"||n==="visibility")return!0;const o=e[e.length-1],s=kx(a,n),l=kx(o,n);return Xu(s===l,`You are trying to animate ${n} from "${a}" to "${o}". "${s?o:a}" is not an animatable value.`,"value-not-animatable"),!s||!l?!1:u8(e)||(t==="spring"||Uz(t))&&i}function Ip(e){e.duration=0,e.type="keyframes"}const Zz=new Set(["opacity","clipPath","filter","transform"]),g8=/^(?:oklch|oklab|lab|lch|color|color-mix|light-dark)\(/;function m8(e){for(let n=0;n<e.length;n++)if(typeof e[n]=="string"&&g8.test(e[n]))return!0;return!1}const p8=new Set(["color","backgroundColor","outlineColor","fill","stroke","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"]),f8=fz(()=>Object.hasOwnProperty.call(Element.prototype,"animate"));function b8(e){const{motionValue:n,name:t,repeatDelay:i,repeatType:a,damping:o,type:s,keyframes:l}=e;if(!(n?.owner?.current instanceof HTMLElement))return!1;const{onUpdate:c,transformTemplate:u}=n.owner.getProps();return f8()&&t&&(Zz.has(t)||p8.has(t)&&m8(l))&&(t!=="transform"||!u)&&!c&&!i&&a!=="mirror"&&o!==0&&s!=="inertia"}const v8=40;class k8 extends Vb{constructor({autoplay:n=!0,delay:t=0,type:i="keyframes",repeat:a=0,repeatDelay:o=0,repeatType:s="loop",keyframes:l,name:d,motionValue:c,element:u,...h}){super(),this.stop=()=>{this._animation&&(this._animation.stop(),this.stopTimeline?.()),this.keyframeResolver?.cancel()},this.createdAt=Gn.now();const g={autoplay:n,delay:t,type:i,repeat:a,repeatDelay:o,repeatType:s,name:d,motionValue:c,element:u,...h},m=u?.KeyframeResolver||Kb;this.keyframeResolver=new m(l,(p,f,w)=>this.onKeyframesResolved(p,f,g,!w),d,c,u),this.keyframeResolver?.scheduleResolve()}onKeyframesResolved(n,t,i,a){this.keyframeResolver=void 0;const{name:o,type:s,velocity:l,delay:d,isHandoff:c,onUpdate:u}=i;this.resolvedAt=Gn.now();let h=!0;h8(n,o,s,l)||(h=!1,(zr.instantAnimations||!d)&&u?.(eh(n,i,t)),n[0]=n[n.length-1],Ip(i),i.repeat=0);const m={startTime:a?this.resolvedAt?this.resolvedAt-this.createdAt>v8?this.resolvedAt:this.createdAt:this.createdAt:void 0,finalKeyframe:t,...i,keyframes:n},p=h&&!c&&b8(m),f=m.motionValue?.owner?.current;let w;if(p)try{w=new c8({...m,element:f})}catch{w=new du(m)}else w=new du(m);w.finished.then(()=>{this.notifyFinished()}).catch(Tt),this.pendingTimeline&&(this.stopTimeline=w.attachTimeline(this.pendingTimeline),this.pendingTimeline=void 0),this._animation=w}get finished(){return this._animation?this.animation.finished:this._finished}then(n,t){return this.finished.finally(n).then(()=>{})}get animation(){return this._animation||(this.keyframeResolver?.resume(),t8()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(n){this.animation.time=n}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(n){this.animation.speed=n}get startTime(){return this.animation.startTime}attachTimeline(n){return this._animation?this.stopTimeline=this.animation.attachTimeline(n):this.pendingTimeline=n,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){this._animation&&this.animation.cancel(),this.keyframeResolver?.cancel()}}function Yz(e,n,t,i=0,a=1){const o=Array.from(e).sort((c,u)=>c.sortNodePosition(u)).indexOf(n),s=e.size,l=(s-1)*i;return typeof t=="function"?t(o,s):a===1?o*i:l-o*i}const w8=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function x8(e){const n=w8.exec(e);if(!n)return[,];const[,t,i,a]=n;return[`--${t??i}`,a]}const y8=4;function Qz(e,n,t=1){yo(t<=y8,`Max CSS variable fallback depth detected in property "${e}". This may indicate a circular fallback dependency.`,"max-css-var-depth");const[i,a]=x8(e);if(!i)return;const o=window.getComputedStyle(n).getPropertyValue(i);if(o){const s=o.trim();return gz(s)?parseFloat(s):s}return Rb(a)?Qz(a,n,t+1):a}const j8={type:"spring",stiffness:500,damping:25,restSpeed:10},S8=e=>({type:"spring",stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),z8={type:"keyframes",duration:.8},A8={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},C8=(e,{keyframes:n})=>n.length>2?z8:Lo.has(e)?e.startsWith("scale")?S8(n[1]):j8:A8;function Jz(e,n){if(e?.inherit&&n){const{inherit:t,...i}=e;return{...n,...i}}return e}function qb(e,n){const t=e?.[n]??e?.default??e;return t!==e?Jz(t,e):t}const E8=new Set(["when","delay","delayChildren","staggerChildren","staggerDirection","repeat","repeatType","repeatDelay","from","elapsed"]);function N8(e){for(const n in e)if(!E8.has(n))return!0;return!1}const Hb=(e,n,t,i={},a,o)=>s=>{const l=qb(i,e)||{},d=l.delay||i.delay||0;let{elapsed:c=0}=i;c=c-st(d);const u={keyframes:Array.isArray(t)?t:[null,t],ease:"easeOut",velocity:n.getVelocity(),...l,delay:-c,onUpdate:g=>{n.set(g),l.onUpdate&&l.onUpdate(g)},onComplete:()=>{s(),l.onComplete&&l.onComplete()},name:e,motionValue:n,element:o?void 0:a};N8(l)||Object.assign(u,C8(e,u)),u.duration&&(u.duration=st(u.duration)),u.repeatDelay&&(u.repeatDelay=st(u.repeatDelay)),u.from!==void 0&&(u.keyframes[0]=u.from);let h=!1;if((u.type===!1||u.duration===0&&!u.repeatDelay)&&(Ip(u),u.delay===0&&(h=!0)),(zr.instantAnimations||zr.skipAnimations||a?.shouldSkipAnimations)&&(h=!0,Ip(u),u.delay=0),u.allowFlatten=!l.type&&!l.ease,h&&!o&&n.get()!==void 0){const g=eh(u.keyframes,l);if(g!==void 0){He.update(()=>{u.onUpdate(g),u.onComplete()});return}}return l.isSync?new du(u):new k8(u)};function wx(e){const n=[{},{}];return e?.values.forEach((t,i)=>{n[0][i]=t.get(),n[1][i]=t.getVelocity()}),n}function Ub(e,n,t,i){if(typeof n=="function"){const[a,o]=wx(i);n=n(t!==void 0?t:e.custom,a,o)}if(typeof n=="string"&&(n=e.variants&&e.variants[n]),typeof n=="function"){const[a,o]=wx(i);n=n(t!==void 0?t:e.custom,a,o)}return n}function ia(e,n,t){const i=e.getProps();return Ub(i,n,t!==void 0?t:i.custom,e)}const Xz=new Set(["width","height","top","left","right","bottom",..._o]),xx=30,I8=e=>!isNaN(parseFloat(e));class P8{constructor(n,t={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=i=>{const a=Gn.now();if(this.updatedAt!==a&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(i),this.current!==this.prev&&(this.events.change?.notify(this.current),this.dependents))for(const o of this.dependents)o.dirty()},this.hasAnimated=!1,this.setCurrent(n),this.owner=t.owner}setCurrent(n){this.current=n,this.updatedAt=Gn.now(),this.canTrackVelocity===null&&n!==void 0&&(this.canTrackVelocity=I8(this.current))}setPrevFrameValue(n=this.current){this.prevFrameValue=n,this.prevUpdatedAt=this.updatedAt}onChange(n){return this.on("change",n)}on(n,t){this.events[n]||(this.events[n]=new Bb);const i=this.events[n].add(t);return n==="change"?()=>{i(),He.read(()=>{this.events.change.getSize()||this.stop()})}:i}clearListeners(){for(const n in this.events)this.events[n].clear()}attach(n,t){this.passiveEffect=n,this.stopPassiveEffect=t}set(n){this.passiveEffect?this.passiveEffect(n,this.updateAndNotify):this.updateAndNotify(n)}setWithVelocity(n,t,i){this.set(t),this.prev=void 0,this.prevFrameValue=n,this.prevUpdatedAt=this.updatedAt-i}jump(n,t=!0){this.updateAndNotify(n),this.prev=n,this.prevUpdatedAt=this.prevFrameValue=void 0,t&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){this.events.change?.notify(this.current)}addDependent(n){this.dependents||(this.dependents=new Set),this.dependents.add(n)}removeDependent(n){this.dependents&&this.dependents.delete(n)}get(){return this.current}getPrevious(){return this.prev}getVelocity(){const n=Gn.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||n-this.updatedAt>xx)return 0;const t=Math.min(this.updatedAt-this.prevUpdatedAt,xx);return bz(parseFloat(this.current)-parseFloat(this.prevFrameValue),t)}start(n){return this.stop(),new Promise(t=>{this.hasAnimated=!0,this.animation=n(t),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.dependents?.clear(),this.events.destroy?.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function So(e,n){return new P8(e,n)}const Pp=e=>Array.isArray(e);function T8(e,n,t){e.hasValue(n)?e.getValue(n).set(t):e.addValue(n,So(t))}function D8(e){return Pp(e)?e[e.length-1]||0:e}function B8(e,n){const t=ia(e,n);let{transitionEnd:i={},transition:a={},...o}=t||{};o={...o,...i};for(const s in o){const l=D8(o[s]);T8(e,s,l)}}const Bn=e=>!!(e&&e.getVelocity);function M8(e){return!!(Bn(e)&&e.add)}function Tp(e,n){const t=e.getValue("willChange");if(M8(t))return t.add(n);if(!t&&zr.WillChange){const i=new zr.WillChange("auto");e.addValue("willChange",i),i.add(n)}}function Gb(e){return e.replace(/([A-Z])/g,n=>`-${n.toLowerCase()}`)}const F8="framerAppearId",eA="data-"+Gb(F8);function nA(e){return e.props[eA]}function R8({protectedKeys:e,needsAnimating:n},t){const i=e.hasOwnProperty(t)&&n[t]!==!0;return n[t]=!1,i}function tA(e,n,{delay:t=0,transitionOverride:i,type:a}={}){let{transition:o,transitionEnd:s,...l}=n;const d=e.getDefaultTransition();o=o?Jz(o,d):d;const c=o?.reduceMotion;i&&(o=i);const u=[],h=a&&e.animationState&&e.animationState.getState()[a];for(const g in l){const m=e.getValue(g,e.latestValues[g]??null),p=l[g];if(p===void 0||h&&R8(h,g))continue;const f={delay:t,...qb(o||{},g)},w=m.get();if(w!==void 0&&!m.isAnimating()&&!Array.isArray(p)&&p===w&&!f.velocity){He.update(()=>m.set(p));continue}let k=!1;if(window.MotionHandoffAnimation){const y=nA(e);if(y){const j=window.MotionHandoffAnimation(y,g,He);j!==null&&(f.startTime=j,k=!0)}}Tp(e,g);const v=c??e.shouldReduceMotion;m.start(Hb(g,m,p,v&&Xz.has(g)?{type:!1}:f,e,k));const x=m.animation;x&&u.push(x)}if(s){const g=()=>He.update(()=>{s&&B8(e,s)});u.length?Promise.all(u).then(g):g()}return u}function Dp(e,n,t={}){const i=ia(e,n,t.type==="exit"?e.presenceContext?.custom:void 0);let{transition:a=e.getDefaultTransition()||{}}=i||{};t.transitionOverride&&(a=t.transitionOverride);const o=i?()=>Promise.all(tA(e,i,t)):()=>Promise.resolve(),s=e.variantChildren&&e.variantChildren.size?(d=0)=>{const{delayChildren:c=0,staggerChildren:u,staggerDirection:h}=a;return O8(e,n,d,c,u,h,t)}:()=>Promise.resolve(),{when:l}=a;if(l){const[d,c]=l==="beforeChildren"?[o,s]:[s,o];return d().then(()=>c())}else return Promise.all([o(),s(t.delay)])}function O8(e,n,t=0,i=0,a=0,o=1,s){const l=[];for(const d of e.variantChildren)d.notify("AnimationStart",n),l.push(Dp(d,n,{...s,delay:t+(typeof i=="function"?0:i)+Yz(e.variantChildren,d,i,a,o)}).then(()=>d.notify("AnimationComplete",n)));return Promise.all(l)}function _8(e,n,t={}){e.notify("AnimationStart",n);let i;if(Array.isArray(n)){const a=n.map(o=>Dp(e,o,t));i=Promise.all(a)}else if(typeof n=="string")i=Dp(e,n,t);else{const a=typeof n=="function"?ia(e,n,t.custom):n;i=Promise.all(tA(e,a,t))}return i.then(()=>{e.notify("AnimationComplete",n)})}const L8={test:e=>e==="auto",parse:e=>e},iA=e=>n=>n.test(e),rA=[Oo,te,bi,er,uL,cL,L8],yx=e=>rA.find(iA(e));function W8(e){return typeof e=="number"?e===0:e!==null?e==="none"||e==="0"||pz(e):!0}const V8=new Set(["brightness","contrast","saturate","opacity"]);function K8(e){const[n,t]=e.slice(0,-1).split("(");if(n==="drop-shadow")return e;const[i]=t.match(Ob)||[];if(!i)return e;const a=t.replace(i,"");let o=V8.has(n)?1:0;return i!==t&&(o*=100),n+"("+o+a+")"}const q8=/\b([a-z-]*)\(.*?\)/gu,Bp={...Yt,getAnimatableNone:e=>{const n=e.match(q8);return n?n.map(K8).join(" "):e}},Mp={...Yt,getAnimatableNone:e=>{const n=Yt.parse(e);return Yt.createTransformer(e)(n.map(i=>typeof i=="number"?0:typeof i=="object"?{...i,alpha:1}:i))}},jx={...Oo,transform:Math.round},H8={rotate:er,rotateX:er,rotateY:er,rotateZ:er,scale:Ad,scaleX:Ad,scaleY:Ad,scaleZ:Ad,skew:er,skewX:er,skewY:er,distance:te,translateX:te,translateY:te,translateZ:te,x:te,y:te,z:te,perspective:te,transformPerspective:te,opacity:vl,originX:dx,originY:dx,originZ:te},$b={borderWidth:te,borderTopWidth:te,borderRightWidth:te,borderBottomWidth:te,borderLeftWidth:te,borderRadius:te,borderTopLeftRadius:te,borderTopRightRadius:te,borderBottomRightRadius:te,borderBottomLeftRadius:te,width:te,maxWidth:te,height:te,maxHeight:te,top:te,right:te,bottom:te,left:te,inset:te,insetBlock:te,insetBlockStart:te,insetBlockEnd:te,insetInline:te,insetInlineStart:te,insetInlineEnd:te,padding:te,paddingTop:te,paddingRight:te,paddingBottom:te,paddingLeft:te,paddingBlock:te,paddingBlockStart:te,paddingBlockEnd:te,paddingInline:te,paddingInlineStart:te,paddingInlineEnd:te,margin:te,marginTop:te,marginRight:te,marginBottom:te,marginLeft:te,marginBlock:te,marginBlockStart:te,marginBlockEnd:te,marginInline:te,marginInlineStart:te,marginInlineEnd:te,fontSize:te,backgroundPositionX:te,backgroundPositionY:te,...H8,zIndex:jx,fillOpacity:vl,strokeOpacity:vl,numOctaves:jx},U8={...$b,color:bn,backgroundColor:bn,outlineColor:bn,fill:bn,stroke:bn,borderColor:bn,borderTopColor:bn,borderRightColor:bn,borderBottomColor:bn,borderLeftColor:bn,filter:Bp,WebkitFilter:Bp,mask:Mp,WebkitMask:Mp},aA=e=>U8[e],G8=new Set([Bp,Mp]);function oA(e,n){let t=aA(e);return G8.has(t)||(t=Yt),t.getAnimatableNone?t.getAnimatableNone(n):void 0}const $8=new Set(["auto","none","0"]);function Z8(e,n,t){let i=0,a;for(;i<e.length&&!a;){const o=e[i];typeof o=="string"&&!$8.has(o)&&jo(o).values.length&&(a=e[i]),i++}if(a&&t)for(const o of n)e[o]=oA(t,a)}class Y8 extends Kb{constructor(n,t,i,a,o){super(n,t,i,a,o,!0)}readKeyframes(){const{unresolvedKeyframes:n,element:t,name:i}=this;if(!t||!t.current)return;super.readKeyframes();for(let u=0;u<n.length;u++){let h=n[u];if(typeof h=="string"&&(h=h.trim(),Rb(h))){const g=Qz(h,t.current);g!==void 0&&(n[u]=g),u===n.length-1&&(this.finalKeyframe=h)}}if(this.resolveNoneKeyframes(),!Xz.has(i)||n.length!==2)return;const[a,o]=n,s=yx(a),l=yx(o),d=lx(a),c=lx(o);if(d!==c&&ur[i]){this.needsMeasurement=!0;return}if(s!==l)if(bx(s)&&bx(l))for(let u=0;u<n.length;u++){const h=n[u];typeof h=="string"&&(n[u]=parseFloat(h))}else ur[i]&&(this.needsMeasurement=!0)}resolveNoneKeyframes(){const{unresolvedKeyframes:n,name:t}=this,i=[];for(let a=0;a<n.length;a++)(n[a]===null||W8(n[a]))&&i.push(a);i.length&&Z8(n,i,t)}measureInitialState(){const{element:n,unresolvedKeyframes:t,name:i}=this;if(!n||!n.current)return;i==="height"&&(this.suspendedScrollY=window.pageYOffset),this.measuredOrigin=ur[i](n.measureViewportBox(),window.getComputedStyle(n.current)),t[0]=this.measuredOrigin;const a=t[t.length-1];a!==void 0&&n.getValue(i,a).jump(a,!1)}measureEndState(){const{element:n,name:t,unresolvedKeyframes:i}=this;if(!n||!n.current)return;const a=n.getValue(t);a&&a.jump(this.measuredOrigin,!1);const o=i.length-1,s=i[o];i[o]=ur[t](n.measureViewportBox(),window.getComputedStyle(n.current)),s!==null&&this.finalKeyframe===void 0&&(this.finalKeyframe=s),this.removedTransforms?.length&&this.removedTransforms.forEach(([l,d])=>{n.getValue(l).set(d)}),this.resolveNoneKeyframes()}}function sA(e,n,t){if(e==null)return[];if(e instanceof EventTarget)return[e];if(typeof e=="string"){const a=document.querySelectorAll(e);return a?Array.from(a):[]}return Array.from(e).filter(i=>i!=null)}const lA=(e,n)=>n&&typeof e=="number"?n.transform(e):e;function cc(e){return mz(e)&&"offsetHeight"in e&&!("ownerSVGElement"in e)}const{schedule:Zb,cancel:GQ}=Ez(queueMicrotask,!1),Wt={x:!1,y:!1};function dA(){return Wt.x||Wt.y}function Q8(e){return e==="x"||e==="y"?Wt[e]?null:(Wt[e]=!0,()=>{Wt[e]=!1}):Wt.x||Wt.y?null:(Wt.x=Wt.y=!0,()=>{Wt.x=Wt.y=!1})}function cA(e,n){const t=sA(e),i=new AbortController,a={passive:!0,...n,signal:i.signal};return[t,a,()=>i.abort()]}function J8(e){return!(e.pointerType==="touch"||dA())}function X8(e,n,t={}){const[i,a,o]=cA(e,t);return i.forEach(s=>{let l=!1,d=!1,c;const u=()=>{s.removeEventListener("pointerleave",p)},h=w=>{c&&(c(w),c=void 0),u()},g=w=>{l=!1,window.removeEventListener("pointerup",g),window.removeEventListener("pointercancel",g),d&&(d=!1,h(w))},m=()=>{l=!0,window.addEventListener("pointerup",g,a),window.addEventListener("pointercancel",g,a)},p=w=>{if(w.pointerType!=="touch"){if(l){d=!0;return}h(w)}},f=w=>{if(!J8(w))return;d=!1;const k=n(s,w);typeof k=="function"&&(c=k,s.addEventListener("pointerleave",p,a))};s.addEventListener("pointerenter",f,a),s.addEventListener("pointerdown",m,a)}),o}const uA=(e,n)=>n?e===n?!0:uA(e,n.parentElement):!1,Yb=e=>e.pointerType==="mouse"?typeof e.button!="number"||e.button<=0:e.isPrimary!==!1,eW=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function nW(e){return eW.has(e.tagName)||e.isContentEditable===!0}const tW=new Set(["INPUT","SELECT","TEXTAREA"]);function iW(e){return tW.has(e.tagName)||e.isContentEditable===!0}const uc=new WeakSet;function Sx(e){return n=>{n.key==="Enter"&&e(n)}}function wg(e,n){e.dispatchEvent(new PointerEvent("pointer"+n,{isPrimary:!0,bubbles:!0}))}const rW=(e,n)=>{const t=e.currentTarget;if(!t)return;const i=Sx(()=>{if(uc.has(t))return;wg(t,"down");const a=Sx(()=>{wg(t,"up")}),o=()=>wg(t,"cancel");t.addEventListener("keyup",a,n),t.addEventListener("blur",o,n)});t.addEventListener("keydown",i,n),t.addEventListener("blur",()=>t.removeEventListener("keydown",i),n)};function zx(e){return Yb(e)&&!dA()}const Ax=new WeakSet;function aW(e,n,t={}){const[i,a,o]=cA(e,t),s=l=>{const d=l.currentTarget;if(!zx(l)||Ax.has(l))return;uc.add(d),t.stopPropagation&&Ax.add(l);const c=n(d,l),u=(m,p)=>{window.removeEventListener("pointerup",h),window.removeEventListener("pointercancel",g),uc.has(d)&&uc.delete(d),zx(m)&&typeof c=="function"&&c(m,{success:p})},h=m=>{u(m,d===window||d===document||t.useGlobalTarget||uA(d,m.target))},g=m=>{u(m,!1)};window.addEventListener("pointerup",h,a),window.addEventListener("pointercancel",g,a)};return i.forEach(l=>{(t.useGlobalTarget?window:l).addEventListener("pointerdown",s,a),cc(l)&&(l.addEventListener("focus",c=>rW(c,a)),!nW(l)&&!l.hasAttribute("tabindex")&&(l.tabIndex=0))}),o}function Qb(e){return mz(e)&&"ownerSVGElement"in e}const hc=new WeakMap;let gc;const hA=(e,n,t)=>(i,a)=>a&&a[0]?a[0][e+"Size"]:Qb(i)&&"getBBox"in i?i.getBBox()[n]:i[t],oW=hA("inline","width","offsetWidth"),sW=hA("block","height","offsetHeight");function lW({target:e,borderBoxSize:n}){hc.get(e)?.forEach(t=>{t(e,{get width(){return oW(e,n)},get height(){return sW(e,n)}})})}function dW(e){e.forEach(lW)}function cW(){typeof ResizeObserver>"u"||(gc=new ResizeObserver(dW))}function uW(e,n){gc||cW();const t=sA(e);return t.forEach(i=>{let a=hc.get(i);a||(a=new Set,hc.set(i,a)),a.add(n),gc?.observe(i)}),()=>{t.forEach(i=>{const a=hc.get(i);a?.delete(n),a?.size||gc?.unobserve(i)})}}const mc=new Set;let Ua;function hW(){Ua=()=>{const e={get width(){return window.innerWidth},get height(){return window.innerHeight}};mc.forEach(n=>n(e))},window.addEventListener("resize",Ua)}function gW(e){return mc.add(e),Ua||hW(),()=>{mc.delete(e),!mc.size&&typeof Ua=="function"&&(window.removeEventListener("resize",Ua),Ua=void 0)}}function Cx(e,n){return typeof e=="function"?gW(e):uW(e,n)}function mW(e){return Qb(e)&&e.tagName==="svg"}const pW=[...rA,bn,Yt],fW=e=>pW.find(iA(e)),Ex=()=>({translate:0,scale:1,origin:0,originPoint:0}),Ga=()=>({x:Ex(),y:Ex()}),Nx=()=>({min:0,max:0}),xn=()=>({x:Nx(),y:Nx()}),bW=new WeakMap;function nh(e){return e!==null&&typeof e=="object"&&typeof e.start=="function"}function kl(e){return typeof e=="string"||Array.isArray(e)}const Jb=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],Xb=["initial",...Jb];function th(e){return nh(e.animate)||Xb.some(n=>kl(e[n]))}function gA(e){return!!(th(e)||e.variants)}function vW(e,n,t){for(const i in n){const a=n[i],o=t[i];if(Bn(a))e.addValue(i,a);else if(Bn(o))e.addValue(i,So(a,{owner:e}));else if(o!==a)if(e.hasValue(i)){const s=e.getValue(i);s.liveStyle===!0?s.jump(a):s.hasAnimated||s.set(a)}else{const s=e.getStaticValue(i);e.addValue(i,So(s!==void 0?s:a,{owner:e}))}}for(const i in t)n[i]===void 0&&e.removeValue(i);return n}const Fp={current:null},mA={current:!1},kW=typeof window<"u";function wW(){if(mA.current=!0,!!kW)if(window.matchMedia){const e=window.matchMedia("(prefers-reduced-motion)"),n=()=>Fp.current=e.matches;e.addEventListener("change",n),n()}else Fp.current=!1}const Ix=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];let cu={};function pA(e){cu=e}function xW(){return cu}class yW{scrapeMotionValuesFromProps(n,t,i){return{}}constructor({parent:n,props:t,presenceContext:i,reducedMotionConfig:a,skipAnimations:o,blockInitialAnimation:s,visualState:l},d={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.shouldSkipAnimations=!1,this.values=new Map,this.KeyframeResolver=Kb,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.hasBeenMounted=!1,this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const m=Gn.now();this.renderScheduledAt<m&&(this.renderScheduledAt=m,He.render(this.render,!1,!0))};const{latestValues:c,renderState:u}=l;this.latestValues=c,this.baseTarget={...c},this.initialValues=t.initial?{...c}:{},this.renderState=u,this.parent=n,this.props=t,this.presenceContext=i,this.depth=n?n.depth+1:0,this.reducedMotionConfig=a,this.skipAnimationsConfig=o,this.options=d,this.blockInitialAnimation=!!s,this.isControllingVariants=th(t),this.isVariantNode=gA(t),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(n&&n.current);const{willChange:h,...g}=this.scrapeMotionValuesFromProps(t,{},this);for(const m in g){const p=g[m];c[m]!==void 0&&Bn(p)&&p.set(c[m])}}mount(n){if(this.hasBeenMounted)for(const t in this.initialValues)this.values.get(t)?.jump(this.initialValues[t]),this.latestValues[t]=this.initialValues[t];this.current=n,bW.set(n,this),this.projection&&!this.projection.instance&&this.projection.mount(n),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((t,i)=>this.bindToMotionValue(i,t)),this.reducedMotionConfig==="never"?this.shouldReduceMotion=!1:this.reducedMotionConfig==="always"?this.shouldReduceMotion=!0:(mA.current||wW(),this.shouldReduceMotion=Fp.current),this.shouldSkipAnimations=this.skipAnimationsConfig??!1,this.parent?.addChild(this),this.update(this.props,this.presenceContext),this.hasBeenMounted=!0}unmount(){this.projection&&this.projection.unmount(),Ar(this.notifyUpdate),Ar(this.render),this.valueSubscriptions.forEach(n=>n()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent?.removeChild(this);for(const n in this.events)this.events[n].clear();for(const n in this.features){const t=this.features[n];t&&(t.unmount(),t.isMounted=!1)}this.current=null}addChild(n){this.children.add(n),this.enteringChildren??(this.enteringChildren=new Set),this.enteringChildren.add(n)}removeChild(n){this.children.delete(n),this.enteringChildren&&this.enteringChildren.delete(n)}bindToMotionValue(n,t){if(this.valueSubscriptions.has(n)&&this.valueSubscriptions.get(n)(),t.accelerate&&Zz.has(n)&&this.current instanceof HTMLElement){const{factory:s,keyframes:l,times:d,ease:c,duration:u}=t.accelerate,h=new Gz({element:this.current,name:n,keyframes:l,times:d,ease:c,duration:st(u)}),g=s(h);this.valueSubscriptions.set(n,()=>{g(),h.cancel()});return}const i=Lo.has(n);i&&this.onBindTransform&&this.onBindTransform();const a=t.on("change",s=>{this.latestValues[n]=s,this.props.onUpdate&&He.preRender(this.notifyUpdate),i&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()});let o;typeof window<"u"&&window.MotionCheckAppearSync&&(o=window.MotionCheckAppearSync(this,n,t)),this.valueSubscriptions.set(n,()=>{a(),o&&o(),t.owner&&t.stop()})}sortNodePosition(n){return!this.current||!this.sortInstanceNodePosition||this.type!==n.type?0:this.sortInstanceNodePosition(this.current,n.current)}updateFeatures(){let n="animation";for(n in cu){const t=cu[n];if(!t)continue;const{isEnabled:i,Feature:a}=t;if(!this.features[n]&&a&&i(this.props)&&(this.features[n]=new a(this)),this.features[n]){const o=this.features[n];o.isMounted?o.update():(o.mount(),o.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):xn()}getStaticValue(n){return this.latestValues[n]}setStaticValue(n,t){this.latestValues[n]=t}update(n,t){(n.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=n,this.prevPresenceContext=this.presenceContext,this.presenceContext=t;for(let i=0;i<Ix.length;i++){const a=Ix[i];this.propEventSubscriptions[a]&&(this.propEventSubscriptions[a](),delete this.propEventSubscriptions[a]);const o="on"+a,s=n[o];s&&(this.propEventSubscriptions[a]=this.on(a,s))}this.prevMotionValues=vW(this,this.scrapeMotionValuesFromProps(n,this.prevProps||{},this),this.prevMotionValues),this.handleChildMotionValue&&this.handleChildMotionValue()}getProps(){return this.props}getVariant(n){return this.props.variants?this.props.variants[n]:void 0}getDefaultTransition(){return this.props.transition}getTransformPagePoint(){return this.props.transformPagePoint}getClosestVariantNode(){return this.isVariantNode?this:this.parent?this.parent.getClosestVariantNode():void 0}addVariantChild(n){const t=this.getClosestVariantNode();if(t)return t.variantChildren&&t.variantChildren.add(n),()=>t.variantChildren.delete(n)}addValue(n,t){const i=this.values.get(n);t!==i&&(i&&this.removeValue(n),this.bindToMotionValue(n,t),this.values.set(n,t),this.latestValues[n]=t.get())}removeValue(n){this.values.delete(n);const t=this.valueSubscriptions.get(n);t&&(t(),this.valueSubscriptions.delete(n)),delete this.latestValues[n],this.removeValueFromRenderState(n,this.renderState)}hasValue(n){return this.values.has(n)}getValue(n,t){if(this.props.values&&this.props.values[n])return this.props.values[n];let i=this.values.get(n);return i===void 0&&t!==void 0&&(i=So(t===null?void 0:t,{owner:this}),this.addValue(n,i)),i}readValue(n,t){let i=this.latestValues[n]!==void 0||!this.current?this.latestValues[n]:this.getBaseTargetFromProps(this.props,n)??this.readValueFromInstance(this.current,n,this.options);return i!=null&&(typeof i=="string"&&(gz(i)||pz(i))?i=parseFloat(i):!fW(i)&&Yt.test(t)&&(i=oA(n,t)),this.setBaseTarget(n,Bn(i)?i.get():i)),Bn(i)?i.get():i}setBaseTarget(n,t){this.baseTarget[n]=t}getBaseTarget(n){const{initial:t}=this.props;let i;if(typeof t=="string"||typeof t=="object"){const o=Ub(this.props,t,this.presenceContext?.custom);o&&(i=o[n])}if(t&&i!==void 0)return i;const a=this.getBaseTargetFromProps(this.props,n);return a!==void 0&&!Bn(a)?a:this.initialValues[n]!==void 0&&i===void 0?void 0:this.baseTarget[n]}on(n,t){return this.events[n]||(this.events[n]=new Bb),this.events[n].add(t)}notify(n,...t){this.events[n]&&this.events[n].notify(...t)}scheduleRenderMicrotask(){Zb.render(this.render)}}class fA extends yW{constructor(){super(...arguments),this.KeyframeResolver=Y8}sortInstanceNodePosition(n,t){return n.compareDocumentPosition(t)&2?1:-1}getBaseTargetFromProps(n,t){const i=n.style;return i?i[t]:void 0}removeValueFromRenderState(n,{vars:t,style:i}){delete t[n],delete i[n]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:n}=this.props;Bn(n)&&(this.childSubscription=n.on("change",t=>{this.current&&(this.current.textContent=`${t}`)}))}}class Dr{constructor(n){this.isMounted=!1,this.node=n}update(){}}function bA({top:e,left:n,right:t,bottom:i}){return{x:{min:n,max:t},y:{min:e,max:i}}}function jW({x:e,y:n}){return{top:n.min,right:e.max,bottom:n.max,left:e.min}}function SW(e,n){if(!n)return e;const t=n({x:e.left,y:e.top}),i=n({x:e.right,y:e.bottom});return{top:t.y,left:t.x,bottom:i.y,right:i.x}}function xg(e){return e===void 0||e===1}function Rp({scale:e,scaleX:n,scaleY:t}){return!xg(e)||!xg(n)||!xg(t)}function Kr(e){return Rp(e)||vA(e)||e.z||e.rotate||e.rotateX||e.rotateY||e.skewX||e.skewY}function vA(e){return Px(e.x)||Px(e.y)}function Px(e){return e&&e!=="0%"}function uu(e,n,t){const i=e-t,a=n*i;return t+a}function Tx(e,n,t,i,a){return a!==void 0&&(e=uu(e,a,i)),uu(e,t,i)+n}function Op(e,n=0,t=1,i,a){e.min=Tx(e.min,n,t,i,a),e.max=Tx(e.max,n,t,i,a)}function kA(e,{x:n,y:t}){Op(e.x,n.translate,n.scale,n.originPoint),Op(e.y,t.translate,t.scale,t.originPoint)}const Dx=.999999999999,Bx=1.0000000000001;function zW(e,n,t,i=!1){const a=t.length;if(!a)return;n.x=n.y=1;let o,s;for(let l=0;l<a;l++){o=t[l],s=o.projectionDelta;const{visualElement:d}=o.options;d&&d.props.style&&d.props.style.display==="contents"||(i&&o.options.layoutScroll&&o.scroll&&o!==o.root&&(di(e.x,-o.scroll.offset.x),di(e.y,-o.scroll.offset.y)),s&&(n.x*=s.x.scale,n.y*=s.y.scale,kA(e,s)),i&&Kr(o.latestValues)&&pc(e,o.latestValues,o.layout?.layoutBox))}n.x<Bx&&n.x>Dx&&(n.x=1),n.y<Bx&&n.y>Dx&&(n.y=1)}function di(e,n){e.min+=n,e.max+=n}function Mx(e,n,t,i,a=.5){const o=Je(e.min,e.max,a);Op(e,n,t,o,i)}function Fx(e,n){return typeof e=="string"?parseFloat(e)/100*(n.max-n.min):e}function pc(e,n,t){const i=t??e;Mx(e.x,Fx(n.x,i.x),n.scaleX,n.scale,n.originX),Mx(e.y,Fx(n.y,i.y),n.scaleY,n.scale,n.originY)}function wA(e,n){return bA(SW(e.getBoundingClientRect(),n))}function AW(e,n,t){const i=wA(e,t),{scroll:a}=n;return a&&(di(i.x,a.offset.x),di(i.y,a.offset.y)),i}const CW={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},EW=_o.length;function NW(e,n,t){let i="",a=!0;for(let o=0;o<EW;o++){const s=_o[o],l=e[s];if(l===void 0)continue;let d=!0;if(typeof l=="number")d=l===(s.startsWith("scale")?1:0);else{const c=parseFloat(l);d=s.startsWith("scale")?c===1:c===0}if(!d||t){const c=lA(l,$b[s]);if(!d){a=!1;const u=CW[s]||s;i+=`${u}(${c}) `}t&&(n[s]=c)}}return i=i.trim(),t?i=t(n,a?"":i):a&&(i="none"),i}function ev(e,n,t){const{style:i,vars:a,transformOrigin:o}=e;let s=!1,l=!1;for(const d in n){const c=n[d];if(Lo.has(d)){s=!0;continue}else if(Iz(d)){a[d]=c;continue}else{const u=lA(c,$b[d]);d.startsWith("origin")?(l=!0,o[d]=u):i[d]=u}}if(n.transform||(s||t?i.transform=NW(n,e.transform,t):i.transform&&(i.transform="none")),l){const{originX:d="50%",originY:c="50%",originZ:u=0}=o;i.transformOrigin=`${d} ${c} ${u}`}}function xA(e,{style:n,vars:t},i,a){const o=e.style;let s;for(s in n)o[s]=n[s];a?.applyProjectionStyles(o,i);for(s in t)o.setProperty(s,t[s])}function Rx(e,n){return n.max===n.min?0:e/(n.max-n.min)*100}const ms={correct:(e,n)=>{if(!n.target)return e;if(typeof e=="string")if(te.test(e))e=parseFloat(e);else return e;const t=Rx(e,n.target.x),i=Rx(e,n.target.y);return`${t}% ${i}%`}},IW={correct:(e,{treeScale:n,projectionDelta:t})=>{const i=e,a=Yt.parse(e);if(a.length>5)return i;const o=Yt.createTransformer(e),s=typeof a[0]!="number"?1:0,l=t.x.scale*n.x,d=t.y.scale*n.y;a[0+s]/=l,a[1+s]/=d;const c=Je(l,d,.5);return typeof a[2+s]=="number"&&(a[2+s]/=c),typeof a[3+s]=="number"&&(a[3+s]/=c),o(a)}},_p={borderRadius:{...ms,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:ms,borderTopRightRadius:ms,borderBottomLeftRadius:ms,borderBottomRightRadius:ms,boxShadow:IW};function yA(e,{layout:n,layoutId:t}){return Lo.has(e)||e.startsWith("origin")||(n||t!==void 0)&&(!!_p[e]||e==="opacity")}function nv(e,n,t){const i=e.style,a=n?.style,o={};if(!i)return o;for(const s in i)(Bn(i[s])||a&&Bn(a[s])||yA(s,e)||t?.getValue(s)?.liveStyle!==void 0)&&(o[s]=i[s]);return o}function PW(e){return window.getComputedStyle(e)}class TW extends fA{constructor(){super(...arguments),this.type="html",this.renderInstance=xA}readValueFromInstance(n,t){if(Lo.has(t))return this.projection?.isProjecting?zp(t):QL(n,t);{const i=PW(n),a=(Iz(t)?i.getPropertyValue(t):i[t])||0;return typeof a=="string"?a.trim():a}}measureInstanceViewportBox(n,{transformPagePoint:t}){return wA(n,t)}build(n,t,i){ev(n,t,i.transformTemplate)}scrapeMotionValuesFromProps(n,t,i){return nv(n,t,i)}}const DW={offset:"stroke-dashoffset",array:"stroke-dasharray"},BW={offset:"strokeDashoffset",array:"strokeDasharray"};function MW(e,n,t=1,i=0,a=!0){e.pathLength=1;const o=a?DW:BW;e[o.offset]=`${-i}`,e[o.array]=`${n} ${t}`}const FW=["offsetDistance","offsetPath","offsetRotate","offsetAnchor"];function jA(e,{attrX:n,attrY:t,attrScale:i,pathLength:a,pathSpacing:o=1,pathOffset:s=0,...l},d,c,u){if(ev(e,l,c),d){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};const{attrs:h,style:g}=e;h.transform&&(g.transform=h.transform,delete h.transform),(g.transform||h.transformOrigin)&&(g.transformOrigin=h.transformOrigin??"50% 50%",delete h.transformOrigin),g.transform&&(g.transformBox=u?.transformBox??"fill-box",delete h.transformBox);for(const m of FW)h[m]!==void 0&&(g[m]=h[m],delete h[m]);n!==void 0&&(h.x=n),t!==void 0&&(h.y=t),i!==void 0&&(h.scale=i),a!==void 0&&MW(h,a,o,s,!1)}const SA=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]),zA=e=>typeof e=="string"&&e.toLowerCase()==="svg";function RW(e,n,t,i){xA(e,n,void 0,i);for(const a in n.attrs)e.setAttribute(SA.has(a)?a:Gb(a),n.attrs[a])}function AA(e,n,t){const i=nv(e,n,t);for(const a in e)if(Bn(e[a])||Bn(n[a])){const o=_o.indexOf(a)!==-1?"attr"+a.charAt(0).toUpperCase()+a.substring(1):a;i[o]=e[a]}return i}class OW extends fA{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=xn}getBaseTargetFromProps(n,t){return n[t]}readValueFromInstance(n,t){if(Lo.has(t)){const i=aA(t);return i&&i.default||0}return t=SA.has(t)?t:Gb(t),n.getAttribute(t)}scrapeMotionValuesFromProps(n,t,i){return AA(n,t,i)}build(n,t,i){jA(n,t,this.isSVGTag,i.transformTemplate,i.style)}renderInstance(n,t,i,a){RW(n,t,i,a)}mount(n){this.isSVGTag=zA(n.tagName),super.mount(n)}}const _W=Xb.length;function CA(e){if(!e)return;if(!e.isControllingVariants){const t=e.parent?CA(e.parent)||{}:{};return e.props.initial!==void 0&&(t.initial=e.props.initial),t}const n={};for(let t=0;t<_W;t++){const i=Xb[t],a=e.props[i];(kl(a)||a===!1)&&(n[i]=a)}return n}function EA(e,n){if(!Array.isArray(n))return!1;const t=n.length;if(t!==e.length)return!1;for(let i=0;i<t;i++)if(n[i]!==e[i])return!1;return!0}const LW=[...Jb].reverse(),WW=Jb.length;function VW(e){return n=>Promise.all(n.map(({animation:t,options:i})=>_8(e,t,i)))}function KW(e){let n=VW(e),t=Ox(),i=!0,a=!1;const o=c=>(u,h)=>{const g=ia(e,h,c==="exit"?e.presenceContext?.custom:void 0);if(g){const{transition:m,transitionEnd:p,...f}=g;u={...u,...f,...p}}return u};function s(c){n=c(e)}function l(c){const{props:u}=e,h=CA(e.parent)||{},g=[],m=new Set;let p={},f=1/0;for(let k=0;k<WW;k++){const v=LW[k],x=t[v],y=u[v]!==void 0?u[v]:h[v],j=kl(y),z=v===c?x.isActive:null;z===!1&&(f=k);let S=y===h[v]&&y!==u[v]&&j;if(S&&(i||a)&&e.manuallyAnimateOnMount&&(S=!1),x.protectedKeys={...p},!x.isActive&&z===null||!y&&!x.prevProp||nh(y)||typeof y=="boolean")continue;if(v==="exit"&&x.isActive&&z!==!0){x.prevResolvedValues&&(p={...p,...x.prevResolvedValues});continue}const A=qW(x.prevProp,y);let E=A||v===c&&x.isActive&&!S&&j||k>f&&j,C=!1;const O=Array.isArray(y)?y:[y];let T=O.reduce(o(v),{});z===!1&&(T={});const{prevResolvedValues:W={}}=x,F={...W,...T},L=D=>{E=!0,m.has(D)&&(C=!0,m.delete(D)),x.needsAnimating[D]=!0;const M=e.getValue(D);M&&(M.liveStyle=!1)};for(const D in F){const M=T[D],K=W[D];if(p.hasOwnProperty(D))continue;let Q=!1;Pp(M)&&Pp(K)?Q=!EA(M,K):Q=M!==K,Q?M!=null?L(D):m.add(D):M!==void 0&&m.has(D)?L(D):x.protectedKeys[D]=!0}x.prevProp=y,x.prevResolvedValues=T,x.isActive&&(p={...p,...T}),(i||a)&&e.blockInitialAnimation&&(E=!1);const G=S&&A;E&&(!G||C)&&g.push(...O.map(D=>{const M={type:v};if(typeof D=="string"&&(i||a)&&!G&&e.manuallyAnimateOnMount&&e.parent){const{parent:K}=e,Q=ia(K,D);if(K.enteringChildren&&Q){const{delayChildren:$}=Q.transition||{};M.delay=Yz(K.enteringChildren,e,$)}}return{animation:D,options:M}}))}if(m.size){const k={};if(typeof u.initial!="boolean"){const v=ia(e,Array.isArray(u.initial)?u.initial[0]:u.initial);v&&v.transition&&(k.transition=v.transition)}m.forEach(v=>{const x=e.getBaseTarget(v),y=e.getValue(v);y&&(y.liveStyle=!0),k[v]=x??null}),g.push({animation:k})}let w=!!g.length;return i&&(u.initial===!1||u.initial===u.animate)&&!e.manuallyAnimateOnMount&&(w=!1),i=!1,a=!1,w?n(g):Promise.resolve()}function d(c,u){if(t[c].isActive===u)return Promise.resolve();e.variantChildren?.forEach(g=>g.animationState?.setActive(c,u)),t[c].isActive=u;const h=l(c);for(const g in t)t[g].protectedKeys={};return h}return{animateChanges:l,setActive:d,setAnimateFunction:s,getState:()=>t,reset:()=>{t=Ox(),a=!0}}}function qW(e,n){return typeof n=="string"?n!==e:Array.isArray(n)?!EA(n,e):!1}function _r(e=!1){return{isActive:e,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function Ox(){return{animate:_r(!0),whileInView:_r(),whileHover:_r(),whileTap:_r(),whileDrag:_r(),whileFocus:_r(),exit:_r()}}function Lp(e,n){e.min=n.min,e.max=n.max}function Lt(e,n){Lp(e.x,n.x),Lp(e.y,n.y)}function _x(e,n){e.translate=n.translate,e.scale=n.scale,e.originPoint=n.originPoint,e.origin=n.origin}const NA=1e-4,HW=1-NA,UW=1+NA,IA=.01,GW=0-IA,$W=0+IA;function $n(e){return e.max-e.min}function ZW(e,n,t){return Math.abs(e-n)<=t}function Lx(e,n,t,i=.5){e.origin=i,e.originPoint=Je(n.min,n.max,e.origin),e.scale=$n(t)/$n(n),e.translate=Je(t.min,t.max,e.origin)-e.originPoint,(e.scale>=HW&&e.scale<=UW||isNaN(e.scale))&&(e.scale=1),(e.translate>=GW&&e.translate<=$W||isNaN(e.translate))&&(e.translate=0)}function Ls(e,n,t,i){Lx(e.x,n.x,t.x,i?i.originX:void 0),Lx(e.y,n.y,t.y,i?i.originY:void 0)}function Wx(e,n,t,i=0){const a=i?Je(t.min,t.max,i):t.min;e.min=a+n.min,e.max=e.min+$n(n)}function YW(e,n,t,i){Wx(e.x,n.x,t.x,i?.x),Wx(e.y,n.y,t.y,i?.y)}function Vx(e,n,t,i=0){const a=i?Je(t.min,t.max,i):t.min;e.min=n.min-a,e.max=e.min+$n(n)}function hu(e,n,t,i){Vx(e.x,n.x,t.x,i?.x),Vx(e.y,n.y,t.y,i?.y)}function Kx(e,n,t,i,a){return e-=n,e=uu(e,1/t,i),a!==void 0&&(e=uu(e,1/a,i)),e}function QW(e,n=0,t=1,i=.5,a,o=e,s=e){if(bi.test(n)&&(n=parseFloat(n),n=Je(s.min,s.max,n/100)-s.min),typeof n!="number")return;let l=Je(o.min,o.max,i);e===o&&(l-=n),e.min=Kx(e.min,n,t,l,a),e.max=Kx(e.max,n,t,l,a)}function qx(e,n,[t,i,a],o,s){QW(e,n[t],n[i],n[a],n.scale,o,s)}const JW=["x","scaleX","originX"],XW=["y","scaleY","originY"];function Hx(e,n,t,i){qx(e.x,n,JW,t?t.x:void 0,i?i.x:void 0),qx(e.y,n,XW,t?t.y:void 0,i?i.y:void 0)}function Ux(e){return e.translate===0&&e.scale===1}function PA(e){return Ux(e.x)&&Ux(e.y)}function Gx(e,n){return e.min===n.min&&e.max===n.max}function eV(e,n){return Gx(e.x,n.x)&&Gx(e.y,n.y)}function $x(e,n){return Math.round(e.min)===Math.round(n.min)&&Math.round(e.max)===Math.round(n.max)}function TA(e,n){return $x(e.x,n.x)&&$x(e.y,n.y)}function Zx(e){return $n(e.x)/$n(e.y)}function Yx(e,n){return e.translate===n.translate&&e.scale===n.scale&&e.originPoint===n.originPoint}function li(e){return[e("x"),e("y")]}function nV(e,n,t){let i="";const a=e.x.translate/n.x,o=e.y.translate/n.y,s=t?.z||0;if((a||o||s)&&(i=`translate3d(${a}px, ${o}px, ${s}px) `),(n.x!==1||n.y!==1)&&(i+=`scale(${1/n.x}, ${1/n.y}) `),t){const{transformPerspective:c,rotate:u,rotateX:h,rotateY:g,skewX:m,skewY:p}=t;c&&(i=`perspective(${c}px) ${i}`),u&&(i+=`rotate(${u}deg) `),h&&(i+=`rotateX(${h}deg) `),g&&(i+=`rotateY(${g}deg) `),m&&(i+=`skewX(${m}deg) `),p&&(i+=`skewY(${p}deg) `)}const l=e.x.scale*n.x,d=e.y.scale*n.y;return(l!==1||d!==1)&&(i+=`scale(${l}, ${d})`),i||"none"}const DA=["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"],tV=DA.length,Qx=e=>typeof e=="string"?parseFloat(e):e,Jx=e=>typeof e=="number"||te.test(e);function iV(e,n,t,i,a,o){a?(e.opacity=Je(0,t.opacity??1,rV(i)),e.opacityExit=Je(n.opacity??1,0,aV(i))):o&&(e.opacity=Je(n.opacity??1,t.opacity??1,i));for(let s=0;s<tV;s++){const l=DA[s];let d=Xx(n,l),c=Xx(t,l);if(d===void 0&&c===void 0)continue;d||(d=0),c||(c=0),d===0||c===0||Jx(d)===Jx(c)?(e[l]=Math.max(Je(Qx(d),Qx(c),i),0),(bi.test(c)||bi.test(d))&&(e[l]+="%")):e[l]=c}(n.rotate||t.rotate)&&(e.rotate=Je(n.rotate||0,t.rotate||0,i))}function Xx(e,n){return e[n]!==void 0?e[n]:e.borderRadius}const rV=BA(0,.5,Sz),aV=BA(.5,.95,Tt);function BA(e,n,t){return i=>i<e?0:i>n?1:t(bl(e,n,i))}function oV(e,n,t){const i=Bn(e)?e:So(e);return i.start(Hb("",i,n,t)),i.animation}function wl(e,n,t,i={passive:!0}){return e.addEventListener(n,t,i),()=>e.removeEventListener(n,t)}const sV=(e,n)=>e.depth-n.depth;class lV{constructor(){this.children=[],this.isDirty=!1}add(n){Db(this.children,n),this.isDirty=!0}remove(n){au(this.children,n),this.isDirty=!0}forEach(n){this.isDirty&&this.children.sort(sV),this.isDirty=!1,this.children.forEach(n)}}function dV(e,n){const t=Gn.now(),i=({timestamp:a})=>{const o=a-t;o>=n&&(Ar(i),e(o-n))};return He.setup(i,!0),()=>Ar(i)}function fc(e){return Bn(e)?e.get():e}class cV{constructor(){this.members=[]}add(n){Db(this.members,n);for(let t=this.members.length-1;t>=0;t--){const i=this.members[t];if(i===n||i===this.lead||i===this.prevLead)continue;const a=i.instance;(!a||a.isConnected===!1)&&!i.snapshot&&(au(this.members,i),i.unmount())}n.scheduleRender()}remove(n){if(au(this.members,n),n===this.prevLead&&(this.prevLead=void 0),n===this.lead){const t=this.members[this.members.length-1];t&&this.promote(t)}}relegate(n){for(let t=this.members.indexOf(n)-1;t>=0;t--){const i=this.members[t];if(i.isPresent!==!1&&i.instance?.isConnected!==!1)return this.promote(i),!0}return!1}promote(n,t){const i=this.lead;if(n!==i&&(this.prevLead=i,this.lead=n,n.show(),i)){i.updateSnapshot(),n.scheduleRender();const{layoutDependency:a}=i.options,{layoutDependency:o}=n.options;(a===void 0||a!==o)&&(n.resumeFrom=i,t&&(i.preserveOpacity=!0),i.snapshot&&(n.snapshot=i.snapshot,n.snapshot.latestValues=i.animationValues||i.latestValues),n.root?.isUpdating&&(n.isLayoutDirty=!0)),n.options.crossfade===!1&&i.hide()}}exitAnimationComplete(){this.members.forEach(n=>{n.options.onExitComplete?.(),n.resumingFrom?.options.onExitComplete?.()})}scheduleRender(){this.members.forEach(n=>n.instance&&n.scheduleRender(!1))}removeLeadSnapshot(){this.lead?.snapshot&&(this.lead.snapshot=void 0)}}const bc={hasAnimatedSinceResize:!0,hasEverUpdated:!1},yg=["","X","Y","Z"],uV=1e3;let hV=0;function jg(e,n,t,i){const{latestValues:a}=n;a[e]&&(t[e]=a[e],n.setStaticValue(e,0),i&&(i[e]=0))}function MA(e){if(e.hasCheckedOptimisedAppear=!0,e.root===e)return;const{visualElement:n}=e.options;if(!n)return;const t=nA(n);if(window.MotionHasOptimisedAnimation(t,"transform")){const{layout:a,layoutId:o}=e.options;window.MotionCancelOptimisedAnimation(t,"transform",He,!(a||o))}const{parent:i}=e;i&&!i.hasCheckedOptimisedAppear&&MA(i)}function FA({attachResizeListener:e,defaultParent:n,measureScroll:t,checkIsScrollRoot:i,resetTransform:a}){return class{constructor(s={},l=n?.()){this.id=hV++,this.animationId=0,this.animationCommitId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.layoutVersion=0,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,this.nodes.forEach(pV),this.nodes.forEach(xV),this.nodes.forEach(yV),this.nodes.forEach(fV)},this.resolvedRelativeTargetAt=0,this.linkedParentVersion=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=s,this.root=l?l.root||l:this,this.path=l?[...l.path,l]:[],this.parent=l,this.depth=l?l.depth+1:0;for(let d=0;d<this.path.length;d++)this.path[d].shouldResetTransform=!0;this.root===this&&(this.nodes=new lV)}addEventListener(s,l){return this.eventHandlers.has(s)||this.eventHandlers.set(s,new Bb),this.eventHandlers.get(s).add(l)}notifyListeners(s,...l){const d=this.eventHandlers.get(s);d&&d.notify(...l)}hasListeners(s){return this.eventHandlers.has(s)}mount(s){if(this.instance)return;this.isSVG=Qb(s)&&!mW(s),this.instance=s;const{layoutId:l,layout:d,visualElement:c}=this.options;if(c&&!c.current&&c.mount(s),this.root.nodes.add(this),this.parent&&this.parent.children.add(this),this.root.hasTreeAnimated&&(d||l)&&(this.isLayoutDirty=!0),e){let u,h=0;const g=()=>this.root.updateBlockedByResize=!1;He.read(()=>{h=window.innerWidth}),e(s,()=>{const m=window.innerWidth;m!==h&&(h=m,this.root.updateBlockedByResize=!0,u&&u(),u=dV(g,250),bc.hasAnimatedSinceResize&&(bc.hasAnimatedSinceResize=!1,this.nodes.forEach(ty)))})}l&&this.root.registerSharedNode(l,this),this.options.animate!==!1&&c&&(l||d)&&this.addEventListener("didUpdate",({delta:u,hasLayoutChanged:h,hasRelativeLayoutChanged:g,layout:m})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const p=this.options.transition||c.getDefaultTransition()||CV,{onLayoutAnimationStart:f,onLayoutAnimationComplete:w}=c.getProps(),k=!this.targetLayout||!TA(this.targetLayout,m),v=!h&&g;if(this.options.layoutRoot||this.resumeFrom||v||h&&(k||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0);const x={...qb(p,"layout"),onPlay:f,onComplete:w};(c.shouldReduceMotion||this.options.layoutRoot)&&(x.delay=0,x.type=!1),this.startAnimation(x),this.setAnimationOrigin(u,v)}else h||ty(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=m})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const s=this.getStack();s&&s.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,this.eventHandlers.clear(),Ar(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(jV),this.animationId++)}getTransformTemplate(){const{visualElement:s}=this.options;return s&&s.getProps().transformTemplate}willUpdate(s=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&MA(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let u=0;u<this.path.length;u++){const h=this.path[u];h.shouldResetTransform=!0,(typeof h.latestValues.x=="string"||typeof h.latestValues.y=="string")&&(h.isLayoutDirty=!0),h.updateScroll("snapshot"),h.options.layoutRoot&&h.willUpdate(!1)}const{layoutId:l,layout:d}=this.options;if(l===void 0&&!d)return;const c=this.getTransformTemplate();this.prevTransformTemplateValue=c?c(this.latestValues,""):void 0,this.updateSnapshot(),s&&this.notifyListeners("willUpdate")}update(){if(this.updateScheduled=!1,this.isUpdateBlocked()){const d=this.updateBlockedByResize;this.unblockUpdate(),this.updateBlockedByResize=!1,this.clearAllSnapshots(),d&&this.nodes.forEach(vV),this.nodes.forEach(ey);return}if(this.animationId<=this.animationCommitId){this.nodes.forEach(ny);return}this.animationCommitId=this.animationId,this.isUpdating?(this.isUpdating=!1,this.nodes.forEach(kV),this.nodes.forEach(wV),this.nodes.forEach(gV),this.nodes.forEach(mV)):this.nodes.forEach(ny),this.clearAllSnapshots();const l=Gn.now();Dn.delta=ji(0,1e3/60,l-Dn.timestamp),Dn.timestamp=l,Dn.isProcessing=!0,mg.update.process(Dn),mg.preRender.process(Dn),mg.render.process(Dn),Dn.isProcessing=!1}didUpdate(){this.updateScheduled||(this.updateScheduled=!0,Zb.read(this.scheduleUpdate))}clearAllSnapshots(){this.nodes.forEach(bV),this.sharedNodes.forEach(SV)}scheduleUpdateProjection(){this.projectionUpdateScheduled||(this.projectionUpdateScheduled=!0,He.preRender(this.updateProjection,!1,!0))}scheduleCheckAfterUnmount(){He.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure(),this.snapshot&&!$n(this.snapshot.measuredBox.x)&&!$n(this.snapshot.measuredBox.y)&&(this.snapshot=void 0))}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let d=0;d<this.path.length;d++)this.path[d].updateScroll();const s=this.layout;this.layout=this.measure(!1),this.layoutVersion++,this.layoutCorrected||(this.layoutCorrected=xn()),this.isLayoutDirty=!1,this.projectionDelta=void 0,this.notifyListeners("measure",this.layout.layoutBox);const{visualElement:l}=this.options;l&&l.notify("LayoutMeasure",this.layout.layoutBox,s?s.layoutBox:void 0)}updateScroll(s="measure"){let l=!!(this.options.layoutScroll&&this.instance);if(this.scroll&&this.scroll.animationId===this.root.animationId&&this.scroll.phase===s&&(l=!1),l&&this.instance){const d=i(this.instance);this.scroll={animationId:this.root.animationId,phase:s,isRoot:d,offset:t(this.instance),wasRoot:this.scroll?this.scroll.isRoot:d}}}resetTransform(){if(!a)return;const s=this.isLayoutDirty||this.shouldResetTransform||this.options.alwaysMeasureLayout,l=this.projectionDelta&&!PA(this.projectionDelta),d=this.getTransformTemplate(),c=d?d(this.latestValues,""):void 0,u=c!==this.prevTransformTemplateValue;s&&this.instance&&(l||Kr(this.latestValues)||u)&&(a(this.instance,c),this.shouldResetTransform=!1,this.scheduleRender())}measure(s=!0){const l=this.measurePageBox();let d=this.removeElementScroll(l);return s&&(d=this.removeTransform(d)),EV(d),{animationId:this.root.animationId,measuredBox:l,layoutBox:d,latestValues:{},source:this.id}}measurePageBox(){const{visualElement:s}=this.options;if(!s)return xn();const l=s.measureViewportBox();if(!(this.scroll?.wasRoot||this.path.some(NV))){const{scroll:c}=this.root;c&&(di(l.x,c.offset.x),di(l.y,c.offset.y))}return l}removeElementScroll(s){const l=xn();if(Lt(l,s),this.scroll?.wasRoot)return l;for(let d=0;d<this.path.length;d++){const c=this.path[d],{scroll:u,options:h}=c;c!==this.root&&u&&h.layoutScroll&&(u.wasRoot&&Lt(l,s),di(l.x,u.offset.x),di(l.y,u.offset.y))}return l}applyTransform(s,l=!1,d){const c=d||xn();Lt(c,s);for(let u=0;u<this.path.length;u++){const h=this.path[u];!l&&h.options.layoutScroll&&h.scroll&&h!==h.root&&(di(c.x,-h.scroll.offset.x),di(c.y,-h.scroll.offset.y)),Kr(h.latestValues)&&pc(c,h.latestValues,h.layout?.layoutBox)}return Kr(this.latestValues)&&pc(c,this.latestValues,this.layout?.layoutBox),c}removeTransform(s){const l=xn();Lt(l,s);for(let d=0;d<this.path.length;d++){const c=this.path[d];if(!Kr(c.latestValues))continue;let u;c.instance&&(Rp(c.latestValues)&&c.updateSnapshot(),u=xn(),Lt(u,c.measurePageBox())),Hx(l,c.latestValues,c.snapshot?.layoutBox,u)}return Kr(this.latestValues)&&Hx(l,this.latestValues),l}setTargetDelta(s){this.targetDelta=s,this.root.scheduleUpdateProjection(),this.isProjectionDirty=!0}setOptions(s){this.options={...this.options,...s,crossfade:s.crossfade!==void 0?s.crossfade:!0}}clearMeasurements(){this.scroll=void 0,this.layout=void 0,this.snapshot=void 0,this.prevTransformTemplateValue=void 0,this.targetDelta=void 0,this.target=void 0,this.isLayoutDirty=!1}forceRelativeParentToResolveTarget(){this.relativeParent&&this.relativeParent.resolvedRelativeTargetAt!==Dn.timestamp&&this.relativeParent.resolveTargetDelta(!0)}resolveTargetDelta(s=!1){const l=this.getLead();this.isProjectionDirty||(this.isProjectionDirty=l.isProjectionDirty),this.isTransformDirty||(this.isTransformDirty=l.isTransformDirty),this.isSharedProjectionDirty||(this.isSharedProjectionDirty=l.isSharedProjectionDirty);const d=!!this.resumingFrom||this!==l;if(!(s||d&&this.isSharedProjectionDirty||this.isProjectionDirty||this.parent?.isProjectionDirty||this.attemptToResolveRelativeTarget||this.root.updateBlockedByResize))return;const{layout:u,layoutId:h}=this.options;if(!this.layout||!(u||h))return;this.resolvedRelativeTargetAt=Dn.timestamp;const g=this.getClosestProjectingParent();g&&this.linkedParentVersion!==g.layoutVersion&&!g.options.layoutRoot&&this.removeRelativeTarget(),!this.targetDelta&&!this.relativeTarget&&(this.options.layoutAnchor!==!1&&g&&g.layout?this.createRelativeTarget(g,this.layout.layoutBox,g.layout.layoutBox):this.removeRelativeTarget()),!(!this.relativeTarget&&!this.targetDelta)&&(this.target||(this.target=xn(),this.targetWithTransforms=xn()),this.relativeTarget&&this.relativeTargetOrigin&&this.relativeParent&&this.relativeParent.target?(this.forceRelativeParentToResolveTarget(),YW(this.target,this.relativeTarget,this.relativeParent.target,this.options.layoutAnchor||void 0)):this.targetDelta?(this.resumingFrom?this.applyTransform(this.layout.layoutBox,!1,this.target):Lt(this.target,this.layout.layoutBox),kA(this.target,this.targetDelta)):Lt(this.target,this.layout.layoutBox),this.attemptToResolveRelativeTarget&&(this.attemptToResolveRelativeTarget=!1,this.options.layoutAnchor!==!1&&g&&!!g.resumingFrom==!!this.resumingFrom&&!g.options.layoutScroll&&g.target&&this.animationProgress!==1?this.createRelativeTarget(g,this.target,g.target):this.relativeParent=this.relativeTarget=void 0))}getClosestProjectingParent(){if(!(!this.parent||Rp(this.parent.latestValues)||vA(this.parent.latestValues)))return this.parent.isProjecting()?this.parent:this.parent.getClosestProjectingParent()}isProjecting(){return!!((this.relativeTarget||this.targetDelta||this.options.layoutRoot)&&this.layout)}createRelativeTarget(s,l,d){this.relativeParent=s,this.linkedParentVersion=s.layoutVersion,this.forceRelativeParentToResolveTarget(),this.relativeTarget=xn(),this.relativeTargetOrigin=xn(),hu(this.relativeTargetOrigin,l,d,this.options.layoutAnchor||void 0),Lt(this.relativeTarget,this.relativeTargetOrigin)}removeRelativeTarget(){this.relativeParent=this.relativeTarget=void 0}calcProjection(){const s=this.getLead(),l=!!this.resumingFrom||this!==s;let d=!0;if((this.isProjectionDirty||this.parent?.isProjectionDirty)&&(d=!1),l&&(this.isSharedProjectionDirty||this.isTransformDirty)&&(d=!1),this.resolvedRelativeTargetAt===Dn.timestamp&&(d=!1),d)return;const{layout:c,layoutId:u}=this.options;if(this.isTreeAnimating=!!(this.parent&&this.parent.isTreeAnimating||this.currentAnimation||this.pendingAnimation),this.isTreeAnimating||(this.targetDelta=this.relativeTarget=void 0),!this.layout||!(c||u))return;Lt(this.layoutCorrected,this.layout.layoutBox);const h=this.treeScale.x,g=this.treeScale.y;zW(this.layoutCorrected,this.treeScale,this.path,l),s.layout&&!s.target&&(this.treeScale.x!==1||this.treeScale.y!==1)&&(s.target=s.layout.layoutBox,s.targetWithTransforms=xn());const{target:m}=s;if(!m){this.prevProjectionDelta&&(this.createProjectionDeltas(),this.scheduleRender());return}!this.projectionDelta||!this.prevProjectionDelta?this.createProjectionDeltas():(_x(this.prevProjectionDelta.x,this.projectionDelta.x),_x(this.prevProjectionDelta.y,this.projectionDelta.y)),Ls(this.projectionDelta,this.layoutCorrected,m,this.latestValues),(this.treeScale.x!==h||this.treeScale.y!==g||!Yx(this.projectionDelta.x,this.prevProjectionDelta.x)||!Yx(this.projectionDelta.y,this.prevProjectionDelta.y))&&(this.hasProjected=!0,this.scheduleRender(),this.notifyListeners("projectionUpdate",m))}hide(){this.isVisible=!1}show(){this.isVisible=!0}scheduleRender(s=!0){if(this.options.visualElement?.scheduleRender(),s){const l=this.getStack();l&&l.scheduleRender()}this.resumingFrom&&!this.resumingFrom.instance&&(this.resumingFrom=void 0)}createProjectionDeltas(){this.prevProjectionDelta=Ga(),this.projectionDelta=Ga(),this.projectionDeltaWithTransform=Ga()}setAnimationOrigin(s,l=!1){const d=this.snapshot,c=d?d.latestValues:{},u={...this.latestValues},h=Ga();(!this.relativeParent||!this.relativeParent.options.layoutRoot)&&(this.relativeTarget=this.relativeTargetOrigin=void 0),this.attemptToResolveRelativeTarget=!l;const g=xn(),m=d?d.source:void 0,p=this.layout?this.layout.source:void 0,f=m!==p,w=this.getStack(),k=!w||w.members.length<=1,v=!!(f&&!k&&this.options.crossfade===!0&&!this.path.some(AV));this.animationProgress=0;let x;this.mixTargetDelta=y=>{const j=y/1e3;iy(h.x,s.x,j),iy(h.y,s.y,j),this.setTargetDelta(h),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(hu(g,this.layout.layoutBox,this.relativeParent.layout.layoutBox,this.options.layoutAnchor||void 0),zV(this.relativeTarget,this.relativeTargetOrigin,g,j),x&&eV(this.relativeTarget,x)&&(this.isProjectionDirty=!1),x||(x=xn()),Lt(x,this.relativeTarget)),f&&(this.animationValues=u,iV(u,c,this.latestValues,j,v,k)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=j},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(s){this.notifyListeners("animationStart"),this.currentAnimation?.stop(),this.resumingFrom?.currentAnimation?.stop(),this.pendingAnimation&&(Ar(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=He.update(()=>{bc.hasAnimatedSinceResize=!0,this.motionValue||(this.motionValue=So(0)),this.motionValue.jump(0,!1),this.currentAnimation=oV(this.motionValue,[0,1e3],{...s,velocity:0,isSync:!0,onUpdate:l=>{this.mixTargetDelta(l),s.onUpdate&&s.onUpdate(l)},onStop:()=>{},onComplete:()=>{s.onComplete&&s.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const s=this.getStack();s&&s.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(uV),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const s=this.getLead();let{targetWithTransforms:l,target:d,layout:c,latestValues:u}=s;if(!(!l||!d||!c)){if(this!==s&&this.layout&&c&&RA(this.options.animationType,this.layout.layoutBox,c.layoutBox)){d=this.target||xn();const h=$n(this.layout.layoutBox.x);d.x.min=s.target.x.min,d.x.max=d.x.min+h;const g=$n(this.layout.layoutBox.y);d.y.min=s.target.y.min,d.y.max=d.y.min+g}Lt(l,d),pc(l,u),Ls(this.projectionDeltaWithTransform,this.layoutCorrected,l,u)}}registerSharedNode(s,l){this.sharedNodes.has(s)||this.sharedNodes.set(s,new cV),this.sharedNodes.get(s).add(l);const c=l.options.initialPromotionConfig;l.promote({transition:c?c.transition:void 0,preserveFollowOpacity:c&&c.shouldPreserveFollowOpacity?c.shouldPreserveFollowOpacity(l):void 0})}isLead(){const s=this.getStack();return s?s.lead===this:!0}getLead(){const{layoutId:s}=this.options;return s?this.getStack()?.lead||this:this}getPrevLead(){const{layoutId:s}=this.options;return s?this.getStack()?.prevLead:void 0}getStack(){const{layoutId:s}=this.options;if(s)return this.root.sharedNodes.get(s)}promote({needsReset:s,transition:l,preserveFollowOpacity:d}={}){const c=this.getStack();c&&c.promote(this,d),s&&(this.projectionDelta=void 0,this.needsReset=!0),l&&this.setOptions({transition:l})}relegate(){const s=this.getStack();return s?s.relegate(this):!1}resetSkewAndRotation(){const{visualElement:s}=this.options;if(!s)return;let l=!1;const{latestValues:d}=s;if((d.z||d.rotate||d.rotateX||d.rotateY||d.rotateZ||d.skewX||d.skewY)&&(l=!0),!l)return;const c={};d.z&&jg("z",s,c,this.animationValues);for(let u=0;u<yg.length;u++)jg(`rotate${yg[u]}`,s,c,this.animationValues),jg(`skew${yg[u]}`,s,c,this.animationValues);s.render();for(const u in c)s.setStaticValue(u,c[u]),this.animationValues&&(this.animationValues[u]=c[u]);s.scheduleRender()}applyProjectionStyles(s,l){if(!this.instance||this.isSVG)return;if(!this.isVisible){s.visibility="hidden";return}const d=this.getTransformTemplate();if(this.needsReset){this.needsReset=!1,s.visibility="",s.opacity="",s.pointerEvents=fc(l?.pointerEvents)||"",s.transform=d?d(this.latestValues,""):"none";return}const c=this.getLead();if(!this.projectionDelta||!this.layout||!c.target){this.options.layoutId&&(s.opacity=this.latestValues.opacity!==void 0?this.latestValues.opacity:1,s.pointerEvents=fc(l?.pointerEvents)||""),this.hasProjected&&!Kr(this.latestValues)&&(s.transform=d?d({},""):"none",this.hasProjected=!1);return}s.visibility="";const u=c.animationValues||c.latestValues;this.applyTransformsToTarget();let h=nV(this.projectionDeltaWithTransform,this.treeScale,u);d&&(h=d(u,h)),s.transform=h;const{x:g,y:m}=this.projectionDelta;s.transformOrigin=`${g.origin*100}% ${m.origin*100}% 0`,c.animationValues?s.opacity=c===this?u.opacity??this.latestValues.opacity??1:this.preserveOpacity?this.latestValues.opacity:u.opacityExit:s.opacity=c===this?u.opacity!==void 0?u.opacity:"":u.opacityExit!==void 0?u.opacityExit:0;for(const p in _p){if(u[p]===void 0)continue;const{correct:f,applyTo:w,isCSSVariable:k}=_p[p],v=h==="none"?u[p]:f(u[p],c);if(w){const x=w.length;for(let y=0;y<x;y++)s[w[y]]=v}else k?this.options.visualElement.renderState.vars[p]=v:s[p]=v}this.options.layoutId&&(s.pointerEvents=c===this?fc(l?.pointerEvents)||"":"none")}clearSnapshot(){this.resumeFrom=this.snapshot=void 0}resetTree(){this.root.nodes.forEach(s=>s.currentAnimation?.stop()),this.root.nodes.forEach(ey),this.root.sharedNodes.clear()}}}function gV(e){e.updateLayout()}function mV(e){const n=e.resumeFrom?.snapshot||e.snapshot;if(e.isLead()&&e.layout&&n&&e.hasListeners("didUpdate")){const{layoutBox:t,measuredBox:i}=e.layout,{animationType:a}=e.options,o=n.source!==e.layout.source;if(a==="size")li(u=>{const h=o?n.measuredBox[u]:n.layoutBox[u],g=$n(h);h.min=t[u].min,h.max=h.min+g});else if(a==="x"||a==="y"){const u=a==="x"?"y":"x";Lp(o?n.measuredBox[u]:n.layoutBox[u],t[u])}else RA(a,n.layoutBox,t)&&li(u=>{const h=o?n.measuredBox[u]:n.layoutBox[u],g=$n(t[u]);h.max=h.min+g,e.relativeTarget&&!e.currentAnimation&&(e.isProjectionDirty=!0,e.relativeTarget[u].max=e.relativeTarget[u].min+g)});const s=Ga();Ls(s,t,n.layoutBox);const l=Ga();o?Ls(l,e.applyTransform(i,!0),n.measuredBox):Ls(l,t,n.layoutBox);const d=!PA(s);let c=!1;if(!e.resumeFrom){const u=e.getClosestProjectingParent();if(u&&!u.resumeFrom){const{snapshot:h,layout:g}=u;if(h&&g){const m=e.options.layoutAnchor||void 0,p=xn();hu(p,n.layoutBox,h.layoutBox,m);const f=xn();hu(f,t,g.layoutBox,m),TA(p,f)||(c=!0),u.options.layoutRoot&&(e.relativeTarget=f,e.relativeTargetOrigin=p,e.relativeParent=u)}}}e.notifyListeners("didUpdate",{layout:t,snapshot:n,delta:l,layoutDelta:s,hasLayoutChanged:d,hasRelativeLayoutChanged:c})}else if(e.isLead()){const{onExitComplete:t}=e.options;t&&t()}e.options.transition=void 0}function pV(e){e.parent&&(e.isProjecting()||(e.isProjectionDirty=e.parent.isProjectionDirty),e.isSharedProjectionDirty||(e.isSharedProjectionDirty=!!(e.isProjectionDirty||e.parent.isProjectionDirty||e.parent.isSharedProjectionDirty)),e.isTransformDirty||(e.isTransformDirty=e.parent.isTransformDirty))}function fV(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function bV(e){e.clearSnapshot()}function ey(e){e.clearMeasurements()}function vV(e){e.isLayoutDirty=!0,e.updateLayout()}function ny(e){e.isLayoutDirty=!1}function kV(e){e.isAnimationBlocked&&e.layout&&!e.isLayoutDirty&&(e.snapshot=e.layout,e.isLayoutDirty=!0)}function wV(e){const{visualElement:n}=e.options;n&&n.getProps().onBeforeLayoutMeasure&&n.notify("BeforeLayoutMeasure"),e.resetTransform()}function ty(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function xV(e){e.resolveTargetDelta()}function yV(e){e.calcProjection()}
vendor: 10,063 bytes, lines 13586-13594
13586function jV(e){e.resetSkewAndRotation()}function SV(e){e.removeLeadSnapshot()}function iy(e,n,t){e.translate=Je(n.translate,0,t),e.scale=Je(n.scale,1,t),e.origin=n.origin,e.originPoint=n.originPoint}function ry(e,n,t,i){e.min=Je(n.min,t.min,i),e.max=Je(n.max,t.max,i)}function zV(e,n,t,i){ry(e.x,n.x,t.x,i),ry(e.y,n.y,t.y,i)}function AV(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}const CV={duration:.45,ease:[.4,0,.1,1]},ay=e=>typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(e),oy=ay("applewebkit/")&&!ay("chrome/")?Math.round:Tt;function sy(e){e.min=oy(e.min),e.max=oy(e.max)}function EV(e){sy(e.x),sy(e.y)}function RA(e,n,t){return e==="position"||e==="preserve-aspect"&&!ZW(Zx(n),Zx(t),.2)}function NV(e){return e!==e.root&&e.scroll?.wasRoot}const IV=FA({attachResizeListener:(e,n)=>wl(e,"resize",n),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body?.scrollLeft||0,y:document.documentElement.scrollTop||document.body?.scrollTop||0}),checkIsScrollRoot:()=>!0}),Sg={current:void 0},OA=FA({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!Sg.current){const e=new IV({});e.mount(window),e.setOptions({layoutScroll:!0}),Sg.current=e}return Sg.current},resetTransform:(e,n)=>{e.style.transform=n!==void 0?n:"none"},checkIsScrollRoot:e=>window.getComputedStyle(e).position==="fixed"}),tv=b.createContext({transformPagePoint:e=>e,isStatic:!1,reducedMotion:"never"});function ly(e,n){if(typeof e=="function")return e(n);e!=null&&(e.current=n)}function PV(...e){return n=>{let t=!1;const i=e.map(a=>{const o=ly(a,n);return!t&&typeof o=="function"&&(t=!0),o});if(t)return()=>{for(let a=0;a<i.length;a++){const o=i[a];typeof o=="function"?o():ly(e[a],null)}}}}function TV(...e){return b.useCallback(PV(...e),e)}class DV extends b.Component{getSnapshotBeforeUpdate(n){const t=this.props.childRef.current;if(cc(t)&&n.isPresent&&!this.props.isPresent&&this.props.pop!==!1){const i=t.offsetParent,a=cc(i)&&i.offsetWidth||0,o=cc(i)&&i.offsetHeight||0,s=getComputedStyle(t),l=this.props.sizeRef.current;l.height=parseFloat(s.height),l.width=parseFloat(s.width),l.top=t.offsetTop,l.left=t.offsetLeft,l.right=a-l.width-l.left,l.bottom=o-l.height-l.top}return null}componentDidUpdate(){}render(){return this.props.children}}function BV({children:e,isPresent:n,anchorX:t,anchorY:i,root:a,pop:o}){const s=b.useId(),l=b.useRef(null),d=b.useRef({width:0,height:0,top:0,left:0,right:0,bottom:0}),{nonce:c}=b.useContext(tv),u=e.props?.ref??e?.ref,h=TV(l,u);return b.useInsertionEffect(()=>{const{width:g,height:m,top:p,left:f,right:w,bottom:k}=d.current;if(n||o===!1||!l.current||!g||!m)return;const v=t==="left"?`left: ${f}`:`right: ${w}`,x=i==="bottom"?`bottom: ${k}`:`top: ${p}`;l.current.dataset.motionPopId=s;const y=document.createElement("style");c&&(y.nonce=c);const j=a??document.head;return j.appendChild(y),y.sheet&&y.sheet.insertRule(`
13587          [data-motion-pop-id="${s}"] {
13588            position: absolute !important;
13589            width: ${g}px !important;
13590            height: ${m}px !important;
13591            ${v}px !important;
13592            ${x}px !important;
13593          }
13594        `),()=>{l.current?.removeAttribute("data-motion-pop-id"),j.contains(y)&&j.removeChild(y)}},[n]),r.jsx(DV,{isPresent:n,childRef:l,sizeRef:d,pop:o,children:o===!1?e:b.cloneElement(e,{ref:h})})}const MV=({children:e,initial:n,isPresent:t,onExitComplete:i,custom:a,presenceAffectsLayout:o,mode:s,anchorX:l,anchorY:d,root:c})=>{const u=Tb(FV),h=b.useId();let g=!0,m=b.useMemo(()=>(g=!1,{id:h,initial:n,isPresent:t,custom:a,onExitComplete:p=>{u.set(p,!0);for(const f of u.values())if(!f)return;i&&i()},register:p=>(u.set(p,!1),()=>u.delete(p))}),[t,u,i]);return o&&g&&(m={...m}),b.useMemo(()=>{u.forEach((p,f)=>u.set(f,!1))},[t]),b.useEffect(()=>{!t&&!u.size&&i&&i()},[t]),e=r.jsx(BV,{pop:s==="popLayout",isPresent:t,anchorX:l,anchorY:d,root:c,children:e}),r.jsx(Ju.Provider,{value:m,children:e})};function FV(){return new Map}function _A(e=!0){const n=b.useContext(Ju);if(n===null)return[!0,null];const{isPresent:t,onExitComplete:i,register:a}=n,o=b.useId();b.useEffect(()=>{if(e)return a(o)},[e]);const s=b.useCallback(()=>e&&i&&i(o),[o,i,e]);return!t&&i?[!1,s]:[!0]}const Cd=e=>e.key||"";function dy(e){const n=[];return b.Children.forEach(e,t=>{b.isValidElement(t)&&n.push(t)}),n}const Bl=({children:e,custom:n,initial:t=!0,onExitComplete:i,presenceAffectsLayout:a=!0,mode:o="sync",propagate:s=!1,anchorX:l="left",anchorY:d="top",root:c})=>{const[u,h]=_A(s),g=b.useMemo(()=>dy(e),[e]),m=s&&!u?[]:g.map(Cd),p=b.useRef(!0),f=b.useRef(g),w=Tb(()=>new Map),k=b.useRef(new Set),[v,x]=b.useState(g),[y,j]=b.useState(g);hz(()=>{p.current=!1,f.current=g;for(let A=0;A<y.length;A++){const E=Cd(y[A]);m.includes(E)?(w.delete(E),k.current.delete(E)):w.get(E)!==!0&&w.set(E,!1)}},[y,m.length,m.join("-")]);const z=[];if(g!==v){let A=[...g];for(let E=0;E<y.length;E++){const C=y[E],O=Cd(C);m.includes(O)||(A.splice(E,0,C),z.push(C))}return o==="wait"&&z.length&&(A=z),j(dy(A)),x(g),null}const{forceRender:S}=b.useContext(Pb);return r.jsx(r.Fragment,{children:y.map(A=>{const E=Cd(A),C=s&&!u?!1:g===y||m.includes(E),O=()=>{if(k.current.has(E))return;if(w.has(E))k.current.add(E),w.set(E,!0);else return;let T=!0;w.forEach(W=>{W||(T=!1)}),T&&(S?.(),j(f.current),s&&h?.(),i&&i())};return r.jsx(MV,{isPresent:C,initial:!p.current||t?void 0:!1,custom:n,presenceAffectsLayout:a,mode:o,root:c,onExitComplete:C?void 0:O,anchorX:l,anchorY:d,children:A},E)})})},LA=b.createContext({strict:!1}),cy={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]};let uy=!1;function RV(){if(uy)return;const e={};for(const n in cy)e[n]={isEnabled:t=>cy[n].some(i=>!!t[i])};pA(e),uy=!0}function WA(){return RV(),xW()}function OV(e){const n=WA();for(const t in e)n[t]={...n[t],...e[t]};pA(n)}const _V=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","propagate","ignoreStrict","viewport"]);function gu(e){return e.startsWith("while")||e.startsWith("drag")&&e!=="draggable"||e.startsWith("layout")||e.startsWith("onTap")||e.startsWith("onPan")||e.startsWith("onLayout")||_V.has(e)}let VA=e=>!gu(e);function LV(e){typeof e=="function"&&(VA=n=>n.startsWith("on")?!gu(n):e(n))}try{LV(require("@emotion/is-prop-valid").default)}catch{}function WV(e,n,t){const i={};for(const a in e)a==="values"&&typeof e.values=="object"||Bn(e[a])||(VA(a)||t===!0&&gu(a)||!n&&!gu(a)||e.draggable&&a.startsWith("onDrag"))&&(i[a]=e[a]);return i}const ih=b.createContext({});function VV(e,n){if(th(e)){const{initial:t,animate:i}=e;return{initial:t===!1||kl(t)?t:void 0,animate:kl(i)?i:void 0}}return e.inherit!==!1?n:{}}function KV(e){const{initial:n,animate:t}=VV(e,b.useContext(ih));return b.useMemo(()=>({initial:n,animate:t}),[hy(n),hy(t)])}function hy(e){return Array.isArray(e)?e.join(" "):e}const iv=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function KA(e,n,t){for(const i in n)!Bn(n[i])&&!yA(i,t)&&(e[i]=n[i])}function qV({transformTemplate:e},n){return b.useMemo(()=>{const t=iv();return ev(t,n,e),Object.assign({},t.vars,t.style)},[n])}function HV(e,n){const t=e.style||{},i={};return KA(i,t,e),Object.assign(i,qV(e,n)),i}function UV(e,n){const t={},i=HV(e,n);return e.drag&&e.dragListener!==!1&&(t.draggable=!1,i.userSelect=i.WebkitUserSelect=i.WebkitTouchCallout="none",i.touchAction=e.drag===!0?"none":`pan-${e.drag==="x"?"y":"x"}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(t.tabIndex=0),t.style=i,t}const qA=()=>({...iv(),attrs:{}});function GV(e,n,t,i){const a=b.useMemo(()=>{const o=qA();return jA(o,n,zA(i),e.transformTemplate,e.style),{...o.attrs,style:{...o.style}}},[n]);if(e.style){const o={};KA(o,e.style,e),a.style={...o,...a.style}}return a}const $V=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function rv(e){return typeof e!="string"||e.includes("-")?!1:!!($V.indexOf(e)>-1||/[A-Z]/u.test(e))}function ZV(e,n,t,{latestValues:i},a,o=!1,s){const d=(s??rv(e)?GV:UV)(n,i,a,e),c=WV(n,typeof e=="string",o),u=e!==b.Fragment?{...c,...d,ref:t}:{},{children:h}=n,g=b.useMemo(()=>Bn(h)?h.get():h,[h]);return b.createElement(e,{...u,children:g})}function YV({scrapeMotionValuesFromProps:e,createRenderState:n},t,i,a){return{latestValues:QV(t,i,a,e),renderState:n()}}function QV(e,n,t,i){const a={},o=i(e,{});for(const g in o)a[g]=fc(o[g]);let{initial:s,animate:l}=e;const d=th(e),c=gA(e);n&&c&&!d&&e.inherit!==!1&&(s===void 0&&(s=n.initial),l===void 0&&(l=n.animate));let u=t?t.initial===!1:!1;u=u||s===!1;const h=u?l:s;if(h&&typeof h!="boolean"&&!nh(h)){const g=Array.isArray(h)?h:[h];for(let m=0;m<g.length;m++){const p=Ub(e,g[m]);if(p){const{transitionEnd:f,transition:w,...k}=p;for(const v in k){let x=k[v];if(Array.isArray(x)){const y=u?x.length-1:0;x=x[y]}x!==null&&(a[v]=x)}for(const v in f)a[v]=f[v]}}}return a}const HA=e=>(n,t)=>{const i=b.useContext(ih),a=b.useContext(Ju),o=()=>YV(e,n,i,a);return t?o():Tb(o)},JV=HA({scrapeMotionValuesFromProps:nv,createRenderState:iv}),XV=HA({scrapeMotionValuesFromProps:AA,createRenderState:qA}),eK=Symbol.for("motionComponentSymbol");function nK(e,n,t){const i=b.useRef(t);b.useInsertionEffect(()=>{i.current=t});const a=b.useRef(null);return b.useCallback(o=>{o&&e.onMount?.(o);
vendor: 23,300 bytes, line 13594
13594const s=i.current;if(typeof s=="function")if(o){const l=s(o);typeof l=="function"&&(a.current=l)}else a.current?(a.current(),a.current=null):s(o);else s&&(s.current=o);n&&(o?n.mount(o):n.unmount())},[n])}const UA=b.createContext({});function Ia(e){return e&&typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"current")}function tK(e,n,t,i,a,o){const{visualElement:s}=b.useContext(ih),l=b.useContext(LA),d=b.useContext(Ju),c=b.useContext(tv),u=c.reducedMotion,h=c.skipAnimations,g=b.useRef(null),m=b.useRef(!1);i=i||l.renderer,!g.current&&i&&(g.current=i(e,{visualState:n,parent:s,props:t,presenceContext:d,blockInitialAnimation:d?d.initial===!1:!1,reducedMotionConfig:u,skipAnimations:h,isSVG:o}),m.current&&g.current&&(g.current.manuallyAnimateOnMount=!0));const p=g.current,f=b.useContext(UA);p&&!p.projection&&a&&(p.type==="html"||p.type==="svg")&&iK(g.current,t,a,f);const w=b.useRef(!1);b.useInsertionEffect(()=>{p&&w.current&&p.update(t,d)});const k=t[eA],v=b.useRef(!!k&&typeof window<"u"&&!window.MotionHandoffIsComplete?.(k)&&window.MotionHasOptimisedAnimation?.(k));return hz(()=>{m.current=!0,p&&(w.current=!0,window.MotionIsMounted=!0,p.updateFeatures(),p.scheduleRenderMicrotask(),v.current&&p.animationState&&p.animationState.animateChanges())}),b.useEffect(()=>{p&&(!v.current&&p.animationState&&p.animationState.animateChanges(),v.current&&(queueMicrotask(()=>{window.MotionHandoffMarkAsComplete?.(k)}),v.current=!1),p.enteringChildren=void 0)}),p}function iK(e,n,t,i){const{layoutId:a,layout:o,drag:s,dragConstraints:l,layoutScroll:d,layoutRoot:c,layoutAnchor:u,layoutCrossfade:h}=n;e.projection=new t(e.latestValues,n["data-framer-portal-id"]?void 0:GA(e.parent)),e.projection.setOptions({layoutId:a,layout:o,alwaysMeasureLayout:!!s||l&&Ia(l),visualElement:e,animationType:typeof o=="string"?o:"both",initialPromotionConfig:i,crossfade:h,layoutScroll:d,layoutRoot:c,layoutAnchor:u})}function GA(e){if(e)return e.options.allowProjection!==!1?e.projection:GA(e.parent)}function zg(e,{forwardMotionProps:n=!1,type:t}={},i,a){i&&OV(i);const o=t?t==="svg":rv(e),s=o?XV:JV;function l(c,u){let h;const g={...b.useContext(tv),...c,layoutId:rK(c)},{isStatic:m}=g,p=KV(c),f=s(c,m);if(!m&&typeof window<"u"){aK();const w=oK(g);h=w.MeasureLayout,p.visualElement=tK(e,f,g,a,w.ProjectionNode,o)}return r.jsxs(ih.Provider,{value:p,children:[h&&p.visualElement?r.jsx(h,{visualElement:p.visualElement,...g}):null,ZV(e,c,nK(f,p.visualElement,u),f,m,n,o)]})}l.displayName=`motion.${typeof e=="string"?e:`create(${e.displayName??e.name??""})`}`;const d=b.forwardRef(l);return d[eK]=e,d}function rK({layoutId:e}){const n=b.useContext(Pb).id;return n&&e!==void 0?n+"-"+e:e}function aK(e,n){b.useContext(LA).strict}function oK(e){const n=WA(),{drag:t,layout:i}=n;if(!t&&!i)return{};const a={...t,...i};return{MeasureLayout:t?.isEnabled(e)||i?.isEnabled(e)?a.MeasureLayout:void 0,ProjectionNode:a.ProjectionNode}}function sK(e,n){if(typeof Proxy>"u")return zg;const t=new Map,i=(o,s)=>zg(o,s,e,n),a=(o,s)=>i(o,s);return new Proxy(a,{get:(o,s)=>s==="create"?i:(t.has(s)||t.set(s,zg(s,void 0,e,n)),t.get(s))})}const lK=(e,n)=>n.isSVG??rv(e)?new OW(n):new TW(n,{allowProjection:e!==b.Fragment});class dK extends Dr{constructor(n){super(n),n.animationState||(n.animationState=KW(n))}updateAnimationControlsSubscription(){const{animate:n}=this.node.getProps();nh(n)&&(this.unmountControls=n.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:n}=this.node.getProps(),{animate:t}=this.node.prevProps||{};n!==t&&this.updateAnimationControlsSubscription()}unmount(){this.node.animationState.reset(),this.unmountControls?.()}}let cK=0;class uK extends Dr{constructor(){super(...arguments),this.id=cK++,this.isExitComplete=!1}update(){if(!this.node.presenceContext)return;const{isPresent:n,onExitComplete:t}=this.node.presenceContext,{isPresent:i}=this.node.prevPresenceContext||{};if(!this.node.animationState||n===i)return;if(n&&i===!1){if(this.isExitComplete){const{initial:o,custom:s}=this.node.getProps();if(typeof o=="string"){const l=ia(this.node,o,s);if(l){const{transition:d,transitionEnd:c,...u}=l;for(const h in u)this.node.getValue(h)?.jump(u[h])}}this.node.animationState.reset(),this.node.animationState.animateChanges()}else this.node.animationState.setActive("exit",!1);this.isExitComplete=!1;return}const a=this.node.animationState.setActive("exit",!n);t&&!n&&a.then(()=>{this.isExitComplete=!0,t(this.id)})}mount(){const{register:n,onExitComplete:t}=this.node.presenceContext||{};t&&t(this.id),n&&(this.unmount=n(this.id))}unmount(){}}const hK={animation:{Feature:dK},exit:{Feature:uK}};function Ml(e){return{point:{x:e.pageX,y:e.pageY}}}const gK=e=>n=>Yb(n)&&e(n,Ml(n));function Ws(e,n,t,i){return wl(e,n,gK(t),i)}const $A=({current:e})=>e?e.ownerDocument.defaultView:null,gy=(e,n)=>Math.abs(e-n);function mK(e,n){const t=gy(e.x,n.x),i=gy(e.y,n.y);return Math.sqrt(t**2+i**2)}const my=new Set(["auto","scroll"]);class ZA{constructor(n,t,{transformPagePoint:i,contextWindow:a=window,dragSnapToOrigin:o=!1,distanceThreshold:s=3,element:l}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.lastRawMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.scrollPositions=new Map,this.removeScrollListeners=null,this.onElementScroll=m=>{this.handleScroll(m.target)},this.onWindowScroll=()=>{this.handleScroll(window)},this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;this.lastRawMoveEventInfo&&(this.lastMoveEventInfo=Ed(this.lastRawMoveEventInfo,this.transformPagePoint));const m=Ag(this.lastMoveEventInfo,this.history),p=this.startEvent!==null,f=mK(m.offset,{x:0,y:0})>=this.distanceThreshold;if(!p&&!f)return;const{point:w}=m,{timestamp:k}=Dn;this.history.push({...w,timestamp:k});const{onStart:v,onMove:x}=this.handlers;p||(v&&v(this.lastMoveEvent,m),this.startEvent=this.lastMoveEvent),x&&x(this.lastMoveEvent,m)},this.handlePointerMove=(m,p)=>{this.lastMoveEvent=m,this.lastRawMoveEventInfo=p,this.lastMoveEventInfo=Ed(p,this.transformPagePoint),He.update(this.updatePoint,!0)},this.handlePointerUp=(m,p)=>{this.end();const{onEnd:f,onSessionEnd:w,resumeAnimation:k}=this.handlers;if((this.dragSnapToOrigin||!this.startEvent)&&k&&k(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const v=Ag(m.type==="pointercancel"?this.lastMoveEventInfo:Ed(p,this.transformPagePoint),this.history);this.startEvent&&f&&f(m,v),w&&w(m,v)},!Yb(n))return;this.dragSnapToOrigin=o,this.handlers=t,this.transformPagePoint=i,this.distanceThreshold=s,this.contextWindow=a||window;const d=Ml(n),c=Ed(d,this.transformPagePoint),{point:u}=c,{timestamp:h}=Dn;this.history=[{...u,timestamp:h}];const{onSessionStart:g}=t;g&&g(n,Ag(c,this.history)),this.removeListeners=Pl(Ws(this.contextWindow,"pointermove",this.handlePointerMove),Ws(this.contextWindow,"pointerup",this.handlePointerUp),Ws(this.contextWindow,"pointercancel",this.handlePointerUp)),l&&this.startScrollTracking(l)}startScrollTracking(n){let t=n.parentElement;for(;t;){const i=getComputedStyle(t);(my.has(i.overflowX)||my.has(i.overflowY))&&this.scrollPositions.set(t,{x:t.scrollLeft,y:t.scrollTop}),t=t.parentElement}this.scrollPositions.set(window,{x:window.scrollX,y:window.scrollY}),window.addEventListener("scroll",this.onElementScroll,{capture:!0}),window.addEventListener("scroll",this.onWindowScroll),this.removeScrollListeners=()=>{window.removeEventListener("scroll",this.onElementScroll,{capture:!0}),window.removeEventListener("scroll",this.onWindowScroll)}}handleScroll(n){const t=this.scrollPositions.get(n);if(!t)return;const i=n===window,a=i?{x:window.scrollX,y:window.scrollY}:{x:n.scrollLeft,y:n.scrollTop},o={x:a.x-t.x,y:a.y-t.y};o.x===0&&o.y===0||(i?this.lastMoveEventInfo&&(this.lastMoveEventInfo.point.x+=o.x,this.lastMoveEventInfo.point.y+=o.y):this.history.length>0&&(this.history[0].x-=o.x,this.history[0].y-=o.y),this.scrollPositions.set(n,a),He.update(this.updatePoint,!0))}updateHandlers(n){this.handlers=n}end(){this.removeListeners&&this.removeListeners(),this.removeScrollListeners&&this.removeScrollListeners(),this.scrollPositions.clear(),Ar(this.updatePoint)}}function Ed(e,n){return n?{point:n(e.point)}:e}function py(e,n){return{x:e.x-n.x,y:e.y-n.y}}function Ag({point:e},n){return{point:e,delta:py(e,YA(n)),offset:py(e,pK(n)),velocity:fK(n,.1)}}function pK(e){return e[0]}function YA(e){return e[e.length-1]}function fK(e,n){if(e.length<2)return{x:0,y:0};let t=e.length-1,i=null;const a=YA(e);for(;t>=0&&(i=e[t],!(a.timestamp-i.timestamp>st(n)));)t--;if(!i)return{x:0,y:0};i===e[0]&&e.length>2&&a.timestamp-i.timestamp>st(n)*2&&(i=e[1]);const o=Nt(a.timestamp-i.timestamp);if(o===0)return{x:0,y:0};const s={x:(a.x-i.x)/o,y:(a.y-i.y)/o};return s.x===1/0&&(s.x=0),s.y===1/0&&(s.y=0),s}function bK(e,{min:n,max:t},i){return n!==void 0&&e<n?e=i?Je(n,e,i.min):Math.max(e,n):t!==void 0&&e>t&&(e=i?Je(t,e,i.max):Math.min(e,t)),e}function fy(e,n,t){return{min:n!==void 0?e.min+n:void 0,max:t!==void 0?e.max+t-(e.max-e.min):void 0}}function vK(e,{top:n,left:t,bottom:i,right:a}){return{x:fy(e.x,t,a),y:fy(e.y,n,i)}}function by(e,n){let t=n.min-e.min,i=n.max-e.max;return n.max-n.min<e.max-e.min&&([t,i]=[i,t]),{min:t,max:i}}function kK(e,n){return{x:by(e.x,n.x),y:by(e.y,n.y)}}function wK(e,n){let t=.5;const i=$n(e),a=$n(n);return a>i?t=bl(n.min,n.max-i,e.min):i>a&&(t=bl(e.min,e.max-a,n.min)),ji(0,1,t)}function xK(e,n){const t={};return n.min!==void 0&&(t.min=n.min-e.min),n.max!==void 0&&(t.max=n.max-e.min),t}const Wp=.35;function yK(e=Wp){return e===!1?e=0:e===!0&&(e=Wp),{x:vy(e,"left","right"),y:vy(e,"top","bottom")}}function vy(e,n,t){return{min:ky(e,n),max:ky(e,t)}}function ky(e,n){return typeof e=="number"?e:e[n]||0}const jK=new WeakMap;class SK{constructor(n){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=xn(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=n}start(n,{snapToCursor:t=!1,distanceThreshold:i}={}){const{presenceContext:a}=this.visualElement;if(a&&a.isPresent===!1)return;const o=h=>{t&&this.snapToCursor(Ml(h).point),this.stopAnimation()},s=(h,g)=>{const{drag:m,dragPropagation:p,onDragStart:f}=this.getProps();if(m&&!p&&(this.openDragLock&&this.openDragLock(),this.openDragLock=Q8(m),!this.openDragLock))return;this.latestPointerEvent=h,this.latestPanInfo=g,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),li(k=>{let v=this.getAxisMotionValue(k).get()||0;if(bi.test(v)){const{projection:x}=this.visualElement;if(x&&x.layout){const y=x.layout.layoutBox[k];y&&(v=$n(y)*(parseFloat(v)/100))}}this.originPoint[k]=v}),f&&He.update(()=>f(h,g),!1,!0),Tp(this.visualElement,"transform");const{animationState:w}=this.visualElement;w&&w.setActive("whileDrag",!0)},l=(h,g)=>{this.latestPointerEvent=h,this.latestPanInfo=g;const{dragPropagation:m,dragDirectionLock:p,onDirectionLock:f,onDrag:w}=this.getProps();if(!m&&!this.openDragLock)return;const{offset:k}=g;if(p&&this.currentDirection===null){this.currentDirection=AK(k),this.currentDirection!==null&&f&&f(this.currentDirection);return}this.updateAxis("x",g.point,k),this.updateAxis("y",g.point,k),this.visualElement.render(),w&&He.update(()=>w(h,g),!1,!0)},d=(h,g)=>{this.latestPointerEvent=h,this.latestPanInfo=g,this.stop(h,g),this.latestPointerEvent=null,this.latestPanInfo=null},c=()=>{const{dragSnapToOrigin:h}=this.getProps();(h||this.constraints)&&this.startAnimation({x:0,y:0})},{dragSnapToOrigin:u}=this.getProps();this.panSession=new ZA(n,{onSessionStart:o,onStart:s,onMove:l,onSessionEnd:d,resumeAnimation:c},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:u,distanceThreshold:i,contextWindow:$A(this.visualElement),element:this.visualElement.current})}stop(n,t){const i=n||this.latestPointerEvent,a=t||this.latestPanInfo,o=this.isDragging;if(this.cancel(),!o||!a||!i)return;const{velocity:s}=a;this.startAnimation(s);const{onDragEnd:l}=this.getProps();l&&He.postRender(()=>l(i,a))}cancel(){this.isDragging=!1;const{projection:n,animationState:t}=this.visualElement;n&&(n.isAnimationBlocked=!1),this.endPanSession();const{dragPropagation:i}=this.getProps();!i&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),t&&t.setActive("whileDrag",!1)}endPanSession(){this.panSession&&this.panSession.end(),this.panSession=void 0}updateAxis(n,t,i){const{drag:a}=this.getProps();if(!i||!Nd(n,a,this.currentDirection))return;const o=this.getAxisMotionValue(n);let s=this.originPoint[n]+i[n];this.constraints&&this.constraints[n]&&(s=bK(s,this.constraints[n],this.elastic[n])),o.set(s)}resolveConstraints(){const{dragConstraints:n,dragElastic:t}=this.getProps(),i=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):this.visualElement.projection?.layout,a=this.constraints;n&&Ia(n)?this.constraints||(this.constraints=this.resolveRefConstraints()):n&&i?this.constraints=vK(i.layoutBox,n):this.constraints=!1,this.elastic=yK(t),a!==this.constraints&&!Ia(n)&&i&&this.constraints&&!this.hasMutatedConstraints&&li(o=>{this.constraints!==!1&&this.getAxisMotionValue(o)&&(this.constraints[o]=xK(i.layoutBox[o],this.constraints[o]))})}resolveRefConstraints(){const{dragConstraints:n,onMeasureDragConstraints:t}=this.getProps();if(!n||!Ia(n))return!1;const i=n.current;yo(i!==null,"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.","drag-constraints-ref");const{projection:a}=this.visualElement;if(!a||!a.layout)return!1;const o=AW(i,a.root,this.visualElement.getTransformPagePoint());let s=kK(a.layout.layoutBox,o);if(t){const l=t(jW(s));this.hasMutatedConstraints=!!l,l&&(s=bA(l))}return s}startAnimation(n){const{drag:t,dragMomentum:i,dragElastic:a,dragTransition:o,dragSnapToOrigin:s,onDragTransitionEnd:l}=this.getProps(),d=this.constraints||{},c=li(u=>{if(!Nd(u,t,this.currentDirection))return;let h=d&&d[u]||{};(s===!0||s===u)&&(h={min:0,max:0});const g=a?200:1e6,m=a?40:1e7,p={type:"inertia",velocity:i?n[u]:0,bounceStiffness:g,bounceDamping:m,timeConstant:750,restDelta:1,restSpeed:10,...o,...h};return this.startAxisValueAnimation(u,p)});return Promise.all(c).then(l)}startAxisValueAnimation(n,t){const i=this.getAxisMotionValue(n);return Tp(this.visualElement,n),i.start(Hb(n,i,0,t,this.visualElement,!1))}stopAnimation(){li(n=>this.getAxisMotionValue(n).stop())}getAxisMotionValue(n){const t=`_drag${n.toUpperCase()}`,i=this.visualElement.getProps(),a=i[t];return a||this.visualElement.getValue(n,(i.initial?i.initial[n]:void 0)||0)}snapToCursor(n){li(t=>{const{drag:i}=this.getProps();if(!Nd(t,i,this.currentDirection))return;const{projection:a}=this.visualElement,o=this.getAxisMotionValue(t);if(a&&a.layout){const{min:s,max:l}=a.layout.layoutBox[t],d=o.get()||0;o.set(n[t]-Je(s,l,.5)+d)}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:n,dragConstraints:t}=this.getProps(),{projection:i}=this.visualElement;if(!Ia(t)||!i||!this.constraints)return;this.stopAnimation();const a={x:0,y:0};li(s=>{const l=this.getAxisMotionValue(s);if(l&&this.constraints!==!1){const d=l.get();a[s]=wK({min:d,max:d},this.constraints[s])}});const{transformTemplate:o}=this.visualElement.getProps();this.visualElement.current.style.transform=o?o({},""):"none",i.root&&i.root.updateScroll(),i.updateLayout(),this.constraints=!1,this.resolveConstraints(),li(s=>{if(!Nd(s,n,null))return;const l=this.getAxisMotionValue(s),{min:d,max:c}=this.constraints[s];l.set(Je(d,c,a[s]))}),this.visualElement.render()}addListeners(){if(!this.visualElement.current)return;jK.set(this.visualElement,this);const n=this.visualElement.current,t=Ws(n,"pointerdown",c=>{const{drag:u,dragListener:h=!0}=this.getProps(),g=c.target,m=g!==n&&iW(g);u&&h&&!m&&this.start(c)});let i;const a=()=>{const{dragConstraints:c}=this.getProps();Ia(c)&&c.current&&(this.constraints=this.resolveRefConstraints(),i||(i=zK(n,c.current,()=>this.scalePositionWithinConstraints())))},{projection:o}=this.visualElement,s=o.addEventListener("measure",a);o&&!o.layout&&(o.root&&o.root.updateScroll(),o.updateLayout()),He.read(a);const l=wl(window,"resize",()=>this.scalePositionWithinConstraints()),d=o.addEventListener("didUpdate",({delta:c,hasLayoutChanged:u})=>{this.isDragging&&u&&(li(h=>{const g=this.getAxisMotionValue(h);g&&(this.originPoint[h]+=c[h].translate,g.set(g.get()+c[h].translate))}),this.visualElement.render())});return()=>{l(),t(),s(),d&&d(),i&&i()}}getProps(){const n=this.visualElement.getProps(),{drag:t=!1,dragDirectionLock:i=!1,dragPropagation:a=!1,dragConstraints:o=!1,dragElastic:s=Wp,dragMomentum:l=!0}=n;return{...n,drag:t,dragDirectionLock:i,dragPropagation:a,dragConstraints:o,dragElastic:s,dragMomentum:l}}}function wy(e){let n=!0;return()=>{if(n){n=!1;return}e()}}function zK(e,n,t){const i=Cx(e,wy(t)),a=Cx(n,wy(t));return()=>{i(),a()}}function Nd(e,n,t){return(n===!0||n===e)&&(t===null||t===e)}function AK(e,n=10){let t=null;return Math.abs(e.y)>n?t="y":Math.abs(e.x)>n&&(t="x"),t}class CK extends Dr{constructor(n){super(n),this.removeGroupControls=Tt,this.removeListeners=Tt,this.controls=new SK(n)}mount(){const{dragControls:n}=this.node.getProps();n&&(this.removeGroupControls=n.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||Tt}update(){const{dragControls:n}=this.node.getProps(),{dragControls:t}=this.node.prevProps||{};n!==t&&(this.removeGroupControls(),n&&(this.removeGroupControls=n.subscribe(this.controls)))}unmount(){this.removeGroupControls(),this.removeListeners(),this.controls.isDragging||this.controls.endPanSession()}}const Cg=e=>(n,t)=>{e&&He.update(()=>e(n,t),!1,!0)};class EK extends Dr{constructor(){super(...arguments),this.removePointerDownListener=Tt}onPointerDown(n){this.session=new ZA(n,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:$A(this.node)})}createPanHandlers(){const{onPanSessionStart:n,onPanStart:t,onPan:i,onPanEnd:a}=this.node.getProps();return{onSessionStart:Cg(n),onStart:Cg(t),onMove:Cg(i),onEnd:(o,s)=>{delete this.session,a&&He.postRender(()=>a(o,s))}}}mount(){this.removePointerDownListener=Ws(this.node.current,"pointerdown",n=>this.onPointerDown(n))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}let Eg=!1;class NK extends b.Component{componentDidMount(){const{visualElement:n,layoutGroup:t,switchLayoutGroup:i,layoutId:a}=this.props,{projection:o}=n;o&&(t.group&&t.group.add(o),i&&i.register&&a&&i.register(o),Eg&&o.root.didUpdate(),o.addEventListener("animationComplete",()=>{this.safeToRemove()}),o.setOptions({...o.options,layoutDependency:this.props.layoutDependency,onExitComplete:()=>this.safeToRemove()})),bc.hasEverUpdated=!0}getSnapshotBeforeUpdate(n){const{layoutDependency:t,visualElement:i,drag:a,isPresent:o}=this.props,{projection:s}=i;return s&&(s.isPresent=o,n.layoutDependency!==t&&s.setOptions({...s.options,layoutDependency:t}),Eg=!0,a||n.layoutDependency!==t||t===void 0||n.isPresent!==o?s.willUpdate():this.safeToRemove(),n.isPresent!==o&&(o?s.promote():s.relegate()||He.postRender(()=>{const l=s.getStack();(!l||!l.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{visualElement:n,layoutAnchor:t}=this.props,{projection:i}=n;i&&(i.options.layoutAnchor=t,i.root.didUpdate(),Zb.postRender(()=>{!i.currentAnimation&&i.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:n,layoutGroup:t,switchLayoutGroup:i}=this.props,{projection:a}=n;Eg=!0,a&&(a.scheduleCheckAfterUnmount(),t&&t.group&&t.group.remove(a),i&&i.deregister&&i.deregister(a))}safeToRemove(){const{safeToRemove:n}=this.props;n&&n()}render(){return null}}function QA(e){const[n,t]=_A(),i=b.useContext(Pb);return r.jsx(NK,{...e,layoutGroup:i,switchLayoutGroup:b.useContext(UA),isPresent:n,safeToRemove:t})}const IK={pan:{Feature:EK},drag:{Feature:CK,ProjectionNode:OA,MeasureLayout:QA}};function xy(e,n,t){const{props:i}=e;e.animationState&&i.whileHover&&e.animationState.setActive("whileHover",t==="Start");const a="onHover"+t,o=i[a];o&&He.postRender(()=>o(n,Ml(n)))}class PK extends Dr{mount(){const{current:n}=this.node;n&&(this.unmount=X8(n,(t,i)=>(xy(this.node,i,"Start"),a=>xy(this.node,a,"End"))))}unmount(){}}class TK extends Dr{constructor(){super(...arguments),this.isActive=!1}onFocus(){let n=!1;try{n=this.node.current.matches(":focus-visible")}catch{n=!0}!n||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=Pl(wl(this.node.current,"focus",()=>this.onFocus()),wl(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function yy(e,n,t){const{props:i}=e;if(e.current instanceof HTMLButtonElement&&e.current.disabled)return;e.animationState&&i.whileTap&&e.animationState.setActive("whileTap",t==="Start");const a="onTap"+(t==="End"?"":t),o=i[a];o&&He.postRender(()=>o(n,Ml(n)))}class DK extends Dr{mount(){const{current:n}=this.node;if(!n)return;const{globalTapTarget:t,propagate:i}=this.node.props;this.unmount=aW(n,(a,o)=>(yy(this.node,o,"Start"),(s,{success:l})=>yy(this.node,s,l?"End":"Cancel")),{useGlobalTarget:t,stopPropagation:i?.tap===!1})}unmount(){}}const Vp=new WeakMap,Ng=new WeakMap,BK=e=>{const n=Vp.get(e.target);n&&n(e)},MK=e=>{e.forEach(BK)};function FK({root:e,...n}){const t=e||document;Ng.has(t)||Ng.set(t,{});const i=Ng.get(t),a=JSON.stringify(n);return i[a]||(i[a]=new IntersectionObserver(MK,{root:e,...n})),i[a]}function RK(e,n,t){const i=FK(n);return Vp.set(e,t),i.observe(e),()=>{Vp.delete(e),i.unobserve(e)}}const OK={some:0,all:1};class _K extends Dr{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.stopObserver?.();const{viewport:n={}}=this.node.getProps(),{root:t,margin:i,amount:a="some",once:o}=n,s={root:t?t.current:void 0,rootMargin:i,threshold:typeof a=="number"?a:OK[a]},l=d=>{const{isIntersecting:c}=d;if(this.isInView===c||(this.isInView=c,o&&!c&&this.hasEnteredView))return;c&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",c);const{onViewportEnter:u,onViewportLeave:h}=this.node.getProps(),g=c?u:h;g&&g(d)};this.stopObserver=RK(this.node.current,s,l)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:n,prevProps:t}=this.node;["amount","margin","root"].some(LK(n,t))&&this.startObserver()}unmount(){this.stopObserver?.(),this.hasEnteredView=!1,this.isInView=!1}}function LK({viewport:e={}},{viewport:n={}}={}){return t=>e[t]!==n[t]}const WK={inView:{Feature:_K},tap:{Feature:DK},focus:{Feature:TK},hover:{Feature:PK}},VK={layout:{ProjectionNode:OA,MeasureLayout:QA}},KK={...hK,...WK,...IK,...VK},Dt=sK(KK,lK),qK=()=>r.jsxs("div",{className:"absolute inset-0 overflow-hidden pointer-events-none","aria-hidden":"true",children:[r.jsx("div",{className:"absolute -top-40 -left-32 w-[820px] h-[820px] rounded-full blur-3xl op
13594acity-[0.10]",style:{background:"radial-gradient(circle, hsl(var(--turquoise) / 0.55) 0%, transparent 65%)"}}),r.jsx("div",{className:"absolute -bottom-40 -right-32 w-[760px] h-[760px] rounded-full blur-3xl opacity-[0.05]",style:{background:"radial-gradient(circle, hsl(var(--orange) / 0.55) 0%, transparent 65%)"}}),r.jsx("div",{className:"absolute top-1/3 left-1/4 w-[420px] h-[420px] rounded-full blur-3xl opacity-[0.04]",style:{background:"radial-gradient(circle, hsl(var(--turquoise-light) / 0.6) 0%, transparent 70%)"}}),r.jsx("div",{className:"absolute inset-0",style:{background:"radial-gradient(ellipse 80% 60% at 50% 50%, transparent 40%, hsl(var(--background)) 100%)"}})]}),HK=1,UK="522a0da8-9302-4285-bd4a-b33e58631b36",GK="adeffb1b-490a-4555-bc16-1267d88853a4",$K="/__l5e/assets-v1/522a0da8-9302-4285-bd4a-b33e58631b36/homepage-ai-controller-en.mp4",ZK="a/v1/adeffb1b-490a-4555-bc16-1267d88853a4/522a0da8-9302-4285-bd4a-b33e58631b36/homepage-ai-controller-en.mp4",YK="homepage-ai-controller-en.mp4",QK=4349982,JK="video/mp4",XK="2026-07-17T08:08:26Z",e7={version:HK,asset_id:UK,project_id:GK,url:$K,r2_key:ZK,original_filename:YK,size:QK,content_type:JK,created_at:XK},n7=1,t7="832589f1-dd41-4e84-94a6-37cd09010a82",i7="adeffb1b-490a-4555-bc16-1267d88853a4",r7="/__l5e/assets-v1/832589f1-dd41-4e84-94a6-37cd09010a82/homepage-ai-controller-nl.mp4",a7="a/v1/adeffb1b-490a-4555-bc16-1267d88853a4/832589f1-dd41-4e84-94a6-37cd09010a82/homepage-ai-controller-nl.mp4",o7="homepage-ai-controller-nl.mp4",s7=4280214,l7="video/mp4",d7="2026-07-17T08:27:59Z",c7={version:n7,asset_id:t7,project_id:i7,url:r7,r2_key:a7,original_filename:o7,size:s7,content_type:l7,created_at:d7},u7=()=>{const{i18n:e}=Y(),t=e.language?.startsWith("en")?e7:c7,i=b.useRef(null);return b.useEffect(()=>{i.current&&(i.current.playbackRate=3)},[t.url]),r.jsx("div",{className:"absolute inset-0 w-full h-full bg-white flex items-center justify-center",children:r.jsx("video",{ref:i,src:t.url,autoPlay:!0,muted:!0,loop:!0,playsInline:!0,className:"w-full h-full object-contain","aria-label":"AI controller demo"})})},av=()=>{const{t:e}=Y(),n=[{number:"300+",label:e("socialProof.clients")},{number:"90%",label:e("socialProof.daysBack")},{number:"<1 week",label:e("socialProof.live")}];return r.jsx("section",{className:"py-10 md:py-12 section-cyan-tint border-y border-midnight/[0.06]",children:r.jsx("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20",children:r.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-6 md:gap-8 animate-fade-in-up",children:n.map(t=>r.jsxs("div",{className:"text-center",children:[r.jsx("div",{className:"font-mono font-bold text-[28px] md:text-[36px] text-turquoise leading-none tracking-tight",children:t.number}),r.jsx("div",{className:"text-sm text-secondary mt-2",children:t.label})]},t.label))})})})},h7="/assets/tiqets-HExL5D0M.png",rh="/assets/primus-BCXQukgc.png",zo="/assets/intermax-Dm8AHc8S.png",g7="/assets/driessen-B2JMDxVf.svg",m7="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdcAAABaBAMAAAAY8wFAAAAAJ1BMVEUIYmZHcEwIYmYIYmYIYmYIYmYIYmYIYmYIYmYIYmYIYmYIYmYIYmZShP9tAAAADHRSTlPJAECBFppa2zDvtXDkdtlxAAAJYUlEQVR42u2czY/bxhXA6W62yEEH8UNc2tqD5Qau2+iwrmwXSHQI49rGxjrswgaaIDpU3hiIAV2MxJeGl0XRFg10SAA3MAJdDAMFiuriILntgdaurMg7f1Tng/NNSkNuIDpZDbDQcigO58f35r0384ay7CWU4IJeGvbSS9Vayl1ASpmt7Z8eWIh75RTBAtA7TbCT0wQLzvzcYb002Fipev/iH7NE6xnUqOUfrZ311lsLYf0WL59K5/ZaSmH1f5jb5nbPABaWDzJGbTPUrt9VKvZakm27OUpGxSdirav2/7wlqdgr8d4VVedY/eFc2PaRGazdh20e6dXRU+36WOGvgLFwdIN38a5Qvan2f0uGBbPeiWEDXTczYOuwzWOt1pVAkuufzIG9Ifbxbg5YMN0/KSxscN8MFt1hplV2wCzUr+9lwvpZ3mwxLHh5UtgDAB4awjZho9oAhePvsn79JBO2i7r2MTROzv2hZPLSYWnbwX3p0VTSe7gA1kvRzSzYjRQL5acMZCSQzzNga/BcnDTiIEO1K8A2FGtcFR/kdfjl8clgzwFdXFmwLtCluA30L2Pt20+HhYKdMiYnEkS7CNb+l9DTYrBINcFTM1gnJazopjikqjy+RFhflCWRc88U1ov4tcVg0bhR7WkO2ACPrqO0CGw3DbYjPwXkzo5MYe0B72khWJd4sLAo7EZazExgp2EKbFcZCC6/eDFsnX+5ECx80j9W1JGYAxba8idA6yUAUOPAjzqsp7VcefSJMSxSw/AEsBB0dyD2Kx8ssuWNNgBfq9f/RnEUYyZI+Vb2n2zbHLbP2iwCi+xFWFPZzGGhLX9lnwXKHeD1jb6o3Qz27JyJkwFsh1mCIrDYXiDxPC8G20T2xVGdF4INIsHZMtjOnAUAA9gqC4CKwHZx7/uKPZ0HK3kpb4h7M1KeAYIlk6R9BbafEoLlgIU6+IK2OE1dD5wD65D+qOGdcVDhkmBZ9ScY1m5zZ8tg22BKnxPv6CUG+53Y/0s6rCvAyuXFYtgNQukp9tQ4XEwcX13RYwLrc2fLYLusYZd3NE6PjWMd1mcqWAAWPvzHyefXRSYClUStIymESGDtfzJny2ArTIUE2KkxrAN4Q3lhPSqpbdmeZsFGrGOCLU+ewliH9UbU2QqwhzosMIY9iRozKF8WWQZsTZ0gdehxTX4KCSwB6i2U7KwQbF4D1ReHwJmFsMjiPFZs+UOmIs91WLyQMwkl2Fh3CLGxgTonwOZ0PYnj0OPzdNjz6vzG4XbtQHJeDJY6W8Eaz/SxERu7nk0mk9ywNT4DcCU9hveYqomttz/SIv6z/HgDRVI6LHG2DQ57oPlZjzViADtgx7lh4aVxsmp5VZqSZS+S7ypqPUmuf0cSOofFqn/MYQdaBOUznTKA7QphSk7YSAYZ50x/eMrJx2mw2NneZbCb2oJXlQ2AxbAeX/DLC1tXOjtdCDtrzEuSHKbB2rdQyxGFrWkLBU02DBfDVvlN8sJ2VJbLC2CnPW3NXCr7abBeV1QbR1soiJhiL4ZtczOYF3akdvZoLuz049Cep8WC8xJhEwUaKzGXaCRNJwK+4OBywiLHcY9b298J9lSzxn15lYWFGPJXjlNhyZLemBvFiaIeY0NYpCNxwaXUbclbYPZelp/Fy2qfa4PtpcIepsKiRUFGhHzcG/JVu2aw3gNR+XLCtpVJ7IjbUz2oGOiijeRJLIpQnqbC4uSOuG4MWErPGQrNzoe92JXMQj7YAOhLHpNMWF20dWUdXFRIBRaFEmPROoMPyf+3xdWMDNivLFSSuP9Jdq4ndTYUC+PSzuh9SrioibajLqBWualRYR2g5nriO/cutP6Ls65hZq4nVhNbr8KCsAeax4uYw0+B1UQ7UiYF2DpfToeF4hxnuffntjFs3LCLwXpq7IctznH2REARra8nPbgR0GC9bpH8rAL7RWgXhK3p6SxelQYbyDmhbf0rvEqDtetFMu+xVbNoWbsmt7hjKeXNtPp1UvmeZf1anfHBs8+zp3gDKTb+i2W9oa5Bw+vJoK/Rf3i5JI3hLUKzJoefllbsJZRU2ADoml+44LXFcFE3yoNVRLuMbpQI+5OK9nWHXbpoS4VdtmhLhV22aMuFXbJoy4XFoj08LbDBUndYLwfWb7WupZ/5W6vVuvLLgn1Nygp2BbuCXcGuYFewK9gV7Ap2BbuCXcGuYFewpxD25o5l/Y+nYbz7liXkW4IfLOtZsuji8dxEQCro5gl0whEPPJbH8LdgA6x5b8+y1r8vDfY62fZC8ciuHfZWakDSfWTVxeEJuw6pEDcQsYQbasqlKbu6/JZrGx/+qiTYIALTZzt86bcJwPrVCsu6NuFZdujwRcTIENargNna1pDmx6uwdZRc75UD2wGHsB9BN1n69fHbjt4DmkIeol56fZJfd1iGtQYS2MtyaxW6n5nC3sK7baG6PMSHfYz5pfz2wPJgIyI0P0mwd0j3vdE0ocGbX7y/NsgR3UrTN4UdkS0Z9E3rEck/P7hSCqxP+9/+An90E3XeIJrmSGv9Dt1eEgBD2IC+i9V/RM4flWmNz8lvKnmUPSB6F0jbohya57hlCltTEiOjwzJhN+VNFFySEaEcgjv39gXYl4lyGsJWlVfn++Cz794qD1bese4yO5lsZRlgv/QsTNgOcOfr4DMK+5W8z0GF3QTy7WrYXK/3SoKNFVi225vAelvCBmoHXMT7nJrgOpBdjyms/Xv8HvJsvyQ1zpBsm+3bubC3lYxV6Hq6MRrYY5fCrkm/a7IY1rbff/tqBI5ehzHrs0FYGes2G8JuwC/AP9d4zKb9GJg3mpQCq1jjgL6R5rHXnYQRDGE9aKKgdN2C1phGMnG5fnbwCIs4OqaWhPQyFJUaRVBNcBOOWzevn+18i1vyUi3F0iKoIYmgvGEsxHPoE1f/fRIKSo1gXRBBi2wKa1eS5iP8FkB9SGqbJcEOwDfo47eJCGo4lrU/SBxqk5y9QbQbx8YjdMoYtkMaOk/2TFZJ605ZsTGM/P59be8jtq24C6Z3Wn+m8xIfgFfvXnwH0OCxgbZe7gqwiZ89kwUboAb2aHtwDjS9c++HSPvhmmXNZ9+Tt4L62BGCN+Wz39gMNkCK6Sp+9kUWLN1telec3YJJWBKsfR3Oz7/liwc+nNzGH7LD23D2OftPogV4Xyn6KTHfSiosWbI79B+fbUG9DZuPvxdbB+vFWe3q/wHRNOQ0Eik4BAAAAABJRU5ErkJggg==",p7="/assets/ba-f7IeKfrv.png",f7="/assets/bbn-MBgmEkn2.png",b7="/assets/eqwal-Bdr_Bgdo.webp",v7="/assets/idalko-fqlnaKG7.webp",k7="/assets/itrainee-DggoQNwk.png",ov="/assets/lifewatcher-BB
13594owyS-m.png",w7="data:image/webp;base64,UklGRuQMAABXRUJQVlA4TNcMAAAv78AuEOpg3LaRI6r/sjdd/EfEBFiXXu/qxWuVO16sLFwxlw7td+x88J99Ife8EwqKXBwpL6wS7Vuttu395KaB9/39/zNKzpkZ2QOdIzOM3Wwv7kGduAAVYJbjhu99v9/3m9+uc3gXKdM9Z5CQYwlKJXjPwEHOdgFWBc7hcUA5B5Y92DnhhaZeaJR4HOSc07Qg7DQlOHK5ACGn/xQwUPl/dpgSGgk5ZzOJLhvmIrYJtbAFLFKowYnnnGYcqFl2BUaLBJ1z+p0jutQ4JzRnivAR3mOmKcBCzkGBmmnPnzvbXWwB4wqWmS2SkKDQVKDAHOEwJ7iLXMUG6jSSbSvqfEiEZPBI/FcjiYwEWIndgVvbtmqlibX2eQbDPXwNELpDEU4Lr0PIJaYE+4gEBgDIRopt27Zt27Zt27Zt27Zt2zv7wkdvAuRU27ZMjovdUMWcn2YZZaCCgRMFDO0yM1MXZk65CsJJRe0wvdVzVzPT/Wf8+/fv379//3piAZK1bceb/SSp1/Dh/4sl2B3GmXXcNdhubHNUd2jMYuPXA8e2reXJWOLB3cq4y/cF909xiNeZCFrSMQJaun/Rx11K9wfH1rbFSdzd3YO7+0iHO8QqHP5UU3GyAC9x15ZeZwnILCDnTJ1NvBNgx8jNY7KVw6jOj9TMU8k2C3PpeqHO0/VCRZgEQyVpVuclafpQoxUw5nLaCPwIzaKVdKOYStXz4KlG4UGYDFRRmoIX5dl7nToGiBYxmeUGaBbWyXuzjfwsz7VLXcIANlNglt/gaLTw0S3mYDaI44SvU9e86PLu9nU5t094t3srK6Ya54mp4vEJnyqfHIllx4FzzohP+JwJHdc8G8TJrRM7+Ca1F0WXeyfVebcF3uXceRDTpRNqsngMPlk8eRfzRtQ0YwyCz5iQUPfNOnWxG9R+xg8x7iornc6d/m7n1hnvcu7klJdPFU/O+HT5mIh1M3LNmoJnfM6ECzVPmGe22WpOVWvTPFOthkSvPRzpsIWneacj2iTuhhzea2HzNL8VtXaKY2zPdkhYm+aHxbUBEUykdN5QeJpH9OFxYfiWf0m9TvMv6Te2KqUrlVqyXAFPlyt50W4Lc+3WZ/AO+3NR3AhbUleDJvCrIfODOCSsUQ10BbyBrbyL5pFok6t7Avf0z4L4l/sxfkq+gn9OvTXqkkmVq4VUpSryQ7/vxkqHPbzTbn0W+d7mRy/lWtg8fzVoFvn1oLkmGsWN4Ua2KvIGtvokmofjUU/3JPK9DA89yu+XL/3n5KvIP6fefqpSGPx+jj2Rnm0H+L7X3V7l7Iq66fiyCvz4sloI3SGxZU4vs8wykYTFYRYu48mcYvYQKn+Q14jtzgKs16zAW0ZkHaZHzjzaMmK5jkhgCi7jyxxlNkXIYZrmtSRHgzC2Cb8AGM97sgITgzGHuIynSEIjA7pHTpFBnNUcvsccChtiRCqBlTJiEwbyGtGjNXJgh0iikRBAvGLhSw0QIbvCCHW0BUuSxGxODISfqvSAMLRn29BHS/QxgRNAEvE7bwE1MTDfyxRjesAsOFoipyShMqxCMF5LpVJpKwKggDlZmVYulUol4nWNhrVqCGaJxhwLwXA3txhRvkdCRLlKxHg0MSLlD4ifUs/RDsX5tJVvGcysr3+wn0nEuspnlifrwgJmHM1A1IIn0zcBO7ArCMaWsHB9CiwSI4nETjrQdQS///OAzv+A+wmRcmFrQXVqU9fKzywbopWN0SYQ/juEzSSMYS0gryFNQz3xVmiSBv1jOp23M/Ic5IUlCdbRSJHiTYMxGwVmxyCs3AryIx/pQ2IDl1DFIiAwEpLYtx1IiaGYCmaswJwZdD0SgA9zXKiqJ4AcwmVLArauMDQVLJ4C8yBdpMEias6bUxIDiWuv7DBe9mQFxogZDnJKPAnmiVD0ihjB4qX/ICGGpUA4S1cbwFgcSDD94DJLzQgiArMoCeZegIDBIjE+mmKE0GDWQrxx7rk7C7AJnCxFkRgcLfERuAtXGKHM7AQONklgqRRFSj9E/S1zIpUTaQa1F+toI8pGItPusXh7+wyzMksoRGGm0JhAM9rbW2yzBz1oFgOBsvjd/hVB4W5j/H7dVrV6uZ6wJUyHsKGZWZvAaE2AsZOiSAzjzUbEjnUBYJsIesr3mPsAsE2tshlwn+H/BABi33mkXuYDQPjT20usFRYGPsJoyQAQRmaY2RwK4d2MN7iM2etrOeqsAfc+3/p0gJZhQk5JOgd2BcG8czrHhLtAipgmsbp/D/UHAtM/g5gt5NH5dohdmwqQCYPafeDWVJmN/g50EjvpXtD/2RKvFu6Cizt2UgcXCzctQFu5hkH/XkLFWGsCI0/wl4iO/wTzOCcUTg7sBACd3yoT5rsRggj/ABZ+DXgl0+LkTRkwThgcMRI4/eDBtRqIGxEdWpllxI9/mZkNJfxlnI6dGSmeP30RqLm20P6czo62JzQQM68KnD9ekxAxy8QvCMyJcF1Cq9cvTd8sIaaP8HvtQQDxa7KZ1Z//l+YShoGTm5m1AKM8mMVmZhFdgKtu71gb8BVTFwaIy1PNbDMTc0pyMzOzCiPUCCCCrmC/rDWXGQ1cI9bUewqTWKmI8450CMC1Q42G+KJUdAg92uOA25gvabCAZUz8PTC74GjncbbvBDYOM68FJKYCZ5TUdQDGbqyVEPReoTaVIg1XKoYIQ7SvACt6TQbeOqt1JJHZAHxPuWofE7hjawCTwzw4zq4McM3NzcwYgCXZo8II1dzcXAcQLmJtFGapUBeTbpmG+ikCI1cjnAPn8RoK7yWVGhN/FGy4T8sjlmHeQ1Zy4Nho4k4QY+UtoNaEQZ5sYQ7sCmKEsKCloRXix7QNANLSeUVwBQhApkd0qHz1zE4AyLJsZY1pvjKALMuyAB9DYJakMA+E+KU0LD1FGq79CKj1+gvAqLCYleu5APPoQZ82s4WUa74XWUTnbjNbOsD/QhFAfUzg8bZvWxPyvypfuZ5wQhfEZ5tOrAG+5VUHEFfS9DRgXnM7lCqAWGdupOGOd8uVBVZKu9DBe95yJwc5JemzcGNjY2PvSKjvt0qUNTY2Nk68J/Raj+sApbwFVIc09Ad2BeFsvy7QILxwRgLnA4YFYnYALxKI/cpfgCahqO3OAuzKQLeZsXjDXXt7872g8FafuH/+SGWK/XDzrDBCTQSYh1XdM1g8O4cUzcwmAV3bdltx3g2+WReO9RgAJtxwfIizAT1jzUbfHMrcwNvbzOxmG2j2bYAZNRtxb2zEdaHJvEnsha4/hrrqvJaey+3JCoyP1b0XKjHN2a4aAN5OAACMC2fEGgAYF6JMR/x2IBs2rQaajQOw8PvmAzwuC7dMMUF8ot+swMsc5KgdaMpalh5m8VTzn5u4KmRN2znWS1Kdwe1kxBcTeCGzK5S9aBrcr2yojSX2wt1qPY/iGZx3C2tv72eXExjtQboYcZtZanoaLH7dx55wyYhOrzV9+BLEgMdNus4LTf5joXB+qbVQ+KVktk5rgURduFih8Egf++MmEx73/yW2n7tQ+J5g9r2tiSkP3Ppt4wuFJSWzjYmahcJ3q91JFpNpVu2O+qMZo7za93/XuFHDePP9ZbVIGiyPG1eLWworVvuOYna/ddt2O27STZPGsYg4R3ggGjtFInTUHYuECE9Ej0bE0PFBou8IEd5/hFjhzTz6XCYJvyzczItgVZrdOUq4v8A3xcG9VK4nKeFr6eutqhQIxlogGMAjgjEvYpEQFw1h8Fh4vygGjlCq7xCB9x3hB+EJgrrMBLjDxbtoXhFNzhwBd+eoIO7lqHE1cQ2+miSNumQionE/EA08D4S5JRENH6zFwpjn8TDeFgOnmOk/wjw/+H3hpex1vGZ2uOC5w0RZtCzzgDNPeO7O02uxX4ho1xKE52sJ8laVwjwN4DT0o9wAOmEA639uAKMYPzkzTRz5onz61GMV64jrF+o8yuea0iFufF9r4i++KL/y5neLN0gp9n94lO//3/qFAaTPlnmUv1iVoQpXlDqvBakNXlR6qyInD2s5eQCeV0d5MbLr5YZ33OAjO+6imK+y1GyZgs9W2INIPPqo2KMHPP7ofRe7n6Jp55OA73xRQXxcTBofznLwR3O8UWeTARQGUPO+/YMrffuH+IX/qZX9qwP5eOBJze+o9G0Cn7N7GP8rK49OvD+p+RykUjz6Nv4HkEphc073MP6HXCbogVy4a98+SI7cT57/kftRU359KoM/v5UrPtfzZKL07ZPaMLrifft2Vgx1V7aTveKH/15tjubp2z/Hkf+zX/+jNItWfn3/p358KeBzPc8lSt9mImUMwfv21atk+5mmTCcNfvjvrfH4vjGA0tBxcwMYxPfvnObb15+bH+r3giwMoLqvf9/+URXDryLZzrq5IWOuTAA=",x7="/assets/lavastica-BcLuTbm2.webp",Ig=[{src:h7,alt:"Tiqets"},{src:rh,alt:"Primus Wafer Paper"},{src:zo,alt:"Intermax"},{src:g7,alt:"Driessen"},{src:m7,alt:"Delarange Cosmetics"},{src:p7,alt:"B&A"},{src:f7,alt:"Built By Nature"},{src:b7,alt:"Eqwal Ability"},{src:v7,alt:"Idalko"},{src:k7,alt:"iTrainee"},{src:ov,alt:"LifeWatcher",hideOnDark:!0},{src:w7,alt:"ADHD Centraal"},{src:x7,alt:"Lavastica International"}],Wo=({compact:e=!1,slim:n=!1})=>{const{t}=Y();return e?r.jsxs("section",{className:`relative bg-white overflow-hidden border-y border-midnight/[0.06] ${n?"py-4":"py-8 md:py-10"}`,children:[r.jsx("div",{"aria-hidden":"true",className:"absolute top-0 left-0 right-0 h-px bg-gradient-to-r from-transparent via-turquoise/40 to-transparent"}),r.jsx("div",{"aria-hidden":"true",className:"absolute bottom-0 left-0 right-0 h-px bg-gradient-to-r from-transparent via-turquoise/40 to-transparent"}),r.jsxs("div",{className:`max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20 ${n?"md:flex md:items-center md:gap-8":""}`,children:[r.jsx("p",{className:`text-center text-[11px] md:text-[12px] uppercase tracking-[0.14em] text-[#0F1923]/70 font-semibold animate-fade-in-up ${n?"mb-3 md:mb-0 md:shrink-0":"mb-5"}`,children:t("trustedBy.titleCompact")}),r.jsxs("div",{className:`relative overflow-hidden ${n?"md:flex-1":""}`,children:[r.jsx("div",{className:"absolute left-0 top-0 bottom-0 w-20 bg-gradient-to-r from-white to-transparent z-10"}),r.jsx("div",{className:"absolute right-0 top-0 bottom-0 w-20 bg-gradient-to-l from-white to-transparent z-10"}),r.jsx("div",{className:"flex animate-scroll-left items-center w-max gap-12 min-h-[28px] sm:min-h-[32px]",children:(()=>{const i=Ig.filter(a=>!a.hideOnDark);return[...i,...i].map((a,o)=>r.jsx("img",{src:a.src,alt:a.alt,loading:"lazy",decoding:"async",width:160,height:28,className:"h-6 sm:h-7 w-auto object-contain opacity-70 hover:opacity-100 transition-all duration-300 grayscale hover:grayscale-0"},o))})()})]})]})]}):r.jsx("section",{className:"py-10 md:py-14 bg-white border-y border-white/[0.08] overflow-hidden",children:r.jsxs("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20",children:[r.jsx("p",{className:"text-center text-[13px] uppercase tracking-[0.1em] text-[#0F1923]/70 mb
13594-8 font-medium animate-fade-in-up",children:t("trustedBy.title")}),r.jsxs("div",{className:"relative overflow-hidden",children:[r.jsx("div",{className:"absolute left-0 top-0 bottom-0 w-20 bg-gradient-to-r from-white to-transparent z-10"}),r.jsx("div",{className:"absolute right-0 top-0 bottom-0 w-20 bg-gradient-to-l from-white to-transparent z-10"}),r.jsx("div",{className:"flex animate-scroll-left items-center w-max gap-14 min-h-[32px]",children:[...Ig,...Ig].map((i,a)=>r.jsx("img",{src:i.src,alt:i.alt,loading:"lazy",decoding:"async",width:160,height:32,className:"h-6 sm:h-8 w-auto object-contain opacity-80 hover:opacity-100 transition-all duration-300 grayscale hover:grayscale-0"},a))})]})]})})},sv="/assets/rapportage-dashboard-DfnhxOek.png",JA="/assets/consolidatie-realtime-BYILmB6m.png",y7=["virtualController","reporting","consolidation","budgetterenCashflow"],j7=[null,sv,JA,zb],S7=()=>{const[e,n]=b.useState(0),{t,i18n:i}=Y(),a=i.language==="de"?"de":i.language!=="nl"?"en":"nl",o=B("prijzen",a),s=c=>{n(c)},l=y7.map((c,u)=>({label:t(`hero.tabs.${c}`),image:j7[u],alt:t(`hero.tabAlts.${c}`)})),d={title1:t("hero.title1"),title2:t("hero.title2"),subtitle:t("hero.subtitle")};return r.jsxs("section",{className:"relative overflow-hidden gradient-hero",children:[r.jsx(qK,{}),r.jsx("div",{className:"absolute top-0 left-0 right-0 h-[720px] pointer-events-none z-[2] overflow-hidden","aria-hidden":"true",style:{maskImage:"radial-gradient(ellipse 60% 55% at 50% 45%, transparent 0%, transparent 25%, black 80%), linear-gradient(to bottom, black 0%, black 75%, transparent 100%)",WebkitMaskImage:"radial-gradient(ellipse 60% 55% at 50% 45%, transparent 0%, transparent 25%, black 80%), linear-gradient(to bottom, black 0%, black 75%, transparent 100%)",maskComposite:"intersect",WebkitMaskComposite:"source-in"},children:r.jsxs("svg",{className:"absolute inset-0 w-full h-full",viewBox:"0 0 1200 800",preserveAspectRatio:"none",fill:"none",children:[r.jsxs("defs",{children:[r.jsxs("linearGradient",{id:"heroChartFill",x1:"0",y1:"800",x2:"0",y2:"0",children:[r.jsx("stop",{offset:"0%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0"}),r.jsx("stop",{offset:"100%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.12"})]}),r.jsxs("linearGradient",{id:"heroChartLine",x1:"0",y1:"1",x2:"1",y2:"0",children:[r.jsx("stop",{offset:"0%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.25"}),r.jsx("stop",{offset:"100%",stopColor:"hsl(var(--turquoise-light))",stopOpacity:"0.7"})]}),r.jsxs("filter",{id:"heroChartGlow",x:"-20%",y:"-20%",width:"140%",height:"140%",children:[r.jsx("feGaussianBlur",{stdDeviation:"5",result:"blur"}),r.jsxs("feMerge",{children:[r.jsx("feMergeNode",{in:"blur"}),r.jsx("feMergeNode",{in:"SourceGraphic"})]})]})]}),r.jsx("path",{d:"M 0 720 C 200 680, 380 620, 560 540 C 740 460, 900 360, 1060 240 C 1130 188, 1170 140, 1200 100 L 1200 800 L 0 800 Z",fill:"url(#heroChartFill)"}),r.jsx("path",{d:"M 0 720 C 200 680, 380 620, 560 540 C 740 460, 900 360, 1060 240 C 1130 188, 1170 140, 1200 100",stroke:"url(#heroChartLine)",strokeWidth:"2",strokeLinecap:"round",filter:"url(#heroChartGlow)"}),[{cx:0,cy:720},{cx:287.5,cy:645},{cx:560,cy:540},{cx:817.5,cy:405},{cx:1060,cy:240},{cx:1145,cy:165.5},{cx:1200,cy:100}].map((c,u)=>r.jsx("circle",{cx:c.cx,cy:c.cy,r:"3",fill:"hsl(var(--turquoise-light))",opacity:"0.45"},u))]})}),r.jsxs("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20 pt-10 md:pt-16 pb-4 relative z-10 flex flex-col items-center text-center",children:[r.jsxs("h1",{className:"text-[32px] md:text-[56px] font-extrabold leading-[1.1] tracking-[-0.02em] text-white mb-7 max-w-5xl animate-fade-in-up",children:[d.title1,r.jsx("br",{}),r.jsx("span",{className:"text-gradient-multi",children:d.title2})]}),r.jsx("p",{className:"text-lg text-white/80 leading-relaxed whitespace-pre-line mb-8 max-w-[640px] animate-fade-in-up",style:{animationDelay:"100ms"},children:d.subtitle}),r.jsx("div",{className:"flex flex-wrap items-center justify-center gap-x-2 gap-y-1 mb-10 animate-fade-in-up",style:{animationDelay:"130ms"},children:t("hero.featureList",{returnObjects:!0}).map(c=>r.jsxs("span",{className:"inline-flex items-center gap-1.5 text-sm font-medium text-white/90",children:[r.jsx(_e,{className:"h-3.5 w-3.5 text-turquoise",strokeWidth:2.5}),c]},c))}),r.jsxs("div",{className:"flex flex-col sm:flex-row items-center gap-4 mb-3 animate-fade-in-up",style:{animationDelay:"150ms"},children:[r.jsx(_,{to:B("planDemo",a),children:r.jsxs("button",{className:"btn-primary flex items-center gap-2",children:[t("hero.cta")," ",r.jsx(re,{className:"h-4 w-4"})]})}),r.jsx(_,{to:B("liveWebinar",a),children:r.jsx("button",{className:"btn-secondary flex items-center gap-2",children:t("hero.ctaWebinar")})})]}),r.jsx("p",{className:"text-sm text-white/70 mb-8 max-w-xl animate-fade-in-up",style:{animationDelay:"250m
13594s"},children:r.jsx(xF,{i18nKey:"hero.trialReassurance",components:{1:r.jsx(_,{to:o,className:"text-orange font-semibold underline underline-offset-2 hover:opacity-90"})}})})]}),r.jsx("div",{className:"relative z-10",children:r.jsx(Wo,{compact:!0})}),r.jsx("div",{className:"mb-10 md:mb-12 relative z-10",children:r.jsx(av,{})}),r.jsx("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20 pb-16 relative z-10",children:r.jsxs("div",{className:"relative w-full max-w-5xl mx-auto animate-fade-in-up",style:{animationDelay:"250ms"},children:[r.jsx("div",{className:"flex items-center justify-center gap-1 mb-3 overflow-x-auto",children:l.map((c,u)=>r.jsxs("button",{onClick:()=>s(u),className:`relative px-4 py-2 text-sm font-medium transition-all duration-200 rounded-lg whitespace-nowrap ${e===u?"text-white bg-white/[0.1]":"text-warm-gray hover:text-white"}`,children:[c.label,e===u&&r.jsx(Dt.div,{className:"absolute bottom-0 left-2 right-2 h-[2px] bg-turquoise rounded-full",layoutId:"activeTab",transition:{type:"spring",stiffness:400,damping:30}})]},c.label))}),r.jsx("div",{className:"flex items-center bg-[#e8e8ed] rounded-t-xl px-4 py-2.5",children:r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"w-3 h-3 rounded-full bg-[#ff5f57]"}),r.jsx("span",{className:"w-3 h-3 rounded-full bg-[#febc2e]"}),r.jsx("span",{className:"w-3 h-3 rounded-full bg-[#28c840]"})]})}),r.jsx("div",{className:"overflow-hidden rounded-b-xl bg-white",style:{boxShadow:"0 24px 64px rgba(0,0,0,0.5)"},children:r.jsx("div",{className:"relative",style:{aspectRatio:"16/9"},children:l.map((c,u)=>r.jsx(Dt.div,{className:"absolute inset-0 w-full h-full",initial:!1,animate:{opacity:e===u?1:0},transition:{duration:.5,ease:"easeInOut"},style:{pointerEvents:e===u?"auto":"none"},children:u===0?r.jsx(u7,{}):r.jsx("img",{src:c.image,alt:c.alt,width:1600,height:900,className:"absolute inset-0 w-full h-full object-cover object-top",loading:"eager",decoding:"async"})},u))})}),r.jsx("div",{className:"absolute bottom-0 left-0 right-0 h-10 bg-gradient-to-t from-midnight/70 to-transparent rounded-b-xl"})]})})]})},z7="/assets/founders-team-Dq2CJ8BA.jpg",A7=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl";return r.jsx("section",{className:"py-20 md:py-28 bg-background relative overflow-hidden",children:r.jsx("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20 relative z-10",children:r.jsxs("div",{className:"grid md:grid-cols-2 gap-10 md:gap-14 items-center",children:[r.jsxs("div",{className:"relative animate-fade-in-left",children:[r.jsx("div",{className:"absolute -inset-4 bg-turquoise/10 rounded-3xl blur-2xl","aria-hidden":"true"}),r.jsx("div",{className:"relative rounded-2xl overflow-hidden shadow-xl border border-border",children:r.jsx("img",{src:z7,alt:e("teamStrip.alt","De oprichters van Smartbooks"),className:"w-full h-auto object-cover",loading:"lazy",decoding:"async",width:1600,height:1067})})]}),r.jsxs("div",{className:"animate-fade-in-right",style:{animationDelay:"100ms"},children:[r.jsx("span",{className:"eyebrow-badge",children:e("teamStrip.eyebrow","Over ons")}),r.jsx("h2",{className:"font-display text-3xl md:text-4xl font-bold text-foreground mt-4 leading-tight tracking-tight",children:e("teamStrip.title","Gebouwd door mensen die finance écht kennen")}),r.jsx("p",{className:"text-muted-foreground text-base md:text-lg mt-4 leading-relaxed",children:e("teamStrip.body","Smartbooks is opgericht door een team met decennia ervaring in EPM, controlling en SaaS. Geen gezichtsloze tool. Je werkt met mensen die het vak kennen en eerder bewezen producten bouwden voor concerns als Akzo Nobel, Philips, KPN en KLM.")}),r.jsxs(_,{to:B("overOns",t),className:"inline-flex items-center gap-2 text-turquoise hover:text-turquoise-light text-sm font-medium mt-6 transition-colors",children:[e("teamStrip.cta","Maak kennis met het team"),r.jsx(re,{className:"h-4 w-4"})]})]})]})})})},C7=[$2,fo,vo,tS],E7=["spreadsheets","manualWork","errors","knowledge"],N7=()=>{const{t:e}=Y(),n=E7.map((t,i)=>({icon:C7[i],title:e(`painPoints.items.${t}.title`),description:e(`painPoints.items.${t}.description`)}));return r.jsxs("section",{className:"py-20 md:py-28 bg-surface relative overflow-hidden border-t border-white/[0.04]",children:[r.jsx("div",{"aria-hidden":"true",className:"absolute -top-40 right-0 w-[700px] h-[700px] rounded-full blur-3xl op
13594acity-[0.10] pointer-events-none",style:{background:"radial-gradient(circle, hsl(var(--orange)) 0%, transparent 70%)"}}),r.jsx("div",{"aria-hidden":"true",className:"absolute -bottom-40 -left-32 w-[600px] h-[600px] rounded-full blur-3xl opacity-[0.06] pointer-events-none",style:{background:"radial-gradient(circle, hsl(var(--turquoise)) 0%, transparent 70%)"}}),r.jsx("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20 relative z-10",children:r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-10 lg:gap-16",children:[r.jsxs("div",{className:"lg:col-span-5 lg:sticky lg:top-28 lg:self-start animate-fade-in-up",children:[r.jsx("span",{className:"eyebrow-badge",children:e("painPoints.eyebrow")}),r.jsxs("h2",{className:"text-[32px] md:text-[48px] font-bold leading-[1.05] tracking-[-0.02em] text-white mt-5",children:[e("painPoints.title")," ",r.jsx("span",{className:"text-gradient-multi",children:e("painPoints.titleHighlight")})]}),r.jsx("p",{className:"text-secondary mt-5 text-lg leading-relaxed max-w-md",children:e("painPoints.subtitle")})]}),r.jsx("div",{className:"lg:col-span-7 grid grid-cols-1 sm:grid-cols-2 gap-5",children:n.map((t,i)=>r.jsxs("div",{className:"pain-card group p-7 md:p-8 animate-fade-in-up",style:{animationDelay:`${i*80}ms`},children:[r.jsx("div",{className:"w-11 h-11 rounded-lg bg-orange/10 flex items-center justify-center mb-5",children:r.jsx(t.icon,{className:"h-5 w-5 text-orange",strokeWidth:1.75})}),r.jsx("h3",{className:"text-[19px] md:text-[21px] font-semibold leading-[1.3] tracking-[-0.01em] text-white mb-3",children:t.title}),r.jsx("p",{className:"text-white/75 text-[15px] leading-[1.65]",children:t.description})]},t.title))})]})})]})},I7=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl",i=e("aiControllerBlock.capabilities",{returnObjects:!0}),a=e("aiControllerBlock.fundamentPillars",{returnObjects:!0}),o=[{icon:Nl,title:e("aiControllerBlock.valueProps.truth.title"),description:e("aiControllerBlock.valueProps.truth.description")},{icon:X2,title:e("aiControllerBlock.valueProps.auditable.title"),description:e("aiControllerBlock.valueProps.auditable.description")},{icon:nS,title:e("aiControllerBlock.valueProps.control.title"),description:e("aiControllerBlock.valueProps.control.description")}];return r.jsxs("section",{className:"py-20 md:py-28 bg-[#0F1923] dark-surface relative overflow-hidden",children:[r.jsx("div",{"aria-hidden":"true",className:"absolute -top-40 -right-40 w-[600px] h-[600px] rounded-full blur-3xl op
13594acity-[0.08] pointer-events-none",style:{background:"radial-gradient(circle, hsl(190 100% 42%) 0%, transparent 70%)"}}),r.jsx("div",{"aria-hidden":"true",className:"absolute -bottom-40 -left-40 w-[500px] h-[500px] rounded-full blur-3xl opacity-[0.06] pointer-events-none",style:{background:"radial-gradient(circle, hsl(28 100% 50%) 0%, transparent 70%)"}}),r.jsxs("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20 relative z-10",children:[r.jsxs("div",{className:"text-center max-w-[760px] mx-auto mb-14 md:mb-18",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-[#00B4D8] mb-4 block",children:e("aiControllerBlock.eyebrow")}),r.jsx("h2",{className:"text-[32px] md:text-[48px] font-bold leading-[1.05] tracking-[-0.02em] text-white",children:e("aiControllerBlock.title")}),r.jsx("p",{className:"text-[17px] md:text-lg text-white/75 leading-relaxed mt-5",children:e("aiControllerBlock.subtitle")})]}),r.jsxs("div",{className:"max-w-[900px] mx-auto mb-14 md:mb-18",children:[r.jsxs("div",{className:"rounded-[28px] border border-[#00B4D8]/40 bg-[#162232] p-5 md:p-6 shadow-2xl shadow-black/20",children:[r.jsxs("div",{className:"flex items-center gap-2 mb-5",children:[r.jsx(Jt,{className:"h-4 w-4 text-[#00B4D8]"}),r.jsx("span",{className:"text-sm font-semibold text-[#00E5FF]",children:e("aiControllerBlock.alexCardTitle")})]}),r.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-3",children:i.map((s,l)=>r.jsxs("div",{className:"rounded-2xl border border-[#00B4D8]/25 bg-[#0F1923] p-4 md:p-5 hover:border-[#00B4D8]/50 transition-colors text-center",children:[r.jsx("h4",{className:"text-sm font-semibold text-white mb-2",children:s.title}),r.jsx("p",{className:"text-[12px] leading-[1.5] text-white/65",children:s.description})]},l))})]}),r.jsxs("div",{className:"flex items-center justify-center gap-2 py-3",children:[r.jsx(eg,{className:"h-4 w-4 text-[#00B4D8]"}),r.jsx("span",{className:"text-sm font-medium text-[#00B4D8]",children:e("aiControllerBlock.contextLabel")})]}),r.jsxs("div",{className:"rounded-[28px] border border-white/10 bg-[#162232] p-5 md:p-6 shadow-2xl shadow-black/20",children:[r.jsx("h3",{className:"text-sm font-semibold text-white mb-5",children:e("aiControllerBlock.fundamentTitle")}),r.jsx("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 mb-5",children:a.map((s,l)=>r.jsxs("div",{className:"rounded-2xl border border-white/10 bg-[#0F1923] p-4 md:p-5 hover:border-[#00B4D8]/30 transition-colors text-center",children:[r.jsx("h4",{className:"text-sm font-semibold text-white mb-2",children:s.title}),r.jsx("p",{className:"text-[12px] leading-[1.5] text-white/65",children:s.description})]},l))}),r.jsx("p",{className:"text-center text-[13px] text-white/60 max-w-xl mx-auto",children:e("aiControllerBlock.fundamentFootnote")})]}),r.jsxs("div",{className:"flex items-center justify-center gap-1 py-3",children:[r.jsx(eg,{className:"h-4 w-4 text-[#00B4D8]"}),r.jsx(eg,{className:"h-4 w-4 text-[#00B4D8]"})]}),r.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[r.jsxs("div",{className:"rounded-2xl border border-white/10 bg-[#0F1923] p-5 text-center",children:[r.jsx("h4",{className:"text-xs font-bold uppercase tracking-wider text-white/80 mb-1.5",children:e("aiControllerBlock.dataSources.accounting")}),r.jsx("p",{className:"text-[12px] text-white/55",children:e("aiControllerBlock.dataSources.accountingDesc")})]}),r.jsxs("div",{className:"rounded-2xl border border-white/10 bg-[#0F1923] p-5 text-center",children:[r.jsx("h4",{className:"text-xs font-bold uppercase tracking-wider text-white/80 mb-1.5",children:e("aiControllerBlock.dataSources.operational")}),r.jsx("p",{className:"text-[12px] text-white/55",children:e("aiControllerBlock.dataSources.operationalDesc")})]})]})]}),r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5 max-w-[1000px] mx-auto mb-12",children:o.map((s,l)=>r.jsxs("div",{className:"flex gap-3 p-5",children:[r.jsx(s.icon,{className:"h-5 w-5 text-[#00B4D8] shrink-0 mt-0.5",strokeWidth:1.75}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-base font-semibold text-white mb-1.5",children:s.title}),r.jsx("p",{className:"text-[14px] leading-[1.6] text-white/65",children:s.description})]})]},l))}),r.jsxs("div",{className:"flex flex-col items-center gap-4",children:[r.jsx(_,{to:B("planDemo",t),children:r.jsxs("button",{className:"btn-primary flex items-center gap-2 px-8 py-4 text-base",children:[e("aiControllerBlock.ctaPrimary")," ",r.jsx(re,{className:"h-4 w-4"})]})}),r.jsx(_,{to:B("virtueleController",t),children:r.jsx("span",{className:"text-white/70 hover:text-white underline underline-offset-4 transition-colors",children:e("aiControllerBlock.ctaSecondary")})})]})]})]})},jy={"Karel van den Bos":zo,"Marcel Steenbrink":rh},P7=["step1","step2","step3"],T7=()=>{const{t:e}=Y(),n=P7.map(a=>({label:e(`steps.${a}.label`),title:e(`steps.${a}.title`),description:e(`steps.${a}.description`)})),t=e("steps.quotes",{returnObjects:!0}),i=Array.isArray(t)?t:[];return r.jsxs("section",{className:"py-20 md:py-28 bg-midnight relative overflow-hidden border-t border-white/[0.04]",children:[r.jsx("div",{"aria-hidden":"true",className:"absolute -top-32 -left-32 w-[600px] h-[600px] rounded-full blur-3xl op
13594acity-[0.06] pointer-events-none",style:{background:"radial-gradient(circle, hsl(var(--orange)) 0%, transparent 70%)"}}),r.jsx("div",{"aria-hidden":"true",className:"absolute -bottom-40 right-0 w-[600px] h-[600px] rounded-full blur-3xl opacity-[0.05] pointer-events-none",style:{background:"radial-gradient(circle, hsl(var(--turquoise)) 0%, transparent 70%)"}}),r.jsxs("div",{className:"max-w-[1280px] mx-auto px-5 md:px-10 lg:px-16 relative z-10",children:[r.jsxs("div",{className:"max-w-3xl mb-16 md:mb-20 animate-fade-in-up",children:[r.jsx("span",{className:"eyebrow-badge",children:e("steps.eyebrow")}),r.jsx("h2",{className:"text-[32px] md:text-[48px] font-bold leading-[1.1] tracking-[-0.02em] text-white mt-5",children:e("steps.title")}),r.jsx("p",{className:"text-secondary mt-5 text-lg leading-relaxed",children:e("steps.subtitle")})]}),r.jsxs("div",{className:"mb-12 md:mb-16 relative overflow-hidden rounded-2xl border border-orange/25 bg-gradient-to-br from-orange/[0.08] via-orange/[0.04] to-transparent p-6 md:p-8 animate-fade-in-up",style:{animationDelay:"50ms"},children:[r.jsx("div",{"aria-hidden":"true",className:"absolute -top-20 -right-20 w-64 h-64 rounded-full blur-3xl op
13594acity-40 pointer-events-none",style:{background:"radial-gradient(circle, hsl(var(--orange)) 0%, transparent 70%)"}}),r.jsxs("div",{className:"relative flex flex-col md:flex-row md:items-start gap-5 md:gap-6",children:[r.jsx("div",{className:"shrink-0 w-12 h-12 rounded-xl bg-orange/15 border border-orange/30 flex items-center justify-center",children:r.jsx(lD,{className:"h-6 w-6 text-orange"})}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.16em] text-orange",style:{fontFamily:"'JetBrains Mono', monospace"},children:e("steps.trialBadge.label")}),r.jsx("h3",{className:"text-[20px] md:text-[24px] font-bold leading-[1.25] tracking-[-0.015em] text-white mt-2",children:e("steps.trialBadge.title")}),r.jsx("p",{className:"text-secondary text-[15px] md:text-base leading-relaxed mt-3 max-w-3xl",children:e("steps.trialBadge.description")})]})]})]}),r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-8 md:gap-6 lg:gap-10",children:n.map((a,o)=>r.jsxs("div",{className:"relative flex flex-col pt-8 border-t border-white/10 animate-fade-in-up",style:{animationDelay:`${100+o*120}ms`},children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.16em] text-orange mb-4",style:{fontFamily:"'JetBrains Mono', monospace"},children:a.label}),r.jsx("h3",{className:"text-[22px] md:text-[24px] font-bold leading-[1.2] tracking-[-0.015em] text-white mb-3",children:a.title}),r.jsx("p",{className:"text-secondary text-[15px] md:text-base leading-relaxed",children:a.description})]},a.title))}),r.jsxs("div",{className:"mt-12 md:mt-14 flex flex-col items-start gap-3 animate-fade-in-up",style:{animationDelay:"150ms"},children:[r.jsx("a",{href:"https://login.smartbooks.ai/u/signup?state=hKFo2SBMMWtrMThHSDBhcm1mOWtKOS1odHp1cmR3VGNpUjJDcaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEt1U1I4NUNGV0R5VDdlb1Q5Z3dJMG10dUYwTzZreUdDo2NpZNkgcjBlWG5FcG5EZngwNzd2dXI1N3hsS0o3dTVGQnNsaTE",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-6 py-3 rounded-full bg-orange text-white font-semibold hover:opacity-90 transition-opacity",children:e("steps.trialCta")}),r.jsx("p",{className:"text-sm text-muted-foreground",children:e("steps.trialCtaSub")})]}),r.jsx("p",{className:"mt-8 md:mt-10 max-w-3xl text-sm md:text-[15px] text-muted-foreground leading-relaxed animate-fade-in-up",style:{animationDelay:"200ms"},children:e("steps.flexNote")}),r.jsx("div",{className:"mt-16 md:mt-20 grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-10 max-w-6xl",children:i.map((a,o)=>r.jsxs("figure",{className:"relative rounded-2xl border border-white/10 bg-white/[0.02] backdrop-blur-sm p-8 md:p-10 flex flex-col animate-fade-in-up",style:{animationDelay:`${100+o*100}ms`},children:[r.jsx(wi,{className:"absolute top-6 right-6 h-10 w-10 text-orange/15"}),r.jsx("div",{className:"flex gap-1 mb-5",children:Array.from({length:5}).map((s,l)=>r.jsx(Vu,{className:"h-5 w-5 fill-orange text-orange"},l))}),r.jsxs("blockquote",{className:"text-xl md:text-2xl text-white leading-[1.45] font-medium tracking-[-0.005em] flex-1",children:['"',a.quote,'"']}),r.jsxs("figcaption",{className:"mt-7 pt-6 border-t border-white/10 flex items-center gap-4",children:[jy[a.author]&&r.jsx("div",{className:"h-10 w-auto shrink-0",children:r.jsx("img",{src:jy[a.author],alt:a.role,className:"h-full w-auto object-contain opacity-80",loading:"lazy"})}),r.jsxs("div",{children:[r.jsx("div",{className:"font-semibold text-white text-base",children:a.author}),r.jsx("div",{className:"text-secondary text-sm",children:a.role})]})]})]},a.author))})]})]})},D7=()=>{const{i18n:e}=Y(),n=e.language?.startsWith("de")?"de":e.language?.startsWith("en")?"en":"nl",t=je("whitepapers")[n==="de"?"de":n==="en"?"en":"nl"],i={nl:{eyebrow:"Gratis whitepaper",title:"Best-in-class Finance: het draaiboek voor 2026",cta:"Download whitepaper",bullets:["Benchmark maandafsluiting & rapportage","7 valkuilen voor controllers in 2026","Praktisch stappenplan van Excel naar Finance OS"]},en:{eyebrow:"Free whitepaper",title:"Best-in-class Finance: the playbook for 2026",cta:"Download whitepaper",bullets:["Benchmark monthly close & reporting","7 pitfalls controllers avoid in 2026","Step-by-step from Excel to Finance OS"]},de:{eyebrow:"Kostenloses Whitepaper",title:"Best-in-class Finance: das Drehbuch für 2026",cta:"Whitepaper herunterladen",bullets:["Benchmark Monatsabschluss & Reporting","7 Fallstricke für Controller im Jahr 2026","Praktischer Fahrplan von Excel zum Finance OS"]}}[n],a=i.bullets;return r.jsx("section",{className:"relative py-14 md:py-16 section-alt border-y border-midnight/[0.06]",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsx("div",{className:"max-w-5xl mx-auto rounded-2xl border border-turquoise/20 bg-white p-6 md:p-8 shadow-[0_8px_28px_-12px_rgba(15,25,35,0.12)] animate-fade-in-up",children:r.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-[auto_1fr_auto] gap-6 md:gap-8 items-center",children:[r.jsx("div",{className:"w-12 h-12 rounded-xl bg-turquoise/10 border border-turquoise/30 flex items-center justify-center shrink-0",children:r.jsx(Nl,{className:"h-5 w-5 text-turquoise"})}),r.jsxs("div",{className:"min-w-0",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-[0.14em] text-turquoise",children:i.eyebrow}),r.jsx("h3",{className:"font-display text-xl md:text-2xl font-bold leading-tight tracking-[-0.01em] text-foreground mt-1 mb-3",children:i.title}),r.jsx("ul",{className:"grid grid-cols-1 sm:grid-cols-3 gap-2 text-sm text-foreground
13594/85",children:a.map(o=>r.jsxs("li",{className:"flex items-start gap-2",children:[r.jsx(Yn,{className:"h-4 w-4 text-turquoise shrink-0 mt-0.5"}),r.jsx("span",{children:o})]},o))})]}),r.jsxs(_,{to:t,className:"inline-flex items-center gap-2 px-5 py-3 rounded-lg border border-turquoise/40 bg-turquoise/5 text-sm font-semibold text-turquoise hover:bg-turquoise hover:text-white hover:border-turquoise transition-all duration-200 shrink-0",children:[i.cta,r.jsx(re,{className:"h-4 w-4"})]})]})})})})},Fl=()=>r.jsx("defs",{children:r.jsx("pattern",{id:"fv-grid",width:"24",height:"24",patternUnits:"userSpaceOnUse",children:r.jsx("path",{d:"M 24 0 L 0 0 0 24",fill:"none",stroke:"hsl(var(--midnight) / 0.06)",strokeWidth:"1"})})}),Vo={viewBox:"0 0 480 260",className:"w-full h-full",xmlns:"http://www.w3.org/2000/svg"},B7=()=>r.jsxs("svg",{...Vo,children:[r.jsx(Fl,{}),r.jsx("rect",{width:"480",height:"260",fill:"url(#fv-grid)"}),[60,120,180].map((e,n)=>r.jsxs("g",{children:[r.jsx("rect",{x:"40",y:e-18,width:"120",height:"36",rx:"6",fill:"hsl(var(--midnight))",opacity:.85-n*.15}),r.jsx("rect",{x:"52",y:e-6,width:"60",height:"4",rx:"2",fill:"hsl(var(--turquoise))",opacity:"0.9"}),r.jsx("rect",{x:"52",y:e+4,width:"40",height:"3",rx:"1.5",fill:"white",opacity:"0.4"})]},e)),r.jsxs("g",{stroke:"hsl(var(--turquoise))",strokeWidth:"1.5",fill:"none",opacity:"0.7",children:[r.jsx("path",{d:"M160 60 Q220 60 250 120"}),r.jsx("path",{d:"M160 120 L250 120"}),r.jsx("path",{d:"M160 180 Q220 180 250 120"})]}),r.jsx("circle",{cx:"250",cy:"120",r:"6",fill:"hsl(var(--turquoise))"}),r.jsx("path",{d:"M260 120 L320 120",stroke:"hsl(var(--turquoise))",strokeWidth:"1.5",markerEnd:"url(#fv-arrow)"}),r.jsx("defs",{children:r.jsx("marker",{id:"fv-arrow",markerWidth:"8",markerHeight:"8",refX:"6",refY:"4",orient:"auto",children:r.jsx("path",{d:"M0,0 L8,4 L0,8 z",fill:"hsl(var(--turquoise))"})})}),r.jsx("rect",{x:"330",y:"60",width:"120",height:"120",rx:"8",fill:"hsl(var(--midnight))"}),r.jsx("rect",{x:"346",y:"76",width:"60",height:"4",rx:"2",fill:"white",opacity:"0.5"}),r.jsxs("g",{children:[r.jsx("rect",{x:"346",y:"120",width:"14",height:"44",rx:"2",fill:"hsl(var(--turquoise))",opacity:"0.5"}),r.jsx("rect",{x:"368",y:"100",width:"14",height:"64",rx:"2",fill:"hsl(var(--turquoise))",opacity:"0.7"}),r.jsx("rect",{x:"390",y:"110",width:"14",height:"54",rx:"2",fill:"hsl(var(--turquoise))",opacity:"0.85"}),r.jsx("rect",{x:"412",y:"92",width:"14",height:"72",rx:"2",fill:"hsl(var(--turquoise))"})]})]}),Sy=()=>{const e=[[60,200],[92,188],[124,192],[156,170],[188,176],[220,152]],n=[[220,152],[252,138],[284,130],[316,112],[348,104],[380,86],[412,70]],t=a=>a.map(o=>o.join(",")).join(" "),i=210;return r.jsxs("svg",{...Vo,children:[r.jsx(Fl,{}),r.jsx("rect",{width:"480",height:"260",fill:"url(#fv-grid)"}),[70,110,150,190].map(a=>r.jsx("line",{x1:"50",y1:a,x2:"60",y2:a,stroke:"hsl(var(--midnight) / 0.2)",strokeWidth:"1"},a)),r.jsx("line",{x1:"50",y1:i,x2:"430",y2:i,stroke:"hsl(var(--midnight) / 0.15)",strokeWidth:"1"}),r.jsx("path",{d:`M${t(e).split(" ").join(" L")} L220,${i} L60,${i} Z`,fill:"hsl(var(--midnight))",opacity:"0.08"}),r.jsx("polyline",{points:t(e),fill:"none",stroke:"hsl(var(--midnight))",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"}),e.map(([a,o])=>r.jsx("circle",{cx:a,cy:o,r:"3",fill:"hsl(var(--midnight))"},`a-${a}`)),r.jsx("line",{x1:"220",y1:"40",x2:"220",y2:i,stroke:"hsl(var(--midnight) / 0.25)",strokeWidth:"1",strokeDasharray:"3 3"}),r.jsx("path",{d:"M220,152 L252,138 L284,130 L316,112 L348,104 L380,86 L412,70 L412,100 L380,116 L348,134 L316,142 L284,160 L252,168 L220,182 Z",fill:"hsl(var(--turquoise))",opacity:"0.15"}),r.jsx("polyline",{points:t(n),fill:"none",stroke:"hsl(var(--turquoise))",strokeWidth:"2.5",strokeDasharray:"6 5",strokeLinecap:"round",strokeLinejoin:"round"}),n.slice(1).map(([a,o])=>r.jsx("circle",{cx:a,cy:o,r:"3",fill:"white",stroke:"hsl(var(--turquoise))",strokeWidth:"1.5"},`f-${a}`)),[60,92,124,156,188,220,252,284,316,348,380,412].map((a,o)=>r.jsx("line",{x1:a,y1:i,x2:a,y2:i+4,stroke:"hsl(var(--midnight) / 0.25)",strokeWidth:"1"},a)),r.jsxs("g",{children:[r.jsx("rect",{x:"60",y:"34",width:"74",height:"20",rx:"10",fill:"hsl(var(--m
13594idnight))",opacity:"0.08"}),r.jsx("line",{x1:"70",y1:"44",x2:"84",y2:"44",stroke:"hsl(var(--midnight))",strokeWidth:"2.5",strokeLinecap:"round"}),r.jsx("rect",{x:"90",y:"42",width:"38",height:"4",rx:"2",fill:"hsl(var(--midnight) / 0.6)"}),r.jsx("rect",{x:"142",y:"34",width:"84",height:"20",rx:"10",fill:"hsl(var(--turquoise))",opacity:"0.15"}),r.jsx("line",{x1:"152",y1:"44",x2:"166",y2:"44",stroke:"hsl(var(--turquoise))",strokeWidth:"2.5",strokeDasharray:"4 3",strokeLinecap:"round"}),r.jsx("rect",{x:"172",y:"42",width:"48",height:"4",rx:"2",fill:"hsl(var(--turquoise))"})]})]})},M7=()=>{const e=[{label:60,value:60,w:56,accent:!1,bold:!0},{label:70,value:50,w:44,accent:!1},{label:50,value:54,w:50,accent:!0,bold:!0},{label:80,value:46,w:36,accent:!1},{label:60,value:58,w:60,accent:!0,bold:!0}];return r.jsxs("svg",{...Vo,children:[r.jsx(Fl,{}),r.jsx("rect",{width:"480",height:"260",fill:"url(#fv-grid)"}),r.jsx("rect",{x:"60",y:"34",width:"360",height:"200",rx:"8",fill:"white",stroke:"hsl(var(--midnight) / 0.1)"}),r.jsx("rect",{x:"60",y:"34",width:"360",height:"32",rx:"8",fill:"hsl(var(--midnight))"}),r.jsx("rect",{x:"76",y:"48",width:"90",height:"5",rx:"2.5",fill:"white",opacity:"0.7"}),r.jsx("rect",{x:"320",y:"48",width:"40",height:"5",rx:"2.5",fill:"white",opacity:"0.4"}),r.jsx("rect",{x:"370",y:"48",width:"36",height:"5",rx:"2.5",fill:"hsl(var(--turquoise))",opacity:"0.9"}),r.jsx("rect",{x:"76",y:"78",width:"40",height:"4",rx:"2",fill:"hsl(var(--midnight) / 0.35)"}),r.jsx("rect",{x:"250",y:"78",width:"30",height:"4",rx:"2",fill:"hsl(var(--midnight) / 0.35)"}),r.jsx("rect",{x:"300",y:"78",width:"30",height:"4",rx:"2",fill:"hsl(var(--midnight) / 0.35)"}),r.jsx("rect",{x:"350",y:"78",width:"50",height:"4",rx:"2",fill:"hsl(var(--midnight) / 0.35)"}),r.jsx("line",{x1:"70",y1:"90",x2:"410",y2:"90",stroke:"hsl(var(--midnight) / 0.1)",strokeWidth:"1"}),e.map((n,t)=>{const i=104+t*26;return r.jsxs("g",{children:[n.accent&&r.jsx("rect",{x:"64",y:i-10,width:"352",height:"20",rx:"3",fill:"hsl(var(--turquoise))",opacity:"0.1"}),r.jsx("rect",{x:"76",y:i-3,width:n.label,height:"6",rx:"3",fill:n.accent?"hsl(var(--turquoise))":"hsl(var(--midnight))",opacity:n.bold?1:.55}),r.jsx("rect",{x:"250",y:i-2,width:"22",height:"5",rx:"2",fill:"hsl(var(--midnight) / 0.5)"}),r.jsx("rect",{x:"300",y:i-2,width:"22",height:"5",rx:"2",fill:"hsl(var(--midnight) / 0.5)"}),r.jsx("rect",{x:"350",y:i-4,width:"50",height:"8",rx:"2",fill:"hsl(var(--midnight) / 0.06)"}),r.jsx("rect",{x:"350",y:i-4,width:n.w,height:"8",rx:"2",fill:n.accent?"hsl(var(--turquoise))":"hsl(var(--midnight))",opacity:n.accent?1:.7})]},t)})]})},F7=()=>r.jsxs("svg",{...Vo,children:[r.jsx(Fl,{}),r.jsx("rect",{width:"480",height:"260",fill:"url(#fv-grid)"}),r.jsx("path",{d:"M50 200 L100 170 L150 180 L200 140 L250 150 L300 110 L350 120 L400 80 L430 70 L430 200 Z",fill:"hsl(var(--turquoise))",opacity:"0.18"}),r.jsx("polyline",{points:"50,200 100,170 150,180 200,140 250,150 300,110 350,120 400,80 430,70",fill:"none",stroke:"hsl(var(--turquoise))",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"}),r.jsx("line",{x1:"50",y1:"130",x2:"430",y2:"130",stroke:"hsl(var(--midnight) / 0.25)",strokeWidth:"1",strokeDasharray:"4 4"}),r.jsxs("g",{children:[r.jsx("rect",{x:"320",y:"40",width:"110",height:"44",rx:"8",fill:"hsl(var(--midnight))"}),r.jsx("rect",{x:"332",y:"52",width:"50",height:"4",rx:"2",fill:"white",opacity:"0.5"}),r.jsx("rect",{x:"332",y:"64",width:"76",height:"8",rx:"3",fill:"hsl(var(--turquoise))"})]}),r.jsx("circle",{cx:"430",cy:"70",r:"5",fill:"hsl(var(--turquoise))",stroke:"white",strokeWidth:"2"})]}),zy=()=>r.jsxs("svg",{...Vo,children:[r.jsx(Fl,{}),r.jsx("rect",{width:"480",height:"260",fill:"url(#fv-grid)"}),r.jsx("rect",{x:"50",y:"24",width:"380",height:"212",rx:"12",fill:"white",stroke:"hsl(var(--midnight) / 0.1)"}),r.jsx("rect",{x:"50",y:"24",width:"380",height:"34",rx:"12",fill:"hsl(var(--midnight))"}),r.jsx("rect",{x:"50",y:"46",width:"380",height:"12",fill:"hsl(var(--midnight))"}),r.jsx("circle",{cx:"68",cy:"41",r:"5",fill:"hsl(var(--turquoise))",opacity:"0.9"}),r.jsx("rect",{x:"80",y:"38",width:"70",height:"5",rx:"2.5",fill:"white",opacity:"0.75"}),r.jsx("circle",{cx:"412",cy:"41",r:"2",fill:"white",opacity:"0.4"}),r.jsx("circle",{cx:"404",cy:"41",r:"2",fill:"white",opacity:"0.4"}),r.jsx("circle",{cx:"396",cy:"41",r:"2",fill:"white",opacity:"0.4"}),r.jsx("circle",{cx:"74",cy:"86",r:"10",fill:"hsl(var(--turquoise))",opacity:"0.18"}),r.jsx("circle",{cx:"74",cy:"86",r:"4",fill:"hsl(var(--turquoise))"}),r.jsx("rect",{x:"92",y:"74",width:"180",height:"34",rx:"9",fill:"hsl(var(--m
13594idnight) / 0.06)"}),r.jsx("rect",{x:"104",y:"84",width:"140",height:"4",rx:"2",fill:"hsl(var(--midnight) / 0.45)"}),r.jsx("rect",{x:"104",y:"94",width:"100",height:"4",rx:"2",fill:"hsl(var(--midnight) / 0.3)"}),r.jsx("rect",{x:"200",y:"120",width:"208",height:"34",rx:"9",fill:"hsl(var(--midnight))"}),r.jsx("rect",{x:"214",y:"130",width:"160",height:"4",rx:"2",fill:"white",opacity:"0.7"}),r.jsx("rect",{x:"214",y:"140",width:"120",height:"4",rx:"2",fill:"white",opacity:"0.5"}),r.jsx("circle",{cx:"74",cy:"178",r:"10",fill:"hsl(var(--turquoise))",opacity:"0.18"}),r.jsx("circle",{cx:"74",cy:"178",r:"4",fill:"hsl(var(--turquoise))"}),r.jsx("rect",{x:"92",y:"164",width:"220",height:"38",rx:"9",fill:"hsl(var(--midnight) / 0.06)"}),r.jsx("rect",{x:"104",y:"174",width:"170",height:"4",rx:"2",fill:"hsl(var(--midnight) / 0.4)"}),r.jsx("rect",{x:"104",y:"186",width:"90",height:"6",rx:"3",fill:"hsl(var(--turquoise))"}),r.jsx("rect",{x:"64",y:"212",width:"352",height:"16",rx:"8",fill:"hsl(var(--midnight) / 0.05)",stroke:"hsl(var(--midnight) / 0.1)"}),r.jsx("rect",{x:"76",y:"218",width:"120",height:"4",rx:"2",fill:"hsl(var(--midnight) / 0.25)"}),r.jsx("circle",{cx:"402",cy:"220",r:"6",fill:"hsl(var(--turquoise))"})]}),R7=()=>r.jsxs("svg",{...Vo,children:[r.jsxs("defs",{children:[r.jsx("pattern",{id:"fv-grid-close",width:"24",height:"24",patternUnits:"userSpaceOnUse",children:r.jsx("path",{d:"M 24 0 L 0 0 0 24",fill:"none",stroke:"hsl(var(--midnight) / 0.06)",strokeWidth:"1"})}),r.jsx("marker",{id:"fv-arrow-close",markerWidth:"8",markerHeight:"8",refX:"6",refY:"4",orient:"auto",children:r.jsx("path",{d:"M0,0 L8,4 L0,8 z",fill:"hsl(var(--turquoise))"})})]}),r.jsx("rect",{width:"480",height:"260",fill:"url(#fv-grid-close)"}),[{x:50,done:!0},{x:160,done:!0},{x:270,done:!0},{x:380,done:!1,accent:!0}].map((e,n)=>r.jsxs("g",{children:[r.jsx("rect",{x:e.x,y:"90",width:"80",height:"80",rx:"10",fill:e.accent?"hsl(var(--midnight))":"white",stroke:"hsl(var(--midnight) / 0.1)"}),r.jsx("rect",{x:e.x+12,y:"104",width:"40",height:"4",rx:"2",fill:e.accent?"white":"hsl(var(--midnight) / 0.2)",opacity:e.accent?.6:1}),e.done?r.jsxs("g",{children:[r.jsx("circle",{cx:e.x+40,cy:"138",r:"14",fill:"hsl(var(--turquoise))",opacity:"0.18"}),r.jsx("path",{d:`M${e.x+33} 138 l5 5 l10 -10`,stroke:"hsl(var(--turquoise))",strokeWidth:"2.5",fill:"none",strokeLinecap:"round",strokeLinejoin:"round"})]}):r.jsxs("g",{children:[r.jsx("circle",{cx:e.x+40,cy:"138",r:"14",fill:"hsl(var(--turquoise))",opacity:"0.25"}),r.jsx("circle",{cx:e.x+40,cy:"138",r:"5",fill:"hsl(var(--turquoise))"})]}),n<3&&r.jsx("path",{d:`M${e.x+84} 130 L${e.x+106} 130`,stroke:"hsl(var(--turquoise))",strokeWidth:"1.5",markerEnd:"url(#fv-arrow-close)"})]},e.x))]}),O7={consolidation:B7,planning:Sy,budgetterenCashflow:Sy,reporting:M7,cashPlanning:F7,ai:zy,virtualController:zy,close:R7},_7=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl",i=lc.map(a=>({key:a,icon:fp[a],route:B(MF[a],t),title:e(`featureCategories.pillars.${a}`),description:e(`featureCategories.pillarDescriptions.${a}`),Visual:O7[a]}));return r.jsx("section",{className:"py-20 md:py-28 bg-white relative border-t border-midnight/[0.08] shadow-[inset_0_1px_0_0_hsl(var(--turquoise)/0.25)]",children:r.jsxs("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20",children:[r.jsxs("div",{className:"flex flex-col md:flex-row md:items-end md:justify-between gap-6 mb-14 animate-fade-in-up",children:[r.jsxs("div",{className:"max-w-2xl",children:[r.jsx("span",{className:"eyebrow-badge",children:e("features.eyebrow")}),r.jsx("h2",{className:"text-[32px] md:text-[48px] font-bold leading-[1.05] tracking-[-0.02em] text-white mt-5",children:e("features.title")}),r.jsx("p",{className:"text-secondary mt-5 text-lg leading-relaxed max-w-xl",children:e("features.subtitle")}),t==="nl"&&r.jsxs("p",{className:"text-secondary mt-3 text-base leading-relaxed max-w-xl",children:["Maandrapportage nog in Excel? Bekijk onze"," ",r.jsx(_,{to:B("lpRapportageSoftware",t),className:"text-turquoise font-semibold underline underline-offset-4 hover:text-turquoise-light transition-colors",children:"financiële rapportage software"}),". Groep met meerdere entiteiten? Bekijk onze"," ",r.jsx(_,{to:B("lpConsolidatieSoftware",t),className:"text-turquoise font-semibold underline underline-offset-4 hover:text-turquoise-light transition-colors",children:"consolidatie software"}),"."]})]}),r.jsxs(_,{to:B("functionaliteiten",t),className:"inline-flex items-center gap-2 text-turquoise font-semibold hover:text-turquoise-light transition-colors duration-200 shrink-0",children:[e("features.viewAll")," ",r.jsx(re,{className:"h-4 w-4"})]})]}),r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:i.map((a,o)=>r.jsx("div",{className:"animate-fade-in-up",style:{animationDelay:`${o*60}ms`},children:r.jsxs(_,{to:a.route,className:"group block bg-white rounded-2xl border border-midnight/[0.08] hover:border-turquoise/40 shadow-[0_1px_2px_rgba(15,25,35,0.04)] hover:shadow-[0_12px_32px_rgba(15,25,35,0.10)] transition-all duration-300 overflow-hidden h-full flex flex-col",children:[r.jsx("div",{className:"aspect-[480/260] w-full bg-[#F4F6F9] border-b border-midnight/[0.06] overflow-hidden",children:a.Visual?r.jsx(a.Visual,{}):null}),r.jsxs("div",{className:"p-6 md:p-7 flex flex-col flex-1",children:[r.jsxs("div",{className:"flex items-center justify-between gap-3 mb-3",children:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("div",{className:"w-9 h-9 rounded-lg bg-turquoise/15 flex items-center justify-center shrink-0",children:r.jsx(a.icon,{className:"h-[18px] w-[18px] text-turquoise",strokeWidth:1.75})}),r.jsx("h3",{className:"text-[18px] md:text-[20px] font-bold leading-[1.2] tracking-[-0.01em] text-white",children:a.title})]}),r.jsx(X4,{className:"h-4 w-4 text-white/30 group-hover:text-turquoise group-hover:translate-x-0.5 group-hover:-translate-y-0.5 transition-all duration-300 shrink-0"})]}),r.jsx("p",{className:"text-[15px] text-secondary leading-relaxed",children:a.description})]})]})},a.key))})]})})},L7="/assets/powerbi-CygQYYAn.png",W7="/assets/excel-D8YxHsFv.png",V7="/assets/looker-CEGkYtnz.png",ah="data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='a'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20269.65%2069'%3e%3cdefs%3e%3cstyle%3e.b,.c,.d{stroke-width:0px;}.c{fill:%232ca01c;}.d{fill:%23fff;}%3c/style%3e%3c/defs%3e%3cpath%20class='c'%20d='m30.77,61.54c16.99,0,30.77-13.78,30.77-30.77S47.76,0,30.77,0,0,13.78,0,30.77s13.77,30.77,30.77,30.77Z'/%3e%3cpath%20class='d'%20d='m20.51,18.8c-6.61,0-11.97,5.36-11.97,11.97s5.35,11.96,11.97,11.96h1.71v-4.44h-1.71c-4.15,0-7.52-3.37-7.52-7.52,0-4.15,3.37-7.52,7.52-7.52h4.11v23.25c0,2.45,1.99,4.44,4.44,4.44V18.8h-8.55,0Zm20.52,23.93c6.61,0,11.97-5.36,11.97-11.96s-5.35-11.96-11.97-11.96h-1.71v4.44h1.71c4.15,0,7.52,3.37,7.52,7.52s-3.37,7.52-7.52,7.52h-4.11V15.04c0-2.45-1.99-4.44-4.44-4.44v32.13h8.55s0,0,0,0Z'/%3e%3cpath%20class='b'%20d='m90.75,69h-4.76v-12.05h-.08c-1.23,1.9-3.65,3.09-6.31,3.09-5.79,0-9.36-4.6-9.36-10.15s3.81-10,9.24-10c3.49,0,5.63,1.7,6.58,3.21h.12v-2.66h4.56v28.56h0s0,0,0,0Zm-10.19-12.93c3.49,0,5.59-3.13,5.59-6.11s-2.1-6.19-5.59-6.19c-3.68,0-5.47,3.13-5.47,6.11,0,2.97,1.78,6.19,5.47,6.19h0Zm31.55,3.41h-4.52v-3.06h-.08c-.83,1.9-3.09,3.61-5.91,3.61-4.96,0-7.02-3.81-7.02-7.69v-11.9h4.76v10.55c0,2.26.51,5.07,3.57,5.07s4.44-2.62,4.44-5.15v-10.47h4.76v19.03s0,0,0,0Zm4.78-19.45h4.76v19.04h-4.76s0-19.04,0-19.04Zm22.55,5.69c-.75-1.07-2.38-1.87-3.93-1.87-3.49,0-5.24,3.13-5.24,6.11s1.79,6.11,5.39,6.11c1.47,0,3.09-.6,4.01-1.7l2.97,3.01c-1.59,1.7-4.21,2.66-7.02,2.66-5.63,0-10.31-3.73-10.31-10.07s4.6-10.07,10.19-10.07c2.78,0,5.67,1.11,7.18,2.97l-3.25,2.85h0Zm5.6-16.22h4.76v18.95h.12l7.22-8.01h6.11l-8.25,8.61,8.77,10.43h-6.3l-7.54-9.76h-.12v9.76h-4.76v-29.97h0Zm25.65,0v13.37h.12
13594c.99-1.23,2.89-2.97,6.39-2.97,5.43,0,9.24,4.36,9.24,10s-3.57,10.15-9.36,10.15c-2.66,0-5.24-1.23-6.54-3.41h-.08v2.86h-4.52v-29.99h4.76Zm5.43,14.28c-3.49,0-5.59,3.21-5.59,6.19s2.1,6.11,5.59,6.11c3.69,0,5.47-3.21,5.47-6.19s-1.78-6.11-5.47-6.11h0Zm22.72-3.89c5.75,0,10.35,4.01,10.35,10s-4.6,10.15-10.35,10.15-10.35-4.16-10.35-10.15,4.6-10,10.35-10Zm0,16.18c3.77,0,5.51-3.21,5.51-6.19s-1.74-6.11-5.51-6.11-5.51,3.13-5.51,6.11,1.74,6.19,5.51,6.19Zm22.78-16.18c5.75,0,10.35,4.01,10.35,10s-4.6,10.15-10.35,10.15-10.35-4.16-10.35-10.15,4.6-10,10.35-10Zm0,16.18c3.77,0,5.51-3.21,5.51-6.19s-1.74-6.11-5.51-6.11-5.51,3.13-5.51,6.11c0,2.97,1.74,6.19,5.51,6.19Zm13.23-26.57h4.76v18.95h.12l7.22-8.01h6.1l-8.24,8.61,8.76,10.43h-6.3l-7.54-9.76h-.12v9.76h-4.76v-29.97h0,0Zm31.71,16.02c-.83-1.11-2.42-2.06-4.16-2.06-1.5,0-3.06.56-3.06,2.07s1.47,1.87,4.12,2.5c2.82.68,6.15,1.94,6.15,5.67,0,4.64-3.77,6.35-7.93,6.35-2.93,0-5.99-1.11-7.82-3.13l3.13-2.93c1.03,1.35,2.82,2.38,4.88,2.38,1.39,0,3.06-.56,3.06-2.26,0-1.59-1.47-2.06-4.36-2.74-2.82-.68-5.63-1.82-5.63-5.39,0-4.25,3.81-6.06,7.58-6.06,2.73,0,5.59.95,7.14,2.89l-3.08,2.74h0ZM122.38,14.46c0,4.83,3.86,8.35,8.77,8.35s8.78-3.52,8.78-8.35V3.38h-4.76v10.52c0,2.6-1.74,4.35-4.03,4.35s-4.04-1.74-4.04-4.35V3.38h-4.75s.03,11.08.03,11.08Zm30.27-6.63h5.68v14.6h4.75V7.83h5.67V3.38h-16.1v4.45h0Zm-3.08-4.45h-4.75v19.06h4.75V3.38Zm-46.38,4.45h5.68v14.6h4.75V7.83h5.67V3.38h-16.09v4.45h0Zm-24.94-4.45h-4.75v19.06h4.75V3.38Zm22.44,7.97c0-4.83-3.87-8.35-8.78-8.35s-8.78,3.52-8.78,8.35v11.08h4.75v-10.52c0-2.6,1.74-4.35,4.03-4.35s4.03,1.74,4.03,4.35v10.52h4.75v-11.08s-.01,0-.01,0Z'/%3e%3c/svg%3e",Ay=[{labelKey:"integrations.groups.accounting",items:[{name:"Exact Online",domain:"exact.com"},{name:"Exact Globe",domain:"exact.com"},{name:"Twinfield",domain:"twinfield.com"},{name:"AFAS",domain:"afas.nl"},{name:"Odoo",domain:"odoo.com"},{name:"QuickBooks",domain:"quickbooks.intuit.com",logo:ah}]}],K7=e=>e?`https://img.logo.dev/${e}?token=pk_X-1ZO13GSgeOoUrIuJ6GMQ&size=80&format=png`:null,Id=({item:e})=>{const[n,t]=b.useState(!1),i=e.logo??K7(e.domain),a=i&&!n,o=e.name==="QuickBooks";return r.jsxs("div",{className:`flex items-center gap-3 rounded-xl glass-card hover:border-teal/30 transition-all duration-300 ${o?"h-14 px-4":"h-14 pl-2.5 pr-5"}`,children:[r.jsx("div",{className:`flex items-center justify-center rounded-md bg-white/95 shrink-0 overflow-hidden ${o?"h-11 min-w-36 px-4":"h-10 w-10"}`,children:a?r.jsx("img",{src:i,alt:`${e.name} logo`,loading:"lazy",width:112,height:40,className:o?"w-28 h-auto max-w-none object-contain":"h-full w-full object-contain p-1",onError:()=>t(!0)}):r.jsx("span",{className:"font-display font-bold text-midnight text-[12px]",children:e.name.charAt(0)})}),!o&&r.jsx("span",{className:"font-display font-bold text-foreground/80 text-base whitespace-nowrap",children:e.name})]})},Rl=({compact:e=!1,hideHeader:n=!1,accountingCaption:t,accountingHeading:i})=>{const{t:a}=Y(),o=[{icon:qa,key:"plugAndPlay"},{icon:Bo,key:"fastSetup"},{icon:yr,key:"secure"}];return e?r.jsx("section",{className:"py-14 bg-background overflow-hidden relative",children:r.jsxs("div",{className:"container mx-auto px-4 relative z-10 max-w-5xl",children:[r.jsxs("div",{className:"text-center mb-6 animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-3 block",children:a("integrations.eyebrow")}),r.jsx("p",{className:"text-muted-foreground text-base",children:a("integrations.compact",{defaultValue:"Koppelt direct met Exact Online, Exact Globe, Twinfield, AFAS en Odoo."})})]}),r.jsx("div",{className:"flex flex-wrap items-center justify-center gap-3 animate-fade-in-up",style:{animationDelay:"50ms"},children:Ay[0].items.map(s=>r.jsx(Id,{item:s},s.name))})]})}):r.jsxs("section",{className:"py-20 md:py-28 bg-surface overflow-hidden relative border-y border-white/[0.04]",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh"}),r.jsxs("div",{className:"container mx-auto px-4 relative z-10",children:[!n&&r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"text-center max-w-3xl mx-auto mb-12 animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-4 block",children:a("integrations.eyebrow")}),r.jsxs("h2",{className:"font-display text-2xl sm:text-4xl font-bold text-foreground tracking-tight mb-4",children:[a("integrations.title")," ",r.jsx("span",{className:"text-gradient-teal",children:a("integrations.titleHighlight")})]}),r.jsx("p",{className:"text-muted-foreground text-base sm:text-lg",children:a("integrations.subtitle")})]}),r.jsx("div",{className:"flex flex-wrap items-center justify-center gap-3 mb-12 animate-fade-in-up",style:{animationDelay:"100ms"},children:o.map(({icon:s,key:l})=>r.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 rounded-full glass-card border border-border text-sm text-foreground",children:[r.jsx(s,{className:"h-4 w-4 text-teal"}),r.jsx("span",{className:"font-medium",children:a(`integrations.badges.${l}`)})]},l))})]}),r.jsxs("div",{className:"space-y-8 max-w-5xl mx-auto",children:[Ay.map((s,l)=>r.jsxs("div",{className:"animate-fade-in-up",style:{animationDelay:`${50*l}ms`},children:[r.jsxs("div",{className:"text-center mb-4",children:[i&&l===0?r.jsx("h2",{className:"font-display text-xl md:text-2xl font-bold text-foreground tracking-tight",children:i}):r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground",children:a(s.labelKey)}),t&&l===0&&r.jsx("p",{className:"text-sm md:text-base text-muted-foreground max-w-2xl mx-auto mt-3",children:t})]}),r.jsx("div",{className:"flex flex-wrap items-center justify-center gap-3 max-w-4xl mx-auto",children:s.items.map(d=>r.jsx(Id,{item:d},d.name))})]},s.labelKey)),r.jsxs("div",{className:"animate-fade-in-up",style:{animationDelay:"100ms"},children:[r.jsx("div",{className:"text-center mb-4 max-w-2xl mx-auto px-4",children:r.jsx("p",{className:"text-sm text-muted-foreground",children:a("integrations.footnote")})}
13594),r.jsxs("div",{className:"max-w-4xl mx-auto space-y-4",children:[r.jsxs("div",{className:"text-center",children:[r.jsx("span",{className:"font-display text-4xl sm:text-5xl font-bold text-foreground leading-none",children:"300+"}),r.jsx("span",{className:"block text-xs uppercase tracking-[0.18em] text-muted-foreground mt-2",children:a("integrations.extra.label")})]}),r.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[r.jsxs("div",{className:"relative rounded-2xl glass-card p-6",children:[r.jsx("p",{className:"text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground text-center mb-4",children:a("integrations.groups.dataBi")}),r.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2.5",children:[{name:"PostgreSQL",domain:"postgresql.org"},{name:"Power BI",logo:L7},{name:"Excel",logo:W7},{name:"Tableau",domain:"tableau.com"},{name:"Looker",logo:V7},{name:"Snowflake",domain:"snowflake.com"}].map(s=>r.jsx(Id,{item:s},s.name))})]}),r.jsxs("div",{className:"relative rounded-2xl glass-card p-6",children:[r.jsx("p",{className:"text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground text-center mb-4",children:a("integrations.groups.systems")}),r.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2.5",children:[{name:"Salesforce",domain:"salesforce.com"},{name:"HubSpot",domain:"hubspot.com"},{name:"Zapier",domain:"zapier.com"},{name:"Make",domain:"make.com"},{name:"N8N",domain:"n8n.io"},{name:"Shopify",domain:"shopify.com"}].map(s=>r.jsx(Id,{item:s},s.name))})]})]}),r.jsx("p",{className:"text-center text-sm text-muted-foreground",children:a("integrations.extra.description")})]})]})]})]})]})},Ol=({items:e,eyebrow:n="Veelgestelde vragen",title:t="Antwoord op je vragen",subtitle:i,className:a=""})=>{const[o,s]=b.useState(0);return e.length===0?null:r.jsxs("section",{className:`py-20 sm:py-24 relative overflow-hidden bg-background ${a}`,children:[r.jsx("div",{className:"absolute inset-0 dot-grid opacity-15"}),r.jsxs("div",{className:"container mx-auto px-4 relative z-10",children:[r.jsxs("div",{className:"text-center mb-12 max-w-2xl mx-auto animate-fade-in-up",children:[n&&r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-4 block",children:n}),t&&r.jsx("h2",{className:"font-display text-3xl sm:text-4xl font-bold text-foreground tracking-tight",children:t}),i&&r.jsx("p",{className:"text-muted-foreground mt-4",children:i})]}),r.jsx("div",{className:"max-w-3xl mx-auto space-y-3",children:e.map((l,d)=>{const c=o===d;return r.jsxs("div",{style:{animationDelay:`${d*40}ms`},className:`glass-card rounded-2xl overflow-hidden transition-all duration-300 animate-fade-in-up ${c?"border-teal/40":"hover:border-teal/20"}`,children:[r.jsxs("button",{type:"button",onClick:()=>s(c?null:d),"aria-expanded":c,className:"w-full flex items-center justify-between gap-4 px-5 sm:px-6 py-4 sm:py-5 text-left",children:[r.jsx("span",{className:"font-display font-semibold text-foreground text-base sm:text-lg leading-snug",children:l.question}),r.jsx("span",{className:`shrink-0 h-8 w-8 rounded-full flex items-center justify-center transition-all duration-300 ${c?"bg-teal text-primary-foreground rotate-45":"bg-teal/10 text-teal"}`,children:r.jsx(sb,{className:"h-4 w-4"})})]}),r.jsx(Bl,{initial:!1,children:c&&r.jsx(Dt.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.25,ease:"easeOut"},className:"overflow-hidden",children:r.jsx("div",{className:"px-5 sm:px-6 pb-5 sm:pb-6 text-sm sm:text-[15px] text-muted-foreground leading-relaxed",children:l.answer})})})]},l.question)})})]})]})},q7="/assets/team-4--FAj7GLq.webp",XA=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl";return r.jsxs("section",{className:"py-20 md:py-28 relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-midnight via-surface to-midnight"}),r.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_60%_50%_at_50%_50%,rgba(0,180,216,0.06),transparent)]"}),r.jsx("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20 relative z-10",children:r.jsxs("div",{className:"grid lg:grid-cols-[5fr_6fr] items-center gap-10 lg:gap-14",children:[r.jsxs("div",{className:"relative rounded-2xl overflow-hidden border border-white/10 shadow-2xl aspect-[4/3] order-last lg:order-first animate-fade-in-left",children:[r.jsx("img",{src:q7,alt:e("ctaBottom.title"),loading:"lazy",className:"w-full h-full object-cover"}),r.jsx("div",{className:"absolute inset-0 bg-gradient-to-tr from-midnight/40 via-trans
13594parent to-transparent"})]}),r.jsxs("div",{className:"text-center lg:text-left animate-fade-in-up",children:[r.jsx("span",{className:"eyebrow-badge",children:e("ctaBottom.eyebrow")}),r.jsx("h2",{className:"text-[28px] md:text-[40px] font-bold leading-[1.2] tracking-[-0.015em] text-white mb-5 mt-4",children:e("ctaBottom.title")}),r.jsx("p",{className:"text-secondary mb-8 max-w-[580px] mx-auto lg:mx-0 text-lg leading-relaxed",children:e("ctaBottom.subtitle")}),r.jsxs("div",{className:"flex flex-col sm:flex-row items-center lg:items-start lg:justify-start justify-center gap-4",children:[r.jsx(_,{to:B("planDemo",t),children:r.jsxs("button",{className:"btn-primary flex items-center gap-2 text-lg px-8 py-4",children:[e("ctaBottom.cta")," ",r.jsx(re,{className:"h-5 w-5"})]})}),r.jsx("a",{href:"https://login.smartbooks.ai/u/signup?state=hKFo2SBMMWtrMThHSDBhcm1mOWtKOS1odHp1cmR3VGNpUjJDcaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEt1U1I4NUNGV0R5VDdlb1Q5Z3dJMG10dUYwTzZreUdDo2NpZNkgcjBlWG5FcG5EZngwNzd2dXI1N3hsS0o3dTVGQnNsaTE",target:"_blank",rel:"noopener noreferrer",children:r.jsx("button",{className:"btn-secondary flex items-center gap-2 text-lg px-8 py-4",children:e("ctaBottom.ctaTrial")})})]}),r.jsx("p",{className:"text-sm text-white/70 mt-5 max-w-[580px] mx-auto lg:mx-0 leading-relaxed",children:e("ctaBottom.trialReassurance")}),r.jsxs("p",{className:"text-sm text-white/70 mt-3 max-w-[580px] mx-auto lg:mx-0 leading-relaxed text-center lg:text-left",children:[e("ctaBottom.onboardingMeeting.prefix")," ",r.jsx(_,{to:B("onboardingMeeting",t),className:"font-semibold text-turquoise underline underline-offset-4 transition-colors hover:text-primary",children:e("ctaBottom.onboardingMeeting.link")})]})]})]})})]})},H7="/assets/smartbooks-logo-white-BQUQxfXu.png",U7="/assets/isae-3402-BtT5_GjL.png",ra={ratingValue:5,reviewCount:2,profileUrl:"https://www.google.com/search?q=Smartbooks+AI+Amsterdam"},Ne=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl",i=o=>B(o,t),a=[{title:e("footer.product"),links:[{label:e("footer.features"),href:i("functionaliteiten")},{label:e("footer.pricing"),href:i("prijzen")},{label:e("footer.integrations"),href:i("integraties")},{label:e("footer.whatsNew","Wat is er nieuw"),href:i("watIsNieuw")}]},{title:e("footer.company"),links:[{label:e("footer.aboutUs"),href:i("overOns")},{label:e("footer.knowledgeCenter"),href:i("kenniscentrum")},{label:e("footer.contact"),href:i("contact")}]},{title:e("footer.contact"),links:[{label:"[email protected]",href:"mailto:[email protected]"},{label:"+31 85 303 9670",href:"tel:+31853039670"},{label:"Haarlemmerweg 331A, 1051 LH Amsterdam",href:"https://maps.google.com/?q=Haarlemmerweg+331A+1051+LH+Amsterdam",external:!0},{label:"LinkedIn",href:"https://www.linkedin.com/company/smartbooks-ai",external:!0}]},{title:e("footer.integrations","Integraties"),links:[{label:"Exact Online",href:i("integratieExact")},{label:"Exact Globe",href:i("integratieExactGlobe")},{label:"Twinfield",href:i("integratieTwinfield")},{label:"AFAS",href:i("integratieAfas")},{label:"QuickBooks",href:i("integratieQuickbooks")},{label:"Odoo",href:i("integratieOdoo")},{label:e("footer.allIntegrations","Alle integraties"),href:i("integraties")}]}];return r.jsx("footer",{className:"bg-footer dark-surface border-t border-white/[0.06] pt-16 pb-8",children:r.jsxs("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20",children:[r.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-8 mb-12",children:[r.jsxs("div",{className:"col-span-2 lg:col-span-2",children:[r.jsx("img",{src:H7,alt:"Smartbooks",className:"h-8 w-auto mb-4"}),r.jsx("p",{className:"text-white/80 text-sm leading-relaxed max-w-xs mb-5",children:e("footer.tagline")}),r.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[r.jsx("img",{src:U7,alt:"ISAE 3402 Type II Certified",className:"h-10 w-auto bg-white/95 rounded px-2 py-1"}),r.jsx("span",{className:"text-white/70 text-xs leading-tight max-w-[140px]",dangerouslySetInnerHTML:{__html:e("footer.isaeCertified")}})]}),r.jsxs("a",{href:ra.profileUrl,target:"_blank",rel:"noopener noreferrer","aria-label":`Beoordeeld op Google met ${ra.ratingV
13594alue} van 5 sterren`,className:"mt-4 inline-flex items-center gap-2 rounded-md bg-white/[0.04] hover:bg-white/[0.08] border border-white/[0.08] px-3 py-2 transition-colors",children:[r.jsx("span",{className:"text-white/70 text-xs font-medium",children:e("footer.googleReviews","Beoordeeld op Google")}),r.jsx("span",{className:"flex items-center gap-0.5","aria-hidden":!0,children:Array.from({length:5}).map((o,s)=>r.jsx(Vu,{className:`h-3.5 w-3.5 ${s<Math.round(ra.ratingValue)?"fill-[#FBBC04] text-[#FBBC04]":"text-white/30"}`},s))})]})]}),a.map(o=>r.jsxs("div",{children:[r.jsx("h4",{className:"font-bold text-white text-sm mb-4 uppercase tracking-[0.05em]",children:o.title}),r.jsx("ul",{className:"space-y-3",children:o.links.map(s=>r.jsx("li",{children:s.href.startsWith("mailto:")||s.href.startsWith("tel:")||s.external?r.jsx("a",{href:s.href,target:s.external?"_blank":void 0,rel:s.external?"noopener noreferrer":void 0,className:"text-white/80 text-sm hover:text-white transition-colors duration-200",children:s.label}):r.jsx(_,{to:s.href,className:"text-white/80 text-sm hover:text-white transition-colors duration-200",children:s.label})},s.label))})]},o.title))]}),r.jsxs("div",{className:"border-t border-white/[0.1] pt-8 flex flex-col sm:flex-row items-center justify-between gap-4",children:[r.jsx("span",{className:"text-white/70 text-sm",children:e("footer.copyright")}),r.jsxs("div",{className:"flex flex-wrap gap-x-6 gap-y-2",children:[r.jsx(_,{to:i("privacybeleid"),className:"text-white/70 text-sm hover:text-white transition-colors duration-200",children:e("footer.privacyPolicy")}),r.jsx(_,{to:i("cookiebeleid"),className:"text-white/70 text-sm hover:text-white transition-colors duration-200",children:e("footer.cookiePolicy")}),r.jsx(_,{to:i("algemeneVoorwaarden"),className:"text-white/70 text-sm hover:text-white transition-colors duration-200",children:e("footer.termsConditions")}),r.jsx("button",{type:"button",onClick:()=>window.dispatchEvent(new Event("sb:open-cookie-settings")),className:"text-white/70 text-sm hover:text-white transition-colors duration-200",children:e("cookieConsent.settings")})]})]})]})})},G7={index:{title:"Smartbooks | Konsolidierung, FP&A und Monatsabschluss",description:"Ein System für Konsolidierung, Reporting und Planung. Ersetzen Sie verstreute Excel-Modelle durch verlässliche, automatisierte Prozesse.",bare:!0},functionaliteiten:{title:"Funktionen für Finance und Controlling",description:"Alle Smartbooks-Funktionen: Reporting, Konsolidierung, Planung, Cashflow und KI-Controller."},prijzen:{title:"Preise und Pakete",description:"Transparente Preise für Finance-Teams: Reporting, Konsolidierung und Planung pro Gesellschaft und Monat. Berechnen Sie Ihren Preis direkt online."},projecten:{title:"Projekte: KI und Financial Applications",description:"KI-Integration und Financial Applications für Finance-Teams."},consulting:{title:"KI-Consulting für Finance-Teams",description:"KI-Integration in Ihre Finanzworkflows. Sprechen Sie mit unseren Experten."},overOns:{title:"Über uns: Team, Mission und Vision",description:"Lernen Sie Smartbooks kennen: unser Team, unsere Mission und unsere Vision für KI-gestützte Software im Finance und Controlling."},contact:{title:"Kontakt",description:"Nehmen Sie Kontakt mit Smartbooks auf – per Telefon, E-Mail oder über das Kontaktformular. Wir helfen Ihnen gerne weiter."},waaromSmartbooks:{title:"Warum Smartbooks.ai?",description:"Warum Smartbooks die umfassendste Software für Finance und Business Control im Mittelstand ist: Konsolidierung, Reporting, Planung und KI in einem.",bare:!0},productTour:{title:"Interaktive Produkttour",description:"Klicken Sie sich in 90 Sekunden durch Smartbooks. Keine Demo, kein Formular – erleben Sie das Finance Operating System selbst."},onboarding:{title:"Onboarding: von der Anmeldung bis live",description:"So läuft das Onboarding bei Smartbooks: von der Anmeldung bis zum Livebetrieb, mit persönlicher Begleitung durch unser Team."},aiKoppelingen:{title:"KI-Konnektoren via MCP: ChatGPT, Claude und Copilot",description:"Verbinden Sie Claude, ChatGPT, Copilot oder Ihren eigenen KI-Agenten sicher per MCP mit Smartbooks. Fragen zu Ihren Zahlen, mit Ihren Rechten."},onboardingMeeting:{title:"Kostenlosen Pilot starten",description:"Starten Sie Ihren kostenlosen Pilot: Buchhaltung anbinden, einen Monat in Ihrer eingerichteten Umgebung arbeiten und mit eigenen Zahlen bewerten."},whitepapers:{title:"Whitepapers für Finance und Controlling",description:"Laden Sie unsere Whitepapers herunter und erfahren 
13594Sie, wie Smartbooks die Finanzfunktion in Ihrem Unternehmen stärkt."},watIsNieuw:{title:"Neuigkeiten und Produkt-Updates",description:"Bleiben Sie auf dem Laufenden über neue Funktionen, Verbesserungen und Fehlerbehebungen in Smartbooks."},webinar:{title:"Webinar: Reporting und Planung mit KI",description:"Sehen Sie das Smartbooks-Webinar und erfahren Sie in 25 Minuten, wie Sie Reporting, Konsolidierung und Budgetierung mit KI effizienter machen."},vergelijkSoftware:{title:"Business-Control-Software im Vergleich",description:"Finanz- und Business-Control-Software im Vergleich: Funktionen, Preise und Eignung der wichtigsten Anbieter für Controller im Mittelstand."},lpConsolidatieSoftware:{title:"Konsolidierungssoftware für Firmengruppen",description:"Konsolidierungssoftware für Gruppen mit mehreren Gesellschaften: automatische IC-Eliminierung, Währungsumrechnung und Konzernreporting."},lpVirtueleController:{title:"Ihr KI-Controller, rund um die Uhr",description:"Ein KI-Agent für Finance-Teams: Fragen in natürlicher Sprache stellen, Analysen in Sekunden erhalten und Präsentationen per Klick erstellen."},lpFinance:{title:"Ihr Finance verdient mehr als Excel",description:"Reporting, Konsolidierung, Planung, Monatsabschluss und Analyse in einer Plattform. Live in Tagen statt Monaten. Vereinbaren Sie eine Demo."},integraties:{title:"Integrationen mit Ihrer Buchhaltung",description:"Smartbooks verbindet sich mit Ihrer Buchhaltungssoftware, operativen Plattformen und BI-Tools. Alle Integrationen im Überblick."},integratieAfas:{title:"AFAS Profit: Konsolidierung & Reporting",description:"Verbinden Sie AFAS Profit mit Smartbooks für Konsolidierung, Reporting und Cashflow-Planung – ohne Migration und ohne Excel."},integratieExactGlobe:{title:"Exact Globe: Reporting ohne Migration",description:"Verbinden Sie Exact Globe mit Smartbooks für Konsolidierung, Reporting und Planung – ohne Migration Ihrer Buchhaltung."},integratieExact:{title:"Exact Online: Konsolidierung & Reporting",description:"Verbinden Sie Exact Online mit Smartbooks für Konsolidierung, Reporting und Cashflow-Planung über alle Gesellschaften hinweg."},integratieOdoo:{title:"Odoo: Konsolidierung für Firmengruppen",description:"Verbinden Sie Odoo mit Smartbooks für Konsolidierung, Reporting und Planung über mehrere Gesellschaften – ohne Excel."},integratieQuickbooks:{title:"QuickBooks: Konsolidierung & Reporting",description:"Smartbooks synchronisiert sich über eine schnelle, sichere API mit QuickBooks – für Konsolidierung, Reporting und Planung."},integratieTwinfield:{title:"Twinfield: Konsolidierung & Reporting",description:"Verbinden Sie Twinfield mit Smartbooks für Konsolidierung, Reporting und Cashflow-Planung über alle Gesellschaften hinweg."},planDemo:{title:"Demo vereinbaren",description:"Vereinbaren Sie eine persönliche Demo und sehen Sie, wie Smartbooks Reporting, Konsolidierung und Planung für Ihr Finance-Team vereinfacht."},algemeneVoorwaarden:{title:"Allgemeine Geschäftsbedingungen",description:"Allgemeine Geschäftsbedingungen der Smartbooks AI B.V. für die Nutzung der Plattform und der Dienstleistungen."},cookiebeleid:{title:"Cookie-Richtlinie",description:"Welche Cookies Smartbooks verwendet, warum, und wie Sie Ihre Einwilligung verwalten oder widerrufen."},privacybeleid:{title:"Datenschutzerklärung",description:"Wie die Smartbooks AI B.V. personenbezogene Daten verarbeitet und schützt und welche Rechte Sie als betroffene Person haben."},notFound:{title:"Seite nicht gefunden",description:"Die gesuchte Seite wurde nicht gefunden. Zurück zur Startseite von Smartbooks."}},lt="https://smartbooks.ai",lv="Smartbooks.ai",$7=" — ",Z7=`${$7}${lv}`,Y7=`${lt}/og-image.png`,Cy=["nl","en","de"],Q7="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large",J7="follow, noindex, noarchive, nosnippet",Ey={nl:"nl_NL",en:"en_US",de:"de_DE"},X7={nl:"nl-NL",en:"en",de:"de-DE"},eq=new Map(Object.entries(Zi.static).filter(([,e])=>e.de).map(([e,n])=>[n.de==="/"?"/de":`/de${n.de}`,e])),Pg=(e,n)=>{const t=n[e]??n.en??n.nl,i=t.startsWith("/")?t:`/${t}`;return`${lt}${i==="/"?"":i}`||lt},Se=({title:e,description:n,pathByLocale:t,ogImage:i=Y7,type:a="website",article:o,jsonLd:s,locale:l,bareTitle:d,noindex:c=!1,alternateLocales:u
13594=Cy})=>{const{i18n:h}=Y(),{pathname:g}=dt(),m=Ib(g),p=m!=="nl"?m:l??(Cy.includes(h.language)?h.language:"nl"),f=g.length>1?g.replace(/\/+$/,""):g,w=p==="de"?G7[eq.get(f)??""]:void 0,k=w?.title??e,v=w?.description??n,x=w?w.bare??!1:d,y=Pg(p,t),j=t.nl==="/"&&(t.en==="/en"||t.en==="/"),S=x??j?k:`${k}${Z7}`;return r.jsxs(qd,{children:[r.jsx("html",{lang:p}),r.jsx("title",{children:S}),r.jsx("meta",{name:"description",content:v}),r.jsx("meta",{name:"robots",content:c?J7:Q7}),r.jsx("link",{rel:"canonical",href:y}),u.map(A=>r.jsx("link",{rel:"alternate",hrefLang:X7[A],href:Pg(A,t)},A)),r.jsx("link",{rel:"alternate",hrefLang:"x-default",href:Pg(u.includes("en")?"en":u[0]??"en",t)}),r.jsx("meta",{property:"og:title",content:S}),r.jsx("meta",{property:"og:description",content:v}),r.jsx("meta",{property:"og:url",content:y}),r.jsx("meta",{property:"og:type",content:a}),r.jsx("meta",{property:"og:image",content:i}),r.jsx("meta",{property:"og:site_name",content:lv}),r.jsx("meta",{property:"og:locale",content:Ey[p]}),u.filter(A=>A!==p).map(A=>r.jsx("meta",{property:"og:locale:alternate",content:Ey[A]},A)),r.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),r.jsx("meta",{name:"twitter:title",content:S}),r.jsx("meta",{name:"twitter:description",content:v}),r.jsx("meta",{name:"twitter:image",content:i}),o?.publishedTime&&r.jsx("meta",{property:"article:published_time",content:o.publishedTime}),o?.author&&r.jsx("meta",{property:"article:author",content:o.author}),s&&r.jsx("script",{type:"application/ld+json",children:JSON.stringify((Array.isArray(s),s))})]})},nq={"@context":"https://schema.org","@type":"Organization",name:"Smartbooks",url:lt,logo:`${lt}${Yu}`,description:"AI-gestuurde financiële rapportage software voor planning, consolidatie en managementrapportage.",sameAs:[]},oh={"@context":"https://schema.org","@type":"WebSite",name:lv,url:lt,potentialAction:{"@type":"SearchAction",target:`${lt}/kenniscentrum?q={search_term_string}`,"query-input":"required name=search_term_string"}},sh=e=>({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:e.map((n,t)=>({"@type":"ListItem",position:t+1,name:n.name,item:`${lt}${n.url}`}))}),tq=e=>({"@context":"https://schema.org","@type":"Article",headline:e.title,datePublished:e.date,description:e.excerpt,author:{"@type":e.author?"Person":"Organization",name:e.author||"Smartbooks"},publisher:{"@type":"Organization",name:"Smartbooks",url:lt},mainEntityOfPage:e.canonicalPath?`${lt}${e.canonicalPath}`:`${lt}/artikelen/${e.slug}`}),iq=e=>({"@context":"https://schema.org","@type":"Product",name:"Smartbooks",description:"AI-gestuurde softw
13594are voor consolidatie, maandafsluiting, planning en managementrapportage.",brand:{"@type":"Brand",name:"Smartbooks"},image:[`${lt}/og-image.png`],url:`${lt}/prijzen`,offers:e.offers.map(n=>({"@type":"Offer",name:n.name,price:n.price,priceCurrency:n.priceCurrency??"EUR",url:n.url??`${lt}/prijzen`,availability:n.availability??"https://schema.org/InStock",priceSpecification:{"@type":"UnitPriceSpecification",price:n.price,priceCurrency:n.priceCurrency??"EUR",unitText:n.unitText??"per administration per month"}})),...e.aggregateRating&&{aggregateRating:{"@type":"AggregateRating",ratingValue:e.aggregateRating.ratingValue.toFixed(1),bestRating:"5",worstRating:"1",reviewCount:e.aggregateRating.reviewCount}}}),lh=e=>({"@context":"https://schema.org","@type":"FAQPage",mainEntity:e.map(n=>({"@type":"Question",name:n.question,acceptedAnswer:{"@type":"Answer",text:n.answer}}))}),rq=[{question:"Wat als het niet bevalt?",answer:"Je begint met een gratis proefmaand in jullie eigen finance-omgeving. In die maand richten we Smartbooks volledig in op jullie situatie en draai je minimaal één volledige maandafsluiting — zodat je in jullie eigen cijfers ziet wat het oplevert. Er wordt niets gefactureerd. Geen abonnement, geen implementatiekosten, geen opzegtermijn. Je beoordeelt Smartbooks op een volwaardig ingericht systeem, niet op een demo. Bevalt het niet? Dan stopt het daar, zonder kosten. Dit is bewust zo ingericht: we weten dat een nieuwe tool uitproberen een risico is dat jij intern moet verdedigen, dus nemen we dat risico weg."},{question:"Wat valt er onder de implementatiekosten?",answer:"De implementatie dekt het volledig inrichten van Smartbooks op jullie situatie: koppelen van je boekhoudsysteem(en), opzetten van de financiële structuur, meedenken over jullie rapportagebehoefte, inrichten van consolidatie- en budgetmodellen, en het trainen van je team. Geen los traject achteraf, maar een vaste projectprijs zodat je vooraf weet waar je aan toe bent. De inrichting zelf gaat snel — 2 tot 5 projectdagen met onze bewezen methodologie — en de trainingen plannen we op het tempo van jouw team, zodat niemand wordt overvallen."},{question:"Hoe snel kan ik aan de slag met Smartbooks?",answer:"Dag één koppel je je boekhoudsysteem — in 10 minuten verbonden. Binnen twee dagen staat je data live in Smartbooks en kun je er direct in werken, ongeacht het aantal entiteiten. In de twee weken daarna richten we samen de rapportages, consolidatie en budgetten in op jullie eigen structuur, en trainen we je team. Na gemiddeld 14 dagen werkt je finance-team zelfstandig met de omgeving. Tijdsinvestering vanuit jullie kant: 10 tot 20 uur. Geen lang implementatietraject, geen consultant die maanden blijft hangen."},{question:"Hoe gaat Smartbooks om met entiteiten in vreemde valuta?",answer:"Entiteiten in vreemde valuta worden bij consolidatie automatisch omgerekend naar jullie groepsvaluta. Koersverschillen worden automatisch berekend en geboekt — je P&L en balans sluiten altijd aan. Standaard gebruiken we actuele wisselkoersen. Wil je eigen koersen toepassen, bijvoorbeeld vanuit group treasury? Dat kun je per entiteit instellen."},{question:"Hoe up-to-date zijn de getallen?",answer:"Smartbooks ververst de data automatisch meerdere keren per uur vanuit je boekhoudsysteem. In de praktijk kijk je dus altijd naar vrijwel actuele cijfers. Heb je eerder nieuwe data nodig, bijvoorbeeld vlak voor een MT-overleg? Dan trigger je handmatig een refresh en staat de nieuwe data binnen een minuut in Smartbooks."},{question:"Is het mogelijk om minderheidsbelangen toe te voegen?",answer:"Ja. Per entiteit in de consolidatie leg je het ownership-percentage vast, voor 100%-deelnemingen én voor minderheidsbelangen. Smartbooks consolideert dan proportioneel op basis van dat percentage. Veranderen die belangen door de tijd heen — bijvoorbeeld na een overname of een uitkoop? Dan leg je per ingangsdatum een ander percentage vast. Historische perioden blijven zo correct, zonder dat je iets hoeft te herberekenen."},{question:"Ondersteunt Smartbooks subconsolidaties en complexere consolidatiestructuren?",answer:"Ja. Je bouwt je consolidatie zo op als jullie groep in elkaar zit — met subconsolidaties per regio, divisie of subholding. Elk tussenniveau krijgt z'n eigen totaal, dat automatisch doorrolt naar de groepsconsolidatie. Intercompany-eliminaties, valuta-omrekening en minderheidsbelangen werken op elk niveau zoals je ze hebt ingericht. Zo kun je complexere groepsstructuren — holdings, joint ventures, internationale dochters — in één omgeving consolideren, zonder losse Excel-bestanden per tak."},{question:"Werkt Smartbooks met onze boekhoudsoftware?",answer:"Waarschijnlijk wel. Smartbooks koppelt direct met Exact Online, Twinfield, AFAS, QuickBooks en Odoo — binnen 10 minuten verbonden, zonder IT-traject. Voor Exact Globe regelen we de koppeling samen met jou. Xero, Microsoft Business Central en SAP Business One staan op de planning. Werken jullie entiteiten met verschillende pakketten? Geen probleem. Elke entiteit kan een eigen bronsysteem hebben — Smartbooks consolideert alles in één omgeving. Zit er een entiteit tussen met een minder gangbaar pakket? Dan zijn er twee opties: rechtstreeks via een API-koppeling die we samen inrichten, of via Excel-uploads in een aparte entiteit. Zo krijg je álle entiteiten binnen de groep mee, ongeacht hun bronsysteem."},{question:"Hoe zit het met data-veiligheid?",answer:"Smartbooks draait op een beveiligde cloud-infrastru
13594ctuur met encryptie in transit én at rest. We zijn AVG-conform en data van verschillende klanten is strikt gescheiden. Gebruikersrechten regel je per persoon en per entiteit, met drie rollen: Admin, Contributor en Viewer. Daarbinnen kun je per gebruiker verder verfijnen: alleen toegang tot specifieke rapportages, alleen bepaalde kostenplaatsen zichtbaar, en desgewenst géén drill-down naar onderliggende transacties. Zo ziet een operationeel manager alleen zijn eigen BU-cijfers, terwijl het MT het groepsoverzicht ziet — zonder dat het finance-team meerdere bestanden naast elkaar hoeft te beheren. Uitgebreid security assessment nodig voor je IT- of compliance-afdeling? Dat sturen we op aanvraag toe."}],aq=[{question:"What if it doesn't work out?",answer:"You start with a free trial month in your own finance environment. During that month we fully configure Smartbooks for your situation and you run at least one full month-end close — so you can see the value in your own figures. Nothing is invoiced. No subscription, no implementation costs, no notice period. You evaluate Smartbooks on a fully configured system, not on a demo. Doesn't suit you? Then it stops there, at no cost. This is set up deliberately: we know that trying out a new tool is a risk you have to defend internally, so we take that risk away."},{question:"What is included in the implementation costs?",answer:"The implementation covers fully configuring Smartbooks for your situation: connecting your accounting system(s), setting up the financial structure, thinking along about your reporting needs, configuring consolidation and budget models, and training your team. No separate track afterwards, but a fixed project price so you know up front where you stand. The setup itself goes quickly — 2 to 5 project days with our proven methodology — and we plan the trainings at the pace of your team, so no one is overwhelmed."},{question:"How quickly can I get started with Smartbooks?",answer:"On day one you connect your accounting system — connected in 10 minutes. Within two days your data is live in Smartbooks and you can work in it directly, regardless of the number of entities. Over the next two weeks we configure the reports, consolidation and budgets together to your own structure, and we train your team. After 14 days on average your finance team works independently in the environment. Time investment from your side: 10 to 20 hours. No long implementation track, no consultant who stays for months."},{question:"How does Smartbooks deal with entities in foreign currencies?",answer:"Entities in foreign currencies are automatically converted to your group currency during consolidation. Exchange differences are calculated and posted automatically — your P&L and balance sheet always reconcile. By default we use current exchange rates. Want to apply your own rates, for example from group treasury? You can configure that per entity."},{question:"How up-to-date are the figures?",answer:"Smartbooks refreshes data automatically several times per hour from your accounting system. In practice you are therefore always looking at virtually real-time figures. Need fresh data sooner, for example just before an MT meeting? Then trigger a manual refresh and the new data is in Smartbooks within a minute."},{question:"Is it possible to add minority interests?",answer:"Yes. For each entity in the consolidation you set the ownership percentage, both for 100% subsidiaries and for minority interests. Smartbooks then consolidates proportionally based on that percentage. Do those interests change over time — for example after an acquisition or buy-out? Then set a different percentage per effective date. Historical periods stay correct without you having to recompute anything."},{question:"Does Smartbooks support sub-consolidations and more complex consolidation structures?",answer:"Yes. You build your consolidation the way your group is structured — with sub-consolidations per region, division or sub-holding. Each intermediate level gets its own total, which automatically rolls up into the group consolidation. Intercompany eliminations, currency translation and minority interests work at every level the way you configured them. This way you can consolidate more complex group structures — holdings, joint ventures, international subsidiaries — in a single environment, without separate Excel files per branch."},{question:"Does Smartbooks work with our accounting software?",answer:"Most likely. Smartbooks connects directly to Exact Online, Twinfield, AFAS, QuickBooks and Odoo — connected in 10 minutes, no IT track. For Exact Globe we set up the connection together with you. Xero, Microsoft Business Central and SAP Business One are on the roadmap. Do your entities use different packages? No problem. Each entity can have its own source system — Smartbooks consolidates everything into one environment. Is there an entity with a less common package? Then there are two options: directly via an API connection that we set up together, or via Excel uploads in a separate entity. That way you get all entities within the group included, regardless of their source system."},{question:"What about data security?",answer:"Smartbooks runs on a secure cloud infrastru
13594cture with encryption in transit and at rest. We are GDPR-compliant and data from different customers is strictly segregated. You manage user permissions per person and per entity, with three roles: Admin, Contributor and Viewer. Within that you can refine further per user: only access to specific reports, only certain cost centers visible, and optionally no drill-down to underlying transactions. This way an operational manager sees only their own BU figures, while management sees the group overview — without the finance team having to manage multiple files side by side. Need an extensive security assessment for your IT or compliance department? We share that on request."}],oq={reporting:[{question:"How quickly can I generate my first report?",answer:"Right after the first connection with your accounting system, your P&L, balance sheet and cashflow reports are automatically ready. No more manual wrangling in Excel."},{question:"Can I pull my Smartbooks reports into Excel?",answer:"Yes, via the Smartbooks Excel add-in you load every report live into Excel, with the same structure and columns you're used to. Handy for ad-hoc analyses without giving up your standard reports."},{question:"Can I drill down from a report to the underlying transaction?",answer:"Yes. From every report you click through to the ledger, the journal entry and, where available, the underlying invoice. That way you trace any number back to its source in seconds, without switching to your accounting system."},{question:"Which periods can I compare?",answer:"Month, quarter, year, year-to-date, last year, budget, forecast — everything is comparable in one click. Including drill-down to ledger level."},{question:"Can I control who can view or edit which reports?",answer:"Yes. With the roles Admin, Contributor and Viewer you control per user who can configure reports, enter data or only view, so control stays where it belongs."},{question:"Can I connect Smartbooks data to Power BI or another BI tool?",answer:"Yes, via our API you connect Smartbooks to BI platforms like Power BI or Tableau, and to data warehouses or your own applications. That way you combine financial data with operational data in the tools you already use. Contact our team to set up the connection for your stack."}],consolidation:[{question:"Can Smartbooks consolidate entities across different accounting packages?",answer:"Yes, that's actually a core strength. Whether your entities are in Exact, AFAS, Twinfield or a foreign system: Smartbooks brings them together into a single consolidated report."},{question:"How does Smartbooks deal with intercompany transactions?",answer:"Intercompany entries are automatically recognized, matched and eliminated. Differences are visible immediately so you can reconcile in a targeted way."},{question:"Are foreign currencies translated automatically?",answer:"Yes, based on current and period-based exchange rates. You don't need to enter anything manually."},{question:"How many entities can Smartbooks handle?",answer:"There is no limit to the number of entities. Whether you consolidate a handful of companies or an international group with dozens of entities and sub-consolidations: Smartbooks scales with you."},{question:"Can I create sub-consolidations within my group?",answer:"Yes. You can group entities into sub-consolidations, for example by country, business unit or holding structure, and have eliminations take place at the right level. That keeps your group reporting clear, even with complex structures."},{question:"How does Smartbooks handle ownership percentages and participations?",answer:"Per entity you record the owner and the ownership percentage. Smartbooks applies these percentages automatically in the consolidation, so participations and minority interests are correctly included without manual calculations."},{question:"What happens if intercompany transactions don't fully match?",answer:"Non-matching transactions become visible as 'IC Difference' on the balance sheet or P&L. That way you immediately see where a counter entry is missing, a timing difference exists or an account is not properly marked for elimination. No more hidden differences in your group figures."}],budgetterenCashflow:[{question:"Which method is used to build the cashflow, direct or indirect?",answer:"Smartbooks uses the indirect method by default: starting from result we automatically adjust for movements in working c
13594apital, depreciation, investments and financing. You get a full cashflow statement (operating, investing and financing activities) without keeping a separate cashflow administration. The build-up is fully traceable to your ledger, so accountants and banks can trace every line back to its source."},{question:"How do I model working capital without estimating every debtor and creditor by hand?",answer:"You drive working capital with drivers like DSO, DPO and inventory turnover, at group, BU or customer segment level. Smartbooks automatically translates those assumptions into debtor, creditor and inventory positions on the balance sheet and rolls them through to cashflow. Does payment behavior or that of a major customer change? Adjust one driver and immediately see the effect on your liquidity and financing need."},{question:"Can P&L, balance sheet and cashflow truly work in an integrated way, or do I need to maintain them separately?",answer:"One model, three views. A change in your revenue forecast flows through automatically to debtors on the balance sheet and to operating cashflow. An investment appears on the balance sheet (CAPEX), in depreciation on the P&L and as outgoing cash under investing activities. Not three separate Excels drifting apart, but always one consistent story toward management, board or bank."},{question:"How quickly can I run a new scenario for management or the board?",answer:"Within minutes. You work with separate planning categories, for example 'Budget 2026', 'Latest Estimate Q2' or 'Stress case bank covenant', that you build from scratch or copy from an existing scenario so formulas and assumptions are preserved. Change one or two assumptions (growth, margin, investment timing) and the full scenario including cashflow and ending balance rolls out immediately. You place base, optimistic and pessimistic side by side in the same report."},{question:"At what level can I plan, do I have to fill in every ledger account?",answer:"No. You decide the level of detail per line yourself: per ledger account where it matters (for example personnel costs or rent), at subtotal level where speed matters more (for example 'other operating costs'). As soon as you plan at subtotal level, input on underlying accounts is disabled, no double entry and no inconsistencies. Also combine hard input with formula-based lines (volume × price, FTE × wage costs, % of revenue)."},{question:"How do I compare forecast versus actuals without exporting every month?",answer:"Forecast, budget and actuals stand side by side in the same report: per period, YTD or rolling. Variances are calculated automatically and from any deviation you click straight through to the underlying journal entry or invoice. The monthly forecast review is no longer about collecting data, but about interpreting and steering."},{question:"Can I take over my existing Excel budget or do I have to start from scratch?",answer:"You load your existing budget from Excel and keep your structure. Then you build further per line: leave static items, replace strategic items (revenue, personnel, margin) with driver-based formulas. That way you move within one budget cycle to a maintainable model instead of a spreadsheet that breaks every year."},{question:"How do I see my financing need and bank covenants ahead of time?",answer:"The cashflow forecast shows your expected cash position per month, including the effect of investments, dividends and repayments. You model credit facilities and covenants (for example leverage or DSCR) as metrics in the same model, so you see months ahead whether a covenant is coming under pressure and can steer in time before the bank calls."}],close:[{question:"How much time will I save on the month-end close?",answer:"Customers save on average 50 to 70 percent of the time. The checklist, controls and reports are ready automatically so your controller work accelerates."},{question:"Can my team work together on the close?",answer:"Yes, with tasks, statuses and comments you collaborate on the close. Everyone sees in real-time what is done and what still needs to happen."},{question:"Are controls performed automatically?",answer:"Yes, missing entr
13594ies, intercompany differences and consistency checks are flagged automatically before you publish."},{question:"Can I 'close' a definitive period?",answer:"Yes, you publish a period definitively so reports are frozen and you have an audit trail for accountants and stakeholders."}],virtualController:[{question:"How exactly does the AI controller work?",answer:"Alex is an AI assistant that understands your figures. You ask questions in plain English and immediately get a substantiated answer, including drill-down to the source."},{question:"What kind of questions can I ask?",answer:"From 'How are we tracking YTD versus budget?' to 'Create a board deck for the management meeting'. Alex helps with analyses, variances, summaries and presentations."},{question:"Does the AI controller replace my finance team?",answer:"No, quite the opposite. Alex takes routine work off your hands so your team can focus on analysis, advice and strategy."}]},sq={reporting:[{question:"Wie schnell kann ich meinen ersten Bericht erstellen?",answer:"Direkt nach der ersten Anbindung Ihrer Buchhaltung stehen GuV, Bilanz und Cashflow automatisch bereit. Kein manuelles Zusammenkratzen in Excel mehr."},{question:"Kann ich Berichte an unsere Struktur anpassen?",answer:"Ja. Sie definieren Ihre eigene Reporting-Struktur mit Dimensionen und Formeln und passen sie jederzeit an — ohne Berater und ohne Neuaufsatz."},{question:"Kann ich bis auf die Originalrechnung drillen?",answer:"Ja. Sie klicken vom konsolidierten Bericht ins Hauptbuch bis zur Transaktion und der zugehörigen PDF-Rechnung — alles innerhalb von Smartbooks."}],consolidation:[{question:"Funktioniert das mit verschiedenen Buchhaltungssystemen?",answer:"Ja. Smartbooks konsolidiert systemübergreifend — Sie müssen nicht erst einen einheitlichen Standard einführen. Jede Entität behält ihr System."},{question:"Wie funktionieren die Intercompany-Eliminierungen?",answer:"Automatisch. Smartbooks erkennt IC-Transaktionen, eliminiert sie und zeigt Ihnen im Abstimmungstool sofort, wo Differenzen zwischen Entitäten liegen — bis auf Transaktionsebene."},{question:"Was passiert bei ausländischen Entitäten?",answer:"Smartbooks rechnet automatisch um: GuV zum Durchschnittskurs, Bilanz zum Stichtagskurs. Kursdifferenzen werden separat ausgewiesen."}],budgetterenCashflow:[{question:"Kann ich mehrere Szenarien nebeneinander betreiben?",answer:"Ja. Base-Case, optimistisches und pessimistisches Szenario laufen parallel und sind direkt mit den Ist-Zahlen im selben Bericht vergleichbar."},{question:"Bekomme ich einen echten Cashflow-Forecast?",answer:"Ja. Aus Ihrer GuV- und Bilanzplanung entsteht automatisch ein indirekter Cashflow-Forecast. Für das operative Cashmanagement gibt es zusätzlich eine direkte 13-Wochen-Cashplanung aus offenen Debitoren und Kreditoren."},{question:"Wie treiberbasiert kann ich planen?",answer:"So detailliert wie Sie möchten. Umsatz als Menge × Preis pro Produktgruppe, Personalkosten pro FTE mit Bruttolohn, Sozialabgaben und Pension — und Sie fügen eigene Module für weitere Kostentreiber hinzu."}],close:[{question:"Wie funktionieren die Abschluss-Templates?",answer:"Sie definieren Ihren Monats-, Quartals- und Jahresabschluss einmalig mit Aufgaben, Deadlines, Verantwortlichen und Abhängigkeiten. Jede Periode verwenden Sie das Template erneut — keine Improvisation."},{question:"Wer sieht, was noch offen ist?",answer:"Alle Teammitglieder sehen live den Status pro Aufgabe, offene Fragen im Chat pro Aufgabe und den vollständigen Audit-Trail: wer hat was wann getan."},{question:"Können wir die Periode versehentlich zu früh schließen?",answer:"Nein. Erst wenn alle Aufgaben abgeschlossen sind, kann die Periode veröffentlicht werden — und nur Admins dürfen veröffentlichen. Reports laufen immer auf veröffentlichten, geprüften Daten."}],virtualController:[{question:"Wie funktioniert der KI-Controller genau?",answer:"Alex ist ein KI-Assistent, der Ihre Zahlen versteht. Sie stellen Fragen in verständlicher Sprache und erhalten sofort eine fundierte Antwort — inklusive Drill-down zur Quelle."},{question:"Welche Fragen kann ich stellen?",answer:'Von "Wie liegen wir YTD gegenüber Budget?" bis "Erstelle ein Board-Deck für das Management-Meeting". Alex hilft bei Analysen, Abweichungen, Zusammenfassungen und Präsentationen.'},{question:"Ersetzt der KI-Controller mein Finance-Team?",answer:"Nein, im Gegenteil. Alex nimmt Ihnen die Routinearbeit ab, sodass sich Ihr Team auf Analyse, Beratung und Strategie konzentrieren kann."}]},lq={reporting:[{question:"Hoe snel kan ik mijn eerste rapportage genereren?",answer:"Direct na de eerste koppeling met je boekhouding staan je P&L, balans en cashflow rapportages automatisch klaar. Geen handmatig harken meer in Excel."},{question:"Kan ik mijn Smartbooks-rapportages naar Excel halen?",answer:"Ja, via de Smartbooks Excel-add-in haal je elke rapportage live in Excel binnen, met dezelfde structuur en kolommen die je gewend bent. Handig voor ad-hoc analyses zonder dat je je standaard rapportages loslaat."},{question:"Kan ik vanuit een rapportage doorklikken naar de onderliggende transactie?",answer:"Ja. Vanuit elk rapport klik je door naar het grootboek, de journaalpost en, als beschikbaar, de onderliggende factuur. Zo herleid je elk cijfer in seconden tot z'n bron, zonder over te schakelen naar je boekhoudsysteem."},{question:"Welke periodes kan ik vergelijken?",answer:"Maand, kwartaal, jaar, year-to-date, vorig jaar, budget, forecast — alles is met één klik vergelijkbaar. Inclusief drill-down naar grootboekniveau."},{question:"Kan ik bepalen wie welke rapportages mag zien of aanpassen?",answer:"Ja. Met de rollen Admin, Contributor en Viewer regel je per gebruiker wie rapporten kan inrichten, data kan invoeren of alleen mag meekijken, zodat de controle blijft waar die hoort."},{question:"Kan ik Smartbooks-data koppelen aan Power BI of een ander BI-tool?",answer:"Ja, via onze API koppel je Smartbooks aan BI-platforms zoals Power BI of Tableau, en aan datawarehouses of eigen applicaties. Zo combineer je financiële cijfers met operationele data in de tools die je al gebruikt. Neem contact op met ons team om de koppeling voor jouw stack in te richten."}],consolidation:[{question:"Kan Smartbooks entiteiten in verschillende boekhoudpakketten consolideren?",answer:"Ja, dat is juist een kernkracht. Of je entiteiten nu in Exact, AFAS, Twinfield of een buitenlands systeem zitten: Smartbooks brengt ze samen tot één geconsolideerde rapportage."},{question:"Hoe gaat Smartbooks om met intercompany transacties?",answer:"Intercompany posten worden automatisch herkend, gematcht en geëlimineerd. Verschillen krijg je direct in beeld zodat je gericht kunt afstemmen."},{question:"Worden buitenlandse valuta automatisch omgerekend?",answer:"Ja, op basis van actuele en periode-gebaseerde wisselkoersen. Je hoeft niets handmatig in te voeren."},{question:"Hoeveel entiteiten kan Smartbooks aan?",answer:"Er zit geen limiet aan het aantal entiteiten. Of je nu een handvol vennootschappen consolideert of een internationale groep met tientallen entiteiten en subconsolidaties: Smartbooks schaalt mee."},{question:"Kan ik subconsolidaties maken binnen mijn groep?",answer:"Ja. Je kunt entiteiten groeperen in subconsolidaties, bijvoorbeeld per land, business unit of holdingstructuur, en eliminaties op het juiste niveau laten plaatsvinden. Zo blijft je groepsrapportage overzichtelijk, ook bij complexe structuren."},{question:"Hoe gaat Smartbooks om met eigendomspercentages en deelnemingen?",answer:"Per entiteit leg je de eigenaar en het eigendomspercentage vast. Smartbooks past deze percentages automatisch toe in de consolidatie, zodat deelnemingen en minderheidsbelangen correct worden meegenomen zonder handmatig rekenwerk."},{question:"Wat gebeurt er als intercompany-transacties niet volledig matchen?",answer:"Niet-matchende transacties worden zichtbaar als 'IC Difference' op de balans of P&L. Zo zie je direct waar een tegenboeking ontbreekt, een timingverschil zit of een rekening niet goed is gemarkeerd voor eliminatie. Geen verborgen verschillen meer in je groepscijfers."}],budgetterenCashflow:[{question:"Volgens welke methode wordt de cashflow opgebouwd, direct of indirect?",answer:"Smartbooks hanteert standaard de indirecte methode: vanu
13594it het resultaat corrigeren we automatisch voor mutaties in werkkapitaal, afschrijvingen, investeringen en financiering. Je krijgt een volwaardig kasstroomoverzicht (operationeel, investerings- en financieringsactiviteiten) zonder dat je een aparte cashflow-administratie hoeft bij te houden. De opbouw is volledig herleidbaar tot je grootboek, zodat accountants en banken elke regel kunnen terugvoeren naar de bron."},{question:"Hoe modelleer ik werkkapitaal zonder elke debiteur en crediteur handmatig in te schatten?",answer:"Je stuurt werkkapitaal aan via drivers zoals DSO, DPO en voorraadrotatie, op groeps-, BU- of klantsegmentniveau. Smartbooks vertaalt die aannames automatisch naar debiteuren-, crediteuren- en voorraadposities op de balans en doorgerekend naar de cashflow. Verandert je betalingsgedrag of dat van een grote klant? Dan pas je één driver aan en zie je direct het effect op je liquiditeit en financieringsbehoefte."},{question:"Kunnen P&L, balans en cashflow écht integraal werken, of moet ik ze los bijhouden?",answer:"Eén model, drie views. Een wijziging in je omzetforecast werkt automatisch door naar debiteuren op de balans en naar de operationele cashflow. Een investering verschijnt op de balans (CAPEX), in afschrijvingen op de P&L én als uitgaande kasstroom onder investeringsactiviteiten. Geen drie losse Excels die uit de pas gaan lopen, maar altijd één consistent verhaal richting MT, RvC of bank."},{question:"Hoe snel kan ik een nieuw scenario doorrekenen voor het MT of de RvC?",answer:"Binnen minuten. Je werkt met losse planning categorieën, bijvoorbeeld 'Budget 2026', 'Latest Estimate Q2' of 'Stress case bankcovenant', die je vanaf nul opbouwt of kopieert van een bestaand scenario zodat formules en aannames behouden blijven. Wijzig één of twee aannames (groei, marge, investeringsmoment) en het volledige scenario inclusief cashflow en eindsaldo rolt direct uit. Je zet base, optimistisch en pessimistisch naast elkaar in dezelfde rapportage."},{question:"Op welk niveau kan ik plannen, moet ik elke grootboekrekening invullen?",answer:"Nee. Je bepaalt zelf het detailniveau per regel: per grootboekrekening waar het ertoe doet (bijvoorbeeld personeelskosten of huur), op subtotaalniveau waar snelheid belangrijker is (bijvoorbeeld 'overige operationele kosten'). Zodra je op subtotaalniveau plant, vervalt invoer op onderliggende rekeningen, geen dubbele invoer en geen inconsistenties. Combineer ook harde invoer met formule-gebaseerde regels (volume × prijs, FTE × loonkosten, % van omzet)."},{question:"Hoe vergelijk ik forecast versus actuals zonder elke maand opnieuw te exporteren?",answer:"Forecast, budget en actuals staan in dezelfde rapportage naast elkaar: periodiek, YTD of rolling. Variances worden automatisch berekend en je klikt vanuit elke afwijking direct door naar de onderliggende journaalpost of factuur. Zo gaat de maandelijkse forecast-review niet meer over data verzamelen, maar over interpreteren en bijsturen."},{question:"Kan ik mijn bestaande Excel-budget overnemen of moet ik opnieuw beginnen?",answer:"Je laadt je bestaande budget in vanuit Excel en behoudt je structuur. Daarna bouw je per regel verder: laat statische posten staan, vervang strategische posten (omzet, personeel, marge) door driver-based formules. Zo zit je binnen één budgetcyclus over op een onderhoudbaar model in plaats van een spreadsheet die elk jaar weer breekt."},{question:"Hoe zie ik mijn financieringsbehoefte en bankcovenanten vooruitlopend?",answer:"De cashflow forecast toont je verwachte kaspositie per maand, inclusief het effect van investeringen, dividenden en aflossingen. Je modelleert kredietfaciliteiten en covenanten (bijvoorbeeld leverage of DSCR) als metrics in hetzelfde model, zodat je maanden vooruit ziet of een covenant onder druk komt en gericht kunt sturen vóórdat de bank belt."}],close:[{question:"Hoeveel tijd bespaar ik op de maandafsluiting?",answer:"Klanten besparen gemiddeld 50 tot 70 procent van de tijd. De checklist, controles en rapportages staan automatisch klaar zodat je je controller-werk versnelt."},{question:"Kan mijn team samen werken aan de close?",answer:"Ja, met taken, statussen en commentaar werk je gezamenlijk aan de afsluiting. Iedereen ziet realtime wat klaar is en wat nog moet."},{question:"Worden controles automatisch uitgevoerd?",answer:"Ja, ontbrekende boekingen, intercompany verschillen en consistentie-checks worden automatisch gesignaleerd voordat je publiceert."},{question:"Kan ik een definitieve periode 'sluiten'?",answer:"Ja, je publiceert een periode definitief zodat rapportages bevroren zijn en je een audit trail hebt voor accountants en stakeholders."}],virtualController:[{question:"Hoe werkt de AI-controller precies?",answer:"Alex is een AI-assistent die jouw cijfers begrijpt. Je stelt vragen in gewoon Nederlands en krijgt direct een onderbouwd antwoord, inclusief drill-down naar de bron."},{question:"Welke vragen kan ik stellen?",answer:"Van 'Hoe liggen we YTD ten opzichte van budget?' tot 'Maak een board deck voor de directievergadering'. Alex helpt met analyses, varianties, samenvattingen en presentaties."},{question:"Vervangt de AI-controller mijn finance team?",answer:"Nee, juist niet. Alex neemt het routinewerk uit handen zodat je team zich kan focussen op analyse, advies en strategie."}]},dq=[{question:"Wat doet Smartbooks precies?",answer:"Smartbooks is één AI-gedreven platform voor consolidatie, maandafsluiting, managementrapportage, budgettering en cashflowplanning. Het vervangt versnipperde Excel-modellen en zware enterprise-tools door één omgeving waarin je finance-team direct werkt — met data die automatisch uit je boekhoud- en ERP-systemen komt."},{question:"Voor wat voor organisaties is Smartbooks bedoeld?",answer:"Smartbooks is gebouwd voor financieel controllers, business controllers en CFO's van organisaties met 2 tot 20 entiteiten. Denk aan groeiende mkb- en mid-market-bedrijven die uit Excel groeien, maar geen Lucanet- of Tagetik-implementatie van zes maanden willen."},{question:"Hoe snel kan ik live?",answer:"Dag één koppel je je boekhoudsysteem in 10 minuten. Binnen twee dagen staat je data live. In de twee weken daarna richten we samen rapportages, consolidatie en budgetten in op jullie structuur. Na gemiddeld 14 dagen werkt je team zelfstandig — met een tijdsinvestering van 10 tot 20 uur vanuit jullie kant."},{question:"Werkt Smartbooks met onze boekhoud- en ERP-software?",answer:"Waarschijnlijk wel. Smartbooks heeft 300+ koppelingen, waaronder Exact Online, Twinfield, AFAS, QuickBooks, Odoo, Xero, Microsoft Dynamics 365 Business Central, NetSuite en SAP. Elke entiteit kan een eigen bronsysteem hebben — Smartbooks consolideert alles in één omgeving."},{question:"Hoe gaat Smartbooks om met meerdere entiteiten en vreemde valuta?",answer:"Smartbooks consolideert volledig automatisch over meerdere entiteiten, inclusief intercompany-eliminaties, minderheidsbelangen en subconsolidaties. Entiteiten in vreemde valuta worden bij consolidatie automatisch omgerekend; koersverschillen worden berekend en geboekt zodat P&L en balans altijd aansluiten."},{question:"Wat kost Smartbooks?",answer:"De prijs hangt af van het aantal entiteiten en gebruikers. Op de prijzenpagina vind je een interactieve calculator die direct een indicatie geeft. Daarnaast bieden we een gratis proefmaand op een volledig ingerichte omgeving — geen abonnement, geen implementatiekosten, geen opzegtermijn."}],cq=[{question:"What does Smartbooks actually do?",answer:"Smartbooks is a single AI-driven platform for consolidation, month-end close, management reporting, budgeting and cashflow planning. It replaces fragmented Excel models and heavy enterprise tools with one environment where your finance team works directly — with data flowing automatically from your accounting and ERP systems."},{question:"Who is Smartbooks built for?",answer:"Smartbooks is built for financial controllers, business controllers and CFOs of organisations with 2 to 20 entities. Think of growing SME and mid-market companies outgrowing Excel, but unwilling to start a six-month Lucanet or Tagetik implementation."},{question:"How quickly can we go live?",answer:"On day one you connect your accounting system in 10 minutes. Within two days your data is live. Over the next two weeks we configure reporting, consolidation and budgets to your structure. After 14 days on average your team works independently — with a time investment of 10 to 20 hours from your side."},{question:"Does Smartbooks integrate with our accounting and ERP software?",answer:"Most likely yes. Smartbooks has 300+ integrations, including Exact Online, Twinfield, AFAS, QuickBooks, Odoo, Xero, Microsoft Dynamics 365 Business Central, NetSuite and SAP. Every entity can have its own source system — Smartbooks consolidates everything in one environment."},{question:"How does Smartbooks handle multiple entities and foreign currencies?",answer:"Smartbooks consolidates fully automatically across multiple entities, including intercompany eliminations, minority interests and sub-consolidations. Entities in foreign currencies are converted automatically during consolidation; exchange differences are calculated and posted so P&L and balance sheet always re
13594concile."},{question:"What does Smartbooks cost?",answer:"Pricing depends on the number of entities and users. The pricing page has an interactive calculator that gives an instant indication. We also offer a free trial month on a fully configured environment — no subscription, no implementation fee, no notice period."}],uq=[{question:"Was macht Smartbooks eigentlich?",answer:"Smartbooks ist eine KI-gestützte Plattform für Konsolidierung, Monatsabschluss, Management-Reporting, Budgetierung und Cashflow-Planung. Sie ersetzt fragmentierte Excel-Modelle und schwerfällige Enterprise-Tools durch eine Umgebung, in der Ihr Finance-Team direkt arbeitet – mit Daten, die automatisch aus Ihren Buchhaltungs- und ERP-Systemen fließen."},{question:"Für wen ist Smartbooks gebaut?",answer:"Smartbooks ist für Financial Controller, Business Controller und CFOs von Organisationen mit 2 bis 20 Einheiten konzipiert. Denken Sie an wachsende KMU und Mid-Market-Unternehmen, die Excel entwachsen sind, aber keine sechsmonatige Lucanet- oder Tagetik-Implementierung starten wollen."},{question:"Wie schnell können wir live gehen?",answer:"Am ersten Tag verbinden Sie Ihr Buchhaltungssystem in 10 Minuten. Innerhalb von zwei Tagen sind Ihre Daten live. In den folgenden zwei Wochen konfigurieren wir Reporting, Konsolidierung und Budgets auf Ihre Struktur. Nach durchschnittlich 14 Tagen arbeitet Ihr Team eigenständig – mit einem Zeitaufwand von 10 bis 20 Stunden auf Ihrer Seite."},{question:"Integriert sich Smartbooks mit unserer Buchhaltungs- und ERP-Software?",answer:"Sehr wahrscheinlich ja. Smartbooks bietet über 300 Integrationen, darunter Exact Online, Twinfield, AFAS, QuickBooks, Odoo, Xero, Microsoft Dynamics 365 Business Central, NetSuite und SAP. Jede Einheit kann ihr eigenes Quellsystem haben – Smartbooks konsolidiert alles in einer Umgebung."},{question:"Wie geht Smartbooks mit mehreren Einheiten und Fremdwährungen um?",answer:"Smartbooks konsolidiert vollautomatisch über mehrere Einheiten hinweg, inklusive IC-Eliminierungen, Minderheitsanteilen und Teilkonsolidierungen. Einheiten in Fremdwährungen werden bei der Konsolidierung automatisch umgerechnet; Währungsdifferenzen werden berechnet und gebucht, sodass GuV und Bilanz immer abstimmen."},{question:"Was kostet Smartbooks?",answer:"Der Preis hängt von der Anzahl der Einheiten und Nutzer ab. Auf der Preisseite finden Sie einen interaktiven Rechner, der Ihnen eine sofortige Indikation gibt. Wir bieten außerdem einen kostenlosen Testmonat auf einer vollständig eingerichteten Umgebung – ohne Abo, ohne Implementierungsgebühr, ohne Kündigungsfrist."}],hq={"@context":"https://schema.org","@type":"SoftwareApplication",name:"Smartbooks",applicationCategory:"BusinessApplication",applicationSubCategory:"Financial Reporting & Consolidation Software",image:["https://smartbooks.ai/og-image.png"],operatingSystem:"Web",url:"https://smartbooks.ai/",description:"AI-gestuurde softw
13594are voor consolidatie, maandafsluiting, planning en managementrapportage. Vervangt versnipperde Excel-modellen door één professioneel systeem.",offers:{"@type":"Offer",price:"0",priceCurrency:"EUR",description:"Vraag een persoonlijke demo aan voor pricing op maat.",url:"https://smartbooks.ai/prijzen"},featureList:["Financiële consolidatie","Maandafsluiting","Managementrapportage","Budgettering en forecasting","Cashflowplanning","AI business controller (Alex)"],publisher:{"@type":"Organization",name:"Smartbooks",url:"https://smartbooks.ai/"},aggregateRating:{"@type":"AggregateRating",ratingValue:ra.ratingValue.toFixed(1),bestRating:"5",worstRating:"1",reviewCount:ra.reviewCount}},gq=()=>{const{t:e,i18n:n}=Y(),t=n.language?.startsWith("de")?"de":n.language?.startsWith("en")?"en":"nl",i=t==="de"?uq:t==="en"?cq:dq,a={nl:{eyebrow:"Veelgestelde vragen",title:"Antwoord op je vragen",subtitle:"Alles wat je wilt weten voordat je een demo aanvraagt — van koppelingen tot security."},en:{eyebrow:"Frequently asked questions",title:"Answers to your questions",subtitle:"Everything you want to know before requesting a demo — from integrations to security."},de:{eyebrow:"Häufig gestellte Fragen",title:"Antworten auf Ihre Fragen",subtitle:"Alles, was Sie wissen möchten, bevor Sie eine Demo anfragen – von Integrationen bis Sicherheit."}}[t];return r.jsxs("div",{className:"min-h-screen bg-midnight",children:[r.jsx(Se,{title:e("seo.index.title"),description:e("seo.index.description"),pathByLocale:je("index"),jsonLd:[nq,oh,hq,lh(i)],bareTitle:!0}),r.jsx(Ee,{}),r.jsx(S7,{}),r.jsx(A7,{}),r.jsx(N7,{}),r.jsx(I7,{}),r.jsx(_7,{}),r.jsx(T7,{}),r.jsx(Rl,{}),r.jsx(D7,{}),r.jsx(Ol,{items:i,eyebrow:a.eyebrow,title:a.title,subtitle:a.subtitle}),r.jsx(XA,{}),r.jsx(Ne,{})]})},Be=()=>{const[e,n]=b.useState(!0),{t,i18n:i}=Y(),a=dt(),o=i.language==="de"?"de":i.language!=="nl"?"en":"nl",s=B("liveWebinar",o),l=a.pathname===s||a.pathname.startsWith(`${s}/`);return!e||l?null:r.jsxs("div",{className:"relative bg-turquoise/15 border-b border-turquoise/20 py-2.5 px-4 text-center text-sm overflow-hidden",children:[r.jsx("div",{className:"absolute bottom-0 left-0 right-0 section-divider"}),r.jsx("span",{className:"text-muted-foreground mr-2",children:t("announcement.text")}),r.jsxs("a",{href:B("liveWebinar",o),className:"inline-flex items-center gap-1 text-gradient-teal font-semibold hover:opacity-80 transition-opacity",children:[t("announcement.cta")," ",r.jsx(re,{className:"h-3.5 w-3.5 text-teal"})]}),r.jsx("button",{onClick:()=>n(!1),className:"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors",children:r.jsx(xi,{className:"h-4 w-4"})})]})},_l="/assets/dashboard-consolidated-D1vO7X9y.png",dv="/assets/dashboard-pnl-B_L1Qc9c.png",Ny=[_l,dv],mq=()=>{const[e,n]=b.useState(0),{t}=Y();return b.useEffect(()=>{const i=setInterval(()=>n(a=>(a+1)%Ny.length),5e3);return()=>clearInterval(i)},[]),r.jsxs("section",{className:"pt-16 pb-20 gradient-hero relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 dot-grid opacity-30"}),r.jsxs("div",{className:"container mx-auto px-4 relative z-10",children:[r.jsxs("div",{className:"text-center mb-14 animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-4 block",children:t("featuresHero.eyebrow")}),r.jsxs("h1",{className:"font-display text-4xl sm:text-6xl font-bold text-foreground tracking-tight mb-6",children:[t("featuresHero.title")," ",r.jsx("span",{className:"text-gradient-multi",children:t("featuresHero.titleHighlight")})," ",t("featuresHero.titleEnd")]}),r.jsx("p",{className:"text-lg text-muted-foreground max-w-2xl mx-auto leading-relaxed",children:t("featuresHero.subtitle")})]}),r.jsx("div",{className:"max-w-5xl mx-auto rounded-2xl glass-card overflow-hidden relative aspect-[16/9] animate-fade-in-up",style:{animationDelay:"200ms"},children:Ny.map((i,a)=>r.jsx(Dt.img,{src:i,alt:`Smartbooks dashboard screenshot ${a+1} — financiële rapportage en consolidatie interface`,className:"absolute inset-0 w-full h-full object-cover rounded-2xl",animate:{o
13594pacity:e===a?1:0},transition:{duration:.8}},a))})]})]})},eC=({items:e})=>{const[n,t]=b.useState(0),i=e[n];return r.jsxs("div",{className:"rounded-2xl glass-card border border-border overflow-hidden",children:[r.jsxs("div",{className:"relative",children:[i.type==="video"?r.jsx("video",{src:i.src,autoPlay:!0,muted:!0,loop:!0,playsInline:!0,className:"w-full h-auto block"},i.src):r.jsx("img",{src:i.src,alt:i.label,className:"w-full h-auto block"}),e.length>1&&r.jsxs(r.Fragment,{children:[r.jsx("button",{onClick:()=>t(a=>(a-1+e.length)%e.length),className:"absolute left-2 top-1/2 -translate-y-1/2 w-8 h-8 rounded-full bg-background/80 backdrop-blur border border-border flex items-center justify-center hover:bg-background transition-colors",children:r.jsx(rD,{className:"h-4 w-4 text-foreground"})}),r.jsx("button",{onClick:()=>t(a=>(a+1)%e.length),className:"absolute right-2 top-1/2 -translate-y-1/2 w-8 h-8 rounded-full bg-background/80 backdrop-blur border border-border flex items-center justify-center hover:bg-background transition-colors",children:r.jsx(aD,{className:"h-4 w-4 text-foreground"})})]})]}),e.length>1&&r.jsx("div",{className:"flex border-t border-border overflow-x-auto",children:e.map((a,o)=>r.jsx("button",{onClick:()=>t(o),className:`flex-1 py-2.5 text-xs font-medium transition-colors whitespace-nowrap px-2 ${o===n?"bg-teal/10 text-teal border-b-2 border-teal":"text-muted-foreground hover:text-foreground hover:bg-muted/30"}`,children:a.label},a.label))})]})},pq=({images:e})=>r.jsx(eC,{items:e.map(n=>({...n,type:"image"}))}),Iy=["reporting","consolidation","budgetterenCashflow","close","virtualController"],Py={reporting:po,consolidation:$i,budgetterenCashflow:Do,close:U2,virtualController:mo},fq={reporting:{video:"/videos/rapportage-demo.mp4"},consolidation:{media:[{src:Qu,label:"Profit & Loss",type:"image"}]},budgetterenCashflow:{images:[{src:zb,label:"Cashflow Forecast"}]},close:{},virtualController:{}},bq=()=>{const{t:e}=Y(),[n,t]=b.useState(0),i=Iy[n],a=Py[i],o=e(`featureCategories.pillarFeatures.${i}`,{returnObjects:!0}),s=Array.isArray(o)?o:[],l=fq[i],d=l.video||l.images||l.media;return r.jsxs("section",{className:"py-24 bg-background relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-30"}),r.jsxs("div",{className:"container mx-auto px-4 relative z-10 max-w-6xl",children:[r.jsx("div",{className:"flex items-center justify-center gap-1 mb-12 overflow-x-auto pb-1",children:Iy.map((c,u)=>{const h=Py[c];return r.jsxs("button",{onClick:()=>t(u),className:`relative flex items-center gap-2 px-5 py-3 text-sm font-medium rounded-lg transition-all whitespace-nowrap ${n===u?"text-teal bg-teal/10 border border-teal/20":"text-muted-foreground hover:text-foreground hover:bg-muted/30 border border-transparent"}`,children:[r.jsx(h,{className:"h-4 w-4"}),e(`featureCategories.pillars.${c}`)]},c)})}),r.jsx(Bl,{mode:"wait",initial:!1,children:r.jsxs(Dt.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:.3},className:`flex flex-col ${d?"lg:flex-row":""} gap-8 lg:gap-12 items-start`,children:[r.jsxs("div",{className:`${d?"flex-1":"w-full"} min-w-0`,children:[r.jsxs("div",{className:"flex items-center gap-3 mb-5",children:[r.jsx("div",{className:"w-11 h-11 rounded-xl bg-teal/10 border border-teal/20 flex items-center justify-center",children:r.jsx(a,{className:"h-5 w-5 text-teal"})}),r.jsx("h3",{className:"font-display text-2xl font-bold text-foreground",children:e(`featureCategories.pillars.${i}`)})]}),r.jsx("p",{className:"text-muted-foreground mb-6 leading-relaxed",children:e(`featureCategories.pillarDescriptions.${i}`)}),r.jsx("ul",{className:`${d?"space-y-3":"grid md:grid-cols-2 gap-x-8 gap-y-3"}`,children:s.map(c=>r.jsxs("li",{className:"flex items-start gap-3",children:[r.jsx("div",{className:"mt-1 w-5 h-5 rounded-full bg-teal/10 flex items-center justify-center shrink-0",children:r.jsx(_e,{className:"h-3 w-3 text-teal"})}),r.jsx("span",{className:"text-sm text-muted-foreground leading-relaxed",children:c})]},c))})]}
vendor: 5,946 bytes, line 13594
13594),d&&r.jsx("div",{className:"flex-1 min-w-0 w-full",children:l.video?r.jsx("div",{className:"rounded-2xl glass-card border border-border overflow-hidden",children:r.jsx("video",{src:l.video+"#t=7",autoPlay:!0,muted:!0,loop:!0,playsInline:!0,className:"w-full h-auto block"})}):l.media?r.jsx(eC,{items:l.media}):l.images?r.jsx(pq,{images:l.images}):null})]},i)})]})]})},vq=["consolidation","planning","close"],kq=[$i,ib,Yn],wq=["from-teal/20 to-teal/5","from-purple/20 to-purple/5","from-teal/15 to-purple/10"],xq=()=>{const{t:e}=Y(),n=vq.map((t,i)=>({icon:kq[i],title:e(`benefits.${t}.title`),desc:e(`benefits.${t}.description`),gradient:wq[i]}));return r.jsxs("section",{id:"features",className:"py-28 bg-background relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-40"}),r.jsxs("div",{className:"container mx-auto px-4 relative z-10",children:[r.jsxs("div",{className:"text-center mb-16 animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-4 block",children:e("benefits.eyebrow")}),r.jsxs("h2",{className:"font-display text-3xl sm:text-5xl font-bold text-foreground tracking-tight",children:[e("benefits.title"),r.jsx("br",{}),e("benefits.titleLine2")," ",r.jsx("span",{className:"text-gradient-multi",children:e("benefits.titleHighlight")})]})]}),r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto",children:n.map((t,i)=>r.jsxs("div",{className:"group relative rounded-2xl glass-card p-8 hover:border-teal/20 transition-all duration-500 overflow-hidden animate-fade-in-up",style:{animationDelay:`${i*120}ms`},children:[r.jsx("div",{className:`absolute inset-0 bg-gradient-to-b ${t.gradient} opacity-0 group-hover:opacity-100 transition-opacity duration-500`}),r.jsxs("div",{className:"relative z-10",children:[r.jsx("div",{className:"w-12 h-12 rounded-xl bg-teal/10 border border-teal/20 flex items-center justify-center mb-6 group-hover:glow-teal-sm transition-all duration-500",children:r.jsx(t.icon,{className:"h-6 w-6 text-teal"})}),r.jsx("h3",{className:"font-display text-xl font-bold mb-3 text-foreground",children:t.title}),r.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:t.desc})]})]},t.title))})]})]})};var Tg="focusScope.autoFocusOnMount",Dg="focusScope.autoFocusOnUnmount",Ty={bubbles:!1,cancelable:!0},yq="FocusScope",nC=b.forwardRef((e,n)=>{const{loop:t=!1,trapped:i=!1,onMountAutoFocus:a,onUnmountAutoFocus:o,...s}=e,[l,d]=b.useState(null),c=vi(a),u=vi(o),h=b.useRef(null),g=zn(n,f=>d(f)),m=b.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;b.useEffect(()=>{if(i){let f=function(x){if(m.paused||!l)return;const y=x.target;l.contains(y)?h.current=y:nr(h.current,{select:!0})},w=function(x){if(m.paused||!l)return;const y=x.relatedTarget;y!==null&&(l.contains(y)||nr(h.current,{select:!0}))},k=function(x){if(document.activeElement===document.body)for(const j of x)j.removedNodes.length>0&&nr(l)};document.addEventListener("focusin",f),document.addEventListener("focusout",w);const v=new MutationObserver(k);return l&&v.observe(l,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",f),document.removeEventListener("focusout",w),v.disconnect()}}},[i,l,m.paused]),b.useEffect(()=>{if(l){By.add(m);const f=document.activeElement;if(!l.contains(f)){const k=new CustomEvent(Tg,Ty);l.addEventListener(Tg,c),l.dispatchEvent(k),k.defaultPrevented||(jq(Eq(tC(l)),{select:!0}),document.activeElement===f&&nr(l))}return()=>{l.removeEventListener(Tg,c),setTimeout(()=>{const k=new CustomEvent(Dg,Ty);l.addEventListener(Dg,u),l.dispatchEvent(k),k.defaultPrevented||nr(f??document.body,{select:!0}),l.removeEventListener(Dg,u),By.remove(m)},0)}}},[l,c,u,m]);const p=b.useCallback(f=>{if(!t&&!i||m.paused)return;const w=f.key==="Tab"&&!f.altKey&&!f.ctrlKey&&!f.metaKey,k=document.activeElement;if(w&&k){const v=f.currentTarget,[x,y]=Sq(v);x&&y?!f.shiftKey&&k===y?(f.preventDefault(),t&&nr(x,{select:!0})):f.shiftKey&&k===x&&(f.preventDefault(),t&&nr(y,{select:!0})):k===v&&f.preventDefault()}},[t,i,m.paused]);return r.jsx(Ue.div,{tabIndex:-1,...s,ref:g,onKeyDown:p})});nC.displayName=yq;function jq(e,{select:n=!1}={}){const t=document.activeElement;for(const i of e)if(nr(i,{select:n}),document.activeElement!==t)return}function Sq(e){const n=tC(e),t=Dy(n,e),i=Dy(n.reverse(),e);return[t,i]}function tC(e){const n=[],t=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:i=>{const a=i.tagName==="INPUT"&&i.type==="hidden";return i.disabled||i.hidden||a?NodeFilter.FILTER_SKIP:i.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;t.nextNode();)n.push(t.currentNode);return n}function Dy(e,n){for(const t of e)if(!zq(t,{upTo:n}))return t}function zq(e,{upTo:n}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(n!==void 0&&e===n)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function Aq(e){return e instanceof HTMLInputElement&&"select"in e}function nr(e,{select:n=!1}={}){if(e&&e.focus){const t=document.activeElement;e.focus({preventScroll:!0}),e!==t&&Aq(e)&&n&&e.select()}}var By=Cq();function Cq(){let e=[];return{add(n){const t=e[0];n!==t&&t?.pause(),e=My(e,n),e.unshift(n)},remove(n){e=My(e,n),e[0]?.resume()}}}function My(e,n){const t=[...e],i=t.indexOf(n);return i!==-1&&t.splice(i,1),t}function Eq(e){return e.filter(n=>n.tagName!=="A")}var Bg=0;function Nq(){b.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??Fy()),document.body.insertAdjacentElement("beforeend",e[1]??Fy()),Bg++,()=>{Bg===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(n=>n.remove()),Bg--}},[])}function Fy(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.
vendor: 5,141 bytes, lines 13594-13595
13594style.position="fixed",e.style.pointerEvents="none",e}var ui=function(){return ui=Object.assign||function(n){for(var t,i=1,a=arguments.length;i<a;i++){t=arguments[i];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(n[o]=t[o])}return n},ui.apply(this,arguments)};function iC(e,n){var t={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&n.indexOf(i)<0&&(t[i]=e[i]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,i=Object.getOwnPropertySymbols(e);a<i.length;a++)n.indexOf(i[a])<0&&Object.prototype.propertyIsEnumerable.call(e,i[a])&&(t[i[a]]=e[i[a]]);return t}function Iq(e,n,t){if(t||arguments.length===2)for(var i=0,a=n.length,o;i<a;i++)(o||!(i in n))&&(o||(o=Array.prototype.slice.call(n,0,i)),o[i]=n[i]);return e.concat(o||Array.prototype.slice.call(n))}var vc="right-scroll-bar-position",kc="width-before-scroll-bar",Pq="with-scroll-bars-hidden",Tq="--removed-body-scroll-bar-size";function Mg(e,n){return typeof e=="function"?e(n):e&&(e.current=n),e}function Dq(e,n){var t=b.useState(function(){return{value:e,callback:n,facade:{get current(){return t.value},set current(i){var a=t.value;a!==i&&(t.value=i,t.callback(i,a))}}}})[0];return t.callback=n,t.facade}var Bq=typeof window<"u"?b.useLayoutEffect:b.useEffect,Ry=new WeakMap;function Mq(e,n){var t=Dq(null,function(i){return e.forEach(function(a){return Mg(a,i)})});return Bq(function(){var i=Ry.get(t);if(i){var a=new Set(i),o=new Set(e),s=t.current;a.forEach(function(l){o.has(l)||Mg(l,null)}),o.forEach(function(l){a.has(l)||Mg(l,s)})}Ry.set(t,e)},[e]),t}function Fq(e){return e}function Rq(e,n){n===void 0&&(n=Fq);var t=[],i=!1,a={read:function(){if(i)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return t.length?t[t.length-1]:e},useMedium:function(o){var s=n(o,i);return t.push(s),function(){t=t.filter(function(l){return l!==s})}},assignSyncMedium:function(o){for(i=!0;t.length;){var s=t;t=[],s.forEach(o)}t={push:function(l){return o(l)},filter:function(){return t}}},assignMedium:function(o){i=!0;var s=[];if(t.length){var l=t;t=[],l.forEach(o),s=t}var d=function(){var u=s;s=[],u.forEach(o)},c=function(){return Promise.resolve().then(d)};c(),t={push:function(u){s.push(u),c()},filter:function(u){return s=s.filter(u),t}}}};return a}function Oq(e){e===void 0&&(e={});var n=Rq(null);return n.options=ui({async:!0,ssr:!1},e),n}var rC=function(e){var n=e.sideCar,t=iC(e,["sideCar"]);if(!n)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var i=n.read();if(!i)throw new Error("Sidecar medium not found");return b.createElement(i,ui({},t))};rC.isSideCarExport=!0;function _q(e,n){return e.useMedium(n),rC}var aC=Oq(),Fg=function(){},dh=b.forwardRef(function(e,n){var t=b.useRef(null),i=b.useState({onScrollCapture:Fg,onWheelCapture:Fg,onTouchMoveCapture:Fg}),a=i[0],o=i[1],s=e.forwardProps,l=e.children,d=e.className,c=e.removeScrollBar,u=e.enabled,h=e.shards,g=e.sideCar,m=e.noRelative,p=e.noIsolation,f=e.inert,w=e.allowPinchZoom,k=e.as,v=k===void 0?"div":k,x=e.gapMode,y=iC(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),j=g,z=Mq([t,n]),S=ui(ui({},y),a);return b.createElement(b.Fragment,null,u&&b.createElement(j,{sideCar:aC,removeScrollBar:c,shards:h,noRelative:m,noIsolation:p,inert:f,setCallbacks:o,allowPinchZoom:!!w,lockRef:t,gapMode:x}),s?b.cloneElement(b.Children.only(l),ui(ui({},S),{ref:z})):b.createElement(v,ui({},S,{className:d,ref:z}),l))});dh.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};dh.classNames={fullWidth:kc,zeroRight:vc};var Lq=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function Wq(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var n=Lq();return n&&e.setAttribute("nonce",n),e}function Vq(e,n){e.styleSheet?e.styleSheet.cssText=n:e.appendChild(document.createTextNode(n))}function Kq(e){var n=document.head||document.getElementsByTagName("head")[0];n.appendChild(e)}var qq=function(){var e=0,n=null;return{add:function(t){e==0&&(n=Wq())&&(Vq(n,t),Kq(n)),e++},remove:function(){e--,!e&&n&&(n.parentNode&&n.parentNode.removeChild(n),n=null)}}},Hq=function(){var e=qq();return function(n,t){b.useEffect(function(){return e.add(n),function(){e.remove()}},[n&&t])}},oC=function(){var e=Hq(),n=function(t){var i=t.styles,a=t.dynamic;return e(i,a),null};return n},Uq={left:0,top:0,right:0,gap:0},Rg=function(e){return parseInt(e||"",10)||0},Gq=function(e){var n=window.getComputedStyle(document.body),t=n[e==="padding"?"paddingLeft":"marginLeft"],i=n[e==="padding"?"paddingTop":"marginTop"],a=n[e==="padding"?"paddingRight":"marginRight"];return[Rg(t),Rg(i),Rg(a)]},$q=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return Uq;var n=Gq(e),t=document.documentElement.clientWidth,i=window.innerWidth;return{left:n[0],top:n[1],right:n[2],gap:Math.max(0,i-t+n[2]-n[0])}},Zq=oC(),ro="data-scroll-locked",Yq=function(e,n,t,i){var a=e.left,o=e.top,s=e.right,l=e.gap;return t===void 0&&(t="margin"),`
13595  .`.concat(Pq,` {
13596   overflow: hidden `).concat(i,`;
13597   padding-right: `).concat(l,"px ").concat(i,`;
13598  }
13599  body[`).concat(ro,`] {
13600    overflow: hidden `).concat(i,`;
13601    overscroll-behavior: contain;
13602    `).concat([n&&"position: relative ".concat(i,";"),t==="margin"&&`
13603    padding-left: `.concat(a,`px;
13604    padding-top: `).concat(o,`px;
13605    padding-right: `).concat(s,`px;
13606    margin-left:0;
13607    margin-top:0;
13608    margin-right: `).concat(l,"px ").concat(i,`;
13609    `),t==="padding"&&"padding-right: ".concat(l,"px ").concat(i,";")].filter(Boolean).join(""),`
13610  }
13611  
13612  .`).concat(vc,` {
13613    right: `).concat(l,"px ").concat(i,`;
13614  }
13615  
13616  .`).concat(kc,` {
13617    margin-right: `).concat(l,"px ").concat(i,`;
13618  }
13619  
13620  .`).concat(vc," .").concat(vc,` {
13621    right: 0 `).concat(i,`;
13622  }
13623  
13624  .`).concat(kc," .").concat(kc,` {
13625    margin-right: 0 `).concat(i,`;
13626  }
13627  
13628  body[`).concat(ro,`] {
13629    `).concat(Tq,": ").concat(l,`px;
13630  }
13631`)},Oy=function(){var e=parseInt(document.body.getAttribute(ro)||"0",10);return isFinite(e)?e:0},Qq=function(){b.useEffect(function(){return document.body.setAttribute(ro,(Oy()+1).toString()),function(){var e=Oy()-1;e<=0?document.body.removeAttribute(ro):document.body.setAttribute(ro,e.toString())}},[])},Jq=function(e){var n=e.noRelative,t=e.noImportant,i=e.gapMode,a=i===void 0?"margin":i;Qq();var o=b.useMemo(function(){return $q(a)},[a]);return b.createElement(Zq,{styles:Yq(o,!n,a,t?"":"!important")})},Kp=!1;if(typeof window<"u")try{var Pd=Object.defineProperty({},"passive",{get:function(){return Kp=!0,!0}});window.addEventListener("test",Pd,Pd),window.removeEventListener("test",Pd,Pd)}catch{Kp=!1}var Aa=Kp?{passive:!1}:!1,Xq=function(e){return e.tagName==="TEXTAREA"},sC=function(e,n){if(!(e instanceof Element))return!1;var t=window.getComputedStyle(e);return t[n]!=="hidden"&&!(t.overflowY===t.overflowX&&!Xq(e)&&t[n]==="visible")},e9=function(e){return sC(e,"overflowY")},n9=function(e){return sC(e,"overflowX")},_y=function(e,n){var t=n.ownerDocument,i=n;do{typeof ShadowRoot<"u"&&i instanceof ShadowRoot&&(i=i.host);var a=lC(e,i);if(a){var o=dC(e,i),s=o[1],l=o[2];if(s>l)return!0}i=i.parentNode}while(i&&i!==t.body);return!1},t9=function(e){var n=e.scrollTop,t=e.scrollHeight,i=e.clientHeight;return[n,t,i]},i9=function(e){var n=e.scrollLeft,t=e.scrollWidth,i=e.clientWidth;return[n,t,i]},lC=function(e,n){return e==="v"?e9(n):n9(n)},dC=function(e,n){return e==="v"?t9(n):i9(n)},r9=function(e,n){return e==="h"&&n==="rtl"?-1:1},a9=function(e,n,t,i,a){var o=r9(e,window.getComputedStyle(n).direction),s=o*i,l=t.target,d=n.contains(l),c=!1,u=s>0,h=0,g=0;do{if(!l)break;var m=dC(e,l),p=m[0],f=m[1],w=m[2],k=f-w-o*p;(p||k)&&lC(e,l)&&(h+=k,g+=p);var v=l.parentNode;l=v&&v.nodeType===Node.DOCUMENT_FRAGMENT_NODE?v.host:v}while(!d&&l!==document.body||d&&(n.contains(l)||n===l));return(u&&(Math.abs(h)<1||!a)||!u&&(Math.abs(g)<1||!a))&&(c=!0),c},Td=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},Ly=function(e){return[e.deltaX,e.deltaY]},Wy=function(e){return e&&"current"in e?e.current:e},o9=function(e,n){return e[0]===n[0]&&e[1]===n[1]},s9=function(e){return`
13632  .block-interactivity-`.concat(e,` {pointer-events: none;}
13633  .allow-interactivity-`).concat(e,` {pointer-events: all;}
13634`)},l9=0,Ca=[];function d9(e){var n=b.useRef([]),t=b.useRef([0,0]),i=b.useRef(),a=b.useState(l9++)[0],o=b.useState(oC)[0],s=b.useRef(e);b.useEffect(function(){s.current=e},[e]),b.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(a));var f=Iq([e.lockRef.current],(e.shards||[]).map(Wy),!0).filter(Boolean);return f.forEach(function(w){return w.classList.add("allow-interactivity-".concat(a))}),function(){document.body.classList.remove("block-interactivity-".concat(a)),f.forEach(function(w){return w.classList.remove("allow-interactivity-".concat(a))})}}},[e.inert,e.lockRef.current,e.shards]);var l=b.useCallback(function(f,w){if("touches"in f&&f.touches.length===2||f.type==="wheel"&&f.ctrlKey)return!s.current.allowPinchZoom;var k=Td(f),v=t.current,x="deltaX"in f?f.deltaX:v[0]-k[0],y="deltaY"in f?f.deltaY:v[1]-k[1],j,z=f.target,S=Math.abs(x)>Math.abs(y)?"h":"v";if("touches"in f&&S==="h"&&z.type==="range")return!1;var A=_y(S,z);
vendor: 4,509 bytes, line 13634
13634if(!A)return!0;if(A?j=S:(j=S==="v"?"h":"v",A=_y(S,z)),!A)return!1;if(!i.current&&"changedTouches"in f&&(x||y)&&(i.current=j),!j)return!0;var E=i.current||j;return a9(E,w,f,E==="h"?x:y,!0)},[]),d=b.useCallback(function(f){var w=f;if(!(!Ca.length||Ca[Ca.length-1]!==o)){var k="deltaY"in w?Ly(w):Td(w),v=n.current.filter(function(j){return j.name===w.type&&(j.target===w.target||w.target===j.shadowParent)&&o9(j.delta,k)})[0];if(v&&v.should){w.cancelable&&w.preventDefault();return}if(!v){var x=(s.current.shards||[]).map(Wy).filter(Boolean).filter(function(j){return j.contains(w.target)}),y=x.length>0?l(w,x[0]):!s.current.noIsolation;y&&w.cancelable&&w.preventDefault()}}},[]),c=b.useCallback(function(f,w,k,v){var x={name:f,delta:w,target:k,should:v,shadowParent:c9(k)};n.current.push(x),setTimeout(function(){n.current=n.current.filter(function(y){return y!==x})},1)},[]),u=b.useCallback(function(f){t.current=Td(f),i.current=void 0},[]),h=b.useCallback(function(f){c(f.type,Ly(f),f.target,l(f,e.lockRef.current))},[]),g=b.useCallback(function(f){c(f.type,Td(f),f.target,l(f,e.lockRef.current))},[]);b.useEffect(function(){return Ca.push(o),e.setCallbacks({onScrollCapture:h,onWheelCapture:h,onTouchMoveCapture:g}),document.addEventListener("wheel",d,Aa),document.addEventListener("touchmove",d,Aa),document.addEventListener("touchstart",u,Aa),function(){Ca=Ca.filter(function(f){return f!==o}),document.removeEventListener("wheel",d,Aa),document.removeEventListener("touchmove",d,Aa),document.removeEventListener("touchstart",u,Aa)}},[]);var m=e.removeScrollBar,p=e.inert;return b.createElement(b.Fragment,null,p?b.createElement(o,{styles:s9(a)}):null,m?b.createElement(Jq,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function c9(e){for(var n=null;e!==null;)e instanceof ShadowRoot&&(n=e.host,e=e.host),e=e.parentNode;return n}const u9=_q(aC,d9);var cC=b.forwardRef(function(e,n){return b.createElement(dh,ui({},e,{ref:n,sideCar:u9}))});cC.classNames=dh.classNames;var h9=function(e){if(typeof document>"u")return null;var n=Array.isArray(e)?e[0]:e;return n.ownerDocument.body},Ea=new WeakMap,Dd=new WeakMap,Bd={},Og=0,uC=function(e){return e&&(e.host||uC(e.parentNode))},g9=function(e,n){return n.map(function(t){if(e.contains(t))return t;var i=uC(t);return i&&e.contains(i)?i:(console.error("aria-hidden",t,"in not contained inside",e,". Doing nothing"),null)}).filter(function(t){return!!t})},m9=function(e,n,t,i){var a=g9(n,Array.isArray(e)?e:[e]);Bd[t]||(Bd[t]=new WeakMap);var o=Bd[t],s=[],l=new Set,d=new Set(a),c=function(h){!h||l.has(h)||(l.add(h),c(h.parentNode))};a.forEach(c);var u=function(h){!h||d.has(h)||Array.prototype.forEach.call(h.children,function(g){if(l.has(g))u(g);else try{var m=g.getAttribute(i),p=m!==null&&m!=="false",f=(Ea.get(g)||0)+1,w=(o.get(g)||0)+1;Ea.set(g,f),o.set(g,w),s.push(g),f===1&&p&&Dd.set(g,!0),w===1&&g.setAttribute(t,"true"),p||g.setAttribute(i,"true")}catch(k){console.error("aria-hidden: cannot operate on ",g,k)}})};return u(n),l.clear(),Og++,function(){s.forEach(function(h){var g=Ea.get(h)-1,m=o.get(h)-1;Ea.set(h,g),o.set(h,m),g||(Dd.has(h)||h.removeAttribute(i),Dd.delete(h)),m||h.removeAttribute(t)}),Og--,Og||(Ea=new WeakMap,Ea=new WeakMap,Dd=new WeakMap,Bd={})}},p9=function(e,n,t){t===void 0&&(t="data-aria-hidden");var i=Array.from(Array.isArray(e)?e:[e]),a=h9(e);return a?(i.push.apply(i,Array.from(a.querySelectorAll("[aria-live]"))),m9(i,a,t,"aria-hidden")):function(){return null}},ch="Dialog",[hC,ZQ]=Tr(ch),[f9,ni]=hC(ch),gC=e=>{const{__scopeDialog:n,children:t,open:i,defaultOpen:a,onOpenChange:o,modal:s=!0}=e,l=b.useRef(null),d=b.useRef(null),[c,u]=ba({prop:i,defaultProp:a??!1,onChange:o,caller:ch});return r.jsx(f9,{scope:n,triggerRef:l,contentRef:d,contentId:to(),titleId:to(),descriptionId:to(),open:c,onOpenChange:u,onOpenToggle:b.useCallback(()=>u(h=>!h),[u]),modal:s,children:t})};gC.displayName=ch;var mC="DialogTrigger",b9=b.forwardRef((e,n)=>{const{__scopeDialog:t,...i}=e,a=ni(mC,t),o=zn(n,a.triggerRef);return r.jsx(Ue.button,{type:"button","aria-haspopup":"dialog","aria-expanded":a.open,"aria-controls":a.contentId,"data-state":hv(a.open),...i,ref:o,onClick:qe(e.onClick,a.onOpenToggle)})});b9.displayName=mC;var cv="DialogPortal",[v9,pC]=hC(cv,{forceMount:void 0}),fC=e=>{const{__scopeDialog:n,forceMount:t,children:i,container:a}=e,o=ni(cv,n);return r.jsx(v9,{scope:n,forceMount:t,children:b.Children.map(i,s=>r.jsx(fa,{present:t||o.open,children:r.jsx(Qf,{asChild:!0,container:a,children:s})}))})};fC.displayName=cv;
vendor: 4,805 bytes, lines 13634-13638
13634var mu="DialogOverlay",bC=b.forwardRef((e,n)=>{const t=pC(mu,e.__scopeDialog),{forceMount:i=t.forceMount,...a}=e,o=ni(mu,e.__scopeDialog);return o.modal?r.jsx(fa,{present:i||o.open,children:r.jsx(w9,{...a,ref:n})}):null});bC.displayName=mu;var k9=cl("DialogOverlay.RemoveScroll"),w9=b.forwardRef((e,n)=>{const{__scopeDialog:t,...i}=e,a=ni(mu,t);return r.jsx(cC,{as:k9,allowPinchZoom:!0,shards:[a.contentRef],children:r.jsx(Ue.div,{"data-state":hv(a.open),...i,ref:n,style:{pointerEvents:"auto",...i.style}})})}),ha="DialogContent",vC=b.forwardRef((e,n)=>{const t=pC(ha,e.__scopeDialog),{forceMount:i=t.forceMount,...a}=e,o=ni(ha,e.__scopeDialog);return r.jsx(fa,{present:i||o.open,children:o.modal?r.jsx(x9,{...a,ref:n}):r.jsx(y9,{...a,ref:n})})});vC.displayName=ha;var x9=b.forwardRef((e,n)=>{const t=ni(ha,e.__scopeDialog),i=b.useRef(null),a=zn(n,t.contentRef,i);return b.useEffect(()=>{const o=i.current;if(o)return p9(o)},[]),r.jsx(kC,{...e,ref:a,trapFocus:t.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:qe(e.onCloseAutoFocus,o=>{o.preventDefault(),t.triggerRef.current?.focus()}),onPointerDownOutside:qe(e.onPointerDownOutside,o=>{const s=o.detail.originalEvent,l=s.button===0&&s.ctrlKey===!0;(s.button===2||l)&&o.preventDefault()}),onFocusOutside:qe(e.onFocusOutside,o=>o.preventDefault())})}),y9=b.forwardRef((e,n)=>{const t=ni(ha,e.__scopeDialog),i=b.useRef(!1),a=b.useRef(!1);return r.jsx(kC,{...e,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{e.onCloseAutoFocus?.(o),o.defaultPrevented||(i.current||t.triggerRef.current?.focus(),o.preventDefault()),i.current=!1,a.current=!1},onInteractOutside:o=>{e.onInteractOutside?.(o),o.defaultPrevented||(i.current=!0,o.detail.originalEvent.type==="pointerdown"&&(a.current=!0));const s=o.target;t.triggerRef.current?.contains(s)&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&a.current&&o.preventDefault()}})}),kC=b.forwardRef((e,n)=>{const{__scopeDialog:t,trapFocus:i,onOpenAutoFocus:a,onCloseAutoFocus:o,...s}=e,l=ni(ha,t),d=b.useRef(null),c=zn(n,d);return Nq(),r.jsxs(r.Fragment,{children:[r.jsx(nC,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:a,onUnmountAutoFocus:o,children:r.jsx(_u,{role:"dialog",id:l.contentId,"aria-describedby":l.descriptionId,"aria-labelledby":l.titleId,"data-state":hv(l.open),...s,ref:c,onDismiss:()=>l.onOpenChange(!1)})}),r.jsxs(r.Fragment,{children:[r.jsx(j9,{titleId:l.titleId}),r.jsx(z9,{contentRef:d,descriptionId:l.descriptionId})]})]})}),uv="DialogTitle",wC=b.forwardRef((e,n)=>{const{__scopeDialog:t,...i}=e,a=ni(uv,t);return r.jsx(Ue.h2,{id:a.titleId,...i,ref:n})});wC.displayName=uv;var xC="DialogDescription",yC=b.forwardRef((e,n)=>{const{__scopeDialog:t,...i}=e,a=ni(xC,t);return r.jsx(Ue.p,{id:a.descriptionId,...i,ref:n})});yC.displayName=xC;var jC="DialogClose",SC=b.forwardRef((e,n)=>{const{__scopeDialog:t,...i}=e,a=ni(jC,t);return r.jsx(Ue.button,{type:"button",...i,ref:n,onClick:qe(e.onClick,()=>a.onOpenChange(!1))})});SC.displayName=jC;function hv(e){return e?"open":"closed"}var zC="DialogTitleWarning",[YQ,AC]=t4(zC,{contentName:ha,titleName:uv,docsSlug:"dialog"}),j9=({titleId:e})=>{const n=AC(zC),t=`\`${n.contentName}\` requires a \`${n.titleName}\` for the component to be accessible for screen reader users.
13635
13636If you want to hide the \`${n.titleName}\`, you can wrap it with our VisuallyHidden component.
13637
13638For more information, see https://radix-ui.com/primitives/docs/components/${n.docsSlug}`;return b.useEffect(()=>{e&&(document.getElementById(e)||console.error(t))},[t,e]),null},S9="DialogDescriptionWarning",z9=({contentRef:e,descriptionId:n})=>{const i=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${AC(S9).contentName}}.`;return b.useEffect(()=>{const a=e.current?.getAttribute("aria-describedby");n&&a&&(document.getElementById(n)||console.warn(i))},[i,e,n]),null},A9=gC,C9=fC,CC=bC,EC=vC,NC=wC,IC=yC,E9=SC;const N9=A9,I9=C9,PC=b.forwardRef(({className:e,...n},t)=>r.jsx(CC,{ref:t,className:An("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...n}));PC.displayName=CC.displayName;const TC=b.forwardRef(({className:e,children:n,...t},i)=>r.jsxs(I9,{children:[r.jsx(PC,{}),r.jsxs(EC,{ref:i,className:An("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rou
13638nded-lg",e),...t,children:[n,r.jsxs(E9,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity data-[state=open]:bg-accent data-[state=open]:text-muted-foreground hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",children:[r.jsx(xi,{className:"h-4 w-4"}),r.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));TC.displayName=EC.displayName;const DC=({className:e,...n})=>r.jsx("div",{className:An("flex flex-col space-y-1.5 text-center sm:text-left",e),...n});DC.displayName="DialogHeader";const BC=b.forwardRef(({className:e,...n},t)=>r.jsx(NC,{ref:t,className:An("text-lg font-semibold leading-none tracking-tight",e),...n}));BC.displayName=NC.displayName;const MC=b.forwardRef(({className:e,...n},t)=>r.jsx(IC,{ref:t,className:An("text-sm text-muted-foreground",e),...n}));MC.displayName=IC.displayName;const FC="sb-cookie-consent-v1",Vy=e=>{if(typeof window>"u")return;window.dataLayer=window.dataLayer||[],((...t)=>window.dataLayer?.push(t))("consent","update",{ad_storage:e.marketing,ad_user_data:e.marketing,ad_personalization:e.marketing,analytics_storage:e.analytics,functionality_storage:"granted",security_storage:"granted"}),window.dataLayer.push({event:"cookie_consent_update",cookie_consent_analytics:e.analytics,cookie_consent_marketing:e.marketing}),window.dispatchEvent(new CustomEvent("sb:consent-updated",{detail:e}))},RC=()=>{if(typeof window>"u")return null;try{const e=window.localStorage.getItem(FC);return e?JSON.parse(e):null}catch{return null}},P9=()=>{const{t:e,i18n:n}=Y(),[t,i]=b.useState(!1),[a,o]=b.useState(!1),[s,l]=b.useState(!0),[d,c]=b.useState(!0),u=n.language==="de"?"de":n.language?.startsWith("en")?"en":"nl";b.useEffect(()=>{const g=RC();g?Vy(g):i(!0);const m=()=>i(!0);return window.addEventListener("sb:open-cookie-settings",m),()=>window.removeEventListener("sb:open-cookie-settings",m)},[]);const h=(g,m)=>{const p={analytics:g?"granted":"denied",marketing:m?"granted":"denied",date:new Date().toISOString()};try{window.localStorage.setItem(FC,JSON.stringify(p))}catch{}Vy(p),i(!1)};return t?r.jsx("div",{role:"dialog","aria-modal":"false","aria-label":e("cookieConsent.title"),className:"fixed inset-x-0 bottom-0 z-[70] p-3 md:p-5",children:r.jsx("div",{className:"mx-auto max-w-4xl rounded-2xl border border-turquoise/25 bg-card shadow-[0_16px_48px_-16px_rgba(15,25,35,0.35)] backdrop-blur-sm",children:r.jsxs("div",{className:"relative p-5 md:p-6",children:[r.jsx("button",{onClick:()=>h(!1,!1),"aria-label":e("cookieConsent.reject"),className:"absolute right-3 top-3 text-muted-foreground hover:text-foreground transition-colors",children:r.jsx(xi,{className:"h-4 w-4"})}),r.jsx("h2",{className:"text-foreground font-semibold text-base md:text-lg mb-2 pr-8",children:e("cookieConsent.title")}),r.jsxs("p",{className:"text-muted-foreground text-sm leading-relaxed mb-4",children:[e("cookieConsent.body")," ",r.jsx("a",{href:B("cookiebeleid",u),className:"text-turquoise underline underline-offset-2 hover:opacity-80",children:e("cookieConsent.policyLink")})]}),a&&r.jsxs("div",{className:"mb-4 space-y-3 rounded-xl border border-border bg-background/60 p-4",children:[r.jsxs("div",{className:"flex items-start justify-between gap-4",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-foreground text-sm font-medium",children:e("cookieConsent.categories.functional.title")}),r.jsx("div",{className:"text-muted-foreground text-xs",children:e("cookieConsent.categories.functional.description")})]}),r.jsx("span",{className:"text-xs text-muted-foreground shrink-0 mt-1",children:e("cookieConsent.alwaysOn")})]}),r.jsxs("label",{className:"flex items-start justify-between gap-4 cursor-pointer",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-foreground text-sm font-medium",children:e("cookieConsent.categories.analytics.title")}),r.jsx("div",{className:"text-muted-foreground text-xs",children:e("cookieConsent.categories.analytics.description")})]}),r.jsx("input",{type:"checkbox",checked:s,onChange:g=>l(g.target.checked),className:"mt-1 h-4 w-4 shrink-0 accent-[hsl(var(--turquoise))]"})]}),r.jsxs("label",{className:"flex items-start justify-between gap-4 cursor-pointer",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-foreground text-sm font-medium",children:e("cookieConsent.categories.marketing.title")}),r.jsx("div",{className:"text-muted-foreground text-xs",children:e("cookieConsent.categories.marketing.description")})]}),r.jsx("input",{type:"checkbox",checked:d,onChange:g=>c(g.target.checked),className:"mt-1 h-4 w-4 shrink-0 accent-[hsl(var(--turquoise))]"})]})]}),r.jsxs("div",{className:"flex flex-col sm:flex-row gap-2 sm:items-center",children:[r.jsx("button",{onClick:()=>h(!0,!0),className:"btn-primary w-full sm:w-auto",children:e("cookieConsent.acceptAll")}),r.jsx("button",{onClick:()=>h(!1,!1),className:"w-full sm:w-auto rounded-lg border border-border px-5 py-2.5 text-sm font-medium text-foreground hover:bg-muted transition-colors",children:e("cookieConsent.reject")}),a?r.jsx("button",{onClick:()=>h(s,d),className:"w-full sm:w-auto rounded-lg border border-turquoise/40 px-5 py-2.5 text-sm font-medium text-turquoise hover:bg-turquoise/10 transition-colors",children:e("cookieConsent.saveSelection")}):r.jsx("button",{onClick:()=>o(!0),className:"w-full sm:w-auto px-2 py-2.5 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors sm:ml-auto",children:e("cookieConsent.settings")})]})]})})}):null},Ky="https://js-eu1.hsforms.net/forms/embed/v2.js",T9=()=>new Promise(e=>{if(typeof window>"u"||window.hbspt)return e();const n=document.querySelector(`script[src="${Ky}"]`);if(n){n.addEventListener("load",()=>e());return}const t=document.createElement("script");t.src=Ky,t.async=!0,t.charset="utf-8",t.onload=()=>e(),document.body.appendChild(t)}),Ko=({portalId:e,formId:n,region:t="eu1",className:i,variant:a})=>{const{t:o}=Y(),s=b.useRef(null),l=`hs-form-${n}`,[d,c]=b.useState(!1);return b.useEffect(()=>{const u=()=>c(RC()?.marketing==="granted");return u(),window.addEventListener("sb:consent-updated",u),()=>window.removeEventListener("sb:consent-updated",u)},[]),b.useEffect(()=>{if(!d)return;let u=!1;return T9().then(()=>{u||!window.hbspt||!s.current||(s.current.innerHTML="",window.hbspt.forms.create({portalId:e,formId:n,region:t,target:`#${l}`}))}),()=>{u=!0}},[d,e,n,t,l]),d?r.jsx("div",{id:l,ref:s,className:i,style:{minHeight:420}}):r.jsx("div",{className:i,style:{minHeight:420},children:r.jsxs("div",{className:"flex h-full min-h-[420px] flex-col items-center justify-center gap-3 rounded-xl border border-border bg-background/60 p-6 text-center",children:[r.jsx("div",{className:"text-foreground text-base font-semibold",children:o("cookieConsent.formBlocked.title")}),r.jsx("p",{className:"text-muted-foreground max-w-sm text-sm leading-relaxed",children:o("cookieConsent.formBlocked.body")}),r.jsx("button",{type:"button",onClick:()=>
13638window.dispatchEvent(new Event("sb:open-cookie-settings")),className:"btn-primary",children:o("cookieConsent.formBlocked.cta")})]})})},qo="/assets/michel-CRD3a8x2.jpg",va=()=>{const[e,n]=b.useState(!1),{t,i18n:i}=Y(),a=i.language==="de"?"de":i.language!=="nl"?"en":"nl",o=t("cta.webinar.bullets",{returnObjects:!0}),s=Array.isArray(o)?o:[];return r.jsxs("section",{id:"resources",className:"relative py-28 md:py-32 section-alt border-y border-white/10 overflow-hidden",children:[r.jsx("div",{"aria-hidden":"true",className:"absolute -top-32 left-1/2 -translate-x-1/2 w-[700px] h-[400px] rounded-full blur-3xl opacity-[0.08] pointer-events-none",style:{background:"radial-gradient(circle, hsl(var(--turquoise)) 0%, transparent 70%)"}}),r.jsx("div",{className:"container mx-auto px-4 relative z-10",children:r.jsxs("div",{className:"max-w-6xl mx-auto",children:[r.jsxs("div",{className:"text-center mb-12 md:mb-14 max-w-2xl mx-auto animate-fade-in-up",children:[r.jsxs("span",{className:"inline-flex items-center gap-2 text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-4",children:[r.jsx("span",{className:"w-8 h-px bg-teal/60"}),t("cta.sectionEyebrow"),r.jsx("span",{className:"w-8 h-px bg-teal/60"})]}),r.jsx("h2",{className:"font-display text-3xl md:text-4xl lg:text-5xl font-bold leading-[1.1] tracking-[-0.02em] text-foreground",children:t("cta.sectionTitle")})]}),r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[1.6fr_1fr] gap-5 lg:gap-6 items-stretch",children:[r.jsx("div",{className:"group relative overflow-hidden rounded-3xl border border-midnight/[0.08] bg-white p-8 md:p-10 shadow-[0_8px_28px_-12px_rgba(15,25,35,0.12)] flex flex-col animate-fade-in-up",children:r.jsxs("div",{className:"relative flex flex-col h-full",children:[r.jsxs("div",{className:"flex items-center gap-2 mb-6 flex-wrap",children:[r.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-turquoise/10 border border-turquoise/30 px-3 py-1 text-[11px] font-semibold uppercase tracking-[0.14em] text-turquoise",children:[r.jsx(Jt,{className:"h-3 w-3"}),t("cta.webinar.recommended")]}),r.jsxs("span",{className:"inline-flex items-center gap-1.5 text-xs text-muted-foreground",children:[r.jsx(fo,{className:"h-3.5 w-3.5"}),t("cta.webinar.duration")]})]}),r.jsxs("div",{className:"flex items-start gap-5 mb-5",children:[r.jsx("div",{className:"relative shrink-0",children:r.jsx("div",{className:"relative w-14 h-14 rounded-2xl bg-[#0F1923] flex items-center justify-center shadow-md group-hover:scale-105 transition-transform duration-300",children:r.jsx(yw,{className:"h-6 w-6 text-white fill-white ml-0.5"})})}),r.jsx("div",{className:"flex-1 min-w-0",children:r.jsx("h3",{className:"font-display text-2xl md:text-3xl font-bold leading-[1.15] tracking-[-0.015em] text-foreground",children:t("cta.webinar.title")})})]}),r.jsx("p",{className:"text-muted-foreground text-base leading-relaxed mb-6",children:t("cta.webinar.description")}),s.length>0&&r.jsx("ul",{className:"space-y-3 mb-8",children:s.map(l=>r.jsxs("li",{className:"flex items-start gap-3 text-sm text-foreground/90",children:[r.jsx(Yn,{className:"h-[18px] w-[18px] text-turquoise shrink-0 mt-0.5"}),r.jsx("span",{children:l})]},l))}),r.jsxs("div",{className:"mt-auto pt-2 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-5",children:[r.jsxs("div",{children:[r.jsx(_,{to:B("liveWebinar",a),className:"inline-block",children:r.jsxs("button",{className:"btn-primary inline-flex items-center gap-2 justify-center",children:[r.jsx(yw,{className:"h-4 w-4 fill-current"}),t("cta.webinar.button"),r.jsx(re,{className:"h-4 w-4"})]})}),r.jsx("p",{className:"text-xs text-muted-foreground mt-3",children:t("cta.webinar.microcopy")})]}),r.jsxs("div",{className:"flex items-center gap-3 sm:border-l sm:border-turquoise/20 sm:pl-5",children:[r.jsx("img",{src:qo,alt:"Michel van Wijngaarden, founder Smartbooks",className:"w-12 h-12 rounded-full object-cover border-2 border-turquoise/40 shadow-lg shrink-0"}),r.jsxs("div",{className:"min-w-0",children:[r.jsx("div",{className:"text-[11px] uppercase tracking-[0.12em] text-muted-foreground font-semibold",children:t("cta.webinar.hostedBy")}),r.jsx("div",{className:"text-sm font-bold text-foreground leading-tight",children:"Michel van Wijngaarden"}),r.jsx("div",{className:"text-xs text-turquoise font-medium",children:t("cta.webinar.hostRole")}
13638)]})]})]})]})}),r.jsx("div",{className:"group relative overflow-hidden rounded-3xl border border-midnight/[0.08] bg-white p-8 shadow-[0_8px_28px_-12px_rgba(15,25,35,0.12)] flex flex-col animate-fade-in-up",style:{animationDelay:"100ms"},children:r.jsxs("div",{className:"flex flex-col h-full",children:[r.jsx("div",{className:"w-11 h-11 rounded-xl bg-turquoise/10 border border-turquoise/30 flex items-center justify-center mb-5",children:r.jsx(Nl,{className:"h-5 w-5 text-turquoise"})}),r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-[0.14em] text-turquoise mb-2",children:t("cta.whitepaper.eyebrow")}),r.jsx("h3",{className:"font-display text-xl md:text-2xl font-bold leading-[1.2] tracking-[-0.01em] text-foreground mb-3",children:t("cta.whitepaper.title")}),r.jsx("p",{className:"text-sm text-muted-foreground leading-relaxed mb-6",children:t("cta.whitepaper.description")}),r.jsx("div",{className:"mt-auto pt-2",children:r.jsxs("button",{type:"button",onClick:()=>n(!0),className:"inline-flex items-center gap-2 px-5 py-3 rounded-lg border border-turquoise/40 bg-turquoise/5 text-sm font-semibold text-turquoise hover:bg-turquoise hover:text-white hover:border-turquoise transition-all duration-200",children:[t("cta.whitepaper.button"),r.jsx(re,{className:"h-4 w-4"})]})})]})})]})]})}),r.jsx(N9,{open:e,onOpenChange:n,children:r.jsxs(TC,{className:"sm:max-w-lg bg-slate-200 border-slate-300",children:[r.jsxs(DC,{children:[r.jsx(BC,{className:"font-display text-xl text-slate-800",children:t("cta.dialog.title")}),r.jsx(MC,{className:"text-slate-600",children:t("cta.dialog.description")})]}),e&&r.jsx(Ko,{portalId:"144146156",formId:"6b5c1c86-3cbc-490a-9b80-1ef38dc5b481",region:"eu1"})]})})]})},D9=()=>{const{t:e}=Y();return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("seo.functionaliteiten.title"),description:e("seo.functionaliteiten.description"),pathByLocale:je("functionaliteiten")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsx(mq,{}),r.jsx(xq,{}),r.jsx(bq,{}),r.jsx(Rl,{}),r.jsx(va,{}),r.jsx(Ne,{})]})},B9=({translationPrefix:e,screenshot:n,customRight:t,background:i,compact:a=!1})=>{const{t:o,i18n:s}=Y(),l=s.language==="de"?"de":s.language!=="nl"?"en":"nl",d=!!(n||t);return r.jsxs("section",{className:"relative overflow-hidden gradient-hero",children:[r.jsx("div",{className:"absolute top-0 left-0 right-0 h-[400px] pointer-events-none z-[1]",style:{background:"radial-gradient(ellipse 90% 50% at 50% 0%, rgba(0,180,216,0.15) 0%, transparent 70%)"},"aria-hidden":"true"}),i,r.jsx("div",{className:`max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20 relative z-10 ${a?"py-8 md:py-10":"pt-10 md:pt-16 pb-16"}`,children:r.jsxs("div",{className:`flex flex-col ${d?"lg:flex-row":""} items-center ${a?"gap-7 lg:gap-10":"gap-10 lg:gap-16"}`,children:[r.jsxs("div",{className:`${d?"flex-1 text-center lg:text-left":"max-w-3xl mx-auto text-center"}`,children:[o(`${e}.hero.eyebrow`,{defaultValue:""})&&r.jsx("span",{className:"inline-block text-xs font-semibold uppercase tracking-[0.2em] text-[#00B4D8] mb-4 animate-fade-in-up",children:o(`${e}.hero.eyebrow`)}),r.jsx("h1",{className:"text-[28px] md:text-[44px] font-extrabold leading-[1.1] tracking-[-0.02em] text-white mb-5 animate-fade-in-up",children:o(`${e}.hero.headline`)}),r.jsx("p",{className:`text-lg text-secondary leading-relaxed mb-8 max-w-xl animate-fade-in-up ${d?"mx-auto lg:mx-0":"mx-auto"}`,style:{animationDelay:"80ms"},children:o(`${e}.hero.subtext`)}),r.jsx("div",{className:`flex flex-wrap items-center gap-4 animate-fade-in-up ${d?"justify-center lg:justify-start":"justify-center"}`,style:{animationDelay:"140ms"},children:r.jsx(_,{to:B("planDemo",l),children:r.jsxs("button",{className:"bg-[#FF7900] hover:bg-[#E56D00] text-white font-semibold py-3 px-7 rounded-lg transition-colors flex items-center gap-2",children:[o("hero.cta")," ",r.jsx(re,{className:"h-4 w-4"})]})})})]}
13638),n&&!t&&r.jsx("div",{className:"flex-1 min-w-0 w-full animate-fade-in-up",style:{animationDelay:"200ms"},children:r.jsx("div",{className:"rounded-2xl glass-card border border-border overflow-hidden shadow-2xl",children:r.jsx("img",{src:n,alt:o(`${e}.hero.headline`),className:"w-full h-auto block"})})}),t&&r.jsx("div",{className:"flex-1 min-w-0 w-full animate-fade-in-up",style:{animationDelay:"200ms"},children:t})]})})]})},M9=({translationPrefix:e,compact:n=!1})=>{const{t}=Y(),i=t(`${e}.painPoints`,{returnObjects:!0}),a=t(`${e}.painPointsEyebrow`,{defaultValue:""}),o=t(`${e}.painPointsTitle`,{defaultValue:""});return r.jsxs("section",{className:`dark-surface relative overflow-hidden bg-[hsl(0_0%_4%)] ${n?"py-6 md:py-8":"py-20"}`,children:[r.jsx("div",{className:"absolute inset-0 pointer-events-none",children:r.jsx("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[600px] bg-[radial-gradient(ellipse,hsl(15_80%_50%/0.08),transparent_70%)]"})}),r.jsxs("div",{className:"container mx-auto px-4 relative z-10 max-w-5xl",children:[r.jsxs("div",{className:`text-center animate-fade-in-up ${n?"mb-5":"mb-12"}`,children:[a&&r.jsx("span",{className:`inline-block text-xs font-semibold uppercase tracking-[0.2em] text-orange ${n?"mb-2":"mb-4"}`,children:a}),o&&r.jsx("h2",{className:`${n?"text-[22px] md:text-[28px]":"text-[26px] md:text-[36px]"} font-bold leading-[1.2] tracking-[-0.015em] text-white max-w-2xl mx-auto`,children:o})]}),r.jsx("div",{className:`grid grid-cols-2 gap-3 ${n?"lg:grid-cols-4":"sm:grid-cols-2 gap-4"}`,children:i.map((s,l)=>r.jsxs("div",{className:`relative rounded-xl border border-orange/25 bg-gradient-to-br from-orange/[0.08] to-red-900/[0.06] flex items-start hover:border-orange/40 transition-all duration-300 group animate-fade-in-up ${n?"p-2.5 md:p-4 gap-2.5 md:gap-3":"p-6 gap-4"}`,style:{animationDelay:`${l*80}ms`},children:[r.jsx("div",{className:"absolute inset-0 rounded-xl opacity-0 group-hover:opacity-100 transition-opacity duration-500 shadow-[0_0_20px_hsl(15_80%_50%/0.15)]"}),r.jsx("div",{className:`${n?"hidden lg:flex w-8 h-8":"flex w-10 h-10"} rounded-lg bg-orange/15 items-center justify-center shrink-0 mt-0.5`,children:r.jsx(vo,{className:`${n?"h-4 w-4":"h-5 w-5"} text-orange`,strokeWidth:1.5})}),r.jsx("p",{className:`${n?"text-[14px] leading-snug":"text-[15px] leading-relaxed"} text-white/85 font-medium`,children:s})]},l))})]})]})},F9=({translationPrefix:e,media:n})=>{const{t}=Y(),i=t(`${e}.solutionBlocks`,{returnObjects:!0});return r.jsxs("section",{className:"py-20 bg-background relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-20"}),r.jsx("div",{className:"container mx-auto px-4 relative z-10 max-w-6xl",children:r.jsx("div",{className:"flex flex-col gap-20",children:i.map((a,o)=>{const s=o%2===1,l=n?.[o],d=l?.type==="node"&&l.layout==="below";return r.jsxs("div",{id:`solution-${o}`,className:`flex ${d?"flex-col":`flex-col ${s?"lg:flex-row-reverse":"lg:flex-row"}`} gap-8 lg:gap-14 items-center animate-fade-in-up`,style:{animationDelay:"50ms"},children:[r.jsxs("div",{className:`flex-1 min-w-0 ${d?"w-full":""}`,children:[a.badge&&r.jsxs("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 mb-3 rounded-full border border-turquoise/30 bg-turquoise/10 text-[11px] font-semibold uppercase tracking-wider text-turquoise",children:[r.jsx(Jt,{className:"h-3 w-3"}),a.badge]}),r.jsx("h3",{className:"font-display text-xl md:text-2xl font-bold text-foreground mb-3",children:a.title}),r.jsx("p",{className:"text-muted-foreground leading-relaxed",children:a.text}),a.bullets&&a.bullets.length>0&&r.jsx("ul",{className:"mt-5 space-y-2",children:a.bullets.map((c,u)=>r.jsxs("li",{className:"flex items-start gap-2.5 text-sm text-muted-foreground leading-relaxed",children:[r.jsx("span",{className:"mt-1.5 h-1.5 w-1.5 rounded-full bg-turquoise shrink-0"}),r.jsx("span",{children:c})]},u))}),a.footerLink&&r.jsxs(_,{to:a.footerLink.to,className:"mt-6 inline-flex items-center gap-1.5 text-sm font-semibold text-turquoise hover:text-turquoise/80 transition-colors group/link",children:[a.footerLink.label,r.jsx(re,{className:"h-3.5 w-3.5 transition-transform group-hover/link:translate-x-0.5"})]})]}
13638),r.jsx("div",{className:`flex-1 min-w-0 w-full ${d?"w-full":""}`,children:l?l.type==="video"?r.jsx("div",{className:"rounded-2xl glass-card border border-border overflow-hidden",children:r.jsx("video",{src:l.src,autoPlay:!0,muted:!0,loop:!0,playsInline:!0,className:"w-full h-auto block"})}):l.type==="image"?r.jsx("div",{className:"rounded-2xl glass-card border border-border overflow-hidden",children:r.jsx("img",{src:l.src,alt:a.title,className:"w-full h-auto block"})}):d?r.jsx("div",{className:"w-full",children:l.node}):r.jsx("div",{className:"rounded-2xl glass-card border border-border overflow-hidden p-4",children:l.node}):r.jsx("div",{className:"aspect-[4/3] rounded-2xl glass-card border border-dashed border-border/50 overflow-hidden",children:r.jsx("div",{className:"w-full h-full flex items-center justify-center bg-muted/20",children:r.jsx("span",{className:"text-xs text-muted-foreground/40",children:"Screenshot binnenkort"})})})})]},o)})})})]})},qy=({translationPrefix:e})=>{const{t:n}=Y(),t=n(`${e}.subSections`,{returnObjects:!0,defaultValue:[]});if(!t||t.length===0)return null;if(t.length===1){const i=t[0];return r.jsx("section",{className:"py-12 bg-background relative overflow-hidden",children:r.jsx("div",{className:"container mx-auto px-4 relative z-10 max-w-6xl",children:r.jsxs("div",{className:"flex items-start sm:items-center gap-4 roun
13638ded-xl border border-border/60 bg-muted/20 px-5 py-4 animate-fade-in-up",children:[r.jsx("div",{className:"shrink-0 w-9 h-9 rounded-lg bg-turquoise/10 border border-turquoise/20 flex items-center justify-center",children:r.jsx(yr,{className:"h-4.5 w-4.5 text-turquoise"})}),r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-3 min-w-0",children:[i.title&&r.jsx("span",{className:"font-display text-sm font-semibold text-foreground shrink-0",children:i.title}),r.jsx("p",{className:"text-sm text-muted-foreground leading-relaxed",children:i.text})]})]})})})}return r.jsx("section",{className:"py-16 bg-background relative overflow-hidden",children:r.jsx("div",{className:"container mx-auto px-4 relative z-10 max-w-6xl",children:r.jsx("div",{className:"grid md:grid-cols-2 gap-6",children:t.map((i,a)=>r.jsxs("div",{className:"rounded-xl glass-card border border-border p-7 animate-fade-in-up",style:{animationDelay:`${a*50}ms`},children:[i.title&&r.jsx("h4",{className:"font-display text-lg font-bold text-foreground mb-2",children:i.title}),r.jsx("p",{className:"text-sm text-muted-foreground leading-relaxed",children:i.text})]},a))})})})},R9=[{name:"Exact Online",domain:"exact.com"},{name:"Exact Globe",domain:"exact.com"},{name:"Twinfield",domain:"twinfield.com"},{name:"AFAS",domain:"afas.nl"},{name:"Odoo",domain:"odoo.com"},{name:"QuickBooks",domain:"quickbooks.intuit.com",logo:ah},{name:"Xero",domain:"xero.com"}],O9=e=>`https://img.logo.dev/${e}?token=pk_X-1ZO13GSgeOoUrIuJ6GMQ&size=80&format=png`,_9=({item:e})=>{const[n,t]=b.useState(!1),i=e.name==="QuickBooks";return r.jsxs("div",{className:`flex items-center gap-2.5 rounded-xl glass-card hover:border-teal/30 transition-all duration-300 ${i?"h-14 px-4":"h-12 pl-2 pr-4"}`,children:[r.jsx("div",{className:`flex items-center justify-center rounded-md bg-white shrink-0 overflow-hidden ${i?"h-11 min-w-32 px-4":e.logo?"h-8 px-1.5 w-auto":"h-8 w-8"}`,children:n?r.jsx("span",{className:"font-display font-bold text-midnight text-[11px]",children:e.name.charAt(0)}):r.jsx("img",{src:e.logo??O9(e.domain),alt:`${e.name} logo`,loading:"lazy",className:i?"w-24 h-auto max-w-none object-contain":e.logo?"h-5 w-auto object-contain":"h-full w-full object-contain p-1",onError:()=>t(!0)})}),!i&&r.jsx("span",{className:"font-display font-bold text-foreground/80 text-sm whitespace-nowrap",children:e.name})]})},L9=({translationPrefix:e})=>{const{t:n}=Y();return r.jsxs("section",{className:"py-20 bg-background relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-20"}),r.jsxs("div",{className:"container mx-auto px-4 relative z-10 max-w-5xl",children:[r.jsxs("div",{className:"text-center mb-10 animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-foreground mb-3",children:n(`${e}.accountingStrip.title`)}),r.jsx("p",{className:"text-muted-foreground max-w-2xl mx-auto leading-relaxed",children:n(`${e}.accountingStrip.subtitle`)})]}),r.jsx("div",{className:"flex flex-wrap items-center justify-center gap-3 animate-fade-in-up",style:{animationDelay:"100ms"},children:R9.map(t=>r.jsx(_9,{item:t},t.name))}),r.jsx("p",{className:"text-center text-xs text-muted-foreground/70 mt-6 italic animate-fade-in",style:{animationDelay:"200ms"},children:n(`${e}.accountingStrip.footnote`)})]})]})},Hy=Ab.enArticles,W9={"artificial-intelligence":{add:["AI","Automatisering"]},"best-practices-in-rapportages":{add:["Rapporteren","Best Practices"]},"de-vier-kerncompetenties-van-een-best-in-class-finance-organisatie":{add:["Finance Transformatie"]},"esg-rapportage":{add:["Rapporteren","ESG"]},"het-verschil-tussen-plannen-budgetteren-en-forecasten":{add:["Budgetteren","Forecast"]},maandafsluiting:{add:["Maandafsluiting","Automatisering"]},"plannen-en-budgetteren-top-down-bottom-up-of-op-basis-van-het-business-model":{add:["Budgetteren","Forecast"]},"rapporteren-vanuit-smartbooks-met-excel":{add:["Rapporteren","Excel"]},"rolling-forecast":{add:["Forecast","Budgetteren"]},"smartbooks-en-power-bi-de-perfecte-combinatie-voor-financieel-inzicht":{add:["Rapporteren","Integraties"]},"smartbooks-vs-speedbooks":{add:["Rapporteren"]},"snelle-implementatie-van-smartbooks":{add:["Implementatie","Onboarding"]},"the-power-of-automation-in-financial-consolidation":{add:["Automatisering"]},"verrekening-van-koersverschillen-in-smartbooks-ai":{add:["Consolideren","Valuta"]},"budgetteren-demo":{add:["Budgetteren","Demo"]},"consolideren-demo":{add:["Demo"]},"rapporteren-demo":{add:["Demo"]},"smartbooks-6min-introductie":{add:["Demo","Rapporteren","Consolideren"]}},V9=(e,n)=>{const t=W9[e];if(!t)return n;const i=t.replace??n,a=t.replace?i:[...i,...t.add??[]],o=new Set;return a.filter(s=>{const l=s.trim().toLowerCase();return!l||o.has(l)?!1:(o.add(l),!0)})},Md=e=>({...e,tags:V9(e.slug,e.tags??[])}),K9=e=>{const n=Hy.find(i=>i.slug===e.slug);
13638if(n)return n;const t=Hy.find(i=>i.slug===e.enSlug);if(!t)throw new Error(`[getArticles] Missing English translation for NL slug "${e.slug}". Expected src/content/articles/${e.slug}/en.md with slug "${e.slug}" or "${e.enSlug}".`);return t},Ll=e=>e==="de"?Li.map(n=>{const t=Cb.find(i=>i.slug===n.slug);return Md(t?{...n,...t,slug:n.slug,originalUrl:n.originalUrl,category:t.category||n.category}:n)}):e!=="en"?Li.map(Md):Li.map(n=>{const t=K9(n),i=t.category||n.category;return Md({...n,...t,slug:n.slug,date:n.date,originalUrl:n.originalUrl,category:i})}),q9=e=>I_;Ll("en");const H9={Articles:"articles",Videos:"videos","Case Studies":"caseStudies","Customer Stories":"customerStories"};function xl(e,n){const t=H9[e];return n(`articleCategories.${t}`)}const U9=({tags:e,excludeSlugs:n=[],title:t,eyebrow:i,limit:a=3,className:o=""})=>{const{i18n:s,t:l}=Y(),d=s.language!=="nl",c=s.language==="de"?"de":d?"en":"nl",u=t??(d?"More on this topic":"Meer lezen over dit onderwerp"),h=i??(d?"From the knowledge center":"Uit het kenniscentrum"),g=b.useMemo(()=>Ll(s.language),[s.language]),m=b.useMemo(()=>{const f=g.filter(x=>!n.includes(x.slug)),w=e.map(x=>x.toLowerCase()),v=f.map(x=>{const j=(x.tags??[]).map(z=>z.toLowerCase()).filter(z=>w.includes(z)).length;return{article:x,hits:j}}).filter(x=>x.hits>0).sort((x,y)=>y.hits-x.hits||+new Date(y.article.date)-+new Date(x.article.date)).slice(0,a).map(x=>x.article);if(v.length<a){const x=new Set(v.map(j=>j.slug)),y=f.filter(j=>!x.has(j.slug)).sort((j,z)=>+new Date(z.date)-+new Date(j.date));v.push(...y.slice(0,a-v.length))}return v},[g,e,n,a]);if(m.length===0)return null;const p=f=>new Date(f).toLocaleDateString(s.language!=="nl"?"en-US":"nl-NL",{day:"numeric",month:"long",year:"numeric"});return r.jsxs("section",{className:`py-20 sm:py-24 relative overflow-hidden bg-background ${o}`,children:[r.jsx("div",{className:"absolute inset-0 dot-grid opacity-15"}),r.jsx("div",{className:"container mx-auto px-4 relative z-10",children:r.jsxs("div",{className:"max-w-5xl mx-auto",children:[r.jsxs("div",{className:"mb-10 flex flex-wrap items-end justify-between gap-4 animate-fade-in-up",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-3 block",children:h}),r.jsx("h2",{className:"font-display text-2xl sm:text-3xl font-bold text-foreground tracking-tight",children:u})]}),r.jsxs(_,{to:B("kenniscentrum",c),className:"inline-flex items-center gap-1.5 text-sm font-medium text-teal hover:text-teal/80 transition-colors",children:[r.jsx(To,{className:"h-4 w-4"}),d?"All articles":"Alle artikelen",r.jsx(re,{className:"h-4 w-4"})]})]}),r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:m.map((f,w)=>r.jsx("div",{className:"animate-fade-in-up",style:{animationDelay:`${w*80}ms`},children:r.jsxs(_,{to:Pt(f.slug,c),className:"group glass-card rounded-2xl p-5 h-full flex flex-col hover:border-teal/25 transition-all duration-300",children:[r.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[r.jsx("span",{className:"px-2.5 py-0.5 rounded-full text-[11px] font-medium bg-teal/10 text-teal border border-teal/20",children:xl(f.category,l)}),r.jsx("span",{className:"text-[11px] text-muted-foreground",children:p(f.date)})]}),r.jsx("h3",{className:"font-display font-semibold text-foreground text-base leading-snug mb-2 group-hover:text-teal transition-colors line-clamp-2",children:f.title}),f.excerpt&&r.jsx("p",{className:"text-sm text-muted-foreground leading-relaxed line-clamp-3 flex-1",children:f.excerpt}),r.jsxs("span",{className:"inline-flex items-center gap-1 text-sm font-medium text-teal mt-4",children:[d?"Read more":"Lees meer",r.jsx(re,{className:"h-3.5 w-3.5 group-hover:translate-x-0.5 transition-transform"})]})]})},f.slug))})]})})]})},G9=32,$9=22,Z9=1400,Y9=2600,OC=()=>{const{t:e,i18n:n}=Y(),t=n.language,i=e("virtualControllerChat.turns",{returnObjects:!0}),a=Array.isArray(i)?i:[],o=e("virtualControllerChat.assistantName"),s=e("virtualControllerChat.statusOnline"),l=e("virtualControllerChat.placeholder"),d=e("virtualControllerChat.typing"),[c,u]=b.useState([]),[h,g]=b.useState(0),[m,p]=b.useState(""),f=b.useRef(null),w=b.useRef(!1);return b.useEffect(()=>{w.current=!0,u([]),p(""),g(0);const k=setTimeout(()=>{w.current=!1},0);return()=>clearTimeout(k)},[t]),b.useEffect(()=>{f.current&&f.current.scrollTo({top:f.current.scrollHeight,behavior:"smooth"})},[c,m]),b.useEffect(()=>{if(w.current=!1,a.length===0)return;const k=x=>new Promise(y=>{const j=setTimeout(y,x);w.current&&clearTimeout(j)});return(async x=>{const y=a[x];if(!y||w.current)return;for(let E=1;E<=y.question.length;E++){if(w.current)return;p(y.question.slice(0,E)),await k(G9)}if(await k(350),w.current)return;const j=`u-${x}-${Date.now()}`;p(""),u(E=>[...E,{id:j,role:"user",text:y.question}]);const z=`t-${x}-${Date.now()}`;if(await k(450),w.current||(u(E=>[...E,{id:z,role:"assistant",text:"",typing:!0}]),await k(Z9),w.current))return;const S=`a-${x}-${Date.now()}`;u(E=>E.map(C=>C.id===z?{id:S,role:"assistant",text:""}:C));for(let E=1;E<=y.answer.length;E++){if(w.current)return;const C=y.answer.slice(0,E);u(O=>O.map(T=>T.id===S?{...T,text:C}:T)),await k($9)}if(await k(Y9),w.current)return;const A=x+1>=a.length?0:x+1;if(A===0){if(await k(600),w.current)return;u([])}g(A)})(h),()=>{w.current=!0}},[h,t]),r.jsxs("div",{className:"relative w-full",children:[r.jsxs("div",{className:"sr-only",children:[r.jsxs("h3",{children:["Voorbeeldgesprek met ",o]}),r.jsx("p",{children:"Smartbooks bevat een AI business controller, Alex, die finance-vragen beantwoordt op basis van je geconsolideerde data. Voorbeelden van vragen die Alex direct kan beantwoorden:"}),r.jsx("dl",{children:a.map((k,v)=>r.jsxs("div",{children:[r.jsxs("dt",{children:["Vraag: ",k.question]}),r.jsxs("dd",{children:["Antwoord van Alex: ",k.answer]})]},v))})]}),r.jsx("div",{className:"absolute -inset-4 rounded-[28px] pointer-events-none opacity-60",style:{background:"radial-gradient(60% 50% at 50% 30%, rgba(0,180,216,0.18), transparent 70%)"},"aria-hidden":"true"}),r.jsxs("div",{className:"relative rounded-2xl bg-midnight/60 border border-white/10 backdrop-blur-xl shadow-[0_30px_80px_-20px_rgba(0,0,0,0.55)] overflow-hidden",children:[r.jsxs("div",{className:"flex items-center gap-3 px-5 py-4 border-b border-white/10 bg-white/[0.02]",children:[r.jsxs("div",{className:"relative",children:[r.jsx("div",{className:"w-9 h-9 rounded-full bg-turquoise/15 flex items-center justify-center",children:r.jsx(Jt,{className:"h-4 w-4 text-turquoise",strokeWidth:2})}),r.jsx("span",{className:"absolute -bottom-0.5 -right-0.5 w-2.5 h-2.5 rounded-full bg-emerald-400 border-2 border-midnight"})]}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsx("div",{className:"text-white text-[14px] font-semibold leading-tight",children:o}),r.jsx("div",{className:"text-white/50 text-[11px] leading-tight",children:s})]}),r.jsxs("div",{className:"hidden sm:flex items-center gap-1.5",children:[r.jsx("span",{className:"w-2 h-2 rounded-full bg-white/15"}),r.jsx("span",{className:"w-2 h-2 rounded-full bg-white/15"}),r.jsx("span",{className:"w-2 h-2 rounded-full bg-white/15"})]})]}),r.jsx("div",{ref:f,className:"px-5 py-5 h-[360px] md:h-[400px] overflow-hidden flex flex-col gap-3",children:r.jsx(Bl,{initial:!1,children:c.map(k=>k.role==="user"?r.jsx(Dt.div,{initial:{opacity:0,y:8}
13638,animate:{opacity:1,y:0},transition:{duration:.25},className:"self-end max-w-[85%]",children:r.jsx("div",{className:"bg-turquoise text-[#0F1923] font-medium text-[14px] leading-relaxed rounded-2xl rounded-br-sm px-4 py-2.5 shadow-sm",children:k.text})},k.id):r.jsxs(Dt.div,{initial:{opacity:0,y:8},animate:{opacity:1,y:0},transition:{duration:.25},className:"self-start max-w-[88%] flex items-start gap-2.5",children:[r.jsx("div",{className:"shrink-0 w-7 h-7 rounded-full bg-turquoise/15 flex items-center justify-center mt-0.5",children:r.jsx(Jt,{className:"h-3.5 w-3.5 text-turquoise",strokeWidth:2})}),r.jsx("div",{className:"bg-white/[0.06] border border-white/10 text-white/90 text-[14px] leading-relaxed rounded-2xl rounded-bl-sm px-4 py-2.5",children:k.typing?r.jsxs("span",{className:"inline-flex items-center gap-2 text-white/60",children:[r.jsxs("span",{className:"inline-flex gap-1",children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-white/60 animate-bounce [animation-delay:-0.3s]"}),r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-white/60 animate-bounce [animation-delay:-0.15s]"}),r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-white/60 animate-bounce"})]}),r.jsx("span",{className:"text-[12px]",children:d})]}):r.jsx("span",{className:"whitespace-pre-wrap",children:k.text})})]},k.id))})}),r.jsx("div",{className:"px-4 py-3 border-t border-white/10 bg-white/[0.02]",children:r.jsxs("div",{className:"flex items-center gap-2 bg-white/[0.04] border border-white/10 rounded-xl px-3 py-2",children:[r.jsx("div",{className:"flex-1 min-w-0 text-[14px] text-white/85 leading-relaxed h-[22px] overflow-hidden",children:m?r.jsxs("span",{children:[m,r.jsx("span",{className:"inline-block w-[2px] h-[14px] align-middle bg-turquoise ml-0.5 animate-pulse"})]}):r.jsx("span",{className:"text-white/35",children:l})}),r.jsx("button",{type:"button","aria-label":"Send",className:"shrink-0 w-8 h-8 rounded-lg bg-turquoise/15 hover:bg-turquoise/25 flex items-center justify-center text-turquoise transition-colors",tabIndex:-1,children:r.jsx(jD,{className:"h-3.5 w-3.5",strokeWidth:2})})]})})]})]})},Q9=({translationPrefix:e})=>{const{t:n}=Y(),t=n(`${e}.founderQuote.quote`),i=n(`${e}.founderQuote.author`),a=n(`${e}.founderQuote.role`);return r.jsx("section",{className:"py-16 md:py-20",children:r.jsx("div",{className:"max-w-[1100px] mx-auto px-5 md:px-10 lg:px-20",children:r.jsxs("figure",{className:"relative rounded-2xl border border-turquoise/20 bg-surface/40 backdrop-blur-sm p-8 md:p-12 shadow-xl shadow-turquoise/5 animate-fade-in-up",children:[r.jsx(wi,{className:"absolute top-6 left-6 w-8 h-8 text-turquoise/30","aria-hidden":"true"}),r.jsxs("blockquote",{className:"pt-6 md:pt-4 pl-6 md:pl-10",children:[r.jsxs("p",{className:"text-lg md:text-xl lg:text-2xl text-foreground/90 leading-relaxed font-light",children:['"',t,'"']}),r.jsxs("figcaption",{className:"mt-6 flex items-center gap-3",children:[r.jsx("div",{className:"h-px w-8 bg-turquoise/40","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("div",{className:"text-sm font-semibold text-turquoise",children:i}),r.jsx("div",{className:"text-xs text-secondary",children:a})]})]})]})]})})})},_g=["000000000000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000000000000","111111111111111111111111111111111111111111111111111111111111111111111111","111111111111111111111111111111111111111111111111111111111111111111111111","111111111111111111111111111111111111111111111111111111111111111111111111","011111111111111111111100000000000000000111111111111111111110000000000110","001111111111111111110000000000000000000011111111111111111100000000000010","000111111111111111100000000000000000000001111111111111111000000000000010","000011111111111111100000000000000000000001111111111111110000000000000110","000001111111111111000000000000000000000000111111111111100000000000001110","000000111111111110000000000000000000000000011111111111000000000000011110","000000011111111100000000000000000000000000001111111110000000000000111110","000000001111111100000000000000000000000000000111111100000000000001111100","000001111111111000000000111110000000000000000111111000000000011111111100","000011111111100000000011111111100000000000001111111000000111111111111100","000111111111000000000111111111110000000000011111110000111111111111110000","001111111100000000001111111111111000000000011111100001111111111100000000","001111111000000000011111111111111100000000111111000011111111110000000000","001111110000000000011111111111111100000001111110000011111111000000000000","001111100000000000011111111111111000000001111100000011111110000000000000","000111100000000000001111111111110000000001111100000001111110000000000000","000111000000000000000111111111100000000001111100000000111100000000000000","000110000000000000000011111111000000000001111000000000011000000000000000","000100000000000000000001111110000000000001110000000000000000000000000000","000000000000000000000000111100000000000001100000000000000000000000000000","000000000000000000000000011000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000000000000","111111111111111111111111111111111111111111111111111111111111111111111111","111111111111111111111111111111111111111111111111111111111111111111111111","111111111111111111111111111111111111111111111111111111111111111111111111","111111111111111111111111111111111111111111111111111111111111111111111111","111111111111111111111111111111111111111111111111111111111111111111111111","000000000000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000000000000"],J9=()=>{const e=b.useRef(null),n=b.useRef([]),t=b.useRef();return b.useEffect(()=>{const i=[],a=_g.length,o=_g[0].length;for(let s=0;s<a;s++)for(let l=0;l<o;l++)if(_g[s][l]==="1"){const d=90-s/(a-1)*180,c=-180+l/(o-1)*360;i.push({lat:d*Math.PI/180,lng:c*Math.PI/180})}n.current=i},[]),b.useEffect(()=>{const i=e.current;if(!i)return;const a=i.getContext("2d");if(!a)return;const o=window.devicePixelRatio||1,s=()=>{const c=i.getBoundingClientRect();i.width=c.width*o,i.height=c.height*o};s(),window.addEventListener("resize",s);const l=performance.now(),d=c=>
13638{const h=(c-l)/1e3*.18,g=i.width,m=i.height,p=g/2,f=m/2,w=Math.min(g,m)*.42;a.clearRect(0,0,g,m),a.beginPath(),a.arc(p,f,w,0,Math.PI*2),a.strokeStyle="rgba(0,180,216,0.25)",a.lineWidth=1*o,a.stroke();const k=a.createRadialGradient(p,f,w*.2,p,f,w);k.addColorStop(0,"rgba(0,180,216,0.05)"),k.addColorStop(1,"rgba(0,180,216,0)"),a.fillStyle=k,a.beginPath(),a.arc(p,f,w,0,Math.PI*2),a.fill();const v=Math.cos(.35),x=Math.sin(.35);for(const y of n.current){const j=y.lng+h,z=Math.cos(y.lat)*Math.sin(j),S=Math.sin(y.lat),A=Math.cos(y.lat)*Math.cos(j),E=S*v-A*x,C=S*x+A*v;if(C<0)continue;const O=p+z*w,T=f-E*w,W=.25+C*.55,F=(1+C*1.2)*o;a.beginPath(),a.arc(O,T,F,0,Math.PI*2),a.fillStyle=`rgba(0,180,216,${W.toFixed(3)})`,a.fill()}t.current=requestAnimationFrame(d)};return t.current=requestAnimationFrame(d),()=>{window.removeEventListener("resize",s),t.current&&cancelAnimationFrame(t.current)}},[]),r.jsxs("div",{className:"pointer-events-none absolute inset-0 overflow-hidden","aria-hidden":"true",children:[r.jsx("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[520px] h-[520px] rounded-full opacity-30",style:{background:"radial-gradient(circle, rgba(0,180,216,0.12) 0%, transparent 65%)",filter:"blur(28px)"}}),r.jsx("canvas",{ref:e,className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[460px] h-[460px] md:w-[560px] md:h-[560px] opacity-60"}),r.jsx("div",{className:"absolute inset-x-0 bottom-0 h-32 pointer-events-none",style:{background:"linear-gradient(to bottom, transparent, hsl(var(--background)) 90%)"}})]})},X9={reporting:["Rapporteren","Rapportage","Power BI","Dashboard","Excel"],consolidation:["Consolideren","Consolidatie","IC eliminaties","Valuta","Groep"],budgetterenCashflow:["Planning","Cashflow","Forecast","prognose","Budget","Scenario"],close:["Maandafsluiting","Close","Controle","Workflow"],virtualController:["AI","Controller","Automatisering"]},eH="/assets/rapportage-consulting-dashboard-Dom50tRp.png",nH="/assets/rapportage-non-furniture-dashboard-CFjlh1zL.png",_C="/assets/rapporteren-excel-COp2IVPP.png",Fd=({x:e,y:n,w:t,h:i,label:a,sublabel:o,variant:s="entity"})=>{const l={primary:{fill:"hsl(var(--turquoise) / 0.18)",stroke:"hsl(var(--turquoise) / 0.8)",strokeWidth:1.5,labelColor:"hsl(var(--turquoise))",iconBg:"hsl(var(--turquoise) / 0.25)",iconColor:"hsl(var(--turquoise))",labelWeight:700},holding:{fill:"hsl(var(--card) / 0.95)",stroke:"hsl(var(--turquoise) / 0.45)",strokeWidth:1.25,labelColor:"hsl(var(--foreground))",iconBg:"hsl(var(--turquoise) / 0.15)",iconColor:"hsl(var(--turquoise))",labelWeight:700},entity:{fill:"hsl(var(--card))",stroke:"hsl(var(--turquoise) / 0.55)",strokeWidth:1.5,labelColor:"hsl(var(--foreground))",iconBg:"hsl(var(--turquoise) / 0.18)",iconColor:"hsl(var(--turquoise))",labelWeight:700}}[s],d=22,c=e+14,u=n+(i-d)/2,h=c+d+10,g=!!o;return r.jsxs("g",{children:[s==="entity"&&r.jsx("rect",{x:e-1,y:n-1,width:t+2,height:i+2,rx:11,fill:"none",stroke:"hsl(var(--turquoise) / 0.15)",strokeWidth:3}),r.jsx("rect",{x:e,y:n,width:t,height:i,rx:10,fill:l.fill,stroke:l.stroke,strokeWidth:l.strokeWidth}),r.jsx("rect",{x:c,y:u,width:d,height:d,rx:5,fill:l.iconBg}),r.jsxs("g",{transform:`translate(${c+4}, ${u+4})`,stroke:l.iconColor,strokeWidth:1.5,fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:[r.jsx("rect",{x:0,y:2,width:14,height:12,rx:1}),r.jsx("line",{x1:4,y1:5,x2:4,y2:6}),r.jsx("line",{x1:10,y1:5,x2:10,y2:6}),r.jsx("line",{x1:4,y1:9,x2:4,y2:10}),r.jsx("line",{x1:10,y1:9,x2:10,y2:10}),r.jsx("line",{x1:6,y1:14,x2:6,y2:11}),r.jsx("line",{x1:8,y1:14,x2:8,y2:11})]}),r.jsx("text",{x:h,y:g?n+i/2-1:n+i/2+5,fontSize:"14",fontFamily:"ui-sans-serif, system-ui, sans-serif",fontWeight:l.labelWeight,fill:l.labelColor,children:a}),g&&r.jsx("text",{x:h,y:n+i/2+14,fontSize:"10",fontFamily:"ui-sans-serif, system-ui, sans-serif",fontWeight:500,fill:"hsl(var(--muted-foreground))",letterSpacing:"0.05em",children:o})]})},Lg=({from:e,to:n,label:t})=>{const i=(e.y+n.y)/2,a=`M ${e.x} ${e.y} V ${i} H ${n.x} V ${n.y}`;return r.jsxs("g",{children:[r.jsx("path",{d:a,fill:"none",stroke:"hsl(var(--turquoise) / 0.55)",strokeWidth:1.25}),t&&r.jsxs("g",{children:[r.jsx("rect",{x:(e.x+n.x)/2-18,y:i-9,width:36,height:18,rx:4,fill:"hsl(var(--background))",stroke:"hsl(var(--border))",strokeWidth:.75}),r.jsx("text",{x:(e.x+n.x)/2,y:i+4,textAnchor:"middle",fontSize:"10",fontFamily:"ui-sans-serif, system-ui, sans-serif",fontWeight:600,fill:"hsl(var(--muted-foreground))",children:t})]})]})},LC=()=>{const e={x:300,y:24,w:160,h:48},n={x:70,y:170,w:240,h:56},t={x:450,y:170,w:240,h:56},i=[{x:20,y:320,w:240,h:64,label:"Awesome Consulting",pct:"100%"},{x:280,y:320,w:240,h:64,label:"Awesome Software",pct:"75%"}];return r.jsxs("svg",{viewBox:"0 0 760 420",className:"w-full h-auto block",xmlns:"http://www.w3.org/2000/svg",children:[r.jsx("defs",{children:r.jsx("pattern",{id:"gsv-grid",width:"24",height:"24",patternUnits:"userSpaceOnUse",children:r.jsx("path",{d:"M 24 0 L 0 0 0 24",fill:"none",stroke:"hsl(var(--border) / 0.25)",strokeWidth:"0.5"})})}),r.jsx("rect",{width:"760",height:"420",fill:"url(#gsv-grid)"}),r.jsx(Lg,{from:{x:e.x+e.w/2,y:e.y+e.h},to:{x:n.x+n.w/2,y:n.y},label:"100%"}),r.jsx(Lg,{from:{x:e.x+e.w/2,y:e.y+e.h}
13638,to:{x:t.x+t.w/2,y:t.y},label:"100%"}),i.map((a,o)=>r.jsx(Lg,{from:{x:n.x+n.w/2,y:n.y+n.h},to:{x:a.x+a.w/2,y:a.y},label:a.pct},`c-${o}`)),r.jsx(Fd,{...e,label:"Group",variant:"primary"}),r.jsx(Fd,{...n,label:"Awesome Holding",variant:"holding"}),r.jsx(Fd,{...t,label:"Awesome Commerce",variant:"entity"}),i.map((a,o)=>r.jsx(Fd,{x:a.x,y:a.y,w:a.w,h:a.h,label:a.label,variant:"entity"},`p-${o}`))]})},tH="/assets/world-map-bg-C0rO8emu.jpg",qn=()=>{const{i18n:e}=Y(),n=e.language!=="nl";return(t,i)=>n?i:t},iH=[{flag:"🇺🇸",currency:"USD",rate:"× 0.92",city:"New York"},{flag:"🇪🇺",currency:"EUR",rate:"× 1.00",city:"Amsterdam"},{flag:"🇯🇵",currency:"JPY",rate:"× 0.0061",city:"Tokyo"}],rH=()=>{const e=qn();return r.jsxs("div",{className:"relative w-full aspect-[5/4] sm:aspect-[16/10] rounded-xl overflow-hidden bg-midnight",children:[r.jsx("img",{src:tH,alt:e("Wereldkaart die internationale entiteiten en valutaomrekening visualiseert","World map visualizing international entities and currency conversion"),className:"absolute inset-0 w-full h-full object-cover opacity-90",loading:"lazy"}),r.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-background/30 via-transparent to-background/60"}),r.jsx("div",{className:"absolute top-[10%] left-0 right-0 flex justify-around px-6",children:iH.map(n=>r.jsxs("div",{className:"glass-card border border-turquoise/40 rounded-lg px-3 py-2 backdrop-blur-md min-w-[110px]",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-lg leading-none",children:n.flag}),r.jsxs("div",{className:"flex flex-col leading-tight",children:[r.jsx("span",{className:"font-display font-bold text-sm text-foreground",children:n.currency}),r.jsx("span",{className:"text-[10px] text-muted-foreground",children:n.city})]})]}),r.jsx("div",{className:"mt-1.5 text-[10px] font-mono text-turquoise/90 tracking-wider",children:n.rate})]},n.currency))}),r.jsxs("svg",{className:"absolute inset-0 w-full h-full pointer-events-none",viewBox:"0 0 100 100",preserveAspectRatio:"none",children:[r.jsx("defs",{children:r.jsxs("linearGradient",{id:"line-grad",x1:"0",y1:"0",x2:"0",y2:"1",children:[r.jsx("stop",{offset:"0%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.2"}),r.jsx("stop",{offset:"100%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.7"})]})}),[18,50,82].map(n=>r.jsx("path",{d:`M ${n} 22 Q ${n} 55, 50 75`,fill:"none",stroke:"url(#line-grad)",strokeWidth:"0.4",strokeDasharray:"1 1.5"},n))]}),r.jsx("div",{className:"absolute bottom-[10%] left-1/2 -translate-x-1/2",children:r.jsxs("div",{className:"glass-card border-2 border-turquoise/70 rounded-xl px-5 py-3 backdrop-blur-md shadow-[0_0_30px_hsl(var(--turquoise)/0.25)]",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-[0.18em] text-turquoise font-semibold text-center mb-1",children:e("Geconsolideerd","Consolidated")}),r.jsxs("div",{className:"flex items-baseline gap-1.5 justify-center",children:[r.jsx("span",{className:"font-display font-bold text-xl text-foreground",children:"€"}),r.jsx("span",{className:"font-display font-bold text-2xl text-foreground tabular-nums",children:"4.218.500"})]})]})})]})},Rd=4218500,Wg=[{id:"holding",label:"Awesome Holding",amount:54e4},{id:"consulting",label:"Awesome Consulting",amount:148e4},{id:"software",label:"Awesome Software",amount:132e4},{id:"commerce",label:"Awesome Commerce",amount:878500}],Uy=[{id:"sales",label:"Sales",splits:{holding:.05,consulting:.35,software:.3,commerce:.45}},{id:"rd",label:"R&D",splits:{holding:0,consulting:.15,software:.45,commerce:.05}},{id:"ops",label:"Operations",splits:{holding:.15,consulting:.4,software:.2,commerce:.4}},{id:"ga",label:"G&A",splits:{holding:.8,consulting:.1,software:.05,commerce:.1}}],Gy=760,$y=420,ps=40,fs=150,Na=290,Vg=180,bs=580,Zy=150,vs=30,Yy=390,Kg=8,qg=e=>e>=1e6?`€ ${(e/1e6).toFixed(2)}M`:e>=1e3?`€ ${(e/1e3).toFixed(0)}k`:`€ ${e}`,aH=()=>{const e=qn(),n=Yy-vs-Kg*(Wg.length-1);let t=vs;const i=Wg.map(p=>{const f=p.amount/Rd*n,w=t;return t+=f+Kg,{...p,y:w,h:f}}),a=Uy.map(p=>Wg.reduce((w,k)=>
13638w+k.amount*(p.splits[k.id]??0),0));let o=vs;const s=Uy.map((p,f)=>{const w=a[f]/Rd*n,k=o;return o+=w+Kg,{...p,y:k,h:w,total:a[f]}}),l=vs,d=Yy-vs;let c=l;const u=i.map(p=>{const f=ps+fs,w=Na,k=(f+w)/2,v=p.amount/Rd*d,x=c,y=x+v;return c=y,{id:p.id,path:`M ${f} ${x}
13639             C ${k} ${x}, ${k} ${p.y}, ${w} ${p.y}
13640             L ${w} ${p.y+p.h}
13641             C ${k} ${p.y+p.h}, ${k} ${y}, ${f} ${y}
13642             Z`}}),h=[],g={};i.forEach(p=>g[p.id]=0);const m={};return s.forEach(p=>m[p.id]=0),s.forEach(p=>{i.forEach(f=>{const w=p.splits[f.id]??0;if(w<=0)return;const k=f.amount*w,v=k/f.amount*f.h,x=k/p.total*p.h,y=f.y+g[f.id],j=y+v;g[f.id]+=v;const z=p.y+m[p.id],S=z+x;m[p.id]+=x;const A=Na+Vg,E=bs,C=(A+E)/2;h.push({eid:f.id,ccid:p.id,path:`M ${A} ${y}
13643               C ${C} ${y}, ${C} ${z}, ${E} ${z}
13644               L ${E} ${S}
13645               C ${C} ${S}, ${C} ${j}, ${A} ${j}
13646               Z`})})}),r.jsxs("svg",{viewBox:`0 0 ${Gy} ${$y}`,className:"w-full h-auto block",xmlns:"http://www.w3.org/2000/svg",children:[r.jsxs("defs",{children:[r.jsx("pattern",{id:"sk-grid",width:"24",height:"24",patternUnits:"userSpaceOnUse",children:r.jsx("path",{d:"M 24 0 L 0 0 0 24",fill:"none",stroke:"hsl(var(--border) / 0.2)",strokeWidth:"0.5"})}),r.jsxs("linearGradient",{id:"sk-flow",x1:"0",y1:"0",x2:"1",y2:"0",children:[r.jsx("stop",{offset:"0%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.5"}),r.jsx("stop",{offset:"100%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.2"})]}),r.jsxs("linearGradient",{id:"sk-flow2",x1:"0",y1:"0",x2:"1",y2:"0",children:[r.jsx("stop",{offset:"0%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.35"}),r.jsx("stop",{offset:"100%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.55"})]})]}),r.jsx("rect",{width:Gy,height:$y,fill:"url(#sk-grid)"}),r.jsx("text",{x:ps+fs/2,y:18,textAnchor:"middle",fontSize:"10",fontWeight:600,fill:"hsl(var(--muted-foreground))",letterSpacing:"0.12em",children:e("GROEP","GROUP")}),r.jsx("text",{x:Na+Vg/2,y:18,textAnchor:"middle",fontSize:"10",fontWeight:600,fill:"hsl(var(--muted-foreground))",letterSpacing:"0.12em",children:e("ENTITEITEN","ENTITIES")}),r.jsx("text",{x:bs+Zy/2,y:18,textAnchor:"middle",fontSize:"10",fontWeight:600,fill:"hsl(var(--muted-foreground))",letterSpacing:"0.12em",children:e("KOSTENPLAATSEN","COST CENTERS")}),u.map(p=>r.jsx("path",{d:p.path,fill:"url(#sk-flow)"},`gf-${p.id}`)),h.map((p,f)=>r.jsx("path",{d:p.path,fill:"url(#sk-flow2)"},`ef-${f}`)),r.jsxs("g",{children:[r.jsx("rect",{x:ps,y:l,width:fs,height:d,rx:10,fill:"hsl(var(--turquoise) / 0.2)",stroke:"hsl(var(--turquoise) / 0.8)",strokeWidth:1.5}),r.jsx("text",{x:ps+fs/2,y:l+d/2-8,textAnchor:"middle",fontSize:"13",fontWeight:700,fill:"hsl(var(--turquoise))",children:e("Personeelskosten","Personnel costs")}),r.jsx("text",{x:ps+fs/2,y:l+d/2+14,textAnchor:"middle",fontSize:"18",fontWeight:700,fill:"hsl(var(--foreground))",children:qg(Rd)})]}),i.map(p=>r.jsxs("g",{children:[r.jsx("rect",{x:Na,y:p.y,width:Vg,height:p.h,rx:6,fill:"hsl(var(--card))",stroke:"hsl(var(--turquoise) / 0.5)",strokeWidth:1}),r.jsx("text",{x:Na+10,y:p.y+p.h/2-2,fontSize:Math.min(12,Math.max(9,p.h/5)),fontWeight:600,fill:"hsl(var(--foreground))",children:p.label}),r.jsx("text",{x:Na+10,y:p.y+p.h/2+12,fontSize:"10",fontWeight:500,fill:"hsl(var(--muted-foreground))",children:qg(p.amount)})]},`en-${p.id}`)),s.map(p=>r.jsxs("g",{children:[r.jsx("rect",{x:bs,y:p.y,width:Zy,height:p.h,rx:6,fill:"hsl(var(--card))",stroke:"hsl(var(--turquoise) / 0.5)",strokeWidth:1}),r.jsx("text",{x:bs+10,y:p.y+p.h/2-2,fontSize:Math.min(12,Math.max(9,p.h/5)),fontWeight:600,fill:"hsl(var(--foreground))",children:p.label}),r.jsx("text",{x:bs+10,y:p.y+p.h/2+12,fontSize:"10",fontWeight:500,fill:"hsl(var(--muted-foreground))",children:qg(p.total)})]},`cc-${p.id}`))]})},WC=()=>{const e=qn(),n=[{ref:"INV-2041",desc:e("Management fee Q3","Management fee Q3"),amountA:"€ 12.450",amountB:"€ 12.450",status:"match"},{ref:"INV-2042",desc:e("License recharge","License recharge"),amountA:"€ 8.200",amountB:"€ 8.200",status:"match"},{ref:"INV-2043",desc:e("Shared services","Shared services"),amountA:"€ 17.250",amountB:"€ 17.450",status:"mismatch"},{ref:"INV-2044",desc:e("Project hours","Project hours"),amountA:"€ 4.080",amountB:null,status:"missing"},{ref:"INV-2045",desc:e("Royalty Q3","Royalty Q3"),amountA:"€ 22.000",amountB:"€ 22.000",status:"match"}],t={match:{color:"hsl(var(--turquoise))",bg:"hsl(var(--turquoise) / 0.08)",border:"hsl(var(--turquoise) / 0.5)",label:"Match"},mismatch:{color:"hsl(35 95% 60%)",bg:"hsl(35 95% 60% / 0.08)",border:"hsl(35 95% 60% / 0.5)",label:e("Verschil","Mismatch")},missing:{color:"hsl(0 75% 60%)",bg:"hsl(0 75% 60% / 0.08)",border:"hsl(0 75% 60% / 0.5)",label:e("Ontbreekt","Missing")}},i=n.filter(o=>o.status==="match").length,a=n.length-i;return r.jsxs("div",{className:"w-full p-4 sm:p-5 bg-card/40 rounded-xl",children:[r.jsxs("div",{className:"flex items-center justify-between mb-4 px-1",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-[10px] uppercase tracking-[0.18em] text-muted-foreground font-semibold",children:e("IC-reconciliatie","IC reconciliation")}),r.jsx("div",{className:"text-sm font-display font-bold text-foreground mt-0.5",children:e("Periode oktober 2025","Period October 2025")})]}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsxs("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded-md bg-turquoise/10 border border-turquoise/30",children:[r.jsx(_e,{className:"w-3 h-3 text-turquoise",strokeWidth:3}),r.jsxs("span",{className:"text-xs font-semibold text-turquoise",children:[i," ",e("matched","matched")]})]}),r.jsxs("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded-md border",style:{backgroundColor:"hsl(35 95% 60% / 0.1)",borderColor:"hsl(35 95% 60% / 0.4)"},children:[r.jsx(vo,{className:"w-3 h-3",strokeWidth:2.5,style:{color:"hsl(35 95% 60%)"}}),r.jsxs("span",{className:"text-xs font-semibold",style:{color:"hsl(35 95% 60%)"},children:[a," ",e("te onderzoeken","to review")]})]})]})]}),r.jsxs("div",{className:"grid grid-cols-[1fr_auto_1fr] gap-3 mb-2 px-1",children:[r.jsxs("div",{className:"text-xs font-semibold text-foreground",children:["Awesome Holding",r.jsx("span",{className:"block text-[10px] font-normal text-muted-foreground",children:e("Debiteuren","Receivables")})]}),r.jsx("div",{className:"w-16"}),r.jsxs("div",{className:"text-xs font-semibold text-foreground text-right",children:["Awesome Software",r.jsx("span",{className:"block text-[10px] font-normal text-muted-foreground",children:e("Crediteuren","Payables")})]})]}),r.jsx("div",{className:"flex flex-col gap-1.5",children:n.map(o=>{const s=t[o.status];return r.jsxs("div",{className:"grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] gap-2 items-stretch",children:[r.jsx("div",{className:"rounded-md px-2.5 py-2 flex items-center gap-2 border min-w-0 overflow-hidden",style:{backgroundColor:o.amountA?s.bg:"transparent",borderColor:o.amountA?s.border:"hsl(var(--border) / 0.4)",borderStyle:o.amountA?"solid":"dashed"},children:o.amountA?r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[r.jsx("span",{className:"text-[10px] font-mono text-muted-foreground leading-tight",children:o.ref}),r.jsx("span",{className:"text-xs font-medium text-foreground truncate leading-tight",children:o.desc})]}),r.jsx("span",{className:"text-xs font-semibold tabular-nums shrink-0",style:{color:s.color},children:o.amountA})]}
13646):r.jsx("span",{className:"text-[10px] text-muted-foreground/60 italic mx-auto",children:e("geen tegenboeking","no counter-entry")})}),r.jsxs("div",{className:"flex items-center justify-center w-12 shrink-0",children:[r.jsx("div",{className:"h-[2px] flex-1 rounded-full",style:{background:s.color,opacity:o.status==="match"?.7:.5,backgroundImage:o.status==="missing"?`repeating-linear-gradient(to right, ${s.color} 0 4px, transparent 4px 8px)`:void 0}}),r.jsx("div",{className:"mx-1 w-5 h-5 rounded-full flex items-center justify-center shrink-0 border",style:{backgroundColor:s.bg,borderColor:s.border},children:o.status==="match"?r.jsx(_e,{className:"w-2.5 h-2.5",strokeWidth:3,style:{color:s.color}}):r.jsx(vo,{className:"w-2.5 h-2.5",strokeWidth:2.5,style:{color:s.color}})}),r.jsx("div",{className:"h-[2px] flex-1 rounded-full",style:{background:s.color,opacity:o.status==="match"?.7:.5,backgroundImage:o.status==="missing"?`repeating-linear-gradient(to right, ${s.color} 0 4px, transparent 4px 8px)`:void 0}})]}),r.jsx("div",{className:"rounded-md px-2.5 py-2 flex items-center gap-2 border min-w-0 overflow-hidden",style:{backgroundColor:o.amountB?s.bg:"transparent",borderColor:o.amountB?s.border:"hsl(var(--border) / 0.4)",borderStyle:o.amountB?"solid":"dashed"},children:o.amountB?r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"text-xs font-semibold tabular-nums shrink-0",style:{color:s.color},children:o.amountB}),r.jsxs("div",{className:"flex flex-col items-end min-w-0 flex-1",children:[r.jsx("span",{className:"text-[10px] font-mono text-muted-foreground leading-tight",children:o.ref}),r.jsx("span",{className:"text-xs font-medium text-foreground truncate leading-tight w-full text-right",children:o.desc})]})]}):r.jsx("span",{className:"text-[10px] text-muted-foreground/60 italic mx-auto",children:e("geen tegenboeking","no counter-entry")})})]},o.ref)})})]})},VC=()=>{const e=qn(),n=[{icon:po,eyebrow:e("Rapportregel","Report line"),title:e("Operationele kosten","Operating expenses"),meta:e("Q3 2025 · Geconsolideerd","Q3 2025 · Consolidated"),amount:"€ 1.847.320"},{icon:To,eyebrow:e("Grootboek","Ledger"),title:"4310 · Marketing & Sales",meta:"Awesome Software B.V.",amount:"€ 124.580"},{icon:wD,eyebrow:e("Transactie","Transaction"),title:"Booking #38291",meta:e("12 sep 2025 · Crediteur 1042","Sep 12, 2025 · Vendor 1042"),amount:"€ 8.450",highlight:!0},{icon:Nl,eyebrow:e("Bron-document","Source document"),title:"INV-2025-0918.pdf",meta:e("Originele factuur leverancier","Original supplier invoice"),amount:"€ 8.450"}];return r.jsxs("div",{className:"w-full aspect-[5/4] sm:aspect-[16/9] p-4 sm:p-5 bg-card/40 rounded-xl flex flex-col justify-between",children:[r.jsxs("div",{className:"flex items-center justify-between mb-4 px-1",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-[10px] uppercase tracking-[0.18em] text-muted-foreground font-semibold",children:"Drilldown"}),r.jsx("div",{className:"text-sm font-display font-bold text-foreground mt-0.5",children:e("Van rapport tot bron in 3 klikken","From report to source in 3 clicks")})]}),r.jsx("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded-md bg-accent/10 border border-accent/30",children:r.jsx("span",{className:"text-xs font-semibold text-accent tabular-nums",children:e("3 klikken","3 clicks")})})]}),r.jsx("div",{className:"flex flex-col",children:n.map((t,i)=>{const a=t.icon,o=i===n.length-1;return r.jsxs("div",{className:"flex flex-col",children:[r.jsxs("div",{className:"rounded-lg border px-3 py-2.5 flex items-center gap-3 transition-colors",style:{backgroundColor:t.highlight?"hsl(var(--accent) / 0.08)":"hsl(var(--card) / 0.6)",borderColor:t.highlight?"hsl(var(--accent) / 0.5)":"hsl(var(--border) / 0.6)"},children:[r.jsx("div",{className:"w-9 h-9 rounded-md flex items-center justify-center shrink-0 border",style:{backgroundColor:t.highlight?"hsl(var(--accent) / 0.15)":"hsl(var(--accent) / 0.06)",borderColor:t.highlight?"hsl(var(--accent) / 0.4)":"hsl(var(--accent) / 0.2)"},children:r.jsx(a,{className:"w-4 h-4",strokeWidth:2,style:{color:"hsl(var(--accent))"}})}),r.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[r.jsx("span",{className:"text-[10px] uppercase tracking-[0.14em] text-muted-foreground font-semibold leading-tight",children:t.eyebrow}),r.jsx("span",{className:"text-sm font-semibold text-foreground truncate leading-tight mt-0.5",children:t.title}),r.jsx("span",{className:"text-[11px] text-muted-foreground truncate leading-tight mt-0.5",children:t.meta})]}),r.jsx("span",{className:"text-sm font-semibold tabular-nums shrink-0 font-mono",style:{color:t.highlight?"hsl(var(--accent))":"hsl(var(--foreground))"},children:t.amount})]}),!o&&r.jsx("div",{className:"flex items-center justify-center py-1",children:r.jsxs("div",{className:"flex flex-col items-center",children:[r.jsx("div",{className:"w-px h-2",style:{background:"hsl(var(--accent) / 0.4)"}}),r.jsx(Ut,{className:"w-3.5 h-3.5",strokeWidth:2.5,style:{color:"hsl(var(--accent) / 0.7)"}})]})})]},i)})}),r.jsxs("div",{className:"mt-4 pt-3 border-t border-border/40 flex items-center justify-between px-1",children:[r.jsx("span",{className:"text-[10px] text-muted-foreground
13646/80 italic",children:e("Elk cijfer terug te traceren naar de originele bron","Every figure traceable back to its original source")}),r.jsx("span",{className:"text-[10px] font-mono text-accent/60",children:"audit-ready"})]})]})},oH=()=>{const e=qn(),n=5,t=["J","F","M","A","M","J","J","A","S","O","N","D"],i=600,a=220,o=36,s=12,l=14,d=26,c=i-o-s,u=a-l-d,h=1400,g=y=>l+u-y/h*u,m=y=>o+y/(t.length-1)*c,p=[820,880,910,950,1010,1080],f=[...p,1130,1170,1200,1240,1280,1310],w=[...p,1170,1240,1300,1360,1410,1450],k=[...p,1090,1090,1100,1110,1120,1130],v=(y,j=0)=>y.map((z,S)=>`${S===0?"M":"L"} ${m(S+j)} ${g(z)}`).join(" "),x=[0,350,700,1050,1400];return r.jsxs("div",{className:"w-full aspect-[5/4] sm:aspect-[16/9] p-4 sm:p-5 bg-card/40 rounded-xl flex flex-col",children:[r.jsxs("div",{className:"flex items-center justify-between mb-3",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-[10px] uppercase tracking-[0.18em] text-muted-foreground font-semibold",children:"Scenario-planning"}),r.jsx("div",{className:"text-sm font-display font-bold text-foreground mt-0.5",children:"Omzet 2025 · 3 scenario's vs. actuals"})]}),r.jsxs("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded-md bg-accent/10 border border-accent/30",children:[r.jsx(Do,{className:"w-3 h-3 text-accent",strokeWidth:2.5}),r.jsx("span",{className:"text-[10px] font-semibold text-accent",children:"YTD +12%"})]})]}),r.jsx("div",{className:"flex-1 min-h-0",children:r.jsxs("svg",{viewBox:`0 0 ${i} ${a}`,className:"w-full h-full",children:[x.map(y=>r.jsxs("g",{children:[r.jsx("line",{x1:o,x2:i-s,y1:g(y),y2:g(y),stroke:"hsl(var(--border) / 0.4)",strokeWidth:1}),r.jsx("text",{x:o-6,y:g(y)+3,fontSize:9,fill:"hsl(var(--muted-foreground))",textAnchor:"end",fontFamily:"ui-monospace, monospace",children:y===0?"0":`${y}k`})]},y)),(()=>{const y=w.slice(n),j=k.slice(n),z=y.map((A,E)=>`${E===0?"M":"L"} ${m(E+n)} ${g(A)}`).join(" "),S=j.slice().reverse().map((A,E)=>`L ${m(j.length-1-E+n)} ${g(A)}`).join(" ");return r.jsx("path",{d:`${z} ${S} Z`,fill:"hsl(var(--accent) / 0.08)",stroke:"none"})})(),r.jsx("line",{x1:m(n),x2:m(n),y1:l,y2:l+u,stroke:"hsl(var(--accent) / 0.5)",strokeWidth:1,strokeDasharray:"2 3"}),r.jsx("text",{x:m(n)+4,y:l+9,fontSize:8,fill:"hsl(var(--accent))",fontFamily:"ui-monospace, monospace",children:e("vandaag","today")}),r.jsx("path",{d:v(p),fill:"none",stroke:"hsl(var(--foreground))",strokeWidth:2}),r.jsx("path",{d:v(w.slice(n),n),fill:"none",stroke:"hsl(var(--accent))",strokeWidth:1.5,strokeDasharray:"4 3"}),r.jsx("path",{d:v(f.slice(n),n),fill:"none",stroke:"hsl(var(--accent))",strokeWidth:2}),r.jsx("path",{d:v(k.slice(n),n),fill:"none",stroke:"hsl(var(--accent) / 0.6)",strokeWidth:1.5,strokeDasharray:"4 3"}),t.map((y,j)=>r.jsx("text",{x:m(j),y:a-8,fontSize:9,fill:"hsl(var(--muted-foreground))",textAnchor:"middle",children:y},j))]})}),r.jsxs("div",{className:"flex items-center justify-between gap-3 mt-2 px-1 text-[10px]",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"block w-3 h-[2px] bg-foreground rounded"}),r.jsx("span",{className:"text-muted-foreground",children:"Actuals"})]}),r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"block w-3 h-[2px] bg-accent rounded"}),r.jsx("span",{className:"text-muted-foreground",children:"Base"})]}),r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"block w-3 border-t-2 border-dashed border-accent"}),r.jsx("span",{className:"text-muted-foreground",children:e("Optimistisch","Optimistic")})]}),r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"block w-3 border-t-2 border-dashed",style:{borderColor:"hsl(var(--accent) / 0.6)"}}),r.jsx("span",{className:"text-muted-foreground",children:e("Pessimistisch","Pessimistic")})]})]})]})},sH=()=>{const e=qn(),n=[{icon:bD,label:e("Omzetmodel","Revenue model"),inputs:[{label:e("Volume","Volume"),value:"12.400"},{label:e("Prijs","Price"),value:"€ 84"}],output:{label:e("Omzet","Revenue"),value:"€ 1.041.600"}},{icon:zi,label:e("Personeel","Personnel"),inputs:[{label:e("FTE","FTE"),value:"42"}
13646,{label:e("Loon + sociale lasten","Wage + social charges"),value:"€ 6.850"}],output:{label:e("Personeelskosten","Personnel costs"),value:"€ 287.700"}}];return r.jsxs("div",{className:"w-full aspect-[5/4] sm:aspect-[16/9] p-4 sm:p-5 bg-card/40 rounded-xl flex flex-col",children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-[10px] uppercase tracking-[0.18em] text-muted-foreground font-semibold",children:"Driver-based planning"}),r.jsx("div",{className:"text-sm font-display font-bold text-foreground mt-0.5",children:e("Verander een driver, zie je P&L bewegen","Change a driver, see your P&L move")})]}),r.jsx("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded-md bg-accent/10 border border-accent/30",children:r.jsx("span",{className:"text-[10px] font-semibold text-accent",children:e("live doorgerekend","recalculated live")})})]}),r.jsx("div",{className:"flex flex-col gap-3 flex-1 justify-center",children:n.map((t,i)=>{const a=t.icon;return r.jsxs("div",{className:"rounded-lg border border-border/60 bg-card/40 p-2.5",children:[r.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[r.jsx("div",{className:"w-6 h-6 rounded-md flex items-center justify-center border shrink-0",style:{backgroundColor:"hsl(var(--accent) / 0.1)",borderColor:"hsl(var(--accent) / 0.3)"},children:r.jsx(a,{className:"w-3 h-3 text-accent",strokeWidth:2})}),r.jsx("span",{className:"text-xs font-semibold text-foreground",children:t.label})]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("div",{className:"flex items-center gap-1.5 flex-1 min-w-0",children:t.inputs.map((o,s)=>r.jsxs("div",{className:"flex flex-col px-2 py-1 rounded-md border border-border/60 bg-background/40 flex-1 min-w-0",children:[r.jsx("span",{className:"text-[9px] uppercase tracking-wide text-muted-foreground font-semibold leading-tight truncate",children:o.label}),r.jsx("span",{className:"text-xs font-mono font-semibold text-foreground tabular-nums leading-tight mt-0.5 truncate",children:o.value})]},s))}),r.jsx(re,{className:"w-3.5 h-3.5 text-accent/70 shrink-0",strokeWidth:2}),r.jsxs("div",{className:"flex flex-col px-2.5 py-1 rounded-md border shrink-0 min-w-[88px] sm:min-w-[120px]",style:{backgroundColor:"hsl(var(--accent) / 0.12)",borderColor:"hsl(var(--accent) / 0.5)"},children:[r.jsx("span",{className:"text-[9px] uppercase tracking-wide text-accent font-semibold leading-tight",children:t.output.label}),r.jsx("span",{className:"text-xs font-mono font-bold text-accent tabular-nums leading-tight mt-0.5",children:t.output.value})]})]})]},i)})}),r.jsxs("div",{className:"mt-4 pt-3 border-t border-border/40 flex items-center justify-between px-1",children:[r.jsx("span",{className:"text-[10px] text-muted-foreground/80 italic",children:e("Drivers rollen automatisch door naar P&L, balans en cashflow","Drivers flow automatically into P&L, balance sheet and cashflow")}),r.jsx("span",{className:"text-[10px] font-mono text-accent/60",children:"→ P&L"})]})]})},lH=()=>{const e=qn(),n=[{icon:Nl,title:e("P&L","P&L"),rows:[{label:e("Omzet","Revenue"),value:"€ 12.4M"},{label:"EBITDA",value:"€ 2.1M",positive:!0}]},{icon:yD,title:e("Balans","Balance sheet"),rows:[{label:e("Debiteuren · DSO 42","Receivables · DSO 42"),value:"€ 1.4M"},{label:e("Crediteuren · DPO 38","Payables · DPO 38"),value:"€ 0.9M"}]},{icon:eD,title:e("Leningen & Capex","Loans & Capex"),rows:[{label:e("Aflossing 2025","Repayments 2025"),value:"€ 480k"},{label:e("Investeringen","Investments"),value:"€ 320k"}]}];return r.jsxs("div",{className:"w-full aspect-[5/4] sm:aspect-[16/9] p-4 sm:p-5 bg-card/40 rounded-xl flex flex-col",children:[r.jsx("div",{className:"flex items-center justify-between mb-3",children:r.jsxs("div",{children:[r.jsx("div",{className:"text-[10px] uppercase tracking-[0.18em] text-muted-foreground font-semibold",children:e("Geïntegreerde planning","Integrated planning")}),r.jsx("div",{className:"text-sm font-display font-bold text-foreground mt-0.5",children:e("P&L, balans en leningen → indirecte cashflow","P&L, balance sheet and loans → indirect cashflow")})]})}),r.jsx("div",{className:"grid grid-cols-3 gap-3",children:n.map((t,i)=>{const a=t.icon;return r.jsxs("div",{className:"rounded-lg border border-border/60 bg-card/60 p-3 flex flex-col",children:[r.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[r.jsx("div",{className:"w-6 h-6 rounded-md flex items-center justify-center border",style:{backgroundColor:"hsl(var(--accent) / 0.1)",borderColor:"hsl(var(--accent) / 0.3)"},children:r.jsx(a,{className:"w-3 h-3 text-accent",strokeWidth:2})}),r.jsx("span",{className:"text-xs font-semibold text-foreground",children:t.title})]}),r.jsx("div",{className:"flex flex-col gap-1.5",children:t.rows.map((o,s)=>r.jsxs("div",{className:"flex items-center justify-between gap-2",children:[r.jsx("span",{className:"text-[10px] text-muted-foreground truncate",children:o.label}),r.jsx("span",{className:"text-xs font-mono font-semibold tabular-nums shrink-0",style:{color:o.positive?"hsl(var(--accent))":"hsl(var(--foreground))"},children:o.value})]},s))})]},i)})}),r.jsx("div",{className:"grid grid-cols-3 gap-3 my-2",children:[0,1,2].map(t=>r.jsx("div",{className:"flex justify-center",children:r.jsx(J4,{className:"w-4 h-4",strokeWidth:2,style:{color:"hsl(var(--accent) / 0.7)"}})},t))}),r.jsxs("div",{className:"rounded-lg border p-3 flex items-center gap-3",style:{backgroundColor:"hsl(var(--accent) / 0.1)",borderColor:"hsl(var(--accent) / 0.5)"},children:[r.jsx("div",{className:"w-9 h-9 rounded-md flex items-center justify-center border shrink-0",style:{backgroundColor:"hsl(var(--accent) / 0.18)",borderColor:"hsl(var(--accent) / 0.5)"},children:r.jsx(CD,{className:"w-4 h-4 text-accent",strokeWidth:2})}),r.jsxs("div",{className:"flex flex-col flex-1 min-w-0",children:[r.jsx("span",{className:"text-[10px] uppercase tracking-[0.14em] text-accent font-semibold leading-tight",children:e("Indirecte cashflow-forecast","Indirect cashflow forecast")}),r.jsx("span",{className:"text-sm font-semibold text-foreground leading-tight mt-0.5",children:e("Automatisch gegenereerd uit P&L + balans + financiering","Automatically generated from P&L + balance sheet + financing")})]}),r.jsx("span",{className:"text-base font-mono font-bold text-accent tabular-nums shrink-0",children:"€ 1.42M"})]})]})},dH=()=>{const e=qn(),n=Array.from({length:13},(y,j)=>j+1),t=[120,80,-40,60,90,-120,30,100,70,-60,110,80,140],i=850,a=t.reduce((y,j,z)=>
13646(y.push((z===0?i:y[z-1])+j),y),[]),o=600,s=200,l=36,d=12,c=14,u=26,h=o-l-d,g=s-c-u,m=[...a,i,0],p=Math.min(...m,-100),f=Math.max(...m)*1.1,w=y=>c+g-(y-p)/(f-p)*g,k=y=>l+h/n.length*(y+.5),v=h/n.length*.55,x=[{bucket:"0-30",value:"€ 1.24M",color:"hsl(var(--accent))"},{bucket:"30-60",value:"€ 0.42M",color:"hsl(var(--accent) / 0.7)"},{bucket:"60-90",value:"€ 0.18M",color:"hsl(35 95% 60%)"},{bucket:"90+",value:"€ 0.06M",color:"hsl(0 75% 60%)"}];return r.jsxs("div",{className:"w-full aspect-[5/4] sm:aspect-[16/9] p-4 sm:p-5 bg-card/40 rounded-xl flex flex-col",children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-[10px] uppercase tracking-[0.18em] text-muted-foreground font-semibold",children:e("13-weekse cashflow","13-week cashflow")}),r.jsx("div",{className:"text-sm font-display font-bold text-foreground mt-0.5",children:e("Directe forecast vanuit openstaande posten","Direct forecast from open items")})]}),r.jsx("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded-md bg-accent/10 border border-accent/30",children:r.jsxs("span",{className:"text-[10px] font-semibold text-accent tabular-nums",children:[e("eind week 13","end of week 13"),": € ",a[12],"k"]})})]}),r.jsx("div",{className:"flex-1 min-h-0",children:r.jsxs("svg",{viewBox:`0 0 ${o} ${s}`,className:"w-full h-full",children:[r.jsx("line",{x1:l,x2:o-d,y1:w(0),y2:w(0),stroke:"hsl(var(--border))",strokeWidth:1}),r.jsxs("text",{x:l-6,y:w(f)+3,fontSize:9,fill:"hsl(var(--muted-foreground))",textAnchor:"end",fontFamily:"ui-monospace, monospace",children:[Math.round(f),"k"]}),r.jsx("text",{x:l-6,y:w(0)+3,fontSize:9,fill:"hsl(var(--muted-foreground))",textAnchor:"end",fontFamily:"ui-monospace, monospace",children:"0"}),t.map((y,j)=>{const z=y>=0?w(y):w(0),S=Math.abs(w(y)-w(0)),A=y>=0;return r.jsx("rect",{x:k(j)-v/2,y:z,width:v,height:S,rx:1.5,fill:A?"hsl(var(--accent) / 0.7)":"hsl(0 75% 60% / 0.7)"},j)}),r.jsx("path",{d:a.map((y,j)=>`${j===0?"M":"L"} ${k(j)} ${w(y)}`).join(" "),fill:"none",stroke:"hsl(var(--foreground))",strokeWidth:2}),a.map((y,j)=>r.jsx("circle",{cx:k(j),cy:w(y),r:2,fill:"hsl(var(--foreground))"},j)),n.map((y,j)=>r.jsxs("text",{x:k(j),y:s-8,fontSize:8,fill:"hsl(var(--muted-foreground))",textAnchor:"middle",fontFamily:"ui-monospace, monospace",children:["W",y]},j))]})}),r.jsx("div",{className:"mt-2 pt-2 border-t border-border/40",children:r.jsxs("div",{className:"flex items-center justify-between gap-2",children:[r.jsx("span",{className:"text-[10px] uppercase tracking-[0.14em] text-muted-foreground font-semibold",children:e("Aging analysis · debiteuren","Aging analysis · receivables")}),r.jsx("div",{className:"flex items-center gap-2",children:x.map(y=>r.jsxs("div",{className:"flex items-center gap-1.5 px-1.5 py-0.5 rounded border",style:{borderColor:`${y.color.replace(")"," / 0.4)")}`,backgroundColor:`${y.color.replace(")"," / 0.08)")}`},children:[r.jsx("span",{className:"text-[9px] font-mono text-muted-foreground",children:y.bucket}),r.jsx("span",{className:"text-[10px] font-mono font-semibold tabular-nums",style:{color:y.color},children:y.value})]},y.bucket))})]})})]})},cH=()=>{const e=qn(),n=[{code:"M-01",label:e("Bank reconciliatie","Bank reconciliation"),owner:"EvD",status:"done",type:"task"},{code:"M-02",label:e("Voorraadtelling boeken","Book inventory count"),owner:"JK",status:"done",type:"task"},{code:"M-03",label:e("IC eliminaties draaien","Run IC eliminations"),owner:"auto",status:"running",type:"auto",blockedBy:"M-02"},{code:"M-04",label:e("Subconsolidatie EU","Sub-consolidation EU"),owner:"auto",status:"blocked",type:"auto",blockedBy:"M-03"},{code:"M-05",label:e("Variantie review","Variance review"),owner:"MV",status:"todo",type:"task",blockedBy:"M-04"}],t={done:{dot:"hsl(var(--accent))",bg:"hsl(var(--accent) / 0.08)",border:"hsl(var(--accent) / 0.3)",label:e("Gereed","Done")},running:{dot:"hsl(var(--accent))",bg:"hsl(var(--accent) / 0.12)",border:"hsl(var(--accent) / 0.5)",label:e("Loopt","Running")},blocked:{dot:"hsl(35 95% 60%)",bg:"hsl(35 95% 60% / 0.08)",border:"hsl(35 95% 60% / 0.4)",label:e("Wacht","Waiting")},todo:{dot:"hsl(var(--muted-foreground))",bg:"hsl(var(--muted-foreground) / 0.06)",border:"hsl(var(--border))",label:e("Open","Open")}},i=n.filter(a=>a.status==="done").length;return r.jsxs("div",{className:"w-full aspect-[5/4] sm:aspect-[16/9] p-4 sm:p-5 bg-card/40 rounded-xl flex flex-col",children:[r.jsxs("div",{className:"flex items-center justify-between mb-3",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-[10px] uppercase tracking-[0.18em] text-muted-foreground font-semibold",children:e("Close template · Maandafsluiting","Close template · Month-end close")}),r.jsx("div",{className:"text-sm font-display font-bold text-foreground mt-0.5",children:e("Vaste volgorde, dependencies bewaken zichzelf","Fixed order, dependencies guard themselves")})]}),r.jsx("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded-md bg-accent/10 border border-accent/30",children:r.jsxs("span",{className:"text-[10px] font-semibold text-accent",children:[i," / ",n.length," ",e("klaar","done")]})})]}),r.jsx("div",{className:"flex flex-col gap-1.5 flex-1 justify-center",children:n.map(a=>{const o=t[a.status];return r.jsxs("div",{className:"flex items-center gap-2 px-2.5 py-1.5 rounded-md border",style:{backgroundColor:o.bg,borderColor:o.border},children:[r.jsx("div",{className:"w-5 h-5 rounded-full flex items-center justify-center shrink-0",style:{backgroundColor:a.status==="done"?"hsl(var(--accent) / 0.25)":"transparent",border:`1.5px solid ${o.dot}`},children:a.status==="done"?r.jsx(_e,{className:"w-3 h-3",strokeWidth:3,style:{color:o.dot}}):a.status==="blocked"?r.jsx(ob,{className:"w-2.5 h-2.5",strokeWidth:2.5,style:{color:o.dot}}):r.jsx("span",{className:"w-1.5 h-1.5 rounded-full",style:{backgroundColor:o.dot}})}),r.jsx("span",{className:"text-[10px] font-mono text-muted-foreground tabular-nums shrink-0",children:a.code}),r.jsx("span",{className:"text-xs font-medium text-foreground flex-1 truncate",children:a.label}),a.blockedBy&&r.jsxs("span",{className:"text-[9px] font-mono text-muted-foreground
13646/70 shrink-0",children:["← ",a.blockedBy]}),r.jsxs("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded border text-[9px] font-semibold tabular-nums shrink-0",style:{borderColor:a.type==="auto"?"hsl(var(--accent) / 0.4)":"hsl(var(--border))",backgroundColor:a.type==="auto"?"hsl(var(--accent) / 0.08)":"transparent",color:a.type==="auto"?"hsl(var(--accent))":"hsl(var(--muted-foreground))"},children:[a.type==="auto"?r.jsx(Bo,{className:"w-2.5 h-2.5",strokeWidth:2.5}):r.jsx(iS,{className:"w-2.5 h-2.5",strokeWidth:2.5}),a.owner]})]},a.code)})}),r.jsxs("div",{className:"mt-3 pt-2 border-t border-border/40 flex items-center justify-between px-1",children:[r.jsx("span",{className:"text-[10px] text-muted-foreground/80 italic",children:e("Automations starten zodra hun afhankelijkheid klaar is","Automations start the moment their dependency is ready")}),r.jsx("span",{className:"text-[10px] font-mono text-accent/70",children:e("auto-getriggerd","auto-triggered")})]})]})},uH=()=>{const e=qn(),n=[{initials:"EV",color:"hsl(var(--accent))",time:"09:14",text:e("Voorraadcorrectie WH-NL geboekt, kunnen we doorzetten?","Inventory adjustment WH-NL is booked, can we proceed?")},{initials:"MV",color:"hsl(35 95% 60%)",time:"09:21",text:e("Check, getekend door operations. IC kan starten.","Confirmed, signed off by operations. IC can start.")}],t=[{time:"08:42",user:"EV",action:e("taak gestart","task started"),system:!1},{time:"09:14",user:"EV",action:e("document toegevoegd","document added"),system:!1},{time:"09:21",user:"MV",action:e("goedgekeurd","approved"),system:!1},{time:"09:22",user:"auto",action:e("M-03 IC getriggerd","M-03 IC triggered"),system:!0}];return r.jsxs("div",{className:"w-full aspect-[5/4] sm:aspect-[16/9] rounded-xl border border-border/60 bg-card/40 px-4 py-3 sm:px-5 sm:py-4 flex flex-col overflow-hidden",children:[r.jsxs("div",{className:"flex items-start justify-between gap-3 mb-3 shrink-0",children:[r.jsxs("div",{className:"min-w-0",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-[0.18em] text-muted-foreground font-semibold truncate",children:e("Taak · M-02 · Voorraadtelling","Task · M-02 · Inventory count")}),r.jsx("div",{className:"mt-1 text-[13px] sm:text-sm font-display font-bold text-foreground leading-tight truncate",children:e("Overleg & audit trail in één plek","Discussion & audit trail in one place")})]}),r.jsxs("div",{className:"shrink-0 inline-flex items-center gap-1.5 rounded-md border border-accent/35 bg-accent/10 px-2.5 py-1",children:[r.jsx(Yn,{className:"w-2.5 h-2.5 text-accent",strokeWidth:2.4}),r.jsx("span",{className:"text-[10px] font-semibold text-accent",children:e("vastgelegd","logged")})]})]}),r.jsxs("div",{className:"grid grid-cols-2 gap-2.5 flex-1 min-h-0",children:[r.jsxs("div",{className:"rounded-lg border border-border/60 bg-background/40 p-2.5 flex flex-col min-h-0 overflow-hidden",children:[r.jsxs("div",{className:"flex items-center gap-1.5 mb-2 shrink-0",children:[r.jsx(Q2,{className:"w-3 h-3 text-accent",strokeWidth:2}),r.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:e("Chat per taak","Chat per task")})]}),r.jsx("div",{className:"flex flex-col gap-2 flex-1 min-h-0 overflow-hidden",children:n.map((i,a)=>r.jsxs("div",{className:"min-w-0",children:[r.jsxs("div",{className:"flex items-baseline gap-1.5 min-w-0",children:[r.jsx("span",{className:"inline-flex items-center justify-center w-4 h-4 rounded-full border text-[7.5px] font-bold leading-none shrink-0",style:{color:i.color,borderColor:`${i.color.replace(")"," / 0.4)")}`,backgroundColor:`${i.color.replace(")"," / 0.15)")}`},children:i.initials}),r.jsx("span",{className:"text-[10px] font-semibold truncate",style:{color:i.color},children:i.initials}),r.jsx("span",{className:"text-[9px] font-mono text-muted-foreground/70 shrink-0",children:i.time})]}),r.jsx("p",{className:"mt-0.5 text-[10.5px] leading-snug text-foreground/85 break-words",children:i.text})]},a))}),r.jsxs("div",{className:"mt-2 pt-1.5 border-t border-border/40 flex items-center gap-1.5 shrink-0",children:[r.jsx(vD,{className:"w-2.5 h-2.5 text-muted-foreground shrink-0",strokeWidth:2}),r.jsx("span",{className:"text-[9px] font-mono text-muted-foreground truncate",children:e("voorraadtelling.pdf","inventory-count.pdf")})]})]}),r.jsxs("div",{className:"rounded-lg border border-border/60 bg-background/40 p-2.5 flex flex-col min-h-0 overflow-hidden",children:[r.jsxs("div",{className:"flex items-center gap-1.5 mb-2 shrink-0",children:[r.jsx(ab,{className:"w-3 h-3 text-accent",strokeWidth:2}),r.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:e("Audit trail","Audit trail")})]}),r.jsx("div",{className:"flex flex-col gap-1 flex-1 min-h-0 overflow-hidden",children:t.map((i,a)=>r.jsxs("div",{className:"grid grid-cols-[34px_28px_minmax(0,1fr)] items-center gap-1.5 text-[10px] min-w-0",children:[r.jsx("span",{className:"font-mono text-muted-foreground
13646/70 tabular-nums",children:i.time}),r.jsx("span",{className:["font-mono font-semibold truncate",i.system?"text-accent":"text-foreground"].join(" "),children:i.user}),r.jsx("span",{className:"text-foreground/75 truncate",children:i.action})]},a))})]})]}),r.jsxs("div",{className:"mt-2 pt-1.5 flex items-center justify-between gap-2 text-[10px] shrink-0",children:[r.jsx("span",{className:"italic text-muted-foreground truncate",children:e("Wie, wat, wanneer, automatisch vastgelegd","Who, what, when — automatically captured")}),r.jsx("span",{className:"font-mono text-accent shrink-0",children:e("geen e-mail","no email")})]})]})},hH=[{icon:Q4,label:"Transaction",count:4},{icon:po,label:"Budget",count:7},{icon:Do,label:"Trend",count:2},{icon:po,label:"Ratio",count:1}],gH={high:"hsl(0 75% 60%)",med:"hsl(35 95% 60%)",low:"hsl(var(--accent))"},Qy=()=>{const e=qn(),n=[{account:"Marketing · Online ads",type:"Budget",delta:"+ € 48k",pct:"+ 62%",severity:"high",decision:null},{account:e("Personeelskosten · Hires Q3","Personnel costs · Hires Q3"),type:"Trend",delta:"+ € 31k",pct:"+ 14%",severity:"med",decision:"explained"},{account:e("Voorraad afschrijving","Inventory write-down"),type:"Transaction",delta:"− € 9k",pct:"− 4%",severity:"low",decision:"ignored"}],t={explained:{label:e("Uitgelegd","Explained"),color:"hsl(var(--accent))"},error:{label:e("Boekingsfout","Booking error"),color:"hsl(0 75% 60%)"},ignored:{label:e("Genegeerd","Ignored"),color:"hsl(var(--muted-foreground))"}};return r.jsxs("div",{className:"w-full aspect-[5/4] sm:aspect-[16/9] p-4 sm:p-5 bg-card/40 rounded-xl flex flex-col",children:[r.jsxs("div",{className:"flex items-center justify-between mb-3",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-[10px] uppercase tracking-[0.18em] text-muted-foreground font-semibold",children:e("Smart Story · Automatische variantie-analyse","Smart Story · Automatic variance analysis")}),r.jsx("div",{className:"text-sm font-display font-bold text-foreground mt-0.5",children:e("14 varianties gevonden · alleen wat ertoe doet komt op je bureau","14 variances found · only what matters reaches your desk")})]}),r.jsx("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded-md bg-accent/10 border border-accent/30",children:r.jsx("span",{className:"text-[10px] font-semibold text-accent",children:e("door Alex","by Alex")})})]}),r.jsx("div",{className:"grid grid-cols-4 gap-2 mb-3",children:hH.map((i,a)=>{const o=i.icon;return r.jsxs("div",{className:"flex items-center gap-1.5 px-2 py-1.5 rounded-md border border-border/60 bg-background/40",children:[r.jsx(o,{className:"w-3 h-3 text-accent shrink-0",strokeWidth:2}),r.jsxs("div",{className:"min-w-0 flex-1",children:[r.jsx("div",{className:"text-[9px] uppercase tracking-wide text-muted-foreground font-semibold leading-tight truncate",children:i.label}),r.jsxs("div",{className:"text-[10px] font-mono font-semibold text-foreground tabular-nums leading-tight",children:[i.count," flags"]})]})]},a)})}),r.jsx("div",{className:"flex flex-col gap-1.5 flex-1 justify-center",children:n.map((i,a)=>{const o=gH[i.severity];return r.jsxs("div",{className:"flex items-center gap-2 px-2.5 py-1.5 rounded-md border",style:{borderColor:`${o.replace(")"," / 0.35)")}`,backgroundColor:`${o.replace(")"," / 0.06)")}`},children:[r.jsx(vo,{className:"w-3.5 h-3.5 shrink-0",strokeWidth:2,style:{color:o}}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsx("div",{className:"text-[11px] font-semibold text-foreground truncate leading-tight",children:i.account}),r.jsxs("div",{className:"text-[9px] font-mono text-muted-foreground leading-tight",children:[i.type," analysis"]})]}),r.jsxs("div",{className:"flex flex-col items-end shrink-0",children:[r.jsx("span",{className:"text-[11px] font-mono font-bold tabular-nums leading-tight",style:{color:o},children:i.delta}),r.jsx("span",{className:"text-[9px] font-mono tabular-nums leading-tight",style:{color:o},children:i.pct})]}),r.jsx("div",{className:"w-20 shrink-0 flex justify-end",children:i.decision?r.jsx("span",{className:"text-[9px] font-semibold uppercase tracking-wide px-1.5 py-0.5 rounded border",style:{color:t[i.decision].color,borderColor:`${t[i.decision].color.replace(")"," / 0.4)")}`,backgroundColor:`${t[i.decision].color.replace(")"," / 0.08)")}`},children:t[i.decision].label}):r.jsx("span",{className:"text-[9px] font-semibold uppercase tracking-wide px-1.5 py-0.5 rounded border border-dashed",style:{color:o,borderColor:`${o.replace(")"," / 0.5)")}
13646`},children:e("Te beoordelen","To review")})})]},a)})}),r.jsxs("div",{className:"mt-3 pt-2 border-t border-border/40 flex items-center justify-between px-1",children:[r.jsx("span",{className:"text-[10px] text-muted-foreground/80 italic",children:e("Thresholds bepaal jij, alleen significante varianties komen door","You set thresholds; only significant variances surface")}),r.jsx("span",{className:"text-[10px] font-mono text-accent/70",children:e("verklaring → audit trail","explanation → audit trail")})]})]})},Jy={live:{accent:"hsl(var(--accent))",tint:"hsl(var(--accent) / 0.1)",border:"hsl(var(--accent) / 0.3)",soft:"hsl(var(--accent) / 0.18)"},preview:{accent:"hsl(var(--orange))",tint:"hsl(var(--orange) / 0.1)",border:"hsl(var(--orange) / 0.3)",soft:"hsl(var(--orange) / 0.18)"},draft:{accent:"hsl(var(--muted-foreground))",tint:"hsl(var(--muted-foreground) / 0.08)",border:"hsl(var(--border))",soft:"hsl(var(--muted-foreground) / 0.14)"}},mH=()=>{const e=qn(),n=[{icon:H2,label:e("Entiteit","Entity"),detail:e("lokale close","local close"),metric:e("12 / 12 klaar","12 / 12 ready"),tone:"live"},{icon:dD,label:e("Consolidatie","Consolidation"),detail:e("groep + IC checks","group + IC checks"),metric:e("review actief","review active"),tone:"preview"},{icon:yr,label:e("Publicatie","Publication"),detail:e("pas na akkoord","only after approval"),metric:e("admin gating","admin gating"),tone:"draft"}],t=[{period:"2025-08",entity:e("12/12 klaar","12/12 ready"),consolidation:e("afgerond","completed"),publication:"LIVE",tone:"live"},{period:"2025-09",entity:e("11/12 klaar","11/12 ready"),consolidation:e("review","review"),publication:"PREVIEW",tone:"preview"},{period:"2025-10",entity:e("4/12 open","4/12 open"),consolidation:e("geblokkeerd","blocked"),publication:"LOCKED",tone:"draft"}];return r.jsxs("div",{className:"w-full aspect-[5/4] sm:aspect-[16/9] rounded-xl border border-border/60 bg-card/40 px-4 py-3 sm:px-5 sm:py-4 flex flex-col overflow-hidden",children:[r.jsxs("div",{className:"mb-3 flex items-start justify-between gap-3",children:[r.jsxs("div",{className:"min-w-0",children:[r.jsx("div",{className:"truncate text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground",children:"Reporting Perio
13646d Management"}),r.jsx("div",{className:"mt-1 text-[13px] sm:text-sm font-display font-bold leading-tight text-foreground truncate",children:e("Entiteit, consolidatie en publicatie in één gate","Entity, consolidation, and publication in one gate")})]}),r.jsxs("div",{className:"inline-flex shrink-0 items-center gap-1.5 rounded-md border px-2.5 py-1",style:{borderColor:"hsl(var(--accent) / 0.3)",backgroundColor:"hsl(var(--accent) / 0.1)"},children:[r.jsx(ob,{className:"h-2.5 w-2.5 text-accent",strokeWidth:2.3}),r.jsx("span",{className:"text-[10px] font-semibold text-accent",children:"admin only"})]})]}),r.jsx("div",{className:"mb-3 grid grid-cols-3 gap-2",children:n.map(i=>{const a=i.icon,o=Jy[i.tone];return r.jsxs("div",{className:"min-w-0 rounded-lg border px-2.5 py-2",style:{borderColor:o.border,backgroundColor:o.tint},children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("div",{className:"flex h-5 w-5 shrink-0 items-center justify-center rounded-md border",style:{borderColor:o.border,backgroundColor:o.soft},children:r.jsx(a,{className:"h-2.5 w-2.5",strokeWidth:2.3,style:{color:o.accent}})}),r.jsx("span",{className:"truncate text-[10px] font-semibold text-foreground",children:i.label})]}),r.jsx("div",{className:"mt-2 truncate text-[9px] uppercase tracking-[0.14em] text-muted-foreground",children:i.detail}),r.jsx("div",{className:"mt-1 truncate text-[10px] font-mono font-semibold",style:{color:o.accent},children:i.metric})]},i.label)})}),r.jsxs("div",{className:"flex-1 min-h-0 rounded-lg border border-border/70 bg-background/30 overflow-hidden",children:[r.jsxs("div",{className:"grid grid-cols-[64px_minmax(0,1fr)_minmax(0,1fr)_84px] items-center gap-2 border-b border-border/50 px-3 py-1.5 text-[9px] font-semibold uppercase tracking-[0.18em] text-muted-foreground",children:[r.jsx("span",{children:e("Periode","Period")}),r.jsx("span",{children:e("Entiteit","Entity")}),r.jsx("span",{children:e("Consolidatie","Consolidation")}),r.jsx("span",{className:"text-right",children:e("Publicatie","Publication")})]}),r.jsx("div",{className:"flex flex-col",children:t.map(i=>{const a=Jy[i.tone];return r.jsxs("div",{className:"grid grid-cols-[64px_minmax(0,1fr)_minmax(0,1fr)_84px] items-center gap-2 px-3 py-2 border-b last:border-b-0 border-border/40",children:[r.jsx("span",{className:"text-[11px] font-mono font-semibold tabular-nums text-foreground",children:i.period}),r.jsxs("div",{className:"flex min-w-0 items-center gap-1.5",children:[r.jsx("span",{className:"h-1.5 w-1.5 shrink-0 rounded-full",style:{backgroundColor:a.accent}}),r.jsx("span",{className:"truncate text-[10px] font-medium text-foreground",children:i.entity})]}),r.jsxs("div",{className:"flex min-w-0 items-center gap-1.5",children:[r.jsx("span",{className:"h-1.5 w-1.5 shrink-0 rounded-full",style:{backgroundColor:a.accent}}),r.jsx("span",{className:"truncate text-[10px] font-medium text-foreground",children:i.consolidation})]}),r.jsx("div",{className:"flex justify-end",children:r.jsx("span",{className:"min-w-[72px] rounded-md border px-2 py-1 text-center text-[10px] font-semibold uppercase tracking-wide",style:{color:a.accent,borderColor:a.border,backgroundColor:a.tint},children:i.publication})})]},i.period)})})]}),r.jsxs("div",{className:"mt-2 flex items-center justify-between gap-2 pt-1.5 text-[10px]",children:[r.jsx("span",{className:"truncate italic text-muted-foreground",children:e("Publicatie opent pas als entiteit én consolidatie gereed zijn","Publishing opens only when entity and consolidation are ready")}),r.jsx("span",{className:"shrink-0 font-mono text-accent",children:"entity → group → live"})]})]})},pH=1,fH="8d193a1a-208f-4e2d-91db-7e512e278bbe",bH="adeffb1b-490a-4555-bc16-1267d88853a4",vH="/__l5e/assets-v1/8d193a1a-208f-4e2d-91db-7e512e278bbe/ai-controller-ask-anything-en.mp4",kH="a/v1/adeffb1b-490a-4555-bc16-1267d88853a4/8d193a1a-208f-4e2d-91db-7e512e278bbe/ai-controller-ask-anything-en.mp4",wH="ai-controller-ask-anything-en.mp4",xH=28898053,yH="video/mp4",jH="2026-07-17T07:55:21Z",SH={version:pH,asset_id:fH,project_id:bH,url:vH,r2_key:kH,original_filename:wH,size:xH,content_type:yH,created_at:jH},zH=1,AH="ac481e39-a259-41fd-9052-e7b3fea48e0f",CH="adeffb1b-490a-4555-bc16-1267d88853a4",EH="/__l5e/assets-v1/ac481e39-a259-41fd-9052-e7b3fea48e0f/ai-controller-ask-anything-nl.mp4",NH="a/v1/adeffb1b-490a-4555-bc16-1267d88853a4/ac481e39-a259-41fd-9052-e7b3fea48e0f/ai-controller-ask-anything-nl.mp4",IH="ai-controller-ask-anything-nl.mp4",PH=877342,TH="video/mp4",DH="2026-07-17T08:38:13Z",BH={version:zH,asset_id:AH,project_id:CH,url:EH,r2_key:NH,original_filename:IH,size:PH,content_type:TH,created_at:DH},KC=()=>{const{i18n:e}=Y(),t=e.language!=="nl"?SH.url:BH.url,i=b.useRef(null);return b.useEffect(()=>{i.current&&(i.current.playbackRate=3)},[t]),r.jsx("div",{className:"rounded-2xl glass-card border border-border overflow-hidden w-full aspect-video relative",children:r.jsx("video",{ref:i,src:t,autoPlay:!0,muted:!0,loop:!0,playsInl
13646ine:!0,className:"absolute inset-0 w-full h-full object-contain"})})},MH=()=>{const e=qn(),n={code:"TENANT",name:e("Jouw organisatie","Your organization"),active:!1},t=[e("Maandelijkse marge-analyse per productlijn","Monthly margin analysis per product line"),e("Trend in DSO per debiteur > € 50k","DSO trend per customer > € 50k"),e("Personeelskosten vs. revenue ratio","Personnel costs vs. revenue ratio")];return r.jsxs("div",{className:"w-full sm:aspect-[16/9] p-4 sm:p-5 bg-card/40 rounded-xl flex flex-col overflow-hidden",children:[r.jsxs("div",{className:"flex items-start justify-between gap-3 mb-3",children:[r.jsxs("div",{className:"min-w-0",children:[r.jsx("div",{className:"text-[10px] uppercase tracking-[0.18em] text-muted-foreground font-semibold",children:e("Gecontroleerde AI · Configuratie","Controlled AI · Configuration")}),r.jsx("div",{className:"text-sm font-display font-bold text-foreground mt-0.5 leading-tight",children:e("Jij bepaalt wanneer Alex actief is","You decide when Alex is active")})]}),r.jsxs("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded-md bg-accent/10 border border-accent/30 shrink-0",children:[r.jsx(X2,{className:"w-3 h-3 text-accent",strokeWidth:2}),r.jsx("span",{className:"text-[10px] font-semibold text-accent whitespace-nowrap",children:"audit trail"})]})]}),r.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-5 gap-3 flex-1 min-h-0",children:[r.jsxs("div",{className:"sm:col-span-2 rounded-lg border border-border/60 bg-background/40 p-2.5 flex flex-col min-w-0",children:[r.jsx("div",{className:"text-[9px] uppercase tracking-wide text-muted-foreground font-semibold mb-2",children:e("Per tenant","Per tenant")}),r.jsx("div",{className:"flex flex-col gap-1.5 flex-1 justify-center",children:r.jsxs("div",{className:"flex items-center justify-between gap-2 px-2 py-1.5 rounded-md border border-border/40 bg-card/40",children:[r.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[r.jsx(H2,{className:"w-3.5 h-3.5 text-accent shrink-0"}),r.jsx("span",{className:"text-[10px] text-foreground truncate",children:n.name})]}),r.jsx("div",{className:"relative w-7 h-3.5 rounded-full transition-colors shrink-0 border bg-muted border-border",children:r.jsx("div",{className:"absolute top-[1px] w-2.5 h-2.5 rounded-full shadow-sm transition-all left-[1px] bg-foreground
13646/40"})})]})})]}),r.jsxs("div",{className:"sm:col-span-3 rounded-lg border border-border/60 bg-background/40 p-2.5 flex flex-col min-w-0",children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsx("span",{className:"text-[9px] uppercase tracking-wide text-muted-foreground font-semibold",children:e("Custom prompts","Custom prompts")}),r.jsx(ob,{className:"w-2.5 h-2.5 text-accent/60",strokeWidth:2})]}),r.jsx("div",{className:"flex flex-col gap-1.5 flex-1 justify-center",children:t.map((i,a)=>r.jsxs("div",{className:"flex items-start gap-1.5 px-2 py-1.5 rounded-md border border-accent/20 bg-accent/5",children:[r.jsx(_e,{className:"w-2.5 h-2.5 text-accent shrink-0 mt-0.5",strokeWidth:3}),r.jsx("span",{className:"text-[10px] text-foreground leading-snug break-words min-w-0",children:i})]},a))})]})]}),r.jsxs("div",{className:"mt-3 pt-2 border-t border-border/40 flex items-center justify-between gap-3 px-1",children:[r.jsx("span",{className:"text-[10px] text-muted-foreground/80 italic truncate",children:e("Branche-context, KPI's en rapportagestructuur per tenant","Industry context, KPIs and reporting structure per tenant")}),r.jsx("span",{className:"text-[10px] font-mono text-accent/70 whitespace-nowrap shrink-0",children:e("AI staat uit tot jij hem aanzet","AI is off until you turn it on")})]})]})},FH=1,RH="4c24162f-1204-4dd3-b564-6b385cb14e32",OH="adeffb1b-490a-4555-bc16-1267d88853a4",_H="/__l5e/assets-v1/4c24162f-1204-4dd3-b564-6b385cb14e32/ai-controller-pnl-agent.png",LH="a/v1/adeffb1b-490a-4555-bc16-1267d88853a4/4c24162f-1204-4dd3-b564-6b385cb14e32/ai-controller-pnl-agent.png",WH="ai-controller-pnl-agent.png",VH=257374,KH="image/png",qH="2026-07-17T08:43:10Z",HH={version:FH,asset_id:RH,project_id:OH,url:_H,r2_key:LH,original_filename:WH,size:VH,content_type:KH,created_at:qH},qC="/assets/rapporteren-dashboard-BHsZg0H9.png",UH=1,GH="04070d0b-e2a4-4b5b-85d2-660010fc95ca",$H="adeffb1b-490a-4555-bc16-1267d88853a4",ZH="/__l5e/assets-v1/04070d0b-e2a4-4b5b-85d2-660010fc95ca/close-takenlijst-september-2026.png",YH="a/v1/adeffb1b-490a-4555-bc16-1267d88853a4/04070d0b-e2a4-4b5b-85d2-660010fc95ca/close-takenlijst-september-2026.png",QH="close-takenlijst-september-2026.png",JH=1112062,XH="image/png",eU="2026-09-14T10:26:28Z",nU={version:UH,asset_id:GH,project_id:$H,url:ZH,r2_key:YH,original_filename:QH,size:JH,content_type:XH,created_at:eU},tU=nU.url,iU={reporting:{0:{type:"image",src:eH},1:{type:"image",src:nH},2:{type:"node",node:r.jsx(VC,{})},3:{type:"image",src:_C}},budgetterenCashflow:{0:{type:"node",node:r.jsx(oH,{})},1:{type:"node",node:r.jsx(sH,{})},2:{type:"node",node:r.jsx(lH,{})},3:{type:"node",node:r.jsx(dH,{})}},consolidation:{0:{type:"image",src:Qu},1:{type:"node",node:r.jsx(LC,{})},2:{type:"node",node:r.jsx(WC,{})},3:{type:"node",node:r.jsx(rH,{})},4:{type:"node",node:r.jsx(aH,{})}},close:{0:{type:"image",src:tU},1:{type:"node",node:r.jsx(uH,{})},2:{type:"node",node:r.jsx(Qy,{})},3:{type:"node",node:r.jsx(mH,{})}},virtualController:{0:{type:"node",node:r.jsx(KC,{})},1:{type:"image",src:HH.url},2:{type:"node",node:r.jsx(Qy,{})},3:{type:"node",node:r.jsx(MH,{})}}},rU={reporting:"pages.rapporteren",consolidation:"pages.consolideren",budgetterenCashflow:"pages.budgetterenCashflow",close:"pages.close",virtualController:"pages.virtueleController"},Xy={reporting:"rapporteren",consolidation:"consolideren",budgetterenCashflow:"budgetterenCashflow",close:"close",virtualController:"virtueleController"},Wl=({pillarKey:e})=>{const{t:n,i18n:t}=Y(),i=t.language,a=i==="de",o=i!=="nl"&&!a,s=a?"de":o?"en":"nl",l=rU[e],d=je(Xy[e]),c=n(`featureCategories.pillars.${e}`),u=(a?sq[e]:void 0)??(o?oq[e]:lq[e]),h=X9[e],g=e!=="virtualController",m={consolidation:r.jsx("img",{src:_l,alt:n("pages.consolideren.hero.headline"),loading:"eager",decoding:"async",className:"w-full h-auto block"}),reporting:r.jsx("img",{src:qC,alt:n("pages.rapporteren.hero.headline"),loading:"eager",decoding:"async",className:"w-full h-auto block"}),budgetterenCashflow:r.jsx("img",{src:zb,alt:n("pages.budgetterenCashflow.hero.headline"),loading:"eager",decoding:"async",className:"w-full h-auto block"}),close:r.jsx("div",{role:"img","aria-label":n("pages.close.hero.headline"),children:r.jsx(cH,{})})},p=b.useMemo(()=>{const f=iU[e];return e==="virtualController"?{...f,0:{type:"node",node:r.jsx(KC,{}),layout:"below"}}:f},[e]);return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:s==="nl"&&e==="close"?"Software voor de maandafsluiting: checklist & templates":s==="nl"&&e==="reporting"?"Rapportage tools voor finance, ook in Excel | Smartbooks":c,bareTitle:s==="nl"&&e==="reporting",description:s==="nl"&&e==="close"?"Maandafsluiting in vaste stappen: close-templates, taken met deadlines, automatische controles en een audit trail. Klanten besparen 50–70% van hun afsluittijd.":s==="nl"&&e==="reporting"?"Rapportage tool voor controllers: managementrapportages, dashboards en drill-down tot op transactieniveau, rechtstreeks uit je boekhouding en gewoon in Excel.":n(`${l}.hero.subtext`),pathByLocale:d,jsonLd:[sh([{name:"Home",url:B("index",s)},{name:a?"Funktionen":o?"Features":"Functionaliteiten",url:B("functionaliteiten",s)},{name:c,url:B(Xy[e],s)}]),lh(u)]}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsx(B9,{translationPrefix:l,customRight:e==="virtualController"?r.jsx(OC,{}):r.jsx("div",{className:"rounded-2xl glass-card border border-border overflow-hidden shadow-2xl p-2",children:m[e]}),background:e==="virtualController"?r.jsx(J9,{}):void 0,compact:g}),r.jsx(Wo,{compact:!0,slim:g}),g&&r.jsx(M9,{translationPrefix:l,compact:!0}),e==="virtualController"&&r.jsx(qy,{translationPrefix:l}),r.jsx(F9,{translationPrefix:l,media:p}),(e==="budgetterenCashflow"||e==="close"||e==="virtualController")&&r.jsx(Q9,{translationPrefix:l}),e!=="virtualController"&&r.jsx(qy,{translationPrefix:l}),e==="consolidation"&&s==="nl"&&r.jsx("section",{className:"pb-4",children:r.jsx("div",{className:"container mx-auto max-w-3xl px-4",children:r.jsxs("p",{className:"text-muted-foreground",children:["Vergelijk je oplossingen voor de hele groep? Lees dan hoe onze"," ",r.jsx(_,{to:B("lpConsolidatieSoftware",s),className:"text-teal underline underline-offset-4",children:"consolidatie software"})," ","werkt voor holdings met meerdere entiteiten."]})})}),e==="reporting"&&s==="nl"&&r.jsx("section",{className:"pb-4",children:r.jsx("div",{className:"container mx-auto max-w-3xl px-4",children:r.jsxs("p",{className:"text-muted-foreground",children:["Oriënteer je je breder? Lees dan hoe onze"," ",r.jsx(_,{to:B("lpRapportageSoftw
13646are",s),className:"text-teal underline underline-offset-4",children:"financiële rapportage software"})," ","de maandrapportage van controllers en CFO's automatiseert."]})})}),e==="consolidation"&&r.jsx(L9,{translationPrefix:l}),r.jsx(Rl,{compact:e==="close"||e==="virtualController"}),r.jsx(U9,{tags:h,title:a?`Mehr über ${c.toLowerCase()}`:o?`More on ${c.toLowerCase()}`:`Meer over ${c.toLowerCase()}`,eyebrow:a?"Aus dem Wissenscenter":o?"From the knowledge center":"Uit het kenniscentrum"}),r.jsx(Ol,{items:u,eyebrow:a?"Häufig gestellte Fragen":o?"Frequently asked questions":"Veelgestelde vragen",title:a?`Häufig gefragt zu ${c.toLowerCase()}`:o?`Frequently asked about ${c.toLowerCase()}`:`Veel gevraagd over ${c.toLowerCase()}`}),r.jsx(va,{}),r.jsx(Ne,{})]})},aU="2026-12-31",oU={nl:"nl-NL",en:"en-GB",de:"de-DE"},HC=e=>new Intl.DateTimeFormat(oU[e],{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}).format(new Date(`${aU}T00:00:00Z`)),sU=()=>{const{t:e,i18n:n}=Y(),t=n.language!=="nl",i=n.language==="de"?"de":t?"en":"nl",a=B("contact",i),o=HC(i),s=["connect","live","effort"],l=t?["AI Controller: ask questions about your figures","Automated commentary on your reports","AI number breakdowns","MCP server: connect Smartbooks to your AI assistant"]:["AI Controller: stel vragen over je cijfers","Automatische toelichting bij je rapportages","Getallen uitsplitsen met AI","MCP-server: koppel Smartbooks aan je AI-assistent"],d=[{key:"professional",name:"Finance Professional",price:"€ 50",priceSuffix:t?"per administration p/m":"per administratie p/m",fixedFee:t?"+€50 fixed per month":"+€50 vast per maand",description:t?"Comprehensive automated reporting for smaller organizations.":"Uitgebreid automatisch rapporteren voor kleinere organisaties.",features:t?["Financial results in P&L and Balance Sheet","Automated Cash Flow","Dynamic reports","Period-on-period comparison","Workflow for releasing monthly figures"]:["Financiële resultaten in V&W en Balans","Automatische Cash Flow","Dynamische rapportages","Periode-op-periode vergelijking","Workflow voor vrijgave maandcijfers"],cta:t?"Start free trial":"Start gratis proefperiode",ctaHref:"https://login.smartbooks.ai/u/signup?state=hKFo2SBMMWtrMThHSDBhcm1mOWtKOS1odHp1cmR3VGNpUjJDcaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEt1U1I4NUNGV0R5VDdlb1Q5Z3dJMG10dUYwTzZreUdDo2NpZNkgcjBlWG5FcG5EZngwNzd2dXI1N3hsS0o3dTVGQnNsaTE"},{key:"leader",name:"Finance Leader",price:"€ 75",priceSuffix:t?"per administration p/m":"per administratie p/m",fixedFee:t?"+€75 fixed per month":"+€75 vast per maand",description:t?"Advanced reporting, planning and consolidation (<10 entities).":"Geavanceerd rapporteren, plannen en consolideren (<10 entiteiten).",features:t?["Everything in Professional, plus:","Consolidation & sub-consolidation (multiple levels)","Multi-currency consolidation","Budgeting, forecasting & year-end forecast","Custom dashboards & non-financial KPIs","Drilldown to journal entry and invoice"]:["Alles van Professional, plus:","Consolidatie & subconsolidatie (meerdere niveaus)","Multi-currency consolidatie","Budgettering, forecasting & jaareindeprognose","Dashboards op maat & non-financial KPI's","Drilldown tot journaalpost en factuur"],cta:t?"Start free trial":"Start gratis proefperiode",ctaHref:"https://login.smartbooks.ai/u/signup?state=hKFo2SBMMWtrMThHSDBhcm1mOWtKOS1odHp1cmR3VGNpUjJDcaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEt1U1I4NUNGV0R5VDdlb1Q5Z3dJMG10dUYwTzZreUdDo2NpZNkgcjBlWG5FcG5EZngwNzd2dXI1N3hsS0o3dTVGQnNsaTE",highlighted:!0},{key:"enterprise",name:"Finance Enterprise",price:t?"On request":"Op aanvraag",description:t?"For groups with more than 10 entities, high volumes, large complexity or multiple business models.":"Voor groepen met meer dan 10 entiteiten, hoge volumes, grote complexiteit of meerdere business modellen.",features:t?["Everything in Leader, plus:","Multi-year planning (up to 5 years)","Extension with operational data","Custom integrations & tailoring"]:["Alles van Leader, plus:","Meerjaren planning (tot 5 jaar)","Uitbreiding met operationele gegevens","Custom integraties & maatwerk"],cta:t?"Contact us":"Neem contact op",ctaHref:a}];return r.jsxs("section",{className:"py-20 sm:py-24 relative overflow-hidden gradient-hero",children:[r.jsx("div",{className:"absolute inset-0 dot-grid opacity-20"}),r.jsxs("div",{className:"container mx-auto px-4 relative z-10",children:[r.jsxs("div",{className:"mx-auto mb-12 max-w-4xl text-center animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-2xl sm:text-4xl font-bold text-foreground tracking-tight",children:e("pricingCards.valueProp.title")}),r.jsx("p",{className:"mt-4 text-base sm:text-lg leading-relaxed text-muted-foreground",children:e("pricingCards.valueProp.body")}),r.jsx("div",{className:"mt-7 grid grid-cols-1 gap-5 sm:grid-cols-3",children:s.map(c=>r.jsxs("div",{className:"text-center",children:[r.jsx("p",{className:"font-display text-2xl sm:text-3xl font-bold text-teal",children:e(`pricingCards.valueProp.stats.${c}.value`)}),r.jsx("p",{className:"mt-1 text-sm leading-snug text-muted-foreground",children:e(`pricingCards.valueProp.stats.${c}.label`)})]},c))})]}),r.jsxs("div",{className:"text-center mb-12 sm:mb-16 animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-4 block",children:t?"Our packages":"Onze pakketten"}),r.jsx("h1",{className:"font-display text-3xl sm:text-5xl font-bold text-foreground tracking-tight",children:i==="de"?r.jsxs(r.Fragment,{children:["Wählen Sie das Paket, das ",r.jsx("span",{className:"text-gradient-teal",children:"zu Ihnen passt"})]}):t?r.jsxs(r.Fragment,{children:["Choose the package that ",r.jsx("span",{className:"text-gradient-teal",children:"fits you"})]}):r.jsxs(r.Fragment,{children:["Kies het pakket dat ",r.jsx("span",{className:"text-gradient-teal",children:"bij je past"})]})}),r.jsx("p",{className:"text-muted-foreground mt-4 max-w-xl mx-auto",children:t?"Three clear packages. Scale with the growth of your organization.":"Drie heldere pakketten. Schaal mee met de groei van je organisatie."})]}),r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5 lg:gap-6 max-w-6xl mx-auto items-stretch",children:d.map((c,u)=>r.jsxs("div",{style:{animationDelay:`${u*80}ms`},className:`relative rounded-2xl p-7 sm:p-8 flex flex-col h-full transition-all duration-300 animate-fade-in-up ${c.highlighted?"pricing-card-popular md:-translate-y-2":"border border-teal/25 shadow-lg hover:border-teal/50 hover:shadow-xl"}`,children:[c.highlighted&&r.jsx("div",{className:"absolute -top-4 left-1/2 -translate-x-1/2 z-10",children:r.jsx("span",{className:"pricing-popular-badge inline-flex items-center whitespace-nowrap rounded-full px-4 py-1.5 text-[10px] font-bold uppercase tracking-[0.18em] ring-4 ring-background",children:t?"Most popular":"Meest gekozen"})}),r.jsx("div",{className:"text-center mb-6",children:r.jsx("h3",{className:"font-display text-2xl sm:text-[26px] font-bold text-foreground leading-tight",children:c.name})}),r.jsxs("div",{className:"mx-auto mb-6 w-full max-w-[260px]",children:[r.jsx("div",{className:`rounded-full border px-6 py-3 text-center ${c.highlighted?"bg-teal/10 border-teal/40":"bg-teal/5 border-teal/25"}`,children:r.jsx("span",{className:"font-display text-2xl sm:text-[28px] font-bold text-teal whitespace-nowrap",children:c.price})}),c.priceSuffix&&r.jsx("p",{className:"text-center text-sm font-medium text-foreground
13646/80 mt-3",children:c.priceSuffix}),c.fixedFee&&r.jsx("p",{className:"text-center text-xs text-muted-foreground mt-1",children:c.fixedFee}),c.key!=="enterprise"&&r.jsx("a",{href:"#pricing",className:"block text-center text-xs font-semibold text-teal underline underline-offset-4 mt-2 hover:text-teal/80 transition-colors",children:t?"Calculate your monthly cost":"Bereken je maandelijkse kosten"})]}),r.jsx("p",{className:"text-[15px] text-foreground/85 text-center mb-6 leading-relaxed",children:c.description}),r.jsx("ul",{className:"space-y-3 mb-4 flex-1",children:c.features.map(h=>r.jsxs("li",{className:"flex items-start gap-2.5 text-[15px] font-medium text-foreground",children:[r.jsx("span",{className:"mt-0.5 shrink-0 h-4 w-4 rounded-full bg-teal/20 border border-teal/40 flex items-center justify-center",children:r.jsx(_e,{className:"h-2.5 w-2.5 text-teal",strokeWidth:3})}),r.jsx("span",{className:"leading-snug",children:h})]},h))}),r.jsxs("div",{className:"mt-auto",children:[r.jsxs("div",{className:"mb-6 rounded-xl border-t border-teal/25 bg-teal/[0.04] px-4 pt-3 pb-4",children:[r.jsx("p",{className:"text-[10px] font-bold uppercase tracking-[0.16em] text-teal",children:t?`AI — free through ${o}`:`AI — gratis t/m ${o}`}),r.jsx("ul",{className:"mt-2.5 space-y-1.5",children:l.map(h=>r.jsxs("li",{className:"flex items-start gap-2 text-[13px] text-foreground/85",children:[r.jsx(Jt,{className:"mt-0.5 h-3 w-3 shrink-0 text-teal"}),r.jsx("span",{className:"leading-snug",children:h})]},h))}),r.jsx("p",{className:"mt-2.5 text-[11px] leading-relaxed text-muted-foreground",children:t?"Not automatically included in the package price afterwards":"Daarna niet automatisch bij de pakketprijs inbegrepen"})]}),c.ctaHref.startsWith("http")?r.jsx("a",{href:c.ctaHref,target:"_blank",rel:"noopener noreferrer",className:"block",children:r.jsxs("button",{className:`w-full flex items-center justify-center gap-2 rounded-xl py-3 px-5 text-sm font-semibold transition-all duration-300 ${c.highlighted?"gradient-teal text-primary-foreground glow-teal-sm hover:scale-[1.02]":"bg-teal/15 text-teal border border-teal/30 hover:bg-teal/20"}`,children:[c.cta,r.jsx(re,{className:"h-4 w-4"})]})}):r.jsx(_,{to:c.ctaHref,className:"block",children:r.jsxs("button",{className:`w-full flex items-center justify-center gap-2 rounded-xl py-3 px-5 text-sm font-semibold transition-all duration-300 ${c.highlighted?"gradient-teal text-primary-foreground glow-teal-sm hover:scale-[1.02]":"bg-teal/15 text-teal border border-teal/30 hover:bg-teal/20"}`,children:[c.cta,r.jsx(re,{className:"h-4 w-4"})]})}),r.jsx("p",{className:"min-h-12 text-[12px] text-muted-foreground text-center mt-3 leading-relaxed",children:c.key==="enterprise"?t?"No-obligation intro — pricing tailored to your group.":"Vrijblijvend kennismaken — prijs op maat voor jullie groep.":t?"No credit card, no commitments — if it doesn't fit, we stop with no invoice.":"Geen creditcard, geen verplichtingen — bevalt het niet, dan stoppen we zonder factuur."})]})]},c.key))}),r.jsx("a",{href:"#feature-comparison",className:"mt-8 block text-center text-base font-semibold text-teal underline underline-offset-4 hover:text-teal/80 transition-colors",children:t?"Compare all features":"Alle functies vergelijken"}),r.jsxs("p",{className:"text-center text-sm text-muted-foreground mt-10",children:[e("pricingCards.onboardingMeeting.prefix")," ",r.jsx(_,{to:B("onboardingMeeting",i),className:"font-semibold text-teal underline underline-offset-4 hover:text-teal/80 transition-colors",children:e("pricingCards.onboardingMeeting.link")})]}),r.jsx("p",{className:"text-center text-xs text-muted-foreground mt-4",children:t?"All prices exclude VAT. See the calculator below for a detailed estimate based on your number of entities.":"Alle prijzen excl. btw. Bekijk hieronder de calculator voor een gedetailleerde berekening op basis van jouw aantal entiteiten."})]})]})},Vl="/assets/tjojs-DSqzQdgK.png",Kl="/assets/anove-DIYU_O3l.png",ql="/assets/ace-DFhhR1Ut.png",Hl="/assets/risketeers-sz8T95Xm.png",UC=[{quote:"Super inzichtelijk om onze actuals en budgetmodel nu in één systeem te hebben. Elke maand zien we zo direct of we onze doelen gehaald hebben. En krijgen we volledig automatisch een actuele prognose voor de omzet en winst voor het hele jaar.",company:"Tjojs Technologies",person:"Mohamed Alka
13646duhimi",role:"CTO",logo:Vl},{quote:"De SAAS planningsmodule van Smartbooks heeft ons geholpen bij het bepalen van onze financiering strategie. Door met de verschillende drivers te experimenteren zie je direct wat dit voor invloed heeft op onze korte en lange termijn financieringsbehoefte.",company:"Anove",person:"Yuri Bobbert",role:"CEO Co-founder",logo:Kl},{quote:"Met Smartbooks hebben we onze onoverzichtelijke spreadsheets vervangen door een duidelijke managementrapportage met waardevolle inzichten.",company:"ACE Company",person:"Arthur Willigenburg",role:"Managing Partner",logo:ql},{quote:"Binnen een dag op maat voor onze onderneming, dat is mega!",company:"Risketeers",person:"Sjoerd Blom",role:"Lead Risketeer",logo:Hl}],GC=[{quote:"It's incredibly clear to have our actuals and budget model in one system now. Every month we instantly see whether we've hit our targets. And we automatically get an up-to-date forecast for revenue and profit for the entire year.",company:"Tjojs Technologies",person:"Mohamed Alkaduhimi",role:"CTO",logo:Vl},{quote:"Smartbooks' SaaS planning module helped us define our financing strategy. By experimenting with the different drivers you immediately see how that affects our short- and long-term financing needs.",company:"Anove",person:"Yuri Bobbert",role:"CEO Co-founder",logo:Kl},{quote:"With Smartbooks we replaced our unwieldy spreadsheets with clear management reporting with valuable insights.",company:"ACE Company",person:"Arthur Willigenburg",role:"Managing Partner",logo:ql},{quote:"Tailored to our company within a day, that's huge!",company:"Risketeers",person:"Sjoerd Blom",role:"Lead Risketeer",logo:Hl}],$C=[{quote:"Es ist unglaublich aufschlussreich, unsere Actuals und unser Budgetmodell in einem System zu haben. Jeden Monat sehen wir sofort, ob wir unsere Ziele erreicht haben. Und wir bekommen vollautomatisch einen aktuellen Umsatz- und Ergebnisforecast für das gesamte Jahr.",company:"Tjojs Technologies",person:"Mohamed Alkaduhimi",role:"CTO",logo:Vl},{quote:"Das SaaS-Planungsmodul von Smartbooks hat uns geholfen, unsere Finanzierungsstrategie zu definieren. Durch das Experimentieren mit den verschiedenen Treibern sieht man sofort die Auswirkungen auf unseren kurz- und langfristigen Finanzierungsbedarf.",company:"Anove",person:"Yuri Bobbert",role:"CEO & Co-Founder",logo:Kl},{quote:"Mit Smartbooks haben wir unsere unübersichtlichen Tabellenkalkulationen durch ein klares Management-Reporting mit echten Erkenntnissen ersetzt.",company:"ACE Company",person:"Arthur Willigenburg",role:"Managing Partner",logo:ql},{quote:"Innerhalb eines Tages passgenau auf unser Unternehmen zugeschnitten — das ist stark!",company:"Risketeers",person:"Sjoerd Blom",role:"Lead Risketeer",logo:Hl}],lU=()=>{const{i18n:e}=Y(),t=(e.language==="de"?$C:e.language!=="nl"?GC:UC).find(i=>i.company==="ACE Company");return t?r.jsx("section",{className:"py-10 sm:py-12 border-b border-border/60 bg-background",children:r.jsxs("figure",{className:"container mx-auto px-4 max-w-4xl text-center",children:[r.jsxs("blockquote",{className:"text-base sm:text-lg leading-relaxed text-foreground/85 font-medium",children:["“",t.quote,"”"]}),r.jsxs("figcaption",{className:"mt-5 flex items-center justify-center gap-4",children:[r.jsx("img",{src:t.logo,alt:t.company,loading:"lazy",className:"h-9 w-auto object-contain opacity-80"}),r.jsxs("span",{className:"text-left",children:[r.jsx("span",{className:"block text-sm font-semibold text-foreground",children:t.person}),r.jsxs("span",{className:"block text-xs text-muted-foreground",children:[t.role,", ",t.company]})]})]})]})}):null},e0=30,Od=30,Hg=10,n0=500,Ug=35,dU="https://login.smartbooks.ai/u/signup?state=hKFo2SBMMWtrMThHSDBhcm1mOWtKOS1odHp1cmR3VGNpUjJDcaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEt1U1I4NUNGV0R5VDdlb1Q5Z3dJMG10dUYwTzZreUdDo2NpZNkgcjBlWG5FcG5EZngwNzd2dXI1N3hsS0o3dTVGQnNsaTE",t0=({label:e,tooltip:n,unitPrice:t,unitLabel:i,value:a,onChange:o})=>{const s=a*t;return r.jsxs("div",{className:"flex items-center justify-between gap-4 py-3 border-b border-border/60 last:border-b-0",children:[r.jsxs("div",{className:"min-w-0 flex-1",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("div",{className:"text-sm font-semibold text-foreground",children:e}),r.jsx(xb,{delayDuration:100,children:r.jsxs(GS,{children:[r.jsx($S,{asChild:!0,children:r.jsx("button",{type:"button","aria-label":`Toelichting ${e}`,className:"text-muted-foreground hover:text-foreground transition-colors",children:r.jsx(Z2,{className:"h-3.5 w-3.5"})})}),r.jsx(yb,{side:"top",className:"max-w-xs text-xs leading-relaxed",children:n})]})})]}),r.jsxs("div",{className:"text-xs text-muted-foreground mt-0.5",children:["€",t," ",i]})]}),r.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[r.jsx("button",{type:"button","aria-label":`-1 ${e}`,onClick:()=>o(Math.max(0,a-1)),disabled:a<=0,className:"w-9 h-9 rounded-lg bg-muted/70 border border-border flex items-center justify-center hover:bg-muted transition-colors disabled:opacity-40",children:r.jsx(bo,{className:"h-3.5 w-3.5 text-foreground"})}),r.jsx("input",{type:"number",inputMode:"numeric",min:0,max:Od,"aria-label":`Aantal ${e}`,value:a,onChange:l=>{const d=l.target.value;if(d===""){o(0);return}const c=parseInt(d,10);Number.isNaN(c)||o(Math.max(0,Math.min(Od,c)))},onFocus:l=>l.target.select(),className:"font-display text-xl font-bold text-foreground w-14 h-9 text-center tabular-nums bg-background border border-border rounded-lg focus:outline-none focus:ring-2 focus:ring-teal/50 focus:border-teal/60 [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none"}),r.jsx("button",{type:"button","aria-label":`+1 ${e}`,onClick:()=>o(Math.min(Od,a+1)),disabled:a>=Od,className:"w-9 h-9 rounded-lg bg-muted/70 border border-border flex items-center justify-center hover:bg-muted transition-colors disabled:opacity-40",children:r.jsx(sb,{className:"h-3.5 w-3.5 text-foreground"})})]}),r.jsxs("div",{className:"w-20 text-right shrink-0",children:[r.jsxs("span",{className:"font-mono text-sm font-semibold text-foreground tabular-nums",children:["€",s]}),r.jsx("span",{className:"text-[11px] text-muted-foreground font-normal",children:"/mnd"})]})]})},cU=()=>{const[e,n]=b.useState("leader"),[t,i]=b.useState(1),[a,o]=b.useState(2),{t:s,i18n:l}=Y(),d=l.language!=="nl",c=l.language==="de"?"de":l.language!=="nl"?"en":"nl",h={professional:{name:s("pricing.plans.professional.name"),desc:s("pricing.plans.professional.desc"),holdingPrice:25,werkmaatschappijPrice:50,platformFee:50,implementationFixed:400,implementationMultiplier:1,features:s("pricing.planFeatures.professional",{returnObjects:!0})},leader:{name:s("pricing.plans.leader.name"),desc:s("pricing.plans.leader.desc"),holdingPrice:35,werkmaatschappijPrice:75,platformFee:75,implementationFixed:600,implementationMultiplier:2,features:s("pricing.planFeatures.leader",{returnObjects:!0})}}[e],g=t+a,m=g>e0,p=t*h.holdingPrice+a*h.werkmaatschappijPrice+h.platformFee,f=n0+Ug*g,w=g>=Hg&&f<p,k=w?f:p,v=h.implementationMultiplier*k+h.implementationFixed,x=b.useMemo(()=>s("pricing.subsidiaries").toLowerCase(),[s]),y=b.useMemo(()=>x.replace(/en$/,"").replace(/ies$/,"y"),[x]);return r.jsxs("section",{id:"pricing",className:"py-28 relative overflow-hidden section-cyan-tint",children:[r.jsx("div",{className:"absolute inset-0 dot-grid opacity-20"}),r.jsxs("div",{className:"container mx-auto px-4 relative z-10",children:[r.jsxs("div",{className:"text-center mb-16 animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-4 block",children:s("pricing.eyebrow")}),r.jsxs("h2",{className:"font-display text-3xl sm:text-5xl font-bold text-foreground tracking-tight",children:[s("pricing.title")," ",r.jsx("span",{className:"text-gradient-multi",children:s("pricing.titleHighlight")})," ",s("pricing.titleEnd")]}),r.jsx("p",{className:"text-muted-foreground mt-4 max-w-lg mx-auto",children:s("pricing.subtitle")})]}),r.jsx("div",{className:"max-w-6xl mx-auto animate-fade-in-up",style:{animationDelay:"100ms"},children:r.jsxs("div",{className:"grid lg:grid-cols-[1.15fr_1fr] gap-6 lg:gap-8 items-stretch",children:[r.jsxs("div",{className:"rounded-2xl glass-card border-teal/30 p-6 sm:p-8 h-full flex flex-col",children:[r.jsxs("div",{className:"mb-5",children:[r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-[0.18em] text-teal mb-1.5",children:s("pricing.configuratorTitle")}),r.jsx("p",{className:"text-sm text-muted-foreground",children:s("pricing.configuratorSubtitle")})]}),r.jsxs("div",{className:"rounded-xl border border-border bg-muted/20 px-4 mb-8",children:[r.jsx(t0,{label:s("pricing.holdings"),tooltip:d?"The parent company/ies on which consolidation takes place. Usually 1 per group.":"De moedermaatschappij(en) waarop wordt geconsolideerd. Meestal 1 per groep.",unitPrice:h.holdingPrice,unitLabel:s("pricing.perMonth"),value:t,onChange:i}),r.jsx(t0,{label:s("pricing.subsidiaries"),tooltip:d?"Underlying entities (BVs, subsidiaries, branches) that are included in the consolidation.":"Onderliggende entiteiten (BV's, dochters, vestigingen) die meegeconsolideerd worden.",unitPrice:h.werkmaatschappijPrice,unitLabel:s("pricing.perMonth"),value:a,onChange:o}),r.jsxs("div",{className:"flex items-center justify-between gap-4 py-3 border-b border-border/60 last:border-b-0",children:[r.jsxs("div",{className:"min-w-0 flex-1",children:[r.jsx("div",{className:"text-sm font-semibold text-foreground",children:s("pricing.platformFee")}),r.jsx("div",{className:"text-xs text-muted-foreground mt-0.5",children:s("pricing.platformFeeFixed")})]}),r.jsxs("div",{className:"w-20 text-right shrink-0",children:[r.jsxs("span",{className:"font-mono text-sm font-semibold text-foreground tabular-nums",children:["€",h.platformFee]}),r.jsx("span",{className:"text-[11px] text-muted-foreground font-normal",children:"/mnd"})]})]})]})]}),r.jsx("div",{className:"lg:sticky lg:top-24 h-full",children:r.jsx("div",{className:"rounded-2xl glass-card border-teal/40 glow-teal p-6 sm:p-8 h-full flex flex-col",children:m?r.jsxs("div",{className:"text-center py-4",children:[r.jsx("p",{className:"font-display text-2xl font-bold text-foreground mb-2",children:s("pricing.moreThanEntities",{max:e0})}),r.jsx("p",{className:"text-muted-foreground text-sm mb-6",children:s("pricing.contactForQuote")}),r.jsx(jn,{asChild:!0,className:"gradient-teal text-primary-foreground border-0 glow-teal-sm hover:opacity-90 font-semibold px-8",children:r.jsx(_,{to:B("contact",c),children:s("pricing.contactUs")})})]}):r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"mb-1",children:r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-[0.18em] text-teal",children:s("pricing.monthlyTotal")})}),r.jsxs("div",{className:"flex items-baseline gap-1 mb-5",children:[r.jsxs("span",{className:"font-display text-5xl font-bold text-foreground tabular-nums",children:["€",k]}),r.jsx("span",{className:"text-muted-foreground text-sm",children:s("pricing.monthlySuffix")})]}),r.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground mb-2",children:s("pricing.breakdownTitle")}),r.jsx("div",{className:"space-y-2.5 text-sm mb-5",children:w?r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"flex justify-between text-muted-foreground",children:[r.jsx("span",{children:d?`Volume base fee (from ${Hg} entities)`:`Volume-basisfee (vanaf ${Hg} entiteiten)`}),r.jsxs("span",{className:"text-foreground font-medium tabular-nums",children:["€",n0]})]}),r.jsxs("div",{className:"flex justify-between text-muted-foreground",children:[r.jsxs("span",{children:[g," ",d?"entities":"entiteiten"," × €",Ug]}),r.jsxs("span",{className:"text-foreground font-medium tabular-nums",children:["€",g*Ug]})]})]}):r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"flex justify-between text-muted-foreground",children:[r.jsxs("span",{children:[t," holding",t!==1?"s":""," × €",h.holdingPrice]}),r.jsxs("span",{className:"text-foreground font-medium tabular-nums",children:["€",t*h.holdingPrice]})]}),r.jsxs("div",{className:"flex justify-between text-muted-foreground",children:[r.jsxs("span",{children:[a," ",a!==1?x:y," × €",h.werkmaatschappijPrice]}),r.jsxs("span",{className:"text-foreground font-medium tabular-nums",children:["€",a*h.werkmaatschappijPrice]})]}),r.jsxs("div",{className:"flex justify-between text-muted-foreground",children:[r.jsx("span",{children:s("pricing.platformFee")}),r.jsxs("span",{className:"text-foreground font-medium tabular-nums",children:["€",h.platformFee]})]})]})}),r.jsxs("div",{className:"rounded-xl border border-border bg-muted/30 p-4 mb-5",children:[r.jsxs("div",{className:"flex items-center justify-between mb-2",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground",children:s("pricing.oneTimeBlockTitle")}),r.jsx(xb,{delayDuration:100,children:r.jsxs(GS,{children:[r.jsx($S,{asChild:!0,children:r.jsx("button",{type:"button","aria-label":"Toelichting eenmalige begeleiding",className:"text-muted-foreground hover:text-foreground transition-colors",children:r.jsx(Z2,{className:"h-3.5 w-3.5"})})}),r.jsx(yb,{side:"top",className:"max-w-xs text-xs leading-relaxed",children:s("pricing.implementationTooltip")})]})})]}),r.jsxs("span",{className:"font-display text-lg font-bold text-foreground tabular-nums",children:["€",v]})]}),r.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:[s("pricing.oneTimeImplementation"),d?" — guidance until you can run it yourself. No mandatory ongoing engagement."
vendor: 4,813 bytes, line 13646
13646:" — begeleiding tot je het zelf kunt regelen. Geen verplicht doorlopend traject."]})]}),r.jsx("div",{className:"text-xs text-muted-foreground mb-6 text-center",children:d?"All amounts exclude VAT.":"Alle bedragen zijn exclusief btw."}),r.jsx(jn,{asChild:!0,className:"w-full gradient-teal text-primary-foreground border-0 glow-teal-sm hover:scale-[1.02] font-semibold transition-all duration-300",children:r.jsx("a",{href:dU,target:"_blank",rel:"noopener noreferrer",children:s("pricing.startTrial")})})]})})})]})})]})]})};function uU(e){const n=b.useRef({value:e,previous:e});return b.useMemo(()=>(n.current.value!==e&&(n.current.previous=n.current.value,n.current.value=e),n.current.previous),[e])}var uh="Switch",[hU,QQ]=Tr(uh),[gU,mU]=hU(uh),ZC=b.forwardRef((e,n)=>{const{__scopeSwitch:t,name:i,checked:a,defaultChecked:o,required:s,disabled:l,value:d="on",onCheckedChange:c,form:u,...h}=e,[g,m]=b.useState(null),p=zn(n,x=>m(x)),f=b.useRef(!1),w=g?u||!!g.closest("form"):!0,[k,v]=ba({prop:a,defaultProp:o??!1,onChange:c,caller:uh});return r.jsxs(gU,{scope:t,checked:k,disabled:l,children:[r.jsx(Ue.button,{type:"button",role:"switch","aria-checked":k,"aria-required":s,"data-state":XC(k),"data-disabled":l?"":void 0,disabled:l,value:d,...h,ref:p,onClick:qe(e.onClick,x=>{v(y=>!y),w&&(f.current=x.isPropagationStopped(),f.current||x.stopPropagation())})}),w&&r.jsx(JC,{control:g,bubbles:!f.current,name:i,value:d,checked:k,required:s,disabled:l,form:u,style:{transform:"translateX(-100%)"}})]})});ZC.displayName=uh;var YC="SwitchThumb",QC=b.forwardRef((e,n)=>{const{__scopeSwitch:t,...i}=e,a=mU(YC,t);return r.jsx(Ue.span,{"data-state":XC(a.checked),"data-disabled":a.disabled?"":void 0,...i,ref:n})});QC.displayName=YC;var pU="SwitchBubbleInput",JC=b.forwardRef(({__scopeSwitch:e,control:n,checked:t,bubbles:i=!0,...a},o)=>{const s=b.useRef(null),l=zn(s,o),d=uU(t),c=ES(n);return b.useEffect(()=>{const u=s.current;if(!u)return;const h=window.HTMLInputElement.prototype,m=Object.getOwnPropertyDescriptor(h,"checked").set;if(d!==t&&m){const p=new Event("click",{bubbles:i});m.call(u,t),u.dispatchEvent(p)}},[d,t,i]),r.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:t,...a,tabIndex:-1,ref:l,style:{...a.style,...c,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});JC.displayName=pU;function XC(e){return e?"checked":"unchecked"}var eE=ZC,fU=QC;const nE=b.forwardRef(({className:e,...n},t)=>r.jsx(eE,{className:An("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50",e),...n,ref:t,children:r.jsx(fU,{className:An("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0")})}));nE.displayName=eE.displayName;const i0=[{titleKey:"featureComparison.groups.reportingConsolidation",rows:[{labelKey:"plResults",professional:!0,leader:!0,enterprise:!0},{labelKey:"autoCashflow",professional:!0,leader:!0,enterprise:!0},{labelKey:"dynamicReports",professional:!0,leader:!0,enterprise:!0},{labelKey:"periodComparison",professional:!0,leader:!0,enterprise:!0},{labelKey:"customDashboards",professional:!1,leader:!0,enterprise:!0},{labelKey:"varianceAnalysis",professional:!1,leader:!0,enterprise:!0},{labelKey:"subConsolidation",professional:!1,leader:!0,enterprise:!0},{labelKey:"budgetConsolidation",professional:!1,leader:!0,enterprise:!0},{labelKey:"costCenterConsolidation",professional:!1,leader:!0,enterprise:!0},{labelKey:"multiCurrency",professional:!1,leader:!0,enterprise:!0},{labelKey:"uploadWithoutApi",professional:!1,leader:!0,enterprise:!0},{labelKey:"costCenterAnalysis",professional:!1,leader:!0,enterprise:!0},{labelKey:"mgmtReportBook",professional:!1,leader:!0,enterprise:!0}]},{titleKey:"featureComparison.groups.ai",noteKey:"featureComparison.aiOfferNote",rows:[{labelKey:"aiController",professional:!0,leader:!0,enterprise:!0},{labelKey:"aiCommentary",professional:!0,leader:!0,enterprise:!0},{labelKey:"aiBreakdowns",professional:!0,leader:!0,enterprise:!0},{labelKey:"mcpServer",professional:!0,leader:!0,enterprise:!0},{labelKey:"aiErrorDetection",professional:!0,leader:!0,enterprise:!0}]},{titleKey:"featureComparison.groups.monthEndClose",rows:[{labelKey:"monthCloseWorkflow",professional:!0,leader:!0,enterprise:!0},{labelKey:"textAnnotations",professional:!0,leader:!0,enterprise:!0},{labelKey:"drilldown",professional:!1,leader:!0,enterprise:!0}]},{titleKey:"featureComparison.groups.planning",rows:[{labelKey:"budgetForec
13646ast",professional:!1,leader:!0,enterprise:!0},{labelKey:"businessModelTemplates",professional:!1,leader:!0,enterprise:!0},{labelKey:"cashflowForecast13w",professional:!1,leader:!0,enterprise:!0},{labelKey:"multiYearPlanning",professional:!1,leader:{key:"upTo3Years"},enterprise:{key:"upTo5Years"}}]},{titleKey:"featureComparison.groups.costDetails",noteKey:"featureComparison.annualBilling",rows:[{labelKey:"baseFee",professional:"€50",leader:"€75",enterprise:{key:"onRequest"}},{labelKey:"perSubsidiary",professional:"€50",leader:"€75",enterprise:{key:"onRequest"}},{labelKey:"perHolding",professional:"€25",leader:"€35",enterprise:{key:"onRequest"}},{labelKey:"fixedImplementation",professional:"€400",leader:"€600",enterprise:{key:"onRequest"}},{labelKey:"variableImplementation",professional:{key:"oneTimeMonthly"},leader:{key:"twoTimeMonthly"},enterprise:{key:"onRequest"}},{labelKey:"operationalData",professional:{key:"notApplicable"},leader:{key:"onRequest"},enterprise:{key:"onRequest"}},{labelKey:"costCenters",professional:{key:"notApplicable"},leader:{key:"onRequest"},enterprise:{key:"onRequest"}}]}],bU=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl",i=HC(t),[a,o]=b.useState(!1),[s,l]=b.useState([i0[0].titleKey]),d=p=>typeof p=="object"&&p!==null&&"key"in p?e(`featureComparison.rows.${p.key}`):p,c=e("featureComparison.rows.onRequest"),u=e("featureComparison.rows.notApplicable"),h=p=>{const f=d(p.professional),w=d(p.leader),k=d(p.enterprise);return!(f===w&&w===k)},g=i0.map(p=>({...p,rows:a?p.rows.filter(h):p.rows})).filter(p=>p.rows.length>0),m=({value:p})=>p===!0?r.jsx(_e,{className:"h-5 w-5 text-teal mx-auto",strokeWidth:2.5}):p===!1?r.jsx(bo,{className:"h-5 w-5 text-muted-foreground/50 mx-auto"}):p===c?r.jsx("span",{className:"text-sm font-medium text-teal/90 whitespace-nowrap",children:p}):p===u?r.jsx(bo,{className:"h-5 w-5 text-muted-foreground/50 mx-auto"}):r.jsx("span",{className:"text-base font-medium text-foreground whitespace-nowrap",children:p});return r.jsx("section",{id:"feature-comparison",className:"py-20 section-alt relative overflow-hidden md:overflow-x-clip md:overflow-y-visible",children:r.jsxs("div",{className:"container mx-auto px-4",children:[r.jsxs("div",{className:"text-center mb-8 animate-fade-in-up",children:[r.jsxs("h2",{className:"font-display text-2xl sm:text-4xl font-bold text-foreground tracking-tight",children:[e("featureComparison.title")," ",r.jsx("span",{className:"text-gradient-teal",children:e("featureComparison.titleHighlight")})]}),r.jsx("p",{className:"text-muted-foreground mt-3 text-sm",children:e("featureComparison.subtitle")})]}),r.jsx("div",{className:"max-w-5xl mx-auto flex justify-center md:justify-end mb-6",children:r.jsxs("label",{className:"flex items-center gap-3 text-sm font-medium text-foreground cursor-pointer",children:[r.jsx(nE,{checked:a,onCheckedChange:p=>{o(!!p)},"aria-label":e("featureComparison.showDifferencesOnly")}),e("featureComparison.showDifferencesOnly")]})}),r.jsxs("div",{className:"max-w-5xl mx-auto animate-fade-in-up",style:{animationDelay:"100ms"},children:[r.jsx("div",{className:"overflow-x-auto md:overflow-x-clip md:overflow-y-visible pt-7 pb-2",children:r.jsxs("table",{className:"w-full text-base border-separate border-spacing-0",children:[r.jsx("thead",{children:r.jsxs("tr",{children:[r.jsx("th",{className:"sticky top-[72px] z-30 bg-background text-left py-5 pr-4 font-normal text-muted-foreground w-[40%] border-b-2 border-border"}),r.jsx("th",{className:"sticky top-[72px] z-30 bg-background py-5 px-4 text-center w-[20%] border-b-2 border-border",children:r.jsxs("div",{className:"font-display font-bold text-lg text-foreground",children:["Finance",r.jsx("br",{}),e("featureComparison.professional")]})}),r.jsxs("th",{className:"sticky top-[72px] z-30 bg-background py-5 px-4 text-center w-[20%] border-b-2 border-border",children:[r.jsx("span",{className:"pricing-popular-badge absolute -top-4 left-1/2 -translate-x-1/2 inline-flex items-center whitespace-nowrap rounded-full px-4 py-1.5 text-[10px] font-bold uppercase tracking-[0.14em] ring-4 ring-background z-10",children:e("featureComparison.mostPopular","Meest gekozen")}),r.jsxs("div",{className:"font-display font-bold text-lg text-accent",children:["Finance",r.jsx("br",{}),e("featureComparison.leader")]})]}),r.jsx("th",{className:"sticky top-[72px] z-30 bg-background py-5 px-4 text-center w-[20%] border-b-2 border-border",children:r.jsxs("div",{className:"font-display font-bold text-lg text-foreground",children:["Finance",r.jsx("br",{}),e("featureComparison.enterprise")]})})]})}),r.jsx("tbody",{children:g.map(p=>{const f=s.includes(p.titleKey);return r.jsxs(b.Fragment,{children:[r.jsx("tr",{children:r.jsx("td",{colSpan:4,className:"pt-10 pb-4 border-b border-border/60",children:r.jsxs("button",{type:"button","aria-expanded":f,onClick:()=>l(w=>w.includes(p.titleKey)?w.filter(k=>k!==p.titleKey):[...w,p.titleKey]),className:"flex w-full items-center justify-between gap-3 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-teal focus-visible:ring-offset-4",children:[r.jsxs("span",{className:"text-sm font-bold uppercase tracking-[0.18em] text-teal",children:[e(p.titleKey)," (",p.rows.length,")"]}
13646),r.jsx(Ut,{"aria-hidden":!0,className:`h-4 w-4 shrink-0 text-teal transition-transform duration-300 ${f?"rotate-180":""}`})]})})}),f&&p.rows.map(w=>r.jsxs("tr",{children:[r.jsx("td",{className:"py-4 pr-4 text-base text-foreground border-b border-border/70",children:e(`featureComparison.rows.${w.labelKey}`)}),r.jsx("td",{className:"py-4 px-4 text-center border-b border-border/70",children:r.jsx(m,{value:d(w.professional)})}),r.jsx("td",{className:"py-4 px-4 text-center border-b border-border/70",children:r.jsx(m,{value:d(w.leader)})}),r.jsx("td",{className:"py-4 px-4 text-center border-b border-border/70",children:r.jsx(m,{value:d(w.enterprise)})})]},w.labelKey)),f&&p.noteKey&&r.jsx("tr",{children:r.jsx("td",{colSpan:4,className:"pt-3 pb-1 text-xs italic text-muted-foreground",children:e(p.noteKey,{date:i})})})]},p.titleKey)})})]})}),r.jsx("p",{className:"mt-8 text-xs italic text-muted-foreground",children:e("featureComparison.implementationNote")})]})]})})},vU=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?$C:n.language!=="nl"?GC:UC;return r.jsxs("section",{className:"py-28 section-alt relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-30"}),r.jsxs("div",{className:"container mx-auto px-4 relative z-10",children:[r.jsxs("div",{className:"text-center mb-16 animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-4 block",children:e("testimonials.eyebrow")}),r.jsxs("h2",{className:"font-display text-3xl sm:text-5xl font-bold text-foreground tracking-tight",children:[e("testimonials.title")," ",r.jsx("span",{className:"text-gradient-teal",children:e("testimonials.titleHighlight")})]})]}),r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-8 max-w-6xl mx-auto",children:t.map((i,a)=>r.jsxs("div",{className:"group glass-card rounded-2xl p-10 md:p-12 hover:border-teal/15 transition-all duration-500 relative overflow-hidden flex flex-col animate-fade-in-up",style:{animationDelay:`${a*100}ms`},children:[r.jsx(wi,{className:"absolute top-6 right-6 h-12 w-12 text-teal/10"}),r.jsx("div",{className:"flex gap-1 mb-6",children:Array.from({length:5}).map((o,s)=>r.jsx(Vu,{className:"h-5 w-5 fill-gold text-gold"},s))}),r.jsxs("p",{className:"text-foreground text-lg md:text-xl leading-relaxed mb-8 font-medium flex-1",children:['"',i.quote,'"']}),r.jsxs("div",{className:"flex items-center gap-4 pt-6 border-t border-border/60",children:[r.jsx("div",{className:"h-12 w-auto shrink-0",children:r.jsx("img",{src:i.logo,alt:i.company,className:"h-full w-auto object-contain opacity-80"})}),r.jsxs("div",{children:[r.jsx("p",{className:"font-display font-bold text-foreground text-base",children:i.person}),r.jsxs("p",{className:"text-sm text-muted-foreground",children:[i.role,", ",i.company]})]})]})]},i.company))})]})]})},kU=()=>{const{t:e,i18n:n}=Y(),t=n.language!=="nl",i=n.language==="de"?"de":t?"en":"nl",a=t?aq:rq;return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("seo.prijzen.title"),description:e("seo.prijzen.description"),pathByLocale:je("prijzen"),jsonLd:[sh([{name:"Home",url:B("index",i)},{name:t?"Pricing":"Prijzen",url:B("prijzen",i)}]),iq({offers:[{name:"Finance Professional",price:"50",unitText:t?"per administration per month":"per administratie per maand"},{name:"Finance Leader",price:"75",unitText:t?"per administration per month":"per administratie per maand"}],aggregateRating:{ratingValue:ra.ratingValue,reviewCount:ra.reviewCount}}),lh(a)]}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsx(sU,{}),r.jsx(lU,{}),r.jsx(Wo,{}),r.jsx(cU,{}),r.jsx(bU,{}),r.jsx(Rl,{}),r.jsx(vU,{}),r.jsx(Ol,{items:a,eyebrow:t?"Frequently asked questions":"Veelgestelde vragen",title:t?"Answers to the most common questions":"Antwoord op de meest gestelde vragen",subtitle:t?"Have a different question? Feel free to reach out.":"Heb je een andere vraag? Neem gerust contact op."}),r.jsx(XA,{}),r.jsx(Ne,{})]})},r0=[AD,aS,zi,rp,mD,$i],wU=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl",i=e("projecten.consulting.bullets",{returnObjects:!0}),a=e("projecten.custom.bullets",{returnObjects:!0}),o=e("projecten.why.items",{returnObjects:!0});return r.jsxs("div",{className:"min-h-screen bg-midnight",children:[r.jsx(Se,{title:e("seo.projecten.title"),description:e("seo.projecten.description"),pathByLocale:je("projecten"),jsonLd:[oh]}),r.jsx(Ee,{}),r.jsx("section",{className:"relative overflow-hidden gradient-hero",children:r.jsxs("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20 pt-28 md:pt-36 pb-16 relative z-10 flex flex-col items-center text-center",children:[r.jsxs("span",{className:"inline-flex items-center gap-2 rounded-full border border-turquoise/30 bg-turquoise/10 px-3 py-1 text-xs font-medium text-turquoise mb-6",children:[r.jsx(Jt,{className:"h-3.5 w-3.5"}),e("projecten.hero.eyebrow")]}),r.jsx("h1",{className:"text-[32px] md:text-[52px] font-extrabold leading-[1.1] tracking-[-0.02em] text-white mb-6 max-w-4xl",children:e("projecten.hero.title")}),r.jsx("p",{className:"text-lg text-white/80 leading-relaxed mb-8 max-w-2xl",children:e("projecten.hero.subtitle")}),r.jsxs("div",{className:"flex flex-col sm:flex-row items-center justify-center gap-4",children:[r.jsx(_,{to:B("contact",t),children:r.jsxs("button",{className:"btn-primary flex items-center gap-2",children:[e("projecten.hero.cta")," ",r.jsx(re,{className:"h-4 w-4"})]})}),r.jsx(_,{to:B("contact",t),children:r.jsx("button",{className:"inline-flex items-center gap-2 rounded-full px-6 py-3 text-sm font-semibold border border-white/30 text-white hover:bg-white/10 transition-colors",children:e("projecten.hero.secondaryCta")})})]})]})}),r.jsxs("section",{className:"py-16 md:py-20 bg-background relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-20"}),r.jsxs("div",{className:"container mx-auto px-4 max-w-6xl relative z-10",children:[r.jsxs("div",{className:"text-center mb-12 animate-fade-in-up",children:[r.jsx("span",{className:"inline-block text-xs font-semibold tracking-widest uppercase text-turquoise mb-3",children:e("projecten.why.eyebrow")}),r.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-foreground mb-4",children:e("projecten.why.title")}),r.jsx("p",{className:"text-muted-foreground leading-relaxed max-w-3xl mx-auto",children:e("projecten.why.subtitle")})]}),r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5",children:o.map((s,l)=>{const d=r0[l%r0.length];return r.jsxs("div",{className:"glass-card rounded-2xl border border-border p-6 md:p-7 group hover:border-turquoise/30 transition-colors animate-fade-in-up",style:{animationDelay:`${l*70}ms`},children:[r.jsx("div",{className:"w-10 h-10 rounded-lg bg-turquoise/10 border border-turquoise/20 flex items-center justify-center mb-4",children:r.jsx(d,{className:"h-5 w-5 text-turquoise"})}),r.jsx("h3",{className:"font-display text-base md:text-lg font-bold text-foreground leading-snug mb-2",children:s.title}),r.jsx("p",{className:"text-sm text-muted-foreground leading-relaxed",children:s.text})]},s.title)})})]})]}),r.jsx("section",{className:"py-20 md:py-24 bg-background relative",children:r.jsxs("div",{className:"container mx-auto px-4 max-w-6xl grid md:grid-cols-2 gap-8",children:[r.jsxs("div",{className:"rounded-2xl glass-card border border-border p-8 md:p-10 flex flex-col",children:[r.jsx("div",{className:"w-12 h-12 rounded-xl bg-turquoise/10 border border-turquoise/20 flex items-center justify-center mb-5",children:r.jsx(zi,{className:"h-6 w-6 text-turquoise"})}),r.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-foreground mb-3",children:e("projecten.consulting.title")}),r.jsx("p",{className:"text-sm uppercase tracking-wide text-turquoise font-semibold mb-4",children:e("projecten.consulting.tag")}),r.jsx("p",{className:"text-muted-foreground leading-relaxed mb-6",children:e("projecten.consulting.description")}),r.jsx("ul",{className:"space-y-3 mb-8",children:i.map(s=>r.jsxs("li",{className:"flex items-start gap-3",children:[r.jsx("div",{className:"mt-1 w-5 h-5 rounded-full bg-turquoise/10 flex items-center justify-center shrink-0",children:r.jsx(_e,{className:"h-3 w-3 text-turquoise"})}),r.jsx("span",{className:"text-sm text-muted-foreground leading-relaxed",children:s})]},s))}),r.jsx("div",{className:"mt-auto",children:r.jsxs(_,{to:B("consulting",t),className:"inline-flex items-center gap-2 text-sm font-semibold text-turquoise hover:opacity-80",children:[e("projecten.consulting.cta")," ",r.jsx(re,{className:"h-4 w-4"})]})})]}),r.jsxs("div",{className:"rounded-2xl glass-card border border-border p-8 md:p-10 flex flex-col",children:[r.jsx("div",{className:"w-12 h-12 rounded-xl bg-orange/10 border border-orange/20 flex items-center justify-center mb-5",children:r.jsx(db,{className:"h-6 w-6 text-orange"})}),r.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-foreground mb-3",children:e("projecten.custom.title")}),r.jsx("p",{className:"text-sm uppercase tracking-wide text-orange font-semibold mb-4",children:e("projecten.custom.tag")}),r.jsx("p",{className:"text-muted-foreground leading-relaxed mb-6",children:e("projecten.custom.description")}),r.jsx("ul",{className:"space-y-3 mb-8",children:a.map(s=>r.jsxs("li",{className:"flex items-start gap-3",children:[r.jsx("div",{className:"mt-1 w-5 h-5 rounded-full bg-orange/10 flex items-center justify-center shrink-0",children:r.jsx(_e,{className:"h-3 w-3 text-orange"})}),r.jsx("span",{className:"text-sm text-muted-foreground leading-relaxed",children:s})]},s))}),r.jsx("div",{className:"mt-auto",children:r.jsxs(_,{to:B("contact",t),className:"inline-flex items-center gap-2 text-sm font-semibold text-orange hover:opacity-80",children:[e("projecten.custom.cta")," ",r.jsx(re,{className:"h-4 w-4"})]})})]})]})}),r.jsx("section",{className:"py-16 bg-background",children:r.jsxs("div",{className:"container mx-auto px-4 max-w-4xl text-center",children:[r.jsx("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-xl bg-turquoise/10 border border-turquoise/20 mb-5",children:r.jsx(ib,{className:"h-6 w-6 text-turquoise"})}),r.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-foreground mb-3",children:e("projecten.bottom.title")}),r.jsx("p",{className:"text-muted-foreground leading-relaxed mb-6 max-w-2xl mx-auto",children:e("projecten.bottom.subt
13646itle")}),r.jsx(_,{to:B("contact",t),children:r.jsxs("button",{className:"btn-primary inline-flex items-center gap-2",children:[e("projecten.bottom.cta")," ",r.jsx(re,{className:"h-4 w-4"})]})})]})}),r.jsx(Ne,{})]})},xU=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl",i=e("consulting.bullets",{returnObjects:!0});return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("seo.consulting.title"),description:e("seo.consulting.description"),pathByLocale:je("consulting")}),r.jsx(Ee,{}),r.jsx("section",{className:"relative overflow-hidden gradient-hero",children:r.jsxs("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-20 pt-28 md:pt-36 pb-14 relative z-10 text-center",children:[r.jsxs("span",{className:"inline-flex items-center gap-2 rounded-full border border-turquoise/30 bg-turquoise/10 px-3 py-1 text-xs font-medium text-turquoise mb-6",children:[r.jsx(zi,{className:"h-3.5 w-3.5"}),e("consulting.eyebrow")]}),r.jsx("h1",{className:"text-[32px] md:text-[52px] font-extrabold leading-[1.1] tracking-[-0.02em] text-white mb-6 max-w-4xl mx-auto",children:e("consulting.title")}),r.jsx("p",{className:"text-lg text-white/80 leading-relaxed max-w-2xl mx-auto",children:e("consulting.subtitle")})]})}),r.jsx("section",{className:"py-16 md:py-20 bg-background",children:r.jsxs("div",{className:"container mx-auto px-4 max-w-6xl grid md:grid-cols-2 gap-10 items-start",children:[r.jsxs("div",{children:[r.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-foreground mb-6",children:e("consulting.blockTitle")}),r.jsx("p",{className:"text-muted-foreground leading-relaxed mb-6",children:e("consulting.blockDescription")}),r.jsx("ul",{className:"space-y-3 mb-8",children:i.map(a=>r.jsxs("li",{className:"flex items-start gap-3",children:[r.jsx("div",{className:"mt-1 w-5 h-5 rounded-full bg-turquoise/10 flex items-center justify-center shrink-0",children:r.jsx(_e,{className:"h-3 w-3 text-turquoise"})}),r.jsx("span",{className:"text-sm text-muted-foreground leading-relaxed",children:a})]},a))}),r.jsxs(_,{to:B("projecten",t),className:"inline-flex items-center gap-2 text-sm font-semibold text-turquoise hover:opacity-80",children:[e("consulting.backToProjects")," ",r.jsx(re,{className:"h-4 w-4"})]})]}),r.jsxs("div",{className:"rounded-2xl border border-turquoise/20 bg-slate-50 p-6 md:p-8 shadow-[0_8px_28px_-12px_rgba(15,25,35,0.12)]",children:[r.jsx("h3",{className:"font-display text-xl font-bold text-foreground mb-2",children:e("consulting.formTitle")}),r.jsx("p",{className:"text-sm text-muted-foreground mb-6",children:e("consulting.formSubtitle")}),r.jsx(Ko,{portalId:"144146156",formId:t==="nl"?"f7ff9695-012e-4a7f-995a-2e040b81ade5":"f677fb1c-a015-4aeb-bf14-0eac1b275eaf",region:"eu1"})]})]})}),r.jsx(Ne,{})]})},yU="/assets/marcel-BfbwffaI.jpg",jU="/assets/michel-CRD3a8x2.jpg",gv="/assets/jaap-BCgsHsqG.jpg",SU="/assets/katja-DFOPLRR9.jpg",zU="/assets/aleksey-MzQYQpbX.jpg",AU="/assets/dmitri-C1M3bCyT.jpg",tE="/assets/robin-CepOj1Z2.jpg",CU="/assets/alex-D9Jy-l4n.jpg",EU=[{name:"Marcel Vlug",roleKey:null,role:"Co-Founder",photo:yU,bio:"35 jaar ervaring in Enterprise Performance Management met meer dan 300 implementaties bij organisaties als Akzo Nobel, Philips, KPN, KLM en Friesland Campina. Marcel heeft vier succesvolle exits gerealiseerd, waaronder Partake Consulting (overgenomen door EY) en CXO Software (overgenomen door Insight Software). Smartbooks is zijn derde generatie EPM-product, gebouwd met enterprise-logica, ontworpen voor het MKB, en klaar voor het AI-tijdperk.",bioEn:"35 years of experience in Enterprise Performance Management with over 300 implementations at organizations like Akzo Nobel, Philips, KPN, KLM, and Friesland Campina. Marcel has realized four successful exits, including Partake Consulting (acquired by EY) and CXO Software (acquired by Insight Software). Smartbooks is his third-generation EPM product, built with enterprise logic, designed for SMBs, and ready for the AI era."},{name:"Jaap van der Ende",roleKey:null,role:"Co-Founder",photo:gv,bio:"Strategieconsultant en serieel ondernemer. Achtergrond bij Innogy Innovation Hub en MSc Engineering aan de TU Delft. Jaap stuurt de groeistrategie, marketing en operationele uitvoering aan. Hij combineert technisch inzicht met een strategische blik op hoe Smartbooks het MKB bereikt.",bioEn:"Strategy consultant and serial entrepreneur. Backgroun
13646d at Innogy Innovation Hub and MSc Engineering at TU Delft. Jaap drives the growth strategy, marketing, and operational execution. He combines technical insight with a strategic vision on how Smartbooks reaches SMBs."},{name:"Michel van Wijngaarden",roleKey:null,role:"Co-Founder",photo:jU,bio:"30 jaar ervaring in het office-of-the-CFO. Negen jaar Director BeNeLux bij de Hackett Group, specialist in finance benchmarking. Managing Director Finance & Performance Management bij Capgemini Consulting. COO en mede-eigenaar van Transparix (SaaS, overgenomen door Logistyx). Opgeleid aan INSEAD.",bioEn:"30 years of experience in the office of the CFO. Nine years as Director BeNeLux at the Hackett Group, specialist in finance benchmarking. Managing Director Finance & Performance Management at Capgemini Consulting. COO and co-owner of Transparix (SaaS, acquired by Logistyx). Educated at INSEAD."},{name:"Katja Melkert",roleKey:"katja",role:"HR, Legal & Finance",photo:SU,bio:"Achtergrond bij KPMG, Partake Consulting en inlumi. Opgeleid aan Nyenrode. Katja beheert HR, juridische zaken en administratie, en zorgt ervoor dat de founders zich kunnen richten op strategie en product. Ze brengt ervaring mee uit zowel de Big Four als het EPM-consultancy landschap.",bioEn:"Background at KPMG, Partake Consulting, and inlumi. Educated at Nyenrode. Katja manages HR, legal affairs, and administration, ensuring the founders can focus on strategy and product. She brings experience from both the Big Four and the EPM consulting landscape."},{name:"Aleksey Shipilov",roleKey:null,role:"Principal DevOps Engineer",photo:zU,bio:"Vijftien jaar ervaring in enterprise software bij onder andere ING, FRISS en CXO Software, waar hij met Marcel en Dmitri werkte aan corporate EPM dashboarding. Gespecialiseerd in C#, Java, Type
13646Script en cloud architecture, met een focus op schaalbare systemen voor financiële data.",bioEn:"Fifteen years of experience in enterprise software at companies including ING, FRISS and CXO Software, where he worked with Marcel and Dmitri on corporate EPM dashboarding. Specialized in C#, Java, TypeScript and cloud architecture, with a focus on scalable systems for financial data."},{name:"Dmitri Tsoy",roleKey:null,role:"Principal DevOps Engineer",photo:AU,bio:"Ruim vijftien jaar ervaring in enterprise software, met een specialisatie in financiële rapportage en distributed systems. Eerder Lead Software Engineer bij Rabobank en Van Lanschot Kempen, waar hij werkte aan kritieke financiële systemen. Daarvoor onderdeel van het CXO Software team (2011–2014), waar hij met Marcel en Aleksey samenwerkte aan corporate EPM dashboarding. Werkt met .NET, Python en Azure.",bioEn:"Over fifteen years of experience in enterprise software, specialized in financial reporting and distributed systems. Previously Lead Software Engineer at Rabobank and Van Lanschot Kempen, working on critical financial systems. Before that part of the CXO Software team (2011–2014), where he collaborated with Marcel and Ale
13646ksey on corporate EPM dashboarding. Works with .NET, Python and Azure."},{name:"Robin van den Born",roleKey:null,role:"Customer Success Manager",photo:tE,bio:"Achtergrond in finance en data science, en direct na zijn studie bij Smartbooks begonnen. Robin is het aanspreekpunt voor nieuwe klanten tijdens de implementatie en onboarding, en voor bestaande klanten als er tijdens het gebruik iets niet werkt zoals het zou moeten. Hij begeleidt klanten tijdens de inrichting en denkt mee over hoe hun rapportages en consolidatie het beste ingericht kunnen worden.",bioEn:"Background in finance and data science, and joined Smartbooks straight after his studies. Robin is the point of contact for new customers during implementation and onboarding, and for existing customers when something isn't working as it should. He guides customers through the setup and helps them think through how their reporting and consolidation can best be configured."},{name:"Alex",roleKey:null,role:"AI-controller",photo:CU,bio:"Alex is onze AI-controller en het nieuwste lid van het team. 24/7 beschikbaar om controllers en CFO's te ondersteunen bij financiële processen: van consolidatie en variantieanalyse tot ad-hoc rapportagevragen, scenarioplanning en de maandafsluiting. Alex kent jullie cijfers, denkt mee over verklaringen achter afwijkingen en levert direct onderbouwde analyses — zodat het finance-team zich kan richten op interpretatie en advies in plaats van handwerk.",bioEn:"Alex is our AI controller and the newest member of the team. Available 24/7 to 
13646support controllers and CFOs across financial processes: from consolidation and variance analysis to ad-hoc reporting questions, scenario planning and the month-end close. Alex knows your numbers, helps explain what's behind deviations, and delivers grounded analyses on the spot — so the finance team can focus on interpretation and advice instead of manual work."}],NU=()=>{const{t:e,i18n:n}=Y(),t=n.language!=="nl";return r.jsxs("section",{className:"py-28 gradient-hero relative overflow-hidden",id:"about",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh"}),r.jsx("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[500px] h-[500px] bg-teal/5 rounded-full blur-[120px]"}),r.jsxs("div",{className:"container mx-auto px-4 relative z-10",children:[r.jsxs("div",{className:"text-center mb-16 animate-fade-in-up",children:[r.jsxs("h2",{className:"font-display text-3xl sm:text-5xl font-bold text-foreground mb-4 tracking-tight",children:[e("about.title")," ",r.jsx("span",{className:"text-gradient-multi",children:e("about.titleHighlight")})]}),r.jsx("p",{className:"text-muted-foreground text-lg max-w-2xl mx-auto",children:e("about.subtitle")})]}),r.jsx("div",{className:"grid md:grid-cols-2 gap-8 max-w-5xl mx-auto",children:EU.map((i,a)=>r.jsxs("div",{className:"bg-card border border-border rounded-2xl p-8 text-center flex flex-col items-center animate-fade-in-up",style:{animationDelay:`${a*150}ms`},children:[r.jsx("div",{className:"w-32 h-32 rounded-full overflow-hidden mb-6 border-2 border-border bg-muted flex items-center justify-center",children:i.photo?r.jsx("img",{src:i.photo,alt:i.name,className:"w-full h-full object-cover",style:i.imgStyle}):r.jsx("span",{className:"font-display text-3xl font-bold text-muted-foreground",children:i.name.split(" ").map(o=>o[0]).slice(0,2).join("")})}),r.jsx("h3",{className:"font-display text-xl font-bold text-foreground mb-1",children:i.name}),r.jsx("p",{className:"text-sm font-medium text-primary mb-4",children:i.roleKey?e(`about.founderRoles.${i.roleKey}`):i.role}),r.jsx("p",{className:`text-muted-foreground leading-relaxed ${i.name==="Alex"?"text-xs":"text-sm"}`,children:t?i.bioEn:i.bio})]},i.name))})]})]})},IU=[zD,rb,Jt],PU=["mission","vision","whySmartbooks"],TU=()=>{const{t:e}=Y(),n=PU.map((t,i)=>({icon:IU[i],title:e(`missionVision.${t}.title`),subtitle:t!=="whySmartbooks"?e(`missionVision.${t}.subtitle`):void 0,description:e(`missionVision.${t}.description`)}));return r.jsx("section",{className:"py-24 section-warm-tint relative overflow-hidden",children:r.jsxs("div",{className:"container mx-auto px-4",children:[r.jsx("div",{className:"text-center mb-16 animate-fade-in-up",children:r.jsxs("h2",{className:"font-display text-3xl sm:text-4xl font-bold text-foreground mb-4 tracking-tight",children:[e("missionVision.title")," ",r.jsx("span",{className:"text-gradient-multi",children:e("missionVision.titleHighlight")})]})}),r.jsx("div",{className:"grid md:grid-cols-3 gap-8 max-w-5xl mx-auto",children:n.map((t,i)=>r.jsxs("div",{className:"bg-card border border-border rounded-2xl p-8 flex flex-col items-start animate-fade-in-up",style:{animationDelay:`${i*150}ms`},children:[r.jsx("div",{className:"w-12 h-12 rounded-xl bg-primary/10 flex items-center justify-center mb-5",children:r.jsx(t.icon,{className:"w-6 h-6 text-primary"})}),r.jsx("h3",{className:"font-display text-xl font-bold text-foreground mb-2",children:t.title}),t.subtitle&&r.jsx("p",{className:"text-primary font-semibold text-sm mb-3",children:t.subtitle}),r.jsx("p",{className:"text-muted-foreground leading-relaxed text-sm",children:t.description})]},t.title))})]})})},DU="/assets/team-6-ByL-lE_U.webp",BU=()=>{const{t:e}=Y();return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("seo.overOns.title"),description:e("seo.overOns.description"),pathByLocale:je("overOns")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative pt-28 pb-16 md:pt-32 md:pb-20 overflow-hidden gradient-hero",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh","aria-hidden":"true"}),r.jsx("div",{className:"container mx-auto px-4 relative z-10",children:r.jsxs("div",{className:"grid lg:grid-cols-[1.2fr_1fr] gap-10 lg:gap-14 items-center max-w-6xl mx-auto",children:[r.jsxs("div",{className:"text-center lg:text-left animate-fade-in-up",children:[r.jsx("span",{className:"eyebrow-badge",children:e("overOnsHero.eyebrow","Over Smartbooks")}),r.jsx("h1",{className:"font-display text-4xl md:text-5xl lg:text-[3.25rem] font-bold text-foreground mt-6 leading-[1.1] tracking-tight",children:e("overOnsHero.title","Wij bouwen de finance-tool die wij zelf altijd hadden willen hebben.")}),r.jsx("p",{className:"text-muted-foreground text-lg mt-6 leading-relaxed",children:e("overOnsHero.subtitle","Een team met decennia ervaring in EPM en controlling, op een missie om enterprise-finance binnen handbereik van het MKB te brengen.")})]}),r.jsx("div",{className:"rounded-2xl overflow-hidden border border-border shadow-xl aspect-[4/3] animate-fade-in-up",style:{animationDelay:"200ms"},children:r.jsx("img",{src:DU,alt:e("overOnsHero.eyebrow","Het Smartbooks team"),className:"w-full h-full object-cover"})})]})})]}),r.jsx(TU,{}),r.jsx(NU,{}),r.jsx(va,{}),r.jsx(Ne,{})]})},a0={nl:"e5613ff6-223d-4d37-a62f-2078f0dc6ced",en:"a03f9823-ef6f-4f42-a003-0d69da6e4d53"},MU=()=>{const{t:e,i18n:n}=Y(),t=(n.language||"nl").toLowerCase().split("-")[0],i=a0[t]??a0.nl,a=[{icon:hD,title:e("contact.address.title"),content:r.jsxs("div",{className:"space-y-3 text-muted-foreground text-sm leading-relaxed",children:[r.jsxs("p",{children:["Haarlemmerweg 331A",r.jsx("br",{}),"1051 LH Amsterdam – NL"]}),r.jsx("p",{children:"101 Federal Street, Boston, MA 02110 – USA"})]})},{icon:Y2,title:e("contact.email.title"),content:r.jsx("a",{href:"mailto:[email protected]",className:"text-teal hover:text-teal/80 transition-colors text-sm underline underline-offset-4",children:"[email protected]"})},{icon:kD,title:e("contact.phone.title"),content:r.jsx("a",{href:"tel:+31853039670",className:"text-teal hover:text-teal/80 transition-colors text-sm underline underline-offset-4",children:"+31 85 303 9670"})}];return r.jsxs("section",{className:"py-20 bg-background relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh"}),r.jsx("div",{className:"absolute top-1/2 left-1/4 -translate-y-1/2 w-[400px] h-[400px] bg-teal/5 rounded-full blur-[120px]"}),r.jsx("div",{className:"container mx-auto px-4 relative z-10",children:r.jsxs("div",{className:"grid lg:grid-cols-2 gap-12 max-w-6xl mx-auto",children:[r.jsxs("div",{className:"space-y-8 animate-fade-in-left",children:[a.map((o,s)=>{const l=o.icon;return r.jsxs("div",{className:"flex items-start gap-5",children:[r.jsxs("div",{className:"relative shrink-0",children:[r.jsx("div",{className:"w-16 h-16 rounded-full bg-card border border-border flex items-center justify-center glow-teal-sm",children:r.jsx(l,{className:"h-6 w-6 text-foreground"})}),r.jsx("span",{className:"absolute -top-1 -right-0.5 w-2.5 h-2.5 rounded-full bg-teal"}),r.jsx("span",{className:"absolute -bottom-1 -left-0.5 w-2 h-2 rounded-full bg-teal/60"})]}),r.jsxs("div",{className:"pt-2",children:[r.jsx("h3",{className:"font-display text-xl font-bold text-foreground mb-2",children:o.title}),o.content]}
13646)]},s)}),r.jsxs("div",{className:"pt-6 border-t border-border",children:[r.jsx("h3",{className:"font-display text-xl font-bold text-foreground mb-3",children:e("contact.helpdesk.title")}),r.jsx("a",{href:"mailto:[email protected]",className:"text-teal hover:text-teal/80 transition-colors text-sm underline underline-offset-4",children:"[email protected]"}),r.jsx("p",{className:"text-muted-foreground text-sm leading-relaxed mt-4 max-w-md",children:e("contact.helpdesk.description")})]})]}),r.jsxs("div",{className:"bg-slate-200 rounded-2xl p-8 shadow-xl border border-slate-300 animate-fade-in-right",style:{animationDelay:"100ms"},children:[r.jsx("h3",{className:"font-display text-2xl font-bold text-slate-800 mb-2",children:e("contact.form.title")}),r.jsx("p",{className:"text-slate-600 text-sm mb-6",children:e("contact.form.subtitle")}),r.jsx(Ko,{portalId:"144146156",formId:i,region:"eu1"},i)]})]})})]})},FU=()=>{const{t:e}=Y();return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("contact.seo.title"),description:e("contact.seo.description"),pathByLocale:je("contact")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("div",{className:"pt-12",children:[r.jsxs("div",{className:"container mx-auto px-4 mb-8 text-center",children:[r.jsx("h1",{className:"font-display text-3xl sm:text-5xl font-bold text-foreground mb-4 tracking-tight",children:e("contact.heroTitle")}),r.jsx("p",{className:"text-muted-foreground text-lg max-w-2xl mx-auto",children:e("contact.heroSubtitle")})]}),r.jsx(MU,{})]}),r.jsx(va,{}),r.jsx(Ne,{})]})},RU=({tags:e,selected:n,onToggle:t,onClear:i})=>{const{t:a}=Y();return r.jsxs("aside",{className:"glass-card rounded-2xl p-5 sticky top-32",children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsxs("h3",{className:"font-display font-semibold text-foreground flex items-center gap-2",children:[r.jsx(eS,{className:"h-4 w-4 text-primary"}),a("knowledgeCenter.tagsTitle")]}),n.length>0&&r.jsxs("button",{onClick:i,className:"text-xs text-muted-foreground hover:text-foreground transition-colors flex items-center gap-1",children:[r.jsx(xi,{className:"h-3 w-3"}),a("knowledgeCenter.tagsClear")]})]}),e.length===0?r.jsx("p",{className:"text-sm text-muted-foreground",children:a("knowledgeCenter.tagsEmpty")}):r.jsx("ul",{className:"flex flex-col gap-1",children:e.map(({tag:o,topicId:s,count:l})=>{const d=s??o,c=n.includes(d),h=l===0&&!c;return r.jsx("li",{children:r.jsxs("button",{onClick:()=>!h&&t(d),disabled:h,"aria-pressed":c,className:`group w-full flex items-center gap-3 px-2 py-2 rounded-lg text-left text-sm transition-colors ${h?"cursor-not-allowed text-muted-foreground/50":"hover:bg-muted/40 text-foreground"}`,children:[r.jsx("span",{className:`flex h-4 w-4 flex-shrink-0 items-center justify-center rounded border transition-colors ${c?"bg-primary border-primary text-primary-foreground":h?"border-border/40 bg-muted/10":"border-border bg-background group-hover:border-primary/60"}`,children:c&&r.jsx(_e,{className:"h-3 w-3",strokeWidth:3})}),r.jsx("span",{className:"flex-1 truncate",children:o}),r.jsx("span",{className:"text-xs text-muted-foreground tabular-nums",children:l})]})},d)})})]})},qp=[{id:"rapporteren",label:{nl:"Rapporteren",en:"Reporting",de:"Berichtswesen"},matches:["Rapporteren","Rapportage","Reporting","Dashboard","Dashboards","KPI","KPI's","PowerBI","Power BI"]},{id:"consolideren",label:{nl:"Consolideren",en:"Consolidation",de:"Konsolidierung"},matches:["Consolideren","Consolidatie","Consolidation","Intercompany","IC","Lucanet"]},{id:"planning-forecast",label:{nl:"Planning & Forecast",en:"Planning & Forecast",de:"Planung & Forecast"},matches:["Planning","Plannen","Forecast","Forecasting","Prognose","prognose","Budget","Budgettering","Rolling Forecast","Scenario","Scenarios","Scenario's"]},{id:"cashflow",label:{nl:"Cashflow",en:"Cash Flow",de:"Cashflow"},matches:["Cashflow","cashflow","Cash flow","Liquiditeit","Working capital","Werkkapitaal"]},{id:"close",label:{nl:"Maandafsluiting",en:"Month-End Close",de:"Monatsabschluss"},matches:["Close","Maandafsluiting","Periodeafsluiting","Month-end","Closing"]},{id:"analyse",label:{nl:"Analyseren",en:"Analytics",de:"Analyse"},matches:["Analyseren","Analyse","Analytics","Data-analyse","BI","Business Intelligence","Drilldown"]},{id:"ai-finance",label:{nl:"AI in Finance",en:"AI in Finance",de:"KI im Finance"},matches:["AI","Alex","Artificial Intelligence","Machine Learning"]},{id:"grootboek",label:{nl:"Grootboek",en:"General Ledger",de:"Hauptbuch"},matches:["Grootboek","Boekhouden","Accounting","Splitsen van grootboekrekening","Ledger","Journal","
13646Exact Globe","Exact"]},{id:"best-practices",label:{nl:"Best Practices",en:"Best Practices",de:"Best Practices"},matches:["Best Practices","Best Practice","Implementatie","Implementation"]},{id:"controller",label:{nl:"Business Controller",en:"Business Controller",de:"Business Controller"},matches:["Business Controller","Controller","CFO","Finance leader","Finance Professional"]},{id:"prijs-kosten",label:{nl:"Prijs & Kosten",en:"Pricing & Costs",de:"Preis & Kosten"},matches:["Prijs","Kosten","Pricing","Costs","ROI"]}],o0=(e,n)=>n==="de"?e.label.de:n==="en"?e.label.en:e.label.nl,OU=(e,n)=>{const t=(e??[]).map(o=>o.trim().toLowerCase()),i=(n??"").trim().toLowerCase(),a=[];for(const o of qp){const s=new Set(o.matches.map(u=>u.toLowerCase())),l=new Set((o.categories??[]).map(u=>u.toLowerCase())),d=t.some(u=>s.has(u)),c=i&&l.has(i);(d||c)&&a.push(o.id)}return a},iE=b.forwardRef(({className:e,type:n,...t},i)=>r.jsx("input",{type:n,className:An("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:i,...t}));iE.displayName="Input";const rE="/assets/glomar-BgILHNWV.png",_U={Consolidatie:"Consolideren",Rapportage:"Rapporteren",cashflow:"Cashflow",prognose:"Forecast","Splitsen van grootboekrekening":"Grootboek"},LU=e=>_U[e]??e,WU={Articles:r.jsx(To,{className:"h-4 w-4"}),Videos:r.jsx(rS,{className:"h-4 w-4"}),"Case Studies":r.jsx(nb,{className:"h-4 w-4"}),"Customer Stories":r.jsx(zi,{className:"h-4 w-4"})},s0={lifewatcher:{src:ov,type:"logo"},primus:{src:rh,type:"logo"},glomar:{src:rE,type:"banner"},tjojs:{src:Vl,type:"logo"},anove:{src:Kl,type:"logo"},ace:{src:ql,type:"logo"},risketeers:{src:Hl,type:"logo"},intermax:{src:zo,type:"logo"}},VU=e=>{const n=Object.keys(s0).find(t=>e.toLowerCase().includes(t));return n?s0[n]:void 0},KU=(e,n=240)=>{if(e.excerpt&&e.excerpt.trim())return e.excerpt;if(!e.content)return"";const t=e.content.replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<script[\s\S]*?<\/script>/gi," ").replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/\s+/g," ").trim();if(t.length<=n)return t;const i=t.slice(0,n),a=i.lastIndexOf(". ");return a>80?i.slice(0,a+1):i.trimEnd()+"…"},qU=()=>{const[e,n]=uT(),{t,i18n:i}=Y(),a=b.useMemo(()=>Ll(i.language).filter(y=>y.category!=="Customer Stories"&&y.category!=="Case Studies"),[i.language]),o=b.useMemo(()=>q9(i.language).filter(y=>y!=="Customer Stories"&&y!=="Case Studies"),[i.language]),s=b.useMemo(()=>e.get("category")??e.get("categorie"),[e]),l=b.useMemo(()=>ex(s),[s]),[d,c]=b.useState(l),[u,h]=b.useState(""),[g,m]=b.useState([]);b.useEffect(()=>{e.has("categorie")&&n(y=>{const j=new URLSearchParams(y),z=j.get("categorie");return j.delete("categorie"),z&&!j.has("category")&&j.set("category",z),j},{replace:!0})},[e,n]),b.useEffect(()=>{const y=s;c(y!==null&&y!==""?ex(y):"Alle")},[s]);const p=b.useMemo(()=>{const y=new Map;for(const j of a){const z=(j.tags??[]).map(LU);y.set(j.slug,OU(z,j.category))}return y},[a]),f=b.useMemo(()=>{const y=new Map,j=a.filter(z=>{const S=d==="Alle"||z.category===d,A=!u||z.title.toLowerCase().includes(u.toLowerCase())||z.excerpt.toLowerCase().includes(u.toLowerCase());return S&&A});for(const z of j){const S=p.get(z.slug)??[];for(const A of S)y.set(A,(y.get(A)??0)+1)}return qp.map(z=>({tag:o0(z,i.language),topicId:z.id,count:y.get(z.id)??0})).sort((z,S)=>S.count-z.count||z.tag.localeCompare(S.tag))},[a,d,u,p,i.language]),w=y=>m(j=>j.includes(y)?j.filter(z=>z!==y):[...j,y]),k=b.useMemo(()=>a.filter(y=>{const j=d==="Alle"||y.category===d,z=!u||y.title.toLowerCase().includes(u.toLowerCase())||y.excerpt.toLowerCase().includes(u.toLowerCase()),S=p.get(y.slug)??[],A=g.length===0||g.some(E=>S.includes(E));return j&&z&&A}).sort((y,j)=>new Date(j.date).getTime()-new Date(y.date).getTime()),[a,d,u,g,p]),v=y=>{const j=qp.find(z=>z.id===y);return j?o0(j,i.language):y},x=y=>{const j=new Date(y),z=i.language==="de"?"de-DE":i.language!=="nl"?"en-US":"nl-NL";return j.toLocaleDateString(z,{day:"numeric",month:"long",year:"numeric"})};return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:t("knowledgeCenter.title"),description:t("knowledgeCenter.subtitle"),pathByLocale:je("kenniscentrum"),jsonLd:oh}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"pt-6 pb-6 relative overflow-hidden gradient-hero",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh opacity-60"}),r.jsx("div",{className:"container mx-auto px-4 relative z-10",children:r.jsxs("div",{className:"max-w-6xl mx-auto flex flex-col lg:flex-row lg:items-end lg:justify-between gap-4 lg:gap-8",children:[r.jsxs("div",{className:"text-center lg:text-left",children:[r.jsx("h1",{className:"font-display text-3xl md:text-4xl font-bold text-foreground mb-2 animate-fade-in-up",children:t("knowledgeCenter.title")}),r.jsx("p",{className:"text-muted-foreground text-base max-w-2xl lg:mx-0 mx-auto animate-fade-in-up",style:{animationDelay:"100ms"},children:t("knowledgeCenter.subtitle")})]}),r.jsx("div",{className:"flex justify-center lg:justify-end shrink-0 animate-fade-in-up",style:{animationDelay:"200ms"},children:r.jsxs(_,{to:je("whitepapers")[i.language==="de"?"de":i.language!=="nl"?"en":"nl"],className:"group inline-flex items-center gap-2.5 pl-3 pr-4 py-2.5 rounded-full bg-orange text-white text-sm font-semibold shadow-[0_8px_20px_-6px_rgba(255,121,0,0.5)] hover:shadow-[0_10px_28px_-6
13646px_rgba(255,121,0,0.65)] hover:-translate-y-0.5 transition-all duration-200",children:[r.jsx("span",{className:"inline-flex items-center justify-center h-6 px-2 rounded-full bg-white/20 text-[10px] font-bold uppercase tracking-wider",children:i.language==="de"?"Gratis":i.language!=="nl"?"Free":"Gratis"}),r.jsx(To,{className:"h-4 w-4"}),t("knowledgeCenter.leadMagnet.cta","Download whitepaper"),r.jsx(re,{className:"h-4 w-4 group-hover:translate-x-0.5 transition-transform"})]})})]})})]}),r.jsx("section",{className:"py-4 bg-background",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-2xl mx-auto relative animate-fade-in-up",children:[r.jsx(J2,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"}),r.jsx(iE,{placeholder:t("knowledgeCenter.searchPlaceholder"),value:u,onChange:y=>h(y.target.value),className:"pl-10 bg-card border-border h-11"})]})})}),r.jsx("section",{className:"border-b border-border sticky top-16 z-40 bg-background/80 backdrop-blur-lg",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsx("div",{className:"flex gap-1 overflow-x-auto py-3",children:o.map(y=>r.jsxs("button",{onClick:()=>{c(y),n(j=>{const z=new URLSearchParams(j);return z.delete("categorie"),y==="Alle"?z.delete("category"):z.set("category",y),z},{replace:!0})},className:`px-4 py-2 rounded-full text-sm font-medium whitespace-nowrap transition-all duration-300 flex items-center gap-2 ${d===y?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"}`,children:[y!=="Alle"&&WU[y],y==="Alle"?t("knowledgeCenter.all"):xl(y,t),r.jsxs("span",{className:"text-xs opacity-70",children:["(",y==="Alle"?a.length:a.filter(j=>j.category===y).length,")"]})]},y))})})}),r.jsx("section",{className:"py-12 section-cyan-tint",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"grid lg:grid-cols-[260px_1fr] gap-8",children:[r.jsx("div",{className:"lg:block",children:r.jsx(RU,{tags:f,selected:g,onToggle:w,onClear:()=>m([])})}),r.jsxs("div",{children:[g.length>0&&r.jsxs("div",{className:"mb-6 flex flex-wrap items-center gap-2",children:[r.jsx("span",{className:"text-xs text-muted-foreground",children:t("knowledgeCenter.activeTagsLabel")}),g.map(y=>r.jsxs("button",{onClick:()=>w(y),className:"inline-flex items-center gap-1 px-2.5 py-1 rounded-full text-xs font-medium bg-primary/10 text-primary border border-primary/30 hover:bg-primary/20 transition-colors",children:[v(y),r.jsx(xi,{className:"h-3 w-3"})]},y))]}),k.length===0?r.jsx("p",{className:"text-center text-muted-foreground py-16",children:t("knowledgeCenter.noResults")}):r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6",children:k.map((y,j)=>{const z=VU(y.slug);return r.jsx("div",{className:"animate-fade-in-up",style:{animationDelay:`${Math.min(j*50,300)}ms`},children:r.jsxs(_,{to:Pt(y.slug,i.language==="de"?"de":i.language!=="nl"?"en":"nl"),className:"group glass-card rounded-2xl overflow-hidden h-full flex flex-col hover:border-primary/20 transition-all duration-300 block",children:[z?.type==="logo"&&r.jsx("div",{className:"h-32 flex items-center justify-center bg-white p-6 border-b border-border",children:r.jsx("img",{src:z.src,alt:`${y.title} logo`,className:"max-h-full max-w-[60%] object-contain",loading:"lazy"})}),z?.type==="banner"&&r.jsx("div",{className:"h-32 overflow-hidden border-b border-border",children:r.jsx("img",{src:z.src,alt:y.title,className:"w-full h-full object-cover",loading:"lazy"})}),r.jsxs("div",{className:"p-6 flex flex-col flex-1",children:[r.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[r.jsx("span",{className:"px-2.5 py-0.5 rounded-full text-xs font-medium bg-primary/10 text-primary",children:xl(y.category,t)}),r.jsxs("span",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[r.jsx(tb,{className:"h-3 w-3"}),x(y.date)]})]}),r.jsx("h3",{className:"font-display font-bold text-foreground mb-2 group-hover:text-primary transition-colors line-clamp-2",children:y.title}),(()=>{const S=KU(y);return S?r.jsx("p",{className:"text-sm text-muted-foreground mb-4 line-clamp-5 flex-1",children:S}):null})(),y.meta?.naam_medewerker&&r.jsxs("p",{className:"text-xs text-muted-foreground mb-3",children:[y.meta.naam_medewerker," — ",y.meta.functie_medewerker]}),r.jsxs("span",{className:"inline-flex items-center text-sm font-medium text-primary mt-auto",children:[t("knowledgeCenter.readMore")," ",r.jsx(re,{className:"ml-1 h-4 w-4 group-hover:translate-x-1 transition-transform"})]})]})]})},y.slug)})})]})]})})}),r.jsx(Ne,{})]})},l0={lifewatcher:{src:ov,type:"logo"},primus:{src:rh,type:"logo"},glomar:{src:rE,type:"banner"},tjojs:{src:Vl,type:"logo"},anove:{src:Kl,type:"logo"},ace:{src:ql,type:"logo"},risketeers:{src:Hl,type:"logo"},intermax:{src:zo,type:"logo"}},HU=e=>{const n=Object.keys(l0).find(t=>e.toLowerCase().includes(t));return n?l0[n]:void 0},UU=(e,n=240)=>{if(e.excerpt&&e.excerpt.trim())return e.excerpt;if(!e.content)return"";const t=e.content.replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<script[\s\S]*?<\/script>/gi," ").replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/\s+/g," ").trim();if(t.length<=n)return t;const i=t.slice(0,n),a=i.lastIndexOf(". ");return a>80?i.slice(0,a+1):i.trimEnd()+"…"},d0=[{id:"all",category:null,icon:null}
13646,{id:"caseStudies",category:"Case Studies",icon:r.jsx(nb,{className:"h-4 w-4"})},{id:"customerStories",category:"Customer Stories",icon:r.jsx(zi,{className:"h-4 w-4"})}],GU=()=>{const[e,n]=b.useState("all"),{t,i18n:i}=Y(),a=i.language==="de"?"de":i.language!=="nl"?"en":"nl",o=b.useMemo(()=>Ll(i.language),[i.language]),s=b.useMemo(()=>o.filter(c=>c.category==="Case Studies"||c.category==="Customer Stories"),[o]),l=b.useMemo(()=>{if(e==="all")return s;const c=d0.find(u=>u.id===e)?.category;return c?s.filter(u=>u.category===c):s},[s,e]),d=c=>new Date(c).toLocaleDateString(a==="de"?"de-DE":a==="en"?"en-US":"nl-NL",{day:"numeric",month:"long",year:"numeric"});return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:t("customerStories.seoTitle"),description:t("customerStories.seoDescription"),pathByLocale:je("klantverhalen"),jsonLd:oh}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"pt-12 pb-12 relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh"}),r.jsx("div",{className:"container mx-auto px-4 relative z-10",children:r.jsxs("div",{className:"max-w-3xl mx-auto text-center",children:[r.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-primary/30 bg-primary/10 text-primary text-xs font-medium mb-5 animate-fade-in-up",children:[r.jsx(wi,{className:"h-3.5 w-3.5"}),t("customerStories.eyebrow")]}),r.jsx("h1",{className:"font-display text-4xl md:text-5xl font-bold text-foreground mb-4 animate-fade-in-up",children:t("customerStories.title")}),r.jsx("p",{className:"text-muted-foreground text-lg max-w-2xl mx-auto animate-fade-in-up",style:{animationDelay:"100ms"},children:t("customerStories.subtitle")})]})})]}),r.jsx("section",{className:"border-b border-border sticky top-16 z-40 bg-background/80 backdrop-blur-lg",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsx("div",{className:"flex gap-1 overflow-x-auto py-3 justify-center",children:d0.map(c=>{const u=c.id==="all"?s.length:s.filter(g=>g.category===c.category).length,h=e===c.id;return r.jsxs("button",{onClick:()=>n(c.id),className:`px-4 py-2 rounded-full text-sm font-medium whitespace-nowrap transition-all duration-300 flex items-center gap-2 ${h?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"}`,children:[c.icon,c.id==="all"?t("customerStories.all"):t(`customerStories.tabs.${c.id}`),r.jsxs("span",{className:"text-xs opacity-70",children:["(",u,")"]})]},c.id)})})})}),r.jsx("section",{className:"py-12",children:r.jsx("div",{className:"container mx-auto px-4",children:l.length===0?r.jsx("p",{className:"text-center text-muted-foreground py-16",children:t("customerStories.noResults")}):r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:l.map((c,u)=>{const h=HU(c.slug);return r.jsx("div",{className:"animate-fade-in-up",style:{animationDelay:`${Math.min(u*50,300)}ms`},children:r.jsxs(_,{to:Pt(c.slug,a),className:"group glass-card rounded-2xl overflow-hidden h-full flex flex-col hover:border-primary/20 transition-all duration-300 block",children:[h?.type==="logo"&&r.jsx("div",{className:"h-32 flex items-center justify-center bg-white p-6 border-b border-border",children:r.jsx("img",{src:h.src,alt:`${c.title} logo`,className:"max-h-full max-w-[60%] object-contain",loading:"lazy"})}),h?.type==="banner"&&r.jsx("div",{className:"h-32 overflow-hidden border-b border-border",children:r.jsx("img",{src:h.src,alt:c.title,className:"w-full h-full object-cover",loading:"lazy"})}),r.jsxs("div",{className:"p-6 flex flex-col flex-1",children:[r.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[r.jsx("span",{className:"px-2.5 py-0.5 rounded-full text-xs font-medium bg-primary/10 text-primary",children:xl(c.category,t)}),r.jsxs("span",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[r.jsx(tb,{className:"h-3 w-3"}),d(c.date)]})]}),r.jsx("h3",{className:"font-display font-bold text-foreground mb-2 group-hover:text-primary transition-colors line-clamp-2",children:c.title}),(()=>{const g=UU(c);return g?r.jsx("p",{className:"text-sm text-muted-foreground mb-4 line-clamp-5 flex-1",children:g}):null})(),c.meta?.naam_medewerker&&r.jsxs("p",{className:"text-xs text-muted-foreground mb-3",children:[c.meta.naam_medewerker," — ",c.meta.functie_medewerker]}),r.jsxs("span",{className:"inline-flex items-center text-sm font-medium text-primary mt-auto",children:[t("knowledgeCenter.readMore")," ",r.jsx(re,{className:"ml-1 h-4 w-4 group-hover:translate-x-1 transition-transform"})]})]})]})},c.slug)})})})}),r.jsx(Ne,{})]})},$U=e=>{if(!e)return"";let n=e;return n=n.replace(/<style[\s\S]*?<\/style>/gi,""),n=n.replace(/<script[\s\S]*?<\/script>/gi,""),n=n.replace(/<figure\b[^>]*>[\s\S]*?<img[^>]+src=["'][^"']*smartbooks\.ai\/wp-content\/uploads[^"']*["'][\s\S]*?<\/figure>/gi,""),n=n.replace(/<img[^>]+src=["'][^"']*smartbooks\.ai\/wp-content\/uploads[^"']*["'][^>]*\/?>/gi,""),n=n.replace(/\sstyle="[^"]*"/gi,""),n=n.replace(/\sstyle='[^']*'/gi,""),n=n.replace(/\s(?:color|bgcolor|face|align|width|height)="[^"]*"/gi,""),n=n.replace(/<div[^>]*class="[^"]*(?:sb-artikel|article-wrapper)[^"]*"[^>]*>/gi,""),n=n.replace(/<p[^>]*class="[^"]*has-[a-z-]*font-size[^"]*"[^>]*>\s*<strong>([\s\S]*?)<\/strong>\s*<\/p>/gi,"<h3>$1</h3>"),n=n.replace(/\sclass="([^"]*)"/gi,(t,i)=>{const a=i.split(/\s+/).filter(o=>!/^(sb-|kt-|kb-|wp-|has-|kadence-|article-wrapper$|author$|interview-|footnote$|summary-box$|section-detail$|list-label$|size-)/i.test(o)).join(" ").trim();return a?` class="${a}"`:""}),n=n.replace(/<p[^>]*>(?:\s|&nbsp;|\u00a0|<br\s*\/?>)*<\/p>/gi,""),n=n.replace(/(?:\s*<br\s*\/?>\s*){2,}/gi,"<br />"),n=n.replace(/<div>\s*<\/div>/gi,""),n=n.replace(/<h1(\s[^>]*)?>/gi,"<h2>"),n=n.replace(/<\/h1>/gi,"</h2>"),n},_d=()=>{const{slug:e}=J1(),{pathname:n}=dt(),{i18n:t,t:i}=Y(),a=Ib(n),o=b.useMemo(()=>Ll(t.language),[t.language]),s=o.find(g=>g.slug===e||g.enSlug===e),l=b.useMemo(()=>
13646{if(!s)return"";let g=s.content;return s.category==="Videos"&&(g=g.replace(/<div[^>]*class="[^"]*wp-block-kadence-column[^"]*"[\s\S]*?<\/div>\s*<\/div>/gi,""),g=g.replace(/<figure[^>]*class="[^"]*wp-block-kadence-image[^"]*"[\s\S]*?<\/figure>/gi,"")),$U(g)},[s]),d=b.useMemo(()=>{if(!s)return[];const g=6,m=(s.tags??[]).map(v=>v.toLowerCase()),f=o.filter(v=>v.slug!==s.slug).map(v=>{const y=(v.tags??[]).map(z=>z.toLowerCase()).filter(z=>m.includes(z)).length,j=v.category===s.category?1:0;return{a:v,score:y*2+j}}).filter(v=>v.score>0).sort((v,x)=>x.score-v.score||+new Date(x.a.date)-+new Date(v.a.date)).slice(0,3).map(v=>v.a),w=new Set(f.map(v=>v.slug)),k=o.findIndex(v=>v.slug===s.slug);for(let v=1;v<=o.length&&f.length<g;v++){const x=o[(k+v)%o.length];!x||x.slug===s.slug||w.has(x.slug)||(w.add(x.slug),f.push(x))}return f},[s,o]),c=s?.category==="Case Studies"||s?.category==="Customer Stories";if(!s)return r.jsx(i2,{to:B("kenniscentrum",t.language==="de"?"de":t.language!=="nl"?"en":"nl"),replace:!0});const u=t.language==="de"?"de":t.language!=="nl"?"en":"nl",h=g=>new Date(g).toLocaleDateString(t.language!=="nl"?"en-US":"nl-NL",{day:"numeric",month:"long",year:"numeric"});return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:s.metaTitle||s.title,description:s.excerpt,pathByLocale:__(s.slug),type:"article",article:{publishedTime:s.date,author:s.meta?.naam_medewerker},jsonLd:[tq({title:s.title,slug:s.slug,canonicalPath:Pt(s.slug,a),date:s.date,excerpt:s.excerpt,author:s.meta?.naam_medewerker}),sh([{name:"Home",url:B("index",u)},{name:c?u==="nl"?"Klantverhalen":"Customer Stories":u==="nl"?"Kenniscentrum":"Knowledge Center",url:B(c?"klantverhalen":"kenniscentrum",u)},{name:s.title,url:Pt(s.slug,u)}])]}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsx("article",{className:"pt-8 pb-16",children:r.jsxs("div",{className:"container mx-auto px-4",children:[r.jsxs("div",{className:"max-w-2xl mx-auto animate-fade-in-up",children:[r.jsxs(_,{to:B(c?"klantverhalen":"kenniscentrum",u),className:"inline-flex items-center text-sm text-muted-foreground hover:text-foreground mb-8 transition-colors",children:[r.jsx(K2,{className:"mr-2 h-4 w-4"}),c?i("article.backToCustomerStories",u==="nl"?"Terug naar klantverhalen":"Back to customer stories"):i("article.backToKnowledgeCenter","Terug naar kenniscentrum")]}),r.jsxs("div",{className:"flex flex-wrap items-center gap-3 mb-5",children:[r.jsx("span",{className:"px-3 py-1 rounded-full text-xs font-medium bg-primary/10 text-primary",children:xl(s.category,i)}),r.jsxs("span",{className:"flex items-center gap-1 text-sm text-muted-foreground",children:[r.jsx(tb,{className:"h-3.5 w-3.5"}),h(s.date)]})]}),r.jsx("h1",{className:"font-display text-3xl md:text-[2.6rem] font-bold tracking-tight text-foreground leading-[1.15] mb-6",children:s.title}),s.excerpt&&r.jsx("p",{className:"text-lg md:text-xl text-muted-foreground leading-relaxed mb-8",children:s.excerpt}),s.meta?.naam_medewerker&&r.jsxs("div",{className:"flex items-center gap-3 mb-10 pb-8 border-b border-border",children:[r.jsx("div",{className:"w-10 h-10 rounded-full bg-primary/10 border border-primary/20 flex items-center justify-center text-primary font-display text-sm font-semibold",children:s.meta.naam_medewerker.split(" ").map(g=>g[0]).filter(Boolean).slice(0,2).join("")}),r.jsxs("div",{children:[r.jsx("p",{className:"text-sm font-medium text-foreground",children:s.meta.naam_medewerker}),r.jsxs("p",{className:"text-xs text-muted-foreground",children:[s.meta.functie_medewerker,s.meta.type_bedrijf?` · ${s.meta.type_bedrijf}`:""]})]})]}),r.jsx("div",{className:`article-prose prose prose-invert prose-lg max-w-none
13647                prose-headings:font-display prose-headings:text-foreground prose-headings:font-semibold prose-headings:tracking-tight
13648                prose-h2:text-2xl md:prose-h2:text-3xl prose-h2:mt-12 prose-h2:mb-4 prose-h2:pb-2 prose-h2:border-b prose-h2:border-border/60
13649                prose-h3:text-xl prose-h3:mt-10 prose-h3:mb-3 prose-h3:text-foreground
13650                prose-h4:text-lg prose-h4:mt-8 prose-h4:mb-2
13651                prose-p:text-foreground/85 prose-p:leading-[1.8] prose-p:my-5
13652                prose-a:text-primary prose-a:font-medium prose-a:no-underline hover:prose-a:underline prose-a:underline-offset-4
13653                prose-strong:text-foreground prose-strong:font-semibold
13654                prose-em:text-foreground/90
13655                prose-ul:my-5 prose-ol:my-5 prose-ul:text-foreground/85 prose-ol:text-foreground/85
13656                prose-li:my-1.5 prose-li:leading-relaxed prose-li:marker:text-primary/70
13657                prose-blockquote:border-l-4 prose-blockquote:border-l-primary prose-blockquote:bg-muted/30 prose-blockquote:rounded-r-lg prose-blockquote:py-3 prose-blockquote:px-5 prose-blockquote:not-italic prose-blockquote:text-foreground/90 prose-blockquote:font-normal
13658                prose-img:rounded-xl prose-img:shadow-lg prose-img:border prose-img:border-border/50 prose-img:my-8
13659                prose-figure:my-8 prose-figcaption:text-xs prose-figcaption:text-muted-foreground prose-figcaption:text-center prose-figcaption:mt-2
13660                prose-hr:border-border prose-hr:my-12
13661                prose-code:text-primary prose-code:bg-muted/50 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded prose-code:text-sm prose-code:before:content-none prose-code:after:content-none
13662                prose-pre:bg-muted/50 prose-pre:border prose-pre:border-border
13663                prose-table:text-sm prose-table:my-6
13664                prose-th:bg-muted/50 prose-th:text-foreground prose-th:p-3 prose-th:text-left prose-th:font-semibold
13665                prose-td:p-3 prose-td:border-t prose-td:border-border prose-td:text-foreground/85
13666              `,dangerouslySetInnerHTML:{__html:l}}),s.tags.length>0&&r.jsxs("div",{className:"flex flex-wrap items-center gap-2 mt-12 pt-8 border-t border-border",children:[r.jsx(eS,{className:"h-4 w-4 text-muted-foreground"}),s.tags.map(g=>r.jsx("span",{className:"px-2.5 py-0.5 rounded-full text-xs bg-muted text-muted-foreground",children:g},g))]})]}),d.length>0&&r.jsxs("div",{className:"max-w-3xl mx-auto mt-16 pt-12 border-t border-border",children:[r.jsx("h2",{className:"font-display text-2xl font-bold text-foreground mb-6",children:t.language!=="nl"?"Related articles":"Gerelateerde artikelen"}),r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:d.map(g=>r.jsxs(_,{to:Pt(g.slug,u),className:"group glass-card rounded-xl p-4 hover:border-primary/20 transition-all",children:[r.jsx("h3",{className:"font-display font-semibold text-sm text-foreground group-hover:text-primary transition-colors line-clamp-2",children:g.title}),r.jsx("p",{className:"text-xs text-muted-foreground mt-2",children:h(g.date)})]},g.slug))})]})]})}),r.jsx(Ne,{})]})};var hh="Collapsible",[ZU,aE]=Tr(hh),[YU,mv]=ZU(hh),oE=b.forwardRef((e,n)=>{const{__scopeCollapsible:t,open:i,defaultOpen:a,disabled:o,onOpenChange:s,...l}=e,[d,c]=ba({prop:i,defaultProp:a??!1,onChange:s,caller:hh});return r.jsx(YU,{scope:t,disabled:o,contentId:to(),open:d,onOpenToggle:b.useCallback(()=>c(u=>!u),[c]),children:r.jsx(Ue.div,{"data-state":fv(d),"data-disabled":o?"":void 0,...l,ref:n})})});oE.displayName=hh;var sE="CollapsibleTrigger",lE=b.forwardRef((e,n)=>{const{__scopeCollapsible:t,...i}=e,a=mv(sE,t);return r.jsx(Ue.button,{type:"button","aria-controls":a.contentId,"aria-expanded":a.open||!1,"data-state":fv(a.open),"data-disabled":a.disabled?"":void 0,disabled:a.disabled,...i,ref:n,onClick:qe(e.onClick,a.onOpenToggle)})});lE.displayName=sE;var pv="CollapsibleContent",dE=b.forwardRef((e,n)=>{const{forceMount:t,...i}=e,a=mv(pv,e.__scopeCollapsible);return r.jsx(fa,{present:t||a.open,children:({present:o})=>r.jsx(QU,{...i,ref:n,present:o})})});dE.displayName=pv;var QU=b.forwardRef((e,n)=>{const{__scopeCollapsible:t,present:i,children:a,...o}=e,s=mv(pv,t),[l,d]=b.useState(i),c=b.useRef(null),u=zn(n,c),h=b.useRef(0),g=h.current,m=b.useRef(0),p=m.current,f=s.open||l,w=b.useRef(f),k=b.useRef(void 0);return b.useEffect(()=>{const v=requestAnimationFrame(()=>w.current=!1);return()=>cancelAnimationFrame(v)},[]),ki(()=>{const v=c.current;if(v){k.current=k.current||{transitionDuration:v.style.transitionDuration,animationName:v.style.animationName},v.style.transitionDuration="0s",v.style.animationName="none";const x=v.getBoundingClientRect();h.current=x.height,m.current=x.width,w.current||(v.style.transitionDuration=k.current.transitionDuration,v.style.animationName=k.current.animationName),d(i)}},[s.open,i]),r.jsx(Ue.div,{"data-state":fv(s.open),"data-disabled":s.disabled?"":void 0,id:s.contentId,hidden:!f,...o,ref:u,style:{"--radix-collapsible-content-height":g?`${g}px`:void 0,"--radix-collapsible-content-width":p?`${p}px`:void 0,...e.style},children:f&&a})});function fv(e){return e?"open":"closed"}var JU=oE,XU=lE,eG=dE,nG=b.createContext(void 0);function tG(e){const n=b.useContext(nG);return e||n||"ltr"}var ti="Accordion",iG=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[bv,rG,aG]=p2(ti),[gh,JQ]=Tr(ti,[aG,aE]),vv=aE(),cE=V.forwardRef((e,n
13666)=>{const{type:t,...i}=e,a=i,o=i;return r.jsx(bv.Provider,{scope:e.__scopeAccordion,children:t==="multiple"?r.jsx(dG,{...o,ref:n}):r.jsx(lG,{...a,ref:n})})});cE.displayName=ti;var[uE,oG]=gh(ti),[hE,sG]=gh(ti,{collapsible:!1}),lG=V.forwardRef((e,n)=>{const{value:t,defaultValue:i,onValueChange:a=()=>{},collapsible:o=!1,...s}=e,[l,d]=ba({prop:t,defaultProp:i??"",onChange:a,caller:ti});return r.jsx(uE,{scope:e.__scopeAccordion,value:V.useMemo(()=>l?[l]:[],[l]),onItemOpen:d,onItemClose:V.useCallback(()=>o&&d(""),[o,d]),children:r.jsx(hE,{scope:e.__scopeAccordion,collapsible:o,children:r.jsx(gE,{...s,ref:n})})})}),dG=V.forwardRef((e,n)=>{const{value:t,defaultValue:i,onValueChange:a=()=>{},...o}=e,[s,l]=ba({prop:t,defaultProp:i??[],onChange:a,caller:ti}),d=V.useCallback(u=>l((h=[])=>[...h,u]),[l]),c=V.useCallback(u=>l((h=[])=>h.filter(g=>g!==u)),[l]);return r.jsx(uE,{scope:e.__scopeAccordion,value:s,onItemOpen:d,onItemClose:c,children:r.jsx(hE,{scope:e.__scopeAccordion,collapsible:!0,children:r.jsx(gE,{...o,ref:n})})})}),[cG,mh]=gh(ti),gE=V.forwardRef((e,n)=>{const{__scopeAccordion:t,disabled:i,dir:a,orientation:o="vertical",...s}=e,l=V.useRef(null),d=zn(l,n),c=rG(t),h=tG(a)==="ltr",g=qe(e.onKeyDown,m=>{if(!iG.includes(m.key))return;const p=m.target,f=c().filter(A=>!A.ref.current?.disabled),w=f.findIndex(A=>A.ref.current===p),k=f.length;if(w===-1)return;m.preventDefault();let v=w;const x=0,y=k-1,j=()=>{v=w+1,v>y&&(v=x)},z=()=>{v=w-1,v<x&&(v=y)};switch(m.key){case"Home":v=x;break;case"End":v=y;break;case"ArrowRight":o==="horizontal"&&(h?j():z());break;case"ArrowDown":o==="vertical"&&j();break;case"ArrowLeft":o==="horizontal"&&(h?z():j());break;case"ArrowUp":o==="vertical"&&z();break}const S=v%k;f[S].ref.current?.focus()});return r.jsx(cG,{scope:t,disabled:i,direction:a,orientation:o,children:r.jsx(bv.Slot,{scope:t,children:r.jsx(Ue.div,{...s,"data-orientation":o,ref:d,onKeyDown:i?void 0:g})})})}),pu="AccordionItem",[uG,kv]=gh(pu),mE=V.forwardRef((e,n)=>{const{__scopeAccordion:t,value:i,...a}=e,o=mh(pu,t),s=oG(pu,t),l=vv(t),d=to(),c=i&&s.value.includes(i)||!1,u=o.disabled||e.disabled;return r.jsx(uG,{scope:t,open:c,disabled:u,triggerId:d,children:r.jsx(JU,{"data-orientation":o.orientation,"data-state":wE(c),...l,...a,ref:n,disabled:u,open:c,onOpenChange:h=>{h?s.onItemOpen(i):s.onItemClose(i)}})})});mE.displayName=pu;var pE="AccordionHeader",fE=V.forwardRef((e,n)=>{const{__scopeAccordion:t,...i}=e,a=mh(ti,t),o=kv(pE,t);return r.jsx(Ue.h3,{"data-orientation":a.orientation,"data-state":wE(o.open),"data-disabled":o.disabled?"":void 0,...i,ref:n})});fE.displayName=pE;var Hp="AccordionTrigger",bE=V.forwardRef((e,n)=>{const{__scopeAccordion:t,...i}=e,a=mh(ti,t),o=kv(Hp,t),s=sG(Hp,t),l=vv(t);return r.jsx(bv.ItemSlot,{scope:t,children:r.jsx(XU,{"aria-disabled":o.open&&!s.collapsible||void 0,"data-orientation":a.orientation,id:o.triggerId,...l,...i,ref:n})})});bE.displayName=Hp;var vE="AccordionContent",kE=V.forwardRef((e,n)=>{const{__scopeAccordion:t,...i}=e,a=mh(ti,t),o=kv(vE,t),s=vv(t);return r.jsx(eG,{role:"region","aria-labelledby":o.triggerId,"data-orientation":a.orientation,...s,...i,ref:n,style:{"--radix-accordion-content-height":"var(--radix-collapsible-content-height)","--radix-accordion-content-width":"var(--radix-collapsible-content-width)",...e.style}})});kE.displayName=vE;function wE(e){return e?"open":"closed"}var hG=cE,gG=mE,mG=fE,xE=bE,yE=kE;const pG=hG,jE=b.forwardRef(({className:e,...n},t)=>r.jsx(gG,{ref:t,className:An("border-b",e),...n}));jE.displayName="AccordionItem";const SE=b.forwardRef(({className:e,children:n,...t},i)=>r.jsx(mG,{className:"flex",children:r.jsxs(xE,{ref:i,className:An("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",e),...t,children:[n,r.jsx(Ut,{className:"h-4 w-4 shrink-0 transition-transform duration-200"})]})}));SE.displayName=xE.displayName;const zE=b.forwardRef(({className:e,children:n,...t},i)=>r.jsx(yE,{ref:i,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...t,children:r.jsx("div",{className:An("pb-4 pt-0",e),children:n})}));zE.displayName=yE.displayName;const fG=[{criterium:"1. Doelgroep",lucanet:"Enterprise",smartbooks:"Groter MKB",bright:"Groter MKB",finstack:"MKB",vision:"Accountants & klein MKB",speed:"Klein MKB",powerbi:"Alle segmenten"},{criterium:"2. Positionering / focus",lucanet:"Consolidatie & reporting",smartbooks:"EPM systeem",bright:"Reporting & consolidatie",finstack:"Business control light",vision:"Rapportage & jaarrekening",speed:"Rapportage & analyse",powerbi:"BI & visualisatie"},{criterium:"3. Functionele dekking",lucanet:"Beperkt",smartbooks:"Zeer sterk",bright:"Sterk",finstack:"Redelijk",vision:"Beperkt",speed:"Beperkt",powerbi:"Niet aanwezig",isHeader:!0},{criterium:"Consolidatie",lucanet:"Zeer sterk",smartbooks:"Zeer sterk",bright:"Sterk",finstack:"Sterk",vision:"Beperkt",speed:"Beperkt",powerbi:"Niet aanwezig",indent:!0},{criterium:"Maandafsluiting",lucanet:"Beperkt",smartbooks:"Zeer sterk",bright:"Beperkt",finstack:"Niet aanwezig",vision:"Beperkt",speed:"Niet aanwezig",powerbi:"Niet aanwezig",indent:!0},{criterium:"Planning",lucanet:"Beperkt",smartbooks:"Zeer sterk",bright:"Beperkt",finstack:"Redelijk",vision:"Redelijk",speed:"Beperkt",powerbi:"Niet aanwezig",indent:!0}
13666,{criterium:"Analyse",lucanet:"Beperkt",smartbooks:"Sterk",bright:"Redelijk",finstack:"Redelijk",vision:"Redelijk",speed:"Beperkt",powerbi:"Sterk",indent:!0},{criterium:"Managementrapportage",lucanet:"Redelijk",smartbooks:"Zeer sterk",bright:"Sterk",finstack:"Redelijk",vision:"Redelijk",speed:"Redelijk",powerbi:"Sterk",indent:!0},{criterium:"Extra functionaliteiten",lucanet:"Governance, audit",smartbooks:"Workflows, AI",bright:"Templates",finstack:"In-app samenwerking",vision:"Jaarrekening",speed:"Jaarrekening",powerbi:"AI, visualisatie",indent:!0},{criterium:"4. Gebruiksgemak",lucanet:"Laag-middel",smartbooks:"Hoog",bright:"Hoog",finstack:"Gemiddeld",vision:"Hoog",speed:"Gemiddeld",powerbi:"Laag-middel"},{criterium:"5. Integraties",lucanet:"Breed",smartbooks:"Breed",bright:"Breed",finstack:"Redelijk",vision:"Breed",speed:"Breed",powerbi:"Breed"},{criterium:"6. Visualisatie",lucanet:"Beperkt",smartbooks:"Sterk",bright:"Sterk",finstack:"Beperkt",vision:"Beperkt",speed:"Beperkt",powerbi:"Sterk"},{criterium:"7. AI-ondersteuning",lucanet:"Beperkt",smartbooks:"Sterk",bright:"Beperkt",finstack:"Niet aanwezig",vision:"Beperkt",speed:"Beperkt",powerbi:"Beperkt"},{criterium:"8. Implementatie & beheerbelasting",lucanet:"Hoog",smartbooks:"Laag",bright:"Middel",finstack:"Middel",vision:"Laag",speed:"Laag",powerbi:"Hoog"},{criterium:"9. Kosten",lucanet:"Hoog",smartbooks:"Laag",bright:"Middel",finstack:"Laag",vision:"Laag",speed:"Laag",powerbi:"Middel",isHeader:!0},{criterium:"Implementatiekosten",lucanet:"Hoog",smartbooks:"Laag",bright:"Middel",finstack:"Laag",vision:"Laag",speed:"Laag",powerbi:"Middel",indent:!0},{criterium:"Softwarekosten (MRR)",lucanet:"Hoog",smartbooks:"Middel",bright:"Middel",finstack:"Middel",vision:"Laag",speed:"Laag",powerbi:"Laag",indent:!0},{criterium:"Beheerkosten",lucanet:"Hoog",smartbooks:"Laag",bright:"Middel",finstack:"Laag",vision:"Laag",speed:"Laag",powerbi:"Middel",indent:!0},{criterium:"10. Gebruikersscore (NPS)*",lucanet:"7,5 / 10",smartbooks:"8 / 10",bright:"6,5 / 10",finstack:"–",vision:"7 / 10",speed:"7 / 10",powerbi:"7 / 10"}],Lr=e=>e==="Zeer sterk"||e==="Hoog"||e==="8 / 10"?"text-emerald-400 font-semibold":e==="Sterk"||e==="Breed"?"text-teal-400":e==="Niet aanwezig"||e==="–"?"text-muted-foreground/50":e==="Laag"||e==="Laag-middel"?"text-amber-400":"text-foreground",bG=[{name:"Lucanet",subtitle:"Formele consolidatie en governance",best:["Consolidatie en compliance centraal staan","Complexe juridische structuren","Audit trails en governance cruciaal zijn"],less:["Lichte, snel implementeerbare oplossing zoekt","Bredere ondersteuning voor financial en business control processen"],strengths:["Zeer sterke consolidatiefunctionaliteit","Uitgebreide audit- en governance mogelijkheden","Geschikt voor internationale structuren"],limitations:["Relatief zware implementatie","Hogere beheer- en consultancykosten"],quotes:[{text:"Ik ben zelf echt groot fan van Lucanet. Voor consolideren is het gewoon een hele sterke tool.",score:"8,5/10"},{text:"Lucanet is eigenlijk een opgevoerde Excel.",score:"6/10"},{text:"IC verschillen vinden is een tijdrovende zoektocht.",score:null}]},{name:"Smartbooks",subtitle:"Uitgebreid systeem voor financial en business control processen",best:["Financial en business control duidelijke rollen zijn binnen finance","De consolidatie en maandafsluiting veel tijd kost","Managementrapportages elke maand opnieuw veel handmatig werk vragen","Minder afhankelijk wilt zijn van spreadsheets voor kernprocessen"],less:["Control eenvoudig is en geen tijd kost","Primair een generieke BI-oplossing zoekt","Organisatie vooral behoefte heeft aan zware governance en enterprise consolidatie"],strengths:["Duidelijke focus op de dagelijkse workflows van controllers","Ondersteuning van het volledige maandelijkse proces","Finance-specifieke logica en standaardisatie","Eenvoudige, goedkope en snelle implementatie","Geen afhankelijkheid van IT of externe specialisten"],limitations:["Minder geschikt als centrale BI-laag voor alle niet-financiële data"],quotes:[{text:"Smartbooks heeft onze Excel-architectuur vervangen door een professioneel systeem.",score:"8/10"},{text:"Wij zijn van brandjes blussen naar vooruitkijken gegaan.",score:null},{text:"Voor het eerst hebben we één waarheid in finance.",score:null}],highlight:!0},{name:"Bright Analytics",subtitle:"BI-tool met consolidatie en rapportage",best:["Versc
13666hillende databronnen wilt combineren","Meerdere entiteiten wilt consolideren","Nadruk ligt op financiële rapportage en groepsoverzichten"],less:["Planning en forecasting een kernonderdeel vormen","Ondersteuning wilt voor meer financial en business control processen"],strengths:["Sterke consolidatiefunctionaliteit","Gestructureerde financiële rapportages","Duidelijke aansluiting op boekhouddata"],limitations:["Minder focus op planning en forecasting","Integratie met niet-financiële databronnen is beperkter"],quotes:[{text:"Het is gewoon Power BI voor mensen die geen Power BI kunnen.",score:"5/10"},{text:"Die visuals zijn echt top. Even snel een andere doorsnede maken, dat gaat in Bright veel makkelijker dan in Power BI.",score:null}]},{name:"Finstack",subtitle:"Basis business control voor het MKB",best:["Financial control wilt professionaliseren vanuit Excel","Standaard rapportages en analyses nodig hebt","Organisatie nog beperkte complexiteit heeft"],less:["Uitgebreide consolidatie- of planningsprocessen nodig hebt","Veel flexibiliteit in datamodellen vereist"],strengths:["Pragmatische ondersteuning van financial en business control","Overzichtelijke inrichting"],limitations:["Beperkte schaalbaarheid bij sterke groei","Minder ondersteuning voor geavanceerde scenario-analyses"],quotes:[]},{name:"Visionplanner",subtitle:"Rapportage en aansluiting met accountant",best:["Nadruk ligt op periodieke rapportages en financiële verantwoording","Samenwerking met de accountant een belangrijke rol speelt","Business control nog geen volwaardige rol is binnen finance"],less:["Uitgebreide planning- en forecastingprocessen wilt ondersteunen","Complexe consolidatiestructuren hebt"],strengths:["Gebruiksvriendelijk voor rapportages","Sterke aansluiting op accountantspraktijk","Relatief lage implementatie- en beheerlast"],limitations:["Beperkte ondersteuning voor control processen","Minder flexibiliteit in analyse en datamodellering"],quotes:[{text:"Voor ons is Visionplanner een goedkope consolidatietool, die ons op groepsniveau laat zien of we in control zijn.",score:"7/10"}]},{name:"Speedbooks",subtitle:"Snelle rapportage en inzicht",best:["Excel wilt blijven gebruiken als analyse en rapportage omgeving","Copy-pasten en data structureren wilt automatiseren","Beperkte tijd en budget hebt voor inrichting en beheer"],less:["Finance wilt professionaliseren zonder afhankelijkheid van Excel","Modelmatig wilt budgetteren en plannen"],strengths:["Snelle time-to-value","Duidelijke rapportages","Lage instapdrempel"],limitations:["Beperkte diepgang in analyse","Minder geschikt voor complexere organisatiestructuren"],quotes:[{text:"Wij gebruiken Speedbooks vooral om data naar Excel te halen.",score:"7/10"},{text:"Het is handig, maar geen control-systeem.",score:null}]},{name:"Power BI",subtitle:"Generieke BI-tool voor analyse en visualisatie",best:["Veel verschillende databronnen wilt combineren","Flexibele analyses en dashboards nodig hebt","Beschikt over interne BI-kennis of externe specialisten"],less:["Finance-specifieke processen zoals maandafsluiting, planning of consolidatie wilt optimaliseren","Beperkte IT capaciteit hebt voor datamodellering en beheer"],strengths:["Zeer brede integratiemogelijkheden","Krachtige visualisatie en analysemogelijkheden","Flexibel inzetbaar voor uiteenlopende use cases"],limitations:["Geen standaard finance-logica of finance control workflows","Hogere implementatie- en beheerlast bij gebruik als centrale rapportage-oplossing"],quotes:[{text:"PowerBI is een analyseplatform, geen finance-oplossing.",score:"7/10"},{text:"PowerBI helpt ons kijken, niet sturen.",score:null}]}],vG=[{q:"Wat is het verschil tussen financial en business control en FP&A?",a:"FP&A is een onderdeel van financial en business control. Financial en business control richt zich op alle processen van de controllers, zoals planning, forecasting, analyses, maandafsluiting, consolidatie, rapportage, presentatie etc. FP&A richt zich enkel op planning, forecasting en variantie-analyses."},{q:"Wanneer is Excel niet meer geschikt voor financial en business control?",a:"Excel loopt tegen zijn grenzen aan wanneer consolidatie, versiebeheer, maandafsluiting en scenario-analyses structureel veel handmatig werk vragen en foutgevoelig worden."}
13666,{q:"Is financial en business control software alleen geschikt voor grote bedrijven?",a:"Nee. Juist binnen het MKB en bij scale-ups helpt control software om grip te houden op groei en complexiteit, ook met kleinere finance teams."},{q:"Kan een BI-tool zoals Power BI financial en business control software vervangen?",a:"In de meeste gevallen niet volledig. BI-tools zijn sterk in analyse en visualisatie, maar missen finance-specifieke proceslogica voor bijvoorbeeld consolidatie, planning en maandafsluiting."},{q:"Wat is belangrijker: lage softwarekosten of toegevoegde waarde?",a:"De totale kosten over de levensduur van de software in relatie tot de toegevoegde waarde zijn belangrijker dan alleen de licentiekosten."},{q:"Hoe lang duurt een implementatie van financial en business control software?",a:"Dit varieert sterk per type oplossing en organisatie. Sommige systemen zijn binnen enkele dagen operationeel, andere vragen maanden en externe ondersteuning."},{q:"Welke rol speelt AI in business control software?",a:"AI wordt nu vooral ingezet ter ondersteuning van analyse, signalering van afwijkingen en het genereren van toelichtingen bij rapportages. Het is essentieel dat je een finance systeem kiest die een goede, complete en gestructureerde databron met API biedt."},{q:"Welke software integreert met Exact Online en AFAS?",a:"Zowel Smartbooks als Bright Analytics, Visionplanner en Speedbooks bieden directe integraties met veelgebruikte Nederlandse boekhoudpakketten zoals Exact Online, Twinfield en AFAS."}],kG=[{title:"Kiezen voor een te zwaar of te complex systeem",text:"Dergelijke systemen bieden uitgebreide functionaliteit, maar vragen ook om zware implementaties, veel configuratie en structureel beheer. Dit leidt tot lange implementatietrajecten, hoge externe consultancykosten en lage adoptie."},{title:"BI-tools verwarren met financial en business control software",text:"BI-tools worden regelmatig gezien als alternatief, maar missen finance-specifieke logica voor processen zoals consolidatie, planning en maandafsluiting."},{title:"De implementatie- en beheerimpact onderschatten",text:"Bij softwareselecties ligt de focus vaak op functionaliteit, terwijl de impact op de eigen organisatie wordt onderschat. Denk aan tijdsinvestering, afhankelijkheid van externe consultants en doorlopende beheerlast."},{title:"Te sterk focussen op licentiekosten",text:"Generieke tools hebben vaak lage softwarekosten, maar vereisen aanzienlijke investeringen in implementatie, maatwerk en doorlopend beheer."},{title:"Te weinig aandacht voor het maandafsluitproces",text:"Juist hier wordt veel tijd gewonnen of verloren. Zonder ondersteuning voor workflows en statusoverzichten blijft de maandafsluiting arbeidsintensief."},{title:"Kiezen op features in plaats van op dagelijkse processen",text:"De belangrijkste vraag zou niet moeten zijn wat een systeem allemaal kan, maar welke taken het daadwerkelijk eenvoudiger en efficiënter maakt."},{title:"Onvoldoende vooruitkijken naar toekomstige groei",text:"Extra entiteiten, internationale uitbreiding of zwaardere rapportage-eisen kunnen ervoor zorgen dat een systeem snel opnieuw vervangen moet worden."}],wG=()=>{const{i18n:e}=Y(),n=e.language!=="nl",t=e.language==="de"?"de":n?"en":"nl";return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:n?"Comparing financial and business control software":"De beste software voor financial en business control",description:n?"An objective comparison of EPM solutions for SME finance teams: consolidation, planning, AI, and total cost.":"Zeven tools voor financial en business control objectief vergeleken op consolidatie, planning, AI en kosten — voor het Nederlandse MKB.",pathByLocale:je("vergelijkSoftware"),type:"article",jsonLd:sh([{name:"Home",url:B("index",t)},{name:n?"Knowledge Center":"Kenniscentrum",url:B("kenniscentrum",t)},{name:n?"Comparing financial and business control software":"De beste software voor financial en business control",url:B("vergelijkSoftware",t)}])}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"pt-12 pb-16 bg-background relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh"}),r.jsx("div",{className:"container mx-auto px-4 relative z-10",children:r.jsxs("div",{className:"max-w-4xl mx-auto animate-fade-in-up",children:[r.jsx("span",{className:"text-primary font-semibold text-sm uppercase tracking-wider mb-4 block",children:"Vergelijking"}),r.jsxs("h1",{className:"font-display text-3xl sm:text-5xl font-bold text-foreground mb-6 tracking-tight leading-tight",children:["De beste software voor financial en"," ",r.jsx("span",{className:"text-gradient-multi",children:"business control"})]}),r.jsx("p",{className:"text-muted-foreground text-lg leading-relaxed mb-4 max-w-3xl",children:"Wat is de beste software voor financial en business control in Nederland? Een objectieve vergelijking van EPM-oplossingen voor het MKB."}),r.jsx("p",{className:"text-muted-foreground text-sm",children:"Geschreven door Jaap van der Ende · Laatst bijgewerkt: februari 2026"})]})})]}),r.jsx("section",{className:"py-16 bg-muted/30",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsx("div",{className:"max-w-4xl mx-auto",children:r.jsxs("div",{className:"bg-card border border-border rounded-2xl p-8 animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-2xl font-bold text-foreground mb-4",children:"In het kort"}),r.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:["Voor het grotere MKB met meerdere entiteiten en een dedicated controller is ",r.jsx("strong",{className:"text-foreground",children:"Smartbooks"})," de meest complete oplossing voor alle financial en business control processen. ",r.jsx("strong",{className:"text-foreground",children:"Lucanet"})," is de sterkste keuze voor complexe, enterprise-achtige consolidatievraagstukken. ",r.jsx("strong",{className:"text-foreground",children:"Visionplanner"})," en ",r.jsx("strong",{className:"text-foreground",children:"Speedbooks"})," zijn aanzienlijk goedkoper en passen beter bij kleinere organisaties. ",r.jsx("strong",{className:"text-foreground",children:"Bright Analytics"})," combineert BI met financiële rapportage en consolidatie. ",r.jsx("strong",{className:"text-foreground",children:"Power BI"}
13666)," is geen financial control software, maar een waardevolle aanvulling voor data-analyse."]})]})})})}),r.jsx("section",{className:"py-16 bg-background",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-4xl mx-auto space-y-12",children:[r.jsxs(Gg,{title:"Wat is financial en business control software?",children:[r.jsx("p",{children:"Financial en business control software ondersteunt finance teams bij het voorspellen, structureren, analyseren en presenteren van financiële cijfers, operationele KPI's en inzichten. In tegenstelling tot boekhoudsoftware, die zich richt op het vastleggen van transacties, helpt control software bij het interpreteren van cijfers en het vertalen daarvan naar inzicht en besluitvorming."}),r.jsx("p",{className:"mt-4",children:"Deze systemen worden gebruikt voor onder andere:"}),r.jsxs("ul",{className:"mt-2 space-y-1",children:[r.jsx("li",{children:"• Consolidatie van financiële gegevens uit meerdere entiteiten"}),r.jsx("li",{children:"• Controleren van de cijfers en begeleiden van de maandafsluiting"}),r.jsx("li",{children:"• Slimme en gestructureerde budgettering en forecasting"}),r.jsx("li",{children:"• Trendanalyses en variantieanalyses, inclusief verklaringen"}),r.jsx("li",{children:"• Het opstellen van managementrapportages, dashboards en presentaties"})]})]}),r.jsxs(Gg,{title:"Welke problemen lost het op?",children:[r.jsx("p",{children:"Veel finance teams werken nog grotendeels met spreadsheets. Hoewel dit in het begin vaak voldoende is, ontstaan er bij groei snel structurele problemen:"}),r.jsxs("ul",{className:"mt-3 space-y-1",children:[r.jsx("li",{children:"• Handmatige consolidaties die foutgevoelig en tijdrovend zijn"}),r.jsx("li",{children:"• Verschillende versies van dezelfde rapportage"}),r.jsx("li",{children:"• Beperkte transparantie in aannames en berekeningen"}),r.jsx("li",{children:"• Afhankelijkheid van de Excel-eigenaar"}),r.jsx("li",{children:"• Lange doorlooptijden tijdens de maandafsluiting"})]}),r.jsx("p",{className:"mt-4",children:"Control software pakt deze problemen aan door processen te begeleiden en deels te automatiseren. Dat zorgt voor meer consistentie, betere controle over cijfers en ruimte voor waarde toevoegende analyses."})]}),r.jsx(Gg,{title:"Wat is het verschil tussen control software, BI-tools en ERP?",children:r.jsxs("div",{className:"grid md:grid-cols-3 gap-4 mt-4",children:[r.jsxs("div",{className:"bg-muted/50 rounded-xl p-5 border border-border",children:[r.jsx("h4",{className:"font-semibold text-foreground mb-2",children:"ERP-systemen"}),r.jsx("p",{className:"text-sm",children:"Primair gericht op het vastleggen en verwerken van transacties. De operationele ruggengraat van de organisatie."})]}),r.jsxs("div",{className:"bg-muted/50 rounded-xl p-5 border border-border",children:[r.jsx("h4",{className:"font-semibold text-foreground mb-2",children:"BI-tools"}),r.jsx("p",{className:"text-sm",children:"Gericht op dataverzameling, visualisatie en analyse. Krachtig in combineren van databronnen, maar geen procesondersteuning."})]}),r.jsxs("div",{className:"bg-primary/10 rounded-xl p-5 border border-primary/30",children:[r.jsx("h4",{className:"font-semibold text-foreground mb-2",children:"Control software"}),r.jsx("p",{className:"text-sm",children:"Het operationele systeem voor de controller. Ondersteunt consolidatie, planning, forecasting en managementrapportage."})]})]})})]})})}),r.jsx("section",{className:"py-16 bg-muted/30",children:r.jsxs("div",{className:"container mx-auto px-4",children:[r.jsxs("div",{className:"text-center mb-12 animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl sm:text-4xl font-bold text-foreground mb-4",children:"Vergelijking van populaire business control software"}),r.jsx("p",{className:"text-muted-foreground max-w-2xl mx-auto",children:"7 oplossingen objectief vergeleken voor het Nederlandse MKB"})]}),r.jsxs("div",{className:"overflow-x-auto rounded-2xl border border-border bg-card animate-fade-in-up",children:[r.jsxs("table",{className:"w-full text-sm",children:[r.jsx("thead",{children:r.jsxs("tr",{className:"border-b border-border",children:[r.jsx("th",{className:"text-left p-4 font-semibold text-foreground min-w-[200px]",children:"Criterium"}),r.jsx("th",{className:"p-4 font-semibold text-foreground text-center min-w-[110px]",children:"Lucanet"}),r.jsx("th",{className:"p-4 font-semibold text-primary text-center min-w-[110px] bg-primary/5",children:"Smartbooks"}),r.jsx("th",{className:"p-4 font-semibold text-foreground text-center min-w-[110px]",children:"Bright Analytics"}),r.jsx("th",{className:"p-4 font-semibold text-foreground text-center min-w-[110px]",children:"Finstack"}),r.jsx("th",{className:"p-4 font-semibold text-foreground text-center min-w-[110px]",children:"Visionplanner"}),r.jsx("th",{className:"p-4 font-semibold text-foreground text-center min-w-[110px]",children:"Speedbooks"}),r.jsx("th",{className:"p-4 font-semibold text-foreground text-center min-w-[110px]",children:"Power BI"})]})}),r.jsx("tbody",{children:fG.map((i,a)=>r.jsxs("tr",{className:`border-b border-border/50 ${i.isHeader?"bg-muted/30 font-semibold":""}`,children:[r.jsx("td",{className:`p-3 px-4 text-foreground ${i.indent?"pl-8 text-muted-foreground font-normal":""}`,children:i.criterium}),r.jsx("td",{className:`p-3 text-center ${Lr(i.lucanet)}`,children:i.lucanet}),r.jsx("td",{className:`p-3 text-center bg-primary/5 ${Lr(i.smartbooks)}`,children:i.smartbooks}),r.jsx("td",{className:`p-3 text-center ${Lr(i.bright)}`,children:i.bright}),r.jsx("td",{className:`p-3 text-center ${Lr(i.finstack)}`,children:i.finstack}),r.jsx("td",{className:`p-3 text-center ${Lr(i.vision)}`,children:i.vision}),r.jsx("td",{className:`p-3 text-center ${Lr(i.speed)}`,children:i.speed}),r.jsx("td",{className:`p-3 text-center ${Lr(i.powerbi)}`,children:i.powerbi})]},a))})]}),r.jsx("p",{className:"text-xs text-muted-foreground p-4",children:"* NPS-scores zijn gebaseerd op een beperkt aantal interviews per systeem."})]})]})}),r.jsx("section",{className:"py-16 bg-background",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsx("div",{className:"max-w-4xl mx-auto 
13666space-y-12",children:bG.map((i,a)=>r.jsxs("div",{className:`rounded-2xl border p-8 animate-fade-in-up ${i.highlight?"border-primary/40 bg-primary/5":"border-border bg-card"}`,style:{animationDelay:`${a*50}ms`},children:[r.jsx("h3",{className:"font-display text-2xl font-bold text-foreground mb-1",children:i.name}),r.jsx("p",{className:"text-muted-foreground mb-6",children:i.subtitle}),r.jsxs("div",{className:"grid md:grid-cols-2 gap-6 mb-6",children:[r.jsxs("div",{children:[r.jsx("h4",{className:"text-sm font-semibold text-emerald-400 mb-2",children:"✓ Beste keuze als"}),r.jsx("ul",{className:"space-y-1",children:i.best.map((o,s)=>r.jsxs("li",{className:"text-sm text-muted-foreground flex gap-2",children:[r.jsx("span",{className:"text-emerald-400 mt-0.5",children:"•"})," ",o]},s))})]}),r.jsxs("div",{children:[r.jsx("h4",{className:"text-sm font-semibold text-amber-400 mb-2",children:"✗ Minder geschikt als"}),r.jsx("ul",{className:"space-y-1",children:i.less.map((o,s)=>r.jsxs("li",{className:"text-sm text-muted-foreground flex gap-2",children:[r.jsx("span",{className:"text-amber-400 mt-0.5",children:"•"})," ",o]},s))})]})]}),r.jsxs("div",{className:"grid md:grid-cols-2 gap-6 mb-6",children:[r.jsxs("div",{children:[r.jsx("h4",{className:"text-sm font-semibold text-foreground mb-2",children:"Sterke punten"}),r.jsx("ul",{className:"space-y-1",children:i.strengths.map((o,s)=>r.jsxs("li",{className:"text-sm text-muted-foreground flex gap-2",children:[r.jsx(_e,{className:"w-3.5 h-3.5 text-primary mt-0.5 shrink-0"})," ",o]},s))})]}),r.jsxs("div",{children:[r.jsx("h4",{className:"text-sm font-semibold text-foreground mb-2",children:"Beperkingen"}),r.jsx("ul",{className:"space-y-1",children:i.limitations.map((o,s)=>r.jsxs("li",{className:"text-sm text-muted-foreground flex gap-2",children:[r.jsx(bo,{className:"w-3.5 h-3.5 text-muted-foreground mt-0.5 shrink-0"})," ",o]},s))})]})]}),i.quotes.length>0&&r.jsxs("div",{className:"border-t border-border/50 pt-6",children:[r.jsx("h4",{className:"text-sm font-semibold text-foreground mb-3",children:"Ervaringen uit de praktijk"}),r.jsx("div",{className:"space-y-3",children:i.quotes.map((o,s)=>r.jsxs("div",{className:"flex gap-3",children:[r.jsx("span",{className:"text-primary text-lg leading-none",children:'"'}),r.jsx("p",{className:"text-sm text-muted-foreground italic flex-1",children:o.text}),o.score&&r.jsxs("span",{className:"text-xs font-semibold text-primary bg-primary/10 px-2 py-1 rounded-full h-fit shrink-0 flex items-center gap-1",children:[r.jsx(Vu,{className:"w-3 h-3"})," ",o.score]})]},s))})]})]},i.name))})})}),r.jsx("section",{className:"py-16 bg-muted/30",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-4xl mx-auto",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground mb-8 text-center animate-fade-in-up",children:"Welk type software past bij jouw organisatie?"}),r.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:[{title:"Klein tot middelgroot MKB",desc:"Beperkt finance team, focus op snelle standaardrapportages.",tools:"Visionplanner, Speedbooks, Finstack"},{title:"Groter MKB en scale-ups",desc:"Dedicated business control, meerdere entiteiten, Excel als bottleneck.",tools:"Smartbooks, Bright Analytics, Power BI (als aanvulling)",highlight:!0},{title:"Enterprise-achtige organisaties",desc:"Complexe structuren, strenge governance en compliance eisen.",tools:"Lucanet"}].map((i,a)=>r.jsxs("div",{className:`rounded-2xl border p-6 animate-fade-in-up ${i.highlight?"border-primary/40 bg-primary/5":"border-border bg-card"}`,style:{animationDelay:`${a*100}ms`},children:[r.jsx("h3",{className:"font-display text-lg font-bold text-foreground mb-2",children:i.title}),r.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:i.desc}),r.jsx("p",{className:"text-sm font-semibold text-primary",children:i.tools})]},i.title))})]})})}),r.jsx("section",{className:"py-16 bg-background",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-4xl mx-auto",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground mb-8 animate-fade-in-up",children:"Welke fouten worden het meest gemaakt?"}),r.jsx("div",{className:"space-y-4",children:kG.map((i,a)=>r.jsxs("div",{className:"bg-card border border-border rounded-xl p-6 animate-fade-in-up",style:{animationDelay:`${a*50}ms`},children:[r.jsxs("h4",{className:"font-semibold text-foreground mb-2",children:[a+1,". ",i.title]}),r.jsx("p",{className:"text-sm text-muted-foreground",children:i.text})]},a))})]})})}),r.jsx("section",{className:"py-16 bg-muted/30",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-4xl mx-auto",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground mb-8 animate-fade-in-up",children:"Veelgestelde vragen"}),r.jsx(pG,{type:"multiple",className:"space-y-3",children:vG.map((i,a)=>r.jsxs(jE,{value:`faq-${a}`,className:"bg-card border border-border rounded-xl px-6 data-[state=open]:border-primary/30",children:[r.jsx(SE,{className:"text-foreground text-left font-semibold text-sm hover:no-underline",children:i.q}),r.jsx(zE,{className:"text-muted-foreground text-sm leading-relaxed",children:i.a})]},a))})]})})}),r.jsx(va,{}),r.jsx(Ne,{})]})},Gg=({title:e,children:n})=>r.jsxs("div",{className:"animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-2xl font-bold text-foreground mb-4",children:e}),r.jsx("div",{className:"text-muted-foreground leading-relaxed",children:n})]}),xG=e=>null,c0={nl:{seoTitle:"Waarom Smartbooks.ai?",seoDesc:"Waarom Smartbooks.ai de meest complete software is voor financial en business control: focus op controllers, snelle implementatie en finance-specifieke logica.",crumbKnowledge:"Kenniscentrum",crumbCurrent:"Waarom Smartbooks.ai?",eyebrow:"Waarom Smartbooks.ai",h1Pre:"Waarom ",h1Post:"?",intro:"Uitgebreid systeem voor financial en business control processen. Smartbooks is gebouwd voor controllers in het grotere MKB die hun financial en business control processen willen professionaliseren — zonder lange implementatietrajecten of afhankelijkheid van IT.",partOf:"Onderdeel van het ",partOfLink:"vergelijkingsoverzicht van financial en business control softw
13666are",shortTitle:"In het kort",shortBody:"Voor het grotere MKB met meerdere entiteiten en een dedicated controller is",shortBody2:"de meest complete oplossing voor alle financial en business control processen. Eén platform voor consolidatie, maandafsluiting, planning, analyse en managementrapportage — met finance-specifieke logica en een snelle, lichte implementatie.",forWhomTitle:"Voor wie is Smartbooks bedoeld?",forWhomSub:"Smartbooks is gebouwd voor een specifieke groep finance teams. Hieronder zie je of jullie daarbij horen.",fitTitle:"Smartbooks past bij jullie als...",notFitTitle:"Smartbooks past minder bij jullie als...",best:["Jullie consolideren maandelijks meerdere entiteiten of kostenplaatsen — de meeste klanten hebben er 5 of meer","De maandafsluiting kost het finance team meerdere dagen handwerk in Excel","Jullie willen af van versie-chaos en handmatige controles in de consolidatie","Het managementteam verwacht maandelijks betrouwbare cijfers, snel beschikbaar","Jullie willen finance professionaliseren zonder een implementatietraject van zes maanden"],less:["Jullie zoeken een centrale BI-laag voor alle operationele en niet-financiële data","Jullie hebben behoefte aan enterprise-consolidatie op SAP- of Oracle-niveau","Finance werkt al in een dedicated CPM-platform en jullie zijn daar tevreden over"],quotesTitle:"Wat klanten zeggen",readStory:"Lees het verhaal →",quotes:[{text:"De doorlooptijd van onze maandafsluiting is met vijf dagen verkort. Rapportages zijn nu gestandaardiseerd en het vertrouwen in de cijfers — én in het finance team — is duidelijk gegroeid.",author:"Marcel Steenbrink",role:"CFO",company:"Primus Wafer Paper",slug:"primus-wafer-paper"},{text:"Onze actuals en het budgetmodel zitten nu in één systeem. Elke maand zien we direct of we onze doelen halen, inclusief een actuele prognose voor omzet en winst voor het hele jaar.",author:"Mohamed Alkaduhimi",role:"CTO",company:"Tjojs Technologies",slug:"tjojs-technologies"},{text:"De planningsmodule helpt ons bij onze financieringsstrategie. Door met drivers te experimenteren zien we direct wat dat doet met onze korte en lange termijn financieringsbehoefte.",author:"Yuri Bobbert",role:"CEO & Co-founder",company:"Anove",slug:"anove"},{text:"We hebben onze onoverzichtelijke spreadsheets vervangen door een heldere managementrapportage met waardevolle inzichten. Eindelijk één plek voor onze cijfers.",author:"Arthur Willigenburg",role:"Managing Partner",company:"ACE Company",slug:"ace-company"},{text:"Binnen twee weken stond Smartbooks volledig operationeel, met minimale inspanning van ons team. De maandelijkse consolidatie van tien entiteiten is serieus versneld en betrouwbaarder geworden.",author:"Karel van den Bos",role:"CFO",company:"Intermax",slug:"intermax"}]},en:{seoTitle:"Why Smartbooks.ai?",seoDesc:"Why Smartbooks.ai is the most complete software for financial and business control: built for controllers, fast implementation and finance-specific logic.",crumbKnowledge:"Knowledge Center",crumbCurrent:"Why Smartbooks.ai?",eyebrow:"Why Smartbooks.ai",h1Pre:"Why ",h1Post:"?",intro:"A complete system for financial and business control processes. Smartbooks is built for controllers in mid-sized companies who want to professionalize their financial and business control — without long implementation projects or dependency on IT.",partOf:"Part of our ",partOfLink:"comparison of financial and business control software",shortTitle:"In short",shortBody:"For mid-sized companies with multiple entities and a dedicated controller,",shortBody2:"is the most complete solution for all financial and business control processes. One platform for consolidation, month-end close, planning, analysis and management reporting — with finance-specific logic and a fast, lightweight implementation.",forWhomTitle:"Who is Smartbooks built for?",forWhomSub:"Smartbooks is built for a specific type of finance team. Below you'll see whether you fit the profile.",fitTitle:"Smartbooks is a fit if...",notFitTitle:"Smartbooks is less of a fit if...",best:["You consolidate multiple entities or cost centers monthly — most customers have 5 or more","Your month-end close takes the finance team multiple days of manual work in Excel","You want to get rid of version chaos and manual checks in consolidation","Management expects reliable monthly numbers, available quickly","You want to professionalize finance without a six-month implementation project"],less:["You're looking for a central BI layer for all operational and n
13666on-financial data","You need enterprise consolidation at SAP or Oracle level","Finance already works in a dedicated CPM platform and you're happy with it"],quotesTitle:"What customers say",readStory:"Read the story →",quotes:[{text:"Our month-end close runtime has been cut by five days. Reports are now standardized and trust in the numbers — and in the finance team — has clearly grown.",author:"Marcel Steenbrink",role:"CFO",company:"Primus Wafer Paper",slug:"primus-wafer-paper"},{text:"Our actuals and budget model are now in one system. Every month we see directly whether we're hitting our targets, including a current forecast of revenue and profit for the full year.",author:"Mohamed Alkaduhimi",role:"CTO",company:"Tjojs Technologies",slug:"tjojs-technologies"},{text:"The planning module helps us with our financing strategy. By experimenting with drivers we see directly what it does to our short and long term financing needs.",author:"Yuri Bobbert",role:"CEO & Co-founder",company:"Anove",slug:"anove"},{text:"We replaced our messy spreadsheets with clear management reporting with valuable insights. Finally one place for our numbers.",author:"Arthur Willigenburg",role:"Managing Partner",company:"ACE Company",slug:"ace-company"},{text:"Smartbooks was fully operational within two weeks, with minimal effort from our team. The monthly consolidation of ten entities has become significantly faster and more reliable.",author:"Karel van den Bos",role:"CFO",company:"Intermax",slug:"intermax"}]}},yG=()=>{const{i18n:e}=Y(),n=e.language!=="nl",t=e.language==="de"?"de":n?"en":"nl",i=n?c0.en:c0.nl,a=je("waaromSmartbooks"),o=B("kenniscentrum",t),s=B("vergelijkSoftware",t);return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:i.seoTitle,description:i.seoDesc,pathByLocale:a,bareTitle:!0}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"pt-12 pb-16 bg-background relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh"}),r.jsx("div",{className:"container mx-auto px-4 relative z-10",children:r.jsxs("div",{className:"max-w-4xl mx-auto",children:[r.jsx(xG,{items:[{name:i.crumbKnowledge,url:o},{name:i.crumbCurrent}],className:"mb-6"}),r.jsxs("div",{className:"animate-fade-in-up",children:[r.jsx("span",{className:"text-primary font-semibold text-sm uppercase tracking-wider mb-4 block",children:i.eyebrow}),r.jsxs("h1",{className:"font-display text-3xl sm:text-5xl font-bold text-foreground mb-6 tracking-tight leading-tight",children:[i.h1Pre,r.jsx("span",{className:"text-gradient-multi",children:"Smartbooks"}),i.h1Post]}),r.jsx("p",{className:"text-muted-foreground text-lg leading-relaxed mb-4 max-w-3xl",children:i.intro}),r.jsxs("p",{className:"text-muted-foreground text-sm",children:[i.partOf,r.jsx(_,{to:s,className:"text-teal hover:underline",children:i.partOfLink}),"."]})]})]})})]}),r.jsx("section",{className:"py-16 bg-muted/30",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsx("div",{className:"max-w-4xl mx-auto",children:r.jsxs("div",{className:"bg-card border border-border rounded-2xl p-8 relative overflow-hidden animate-fade-in-up",children:[r.jsx("div",{className:"absolute top-0 right-0 w-1 h-full bg-gradient-to-b from-teal to-primary"}),r.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r.jsx(q2,{className:"h-5 w-5 text-teal"}),r.jsx("h2",{className:"font-display text-2xl font-bold text-foreground",children:i.shortTitle})]}),r.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[i.shortBody," ",r.jsx("strong",{className:"text-foreground",children:"Smartbooks"})," ",i.shortBody2]})]})})})}),r.jsx("section",{className:"py-16 bg-background",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-5xl mx-auto",children:[r.jsxs("div",{className:"text-center mb-10 animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl sm:text-4xl font-bold text-foreground mb-3 tracking-tight",children:i.forWhomTitle}),r.jsx("p",{className:"text-muted-foreground text-lg font-light",children:i.forWhomSub})]}),r.jsxs("div",{className:"grid md:grid-cols-2 gap-6",children:[r.jsxs("div",{className:"bg-card border border-border rounded-2xl p-6 md:p-8 animate-fade-in-up",children:[r.jsxs("div",{className:"flex items-center gap-2 mb-5",children:[r.jsx("div",{className:"w-8 h-8 rounded-lg bg-teal/10 border border-teal/20 flex items-center justify-center",children:r.jsx(_e,{className:"h-4 w-4 text-teal"})}),r.jsx("h3",{className:"font-display text-lg font-bold text-foreground",children:i.fitTitle})]}),r.jsx("ul",{className:"space-y-3",children:i.best.map(l=>r.jsxs("li",{className:"flex items-start gap-3",children:[r.jsx("div",{className:"mt-1 w-5 h-5 rounded-full bg-teal/10 flex items-center justify-center shrink-0",children:r.jsx(_e,{className:"h-3 w-3 text-teal"})}),r.jsx("span",{className:"text-sm text-muted-foreground leading-relaxed",children:l})]},l))})]}),r.jsxs("div",{className:"bg-card border border-border rounded-2xl p-6 md:p-8 animate-fade-in-up",style:{animationDelay:"100ms"},children:[r.jsxs("div",{className:"flex items-center gap-2 mb-5",children:[r.jsx("div",{className:"w-8 h-8 rounded-lg bg-muted/50 border border-border flex items-center justify-center",children:r.jsx(bo,{className:"h-4 w-4 text-muted-foreground"})}),r.jsx("h3",{className:"font-display text-lg font-bold text-foreground",children:i.notFitTitle})]}),r.jsx("ul",{className:"space-y-3",children:i.less.map(l=>r.jsxs("li",{className:"flex items-start gap-3",children:[r.jsx("div",{className:"mt-1 w-5 h-5 rounded-full bg-muted/50 flex items-center justify-center shrink-0",children:r.jsx(bo,{className:"h-3 w-3 text-muted-foreground"})}),r.jsx("span",{className:"text-sm text-muted-foreground leading-relaxed",children:l})]},l))})]})]})]})})}),r.jsx("section",{className:"py-16 bg-background",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-5xl mx-auto",children:[r.jsx("h2",{className:"font-display text-2xl sm:text-3xl font-bold text-foreground mb-8 text-center animate-fade-in-up",children:i.quotesTitle}),r.jsx("div",{className:"grid md:grid-cols-2 gap-8",children:i.quotes.map((l,d)=>r.jsxs("div",{className:"bg-card border border-border rounded-2xl p-8 md:p-10 flex flex-col shadow-sm animate-fade-in-up",style:{animationDelay:`${d*100}ms`},children:[r.jsx(wi,{className:"h-8 w-8 text-teal mb-5"}),r.jsxs("p",{className:"text-foreground leading-relaxed text-lg md:text-xl font-medium mb-7 flex-1",children:['"',l.text,'"']}),r.jsxs("div",{className:"pt-5 border-t border-border/60",children:[r.jsx("p",{className:"text-base font-semibold text-foreground",children:l.author}),r.jsxs("p",{className:"text-sm text-muted-foreground",children:[l.role," · ",l.company]}),r.jsx(_,{to:Pt(l.slug,t),className:"inline-block mt-3 text-sm text-teal hover:underline",children:i.readStory})]})]},l.author))})]})})}),r.jsx(va,{}),r.jsx(Ne,{})]})},jG="/assets/team-3-CVApk8qh.webp",u0={cfo:ip,controller:tD,aandeelhouders:zi,accountants:nb,stakeholders:uD},SG=()=>{const{role:e}=J1(),{t:n,i18n:t}=Y(),i=b.useMemo(()=>e?dz(e):void 0,[e]);if(!i)return r.jsx(i2,{to:"/",replace:!0});const a=u0[i]||ip,o=n(`voorWie.roles.${i}.title`),s=n(`voorWie.roles.${i}.subtitle`),l=n(`voorWie.roles.${i}.description`),d=n(`voorWie.roles.${i}
13666.benefits`,{returnObjects:!0}),c=n(`voorWie.roles.${i}.painPoints`,{returnObjects:!0}),u=n(`voorWie.roles.${i}.seoTitle`),h=n(`voorWie.roles.${i}.seoDescription`),g=t.language==="de"?"de":t.language!=="nl"?"en":"nl";return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:u,description:h,pathByLocale:L_(i),bareTitle:!0}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"pt-12 pb-16 relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh"}),r.jsx("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[600px] h-[600px] bg-teal/5 rounded-full blur-[120px]"}),r.jsx("div",{className:"container mx-auto px-4 relative z-10",children:r.jsxs("div",{className:"grid lg:grid-cols-[3fr_2fr] gap-10 lg:gap-14 items-center max-w-6xl mx-auto",children:[r.jsxs("div",{className:"text-center lg:text-left animate-fade-in-up",children:[r.jsx("div",{className:"w-16 h-16 rounded-2xl bg-primary/10 flex items-center justify-center mb-6 mx-auto lg:mx-0",children:r.jsx(a,{className:"w-8 h-8 text-primary"})}),r.jsxs("h1",{className:"font-display text-4xl sm:text-5xl lg:text-6xl font-bold text-foreground mb-4 tracking-tight",children:[n("voorWie.smartbooksFor")," ",r.jsx("span",{className:"text-gradient-multi",children:o})]}),r.jsx("p",{className:"text-xl text-muted-foreground",children:s})]}),r.jsx("div",{className:"rounded-2xl overflow-hidden border border-border shadow-xl aspect-[3/4] max-w-sm mx-auto w-full animate-fade-in-up",style:{animationDelay:"200ms"},children:r.jsx("img",{src:jG,alt:o,className:"w-full h-full object-cover"})})]})})]}),r.jsx("section",{className:"py-16 relative",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-5xl mx-auto grid md:grid-cols-2 gap-12",children:[r.jsxs("div",{className:"animate-fade-in-left",children:[r.jsx("h2",{className:"font-display text-2xl font-bold text-foreground mb-6",children:n("voorWie.theChallenge")}),r.jsx("p",{className:"text-muted-foreground leading-relaxed mb-8",children:l}),r.jsx("div",{className:"space-y-4",children:c.map((m,p)=>r.jsxs("div",{className:"flex items-start gap-3 bg-destructive/5 border border-destructive/10 rounded-xl p-4 animate-fade-in-left",style:{animationDelay:`${p*100}ms`},children:[r.jsx("div",{className:"w-2 h-2 rounded-full bg-destructive mt-2 shrink-0"}),r.jsx("span",{className:"text-sm text-muted-foreground",children:m})]},p))})]}),r.jsxs("div",{className:"animate-fade-in-right",style:{animationDelay:"200ms"},children:[r.jsx("h2",{className:"font-display text-2xl font-bold text-foreground mb-6",children:n("voorWie.whySmartbooks")}),r.jsx("div",{className:"space-y-4",children:d.map((m,p)=>r.jsxs("div",{className:"flex items-start gap-3 bg-primary/5 border border-primary/10 rounded-xl p-4 animate-fade-in-right",style:{animationDelay:`${p*100}ms`},children:[r.jsx(Yn,{className:"w-5 h-5 text-primary mt-0.5 shrink-0"}),r.jsx("span",{className:"text-sm text-foreground",children:m})]},p))})]})]})})}),r.jsx("section",{className:"py-16 bg-secondary/30",children:r.jsxs("div",{className:"container mx-auto px-4",children:[r.jsx("h2",{className:"font-display text-2xl font-bold text-foreground text-center mb-8",children:n("voorWie.alsoSee")}),r.jsx("div",{className:"flex flex-wrap justify-center gap-3",children:ru.filter(m=>m!==i).map(m=>{const p=u0[m]||ip;return r.jsx(_,{to:na(m,g),children:r.jsxs(jn,{variant:"outline",className:"gap-2 border-border hover:border-primary/40",children:[r.jsx(p,{className:"w-4 h-4"}),n(`voorWie.roles.${m}.title`)]})},m)})})]})}),r.jsx(va,{}),r.jsx(Ne,{})]})},AE=()=>{const e=dt(),{i18n:n}=Y(),t=n.language!=="nl",i=n.language==="de"?"de":t?"en":"nl";return b.useEffect(()=>{typeof window<"u"&&console.error("404 Error: User attempted to access non-existent route:",e.pathname)},[e.pathname]),r.jsxs(r.Fragment,{children:[r.jsx(Se,{title:t?"Page not found":"Pagina niet gevonden",description:t?"The page you are looking for could not be found. Return to the Smartbooks home page.":"De gevraagde pagina kon niet worden gevonden. Ga terug naar de Smartbooks homepage.",pathByLocale:je("notFound")}),r.jsx("div",{className:"flex min-h-screen items-center justify-center bg-muted",children:r.jsxs("div",{className:"text-center",children:[r.jsx("h1",{className:"mb-4 text-4xl font-bold",children:"404"}),r.jsx("p",{className:"mb-4 text-xl text-muted-foreground",children:t?"Oops! Page not found":"Oeps! Pagina niet gevonden"}),r.jsx("a",{href:B("index",i),className:"text-primary underline hover:text-primary/90",children:t?"Return to Home":"Terug naar home"})]})})]})},zG="https://meetings-eu1.hubspot.com/jaap-van-der-ende?embed=true",AG=()=>{const{t:e,i18n:n}=Y();b.useState(!1),n.language==="de"||n.language;const t=e("planDemo.bullets",{returnObjects:!0});return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("planDemo.seoTitle"),description:e("planDemo.seoDescription"),pathByLocale:je("planDemo")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"pt-12 pb-20 md:pt-16 md:pb-28 relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-midnight via-surface to-midnight"}),r.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_60%_50%_at_50%_30%,rgba(0,180,216,0.08),transparent)]"}),r.jsxs("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-16 relative z-10",children:[r.jsxs("div",{className:"text-center mb-12 md:mb-16 max-w-3xl mx-auto animate-fade-in-up",children:[r.jsx("span",{className:"eyebrow-badge",children:e("planDemo.eyebrow")}),r.jsx("h1",{className:"text-[32px] md:text-[44px] lg:text-[52px] font-bold leading-[1.15] tracking-[-0.015em] text-white mt-4 mb-5",children:e("planDemo.title")}),r.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed",children:e("planDemo.subtitle")})]}),r.jsxs("div",{className:"grid lg:grid-cols-2 gap-8 lg:gap-12 items-start",children:[r.jsxs("div",{className:"animate-fade-in-up",style:{animationDelay:"100ms"},children:[r.jsx("h2",{className:"text-white text-xl md:text-2xl font-bold mb-5",children:e("planDemo.bulletsHeading")}),r.jsx("ul",{className:"space-y-4",children:Array.isArray(t)&&t.map((i,a)=>r.jsxs("li",{className:"flex items-start gap-3 text-secondary text-base md:text-lg leading-relaxed",children:[r.jsx(Yn,{className:"h-6 w-6 text-turquoise shrink-0 mt-0.5"}),r.jsx("span",{children:i})]},a))})]}),r.jsx("div",{className:"relative animate-fade-in-up",style:{animationDelay:"150ms"},children:r.jsxs("div",{className:"rounded-2xl border border-white/10 bg-card/40 backdrop-blur-sm overflow-hidden shadow-2xl",children:[r.jsxs("div",{className:"p-5 border-b border-white/10 flex items-center gap-3",children:[r.jsx("img",{src:gv,alt:"Portret van Jaap van der Ende, Co-Founder Smartbooks",className:"w-12 h-12 rounded-full object-cover border border-white/20"}),r.jsxs("div",{children:[r.jsx("div",{className:"text-white font-semibold",children:e("planDemo.calendar.title")}),r.jsx("div",{className:"text-secondary text-sm",children:e("planDemo.calendar.subtitle")})]})]}),r.jsx("div",{className:"bg-white",children:r.jsx("iframe",{src:zG,title:e("planDemo.calendar.title"),className:"w-full",style:{minHeight:820,border:0},loading:"lazy"})})]})})]})]})]}),r.jsx(Ne,{})]})},CG="144146156",EG="eu1",h0={nl:"a5f2dbb9-982f-4336-8e8c-585f1aeaabed",en:"acf55c92-fab7-4559-9afc-38a547c5aadc"},NG=()=>{const{t:e,i18n:n}=Y(),[t,i]=b.useState(!1),a=(n.language||"nl").toLowerCase().split("-")[0],o=h0[a]??h0.nl;b.useEffect(()=>{const u=h=>{const g=h.data;g?.type==="hsFormCallback"&&g?.eventName==="onFormSubmitted"&&i(!0)};return window.addEventListener("message",u),()=>window.removeEventListener("message",u)},[]);const s=()=>{document.getElementById("webinar-form")?.scrollIntoView({behavior:"smooth",block:"start"})},l=e("webinar.bullets",{returnObjects:!0}),d=e("webinar.benefits",{returnObjects:!0}),c=[fo,Do,rb];return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("webinar.seoTitle"),description:e("webinar.seoDescription"),pathByLocale:je("webinar")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden pt-12 md:pt-16 pb-20 md:pb-28",children:[r.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-midnight via-surface to-midnight"}),r.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_70%_60%_at_50%_30%,rgba(0,180,216,0.10),transparent)]"}),r.jsxs("svg",{className:"absolute top-0 right-0 w-1/2 h-full opacity-30 pointer-events-none",viewBox:"0 0 600 800",preserveAspectRatio:"none",fill:"none","aria-hidden":"true",children:[r.jsx("defs",{children:r.jsxs("linearGradient",{id:"webinarWave",x1:"0",y1:"0",x2:"1",y2:"1",children:[r.jsx("stop",{offset:"0%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.4"}),r.jsx("stop",{offset:"100%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0"})]})}),[0,1,2,3,4,5].map(u=>r.jsx("path",{d:`M ${300+u*30} 0 Q ${500+u*20} 400, ${200+u*40}
13666 800`,stroke:"url(#webinarWave)",strokeWidth:"1",fill:"none"},u))]}),r.jsx("div",{className:"max-w-[1100px] mx-auto px-5 md:px-10 lg:px-16 relative z-10 text-center",children:r.jsxs("div",{className:"animate-fade-in-up",children:[r.jsx("span",{className:"eyebrow-badge",children:e("webinar.eyebrow")}),r.jsx("h1",{className:"text-[32px] md:text-[44px] lg:text-[56px] font-bold leading-[1.15] tracking-[-0.02em] text-white mt-5 mb-6 max-w-4xl mx-auto",children:e("webinar.title")}),r.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed max-w-2xl mx-auto mb-10",children:e("webinar.subtitle")}),r.jsxs("button",{onClick:s,className:"btn-primary inline-flex items-center gap-2 text-lg px-8 py-4",children:[e("webinar.heroCta")," ",r.jsx(re,{className:"h-5 w-5"})]})]})})]}),r.jsx("section",{className:"bg-background relative",children:r.jsx("div",{className:"max-w-[1100px] mx-auto px-5 md:px-10 lg:px-16 py-16 md:py-24",children:r.jsxs("div",{className:"grid md:grid-cols-2 gap-10 md:gap-16 items-center",children:[r.jsxs("div",{className:"animate-fade-in-left",children:[r.jsx("h2",{className:"text-foreground text-2xl md:text-3xl font-bold mb-6",children:e("webinar.bulletsHeading")}),r.jsx("ul",{className:"space-y-4 mb-8",children:Array.isArray(l)&&l.map((u,h)=>r.jsxs("li",{className:"flex items-start gap-3 text-foreground/90 text-base md:text-lg leading-relaxed",children:[r.jsx(Yn,{className:"h-6 w-6 text-turquoise shrink-0 mt-0.5"}),r.jsx("span",{children:u})]},h))}),r.jsxs("button",{onClick:s,className:"btn-primary inline-flex items-center gap-2",children:[e("webinar.heroCta")," ",r.jsx(re,{className:"h-4 w-4"})]})]}),r.jsxs("div",{className:"flex flex-col items-center text-center animate-fade-in-right",style:{animationDelay:"100ms"},children:[r.jsx("div",{className:"relative w-56 h-56 md:w-64 md:h-64 rounded-full overflow-hidden border-4 border-turquoise/20 shadow-2xl mb-5",children:r.jsx("img",{src:qo,alt:"Michel van Wijngaarden, founder Smartbooks, presenteert het webinar",className:"w-full h-full object-cover"})}),r.jsx("div",{className:"text-foreground text-xl font-bold",children:"Michel van Wijngaarden"}),r.jsx("div",{className:"text-turquoise text-sm font-medium",children:e("webinar.hostRole")})]})]})})}),r.jsxs("section",{className:"relative overflow-hidden py-16 md:py-24",children:[r.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-surface/40 via-surface/60 to-surface/40"}),r.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_70%_60%_at_50%_50%,rgba(0,180,216,0.05),transparent)]"}),r.jsxs("div",{className:"max-w-[1100px] mx-auto px-5 md:px-10 lg:px-16 relative z-10",children:[r.jsx("h2",{className:"text-center text-white text-2xl md:text-3xl lg:text-[36px] font-bold leading-tight max-w-3xl mx-auto mb-14 animate-fade-in-up",children:e("webinar.benefitsHeading")}),r.jsx("div",{className:"grid md:grid-cols-3 gap-8 md:gap-10 mb-12",children:Array.isArray(d)&&d.map((u,h)=>{const g=c[h]??fo;return r.jsxs("div",{className:"flex flex-col items-center text-center animate-fade-in-up",style:{animationDelay:`${h*100}ms`},children:[r.jsxs("div",{className:"relative mb-5",children:[r.jsx("div",{className:"w-24 h-24 rounded-full bg-midnight border border-turquoise/30 flex items-center justify-center shadow-xl",children:r.jsx(g,{className:"h-10 w-10 text-white",strokeWidth:1.75})}),r.jsx("span",{className:"absolute -top-1 right-1 w-3 h-3 rounded-full bg-turquoise shadow-[0_0_12px_rgba(0,180,216,0.8)]"})]}),r.jsx("div",{className:"text-white font-semibold text-lg mb-1",children:u.title}),u.description&&r.jsx("div",{className:"text-secondary text-sm leading-relaxed max-w-[220px]",children:u.description})]},h)})}),r.jsx("div",{className:"text-center",children:r.jsxs("button",{onClick:s,className:"btn-primary inline-flex items-center gap-2",children:[e("webinar.heroCta")," ",r.jsx(re,{className:"h-4 w-4"})]})})]})]}),r.jsx("section",{id:"webinar-form",className:"relative py-16 md:py-24 bg-background scroll-mt-24",children:r.jsx("div",{className:"max-w-[820px] mx-auto px-5 md:px-10",children:r.jsx("div",{className:"rounded-2xl border-2 border-turquoise/40 bg-card/40 backdrop-blur-sm shadow-2xl overflow-hidden animate-fade-in-up",children:r.jsx("div",{className:"bg-white p-8 md:p-12",children:t?r.jsxs("div",{className:"text-center py-12",children:[r.jsx("div",{className:"inline-flex w-16 h-16 rounded-full bg-turquoise/10 items-center justify-center mb-5",children:r.jsx(Yn,{className:"h-8 w-8 text-turquoise"})}),r.jsx("h2",{className:"text-foreground text-2xl font-bold mb-3",children:e("webinar.form.successTitle")}),r.jsx("p",{className:"text-muted-foreground",children:e("webinar.form.successBody")})]}):r.jsxs(r.Fragment,{children:[r.jsx("p",{className:"text-center text-turquoise font-medium text-sm md:text-base mb-3",children:e("webinar.form.eyebrow")}),r.jsx("h2",{className:"text-center text-foreground text-2xl md:text-[32px] font-bold leading-tight mb-8",children:e("webinar.form.title")}),r.jsx(Ko,{portalId:CG,formId:o,region:EG},o)]})})})})}),r.jsx(Ne,{})]})},g0="https://calendly.com/jaap-van-der-ende-smartbooks/webinar-consolideren-analyseren-en-rapporteren-met-ai?hide_gdpr_banner=1",m0="https://assets.calendly.com/assets/external/widget.js",IG=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl",i=b.useRef(null);return b.useEffect(()=>{const a=()=>{const c=window.Calendly;c&&i.current&&!i.current.querySelector("iframe")&&c.initInlineWidget({url:g0,parentElement:i.current})},o=["https://assets.calendly.com","https://calendly.com","https://d3v0fp2r5yap5z.cloudfront.net"],s=[];o.forEach(c=>
13666{if(document.querySelector(`link[rel="preconnect"][href="${c}"]`))return;const u=document.createElement("link");u.rel="preconnect",u.href=c,u.crossOrigin="anonymous",document.head.appendChild(u),s.push(u)});const l=document.querySelector(`script[src="${m0}"]`);if(l){if(window.Calendly)a();else return l.addEventListener("load",a),()=>{l.removeEventListener("load",a),s.forEach(c=>c.remove())};return()=>s.forEach(c=>c.remove())}const d=document.createElement("script");return d.src=m0,d.async=!0,d.addEventListener("load",a),document.body.appendChild(d),()=>{d.removeEventListener("load",a),s.forEach(c=>c.remove())}},[]),r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("liveWebinar.seoTitle"),description:e("liveWebinar.seoDescription"),pathByLocale:je("liveWebinar")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden pt-4 md:pt-6 pb-12 md:pb-16",children:[r.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-midnight via-surface to-midnight"}),r.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_70%_60%_at_50%_20%,rgba(0,180,216,0.10),transparent)]"}),r.jsxs("svg",{className:"absolute top-0 right-0 w-1/2 h-full opacity-30 pointer-events-none",viewBox:"0 0 600 800",preserveAspectRatio:"none",fill:"none","aria-hidden":"true",children:[r.jsx("defs",{children:r.jsxs("linearGradient",{id:"liveWebinarWave",x1:"0",y1:"0",x2:"1",y2:"1",children:[r.jsx("stop",{offset:"0%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.4"}),r.jsx("stop",{offset:"100%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0"})]})}),[0,1,2,3,4,5].map(a=>r.jsx("path",{d:`M ${300+a*30} 0 Q ${500+a*20} 400, ${200+a*40} 800`,stroke:"url(#liveWebinarWave)",strokeWidth:"1",fill:"none"},a))]}),r.jsxs("div",{className:"max-w-[1180px] mx-auto px-5 md:px-10 lg:px-16 relative z-10",children:[r.jsxs("div",{className:"text-center animate-fade-in-up mb-4 md:mb-6",children:[r.jsx("span",{className:"eyebrow-badge",children:e("liveWebinar.eyebrow")}),r.jsx("h1",{className:"text-[28px] md:text-[40px] lg:text-[48px] font-bold leading-[1.15] tracking-[-0.02em] text-white mt-4 mb-5 max-w-3xl mx-auto",children:e("liveWebinar.title")}),r.jsx("p",{className:"text-secondary text-base md:text-lg leading-relaxed max-w-2xl mx-auto mb-6",children:e("liveWebinar.subtitle")}),r.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2.5 text-sm",children:[r.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-turquoise/30 bg-turquoise/5 px-3 py-1 text-foreground",children:[r.jsx(iD,{className:"h-3.5 w-3.5 text-turquoise"}),e("liveWebinar.meta.date")]}),r.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-turquoise/30 bg-turquoise/5 px-3 py-1 text-foreground",children:[r.jsx(zi,{className:"h-3.5 w-3.5 text-turquoise"}),e("liveWebinar.meta.audience")]})]})]}),r.jsxs("div",{className:"grid lg:grid-cols-[minmax(0,1fr)_minmax(0,1.4fr)] gap-6 lg:gap-8 items-stretch animate-fade-in-up",children:[r.jsxs("div",{className:"flex flex-col justify-center items-center rounded-2xl border border-turquoise/20 bg-white/60 backdrop-blur-sm p-7 md:p-8 shadow-[0_8px_28px_-12px_rgba(15,25,35,0.10)] text-center",children:[r.jsxs("div",{className:"relative",children:[r.jsx("div",{className:"absolute -inset-2 bg-turquoise/20 rounded-full blur-xl","aria-hidden":"true"}),r.jsx("img",{src:gv,alt:e("liveWebinar.host.name"),width:120,height:120,loading:"eager",decoding:"async",className:"relative w-[120px] h-[120px] rounded-full object-cover ring-2 ring-turquoise/50 shadow-lg"})]}),r.jsxs("div",{className:"mt-5",children:[r.jsx("p",{className:"text-xs uppercase tracking-wider text-turquoise/80 mb-1.5",children:e("liveWebinar.host.intro")}),r.jsx("p",{className:"text-foreground font-semibold text-xl leading-tight",children:e("liveWebinar.host.name")}),r.jsx("p",{className:"text-muted-foreground text-sm mt-1",children:e("liveWebinar.host.role")})]}),r.jsx("p",{className:"text-muted-foreground text-[15px] leading-relaxed mt-5",children:e("liveWebinar.host.bio")})]}),r.jsx("div",{className:"rounded-2xl border-2 border-turquoise/40 bg-white shadow-2xl overflow-hidden",children:r.jsx("div",{ref:i,className:"calendly-inline-widget w-full","data-url":g0,style:{minWidth:320,height:680}})})]}),r.jsxs("p",{className:"text-center text-xs text-muted-foreground mt-4",children:[e("liveWebinar.privacyPrefix")," ",r.jsx(_,{to:B("privacybeleid",t),className:"text-turquoise hover:underline",children:e("liveWebinar.privacyLink")}),e("liveWebinar.privacySuffix")]})]})]}),r.jsx("section",{className:"relative py-12 md:py-16",children:r.jsx("div",{className:"max-w-[820px] mx-auto px-5 md:px-10 text-center animate-fade-in-up",children:r.jsxs("div",{className:"rounded-2xl border border-midnight/[0.08] bg-white p-8 md:p-10 shadow-[0_8px_28px_-12px_rgba(15,25,35,0.12)]",children:[r.jsx("div",{className:"inline-flex w-12 h-12 rounded-xl bg-turquoise/10 border border-turquoise/30 items-center justify-center mb-4",children:r.jsx(oD,{className:"h-6 w-6 text-turquoise"})}),r.jsx("h2",{className:"font-display text-foreground text-xl md:text-2xl font-bold mb-3",children:e("liveWebinar.ondemand.title")}),r.jsx("p",{className:"text-muted-foreground text-sm md:text-base leading-relaxed mb-6 max-w-xl mx-auto",children:e("liveWebinar.ondemand.description")}),r.jsxs(_,{to:B("planDemo",t),className:"inline-flex items-center gap-2 px-6 py-3 rounded-lg border border-turquoise/40 bg-turquoise/5 text-sm font-semibold text-turquoise hover:bg-turquoise hover:text-white hover:border-turquoise transition-all duration-200",children:[e("liveWebinar.ondemand.button"),r.jsx(re,{className:"h-4 w-4"})]})]})})}),r.jsx(Ne,{})]})},PG=[{version:"2026.04",date:"April 2026",headline:"AI-controller Alex, algemene beschikbaarheid",entries:[{type:"new",title:"Alex, jouw AI-controller",description:"Stel ad-hocvragen over je cijfers in natuurlijke taal. Alex haalt context uit je consolidatie, planning en transactiedata en levert direct onderbouwde antwoorden met drill-down."},{type:"new",title:"Smart Story narratives",description:"Automatisch gegenereerde managementtoelichtingen bij elke maandrapportage, met afwijkingsanalyse en hypotheses voor verklaringen."},{type:"improved",title:"Snellere consolidatie",description:"Multi-entity consolidatie tot 40% sneller door een herschreven aggregatie-engine. Geen wijziging in jullie inrichting nodig."}]},{version:"2026.02",date:"Februari 2026",headline:"Cashflow-planning & scenario's",entries:[{type:"new",title:"13-weeks cashflow forecast",description:"Rolling forecast op basis van openstaande debiteuren, crediteuren en geplande uitgaven. Direct gekoppeld aan je P&L en balans."},{type:"new",title:"Scenario-vergelijking",description:"Bouw best-, base- en worst-case scenario's en vergelijk ze naast elkaar in één view."},{type:"improved",title:"Drill-down tot transactieniveau",description:"Klik door van rapportage naar grootboekboeking in twee klikken, ook over entiteiten heen."},{type:"fixed",title:"FX-conversie bij meerdere rapportagevaluta",description:"Correcte koersweergave voor entiteiten met afwijkende functionele valuta in geconsolideerde overzichten."}]},{version:"2025.12",date:"December 2025",headline:"Maandafsluiting in dagen, niet weken",entries:[{type:"new",title:"Close checklist & taakverdeling",description:"Standaardiseer je maandafsluiting met een herhaalbare checklist, eigenaars per taak en realtime status voor het hele team."},{type:"new",title:"Intercompany reconciliation",description:"Automatische matching van IC-transacties en signalering van mismatches vóór de consolidatie."},{type:"improved",title:"Excel-export met opmaak behouden",description:"Geëxporteerde rapportages behouden formules, opmaak en drill-down structuur."}]},{version:"2025.10",date:"Oktober 2025",headline:"Nieuwe integraties & rapportage-engine",entries:[{type:"new",title:"AFAS Profit integratie",description:"Native koppeling met AFAS Profit voor dagelijkse synchronisatie van grootboek en debiteuren-/crediteurenadministratie."},{type:"new",title:"Twinfield connector",description:"Directe import van trial balance en transactiedetails uit Twinfield, inclusief multi-entity ondersteuning."},{type:"improved",title:"Rapportage-templates",description:"Nieuwe bibliotheek met EBITDA-bridges, working-capital dashboards en KPI-overzichten, direct te gebruiken of aanpasbaar."}]}],TG=[{version:"2026.04",date:"April 2026",headline:"AI Controller Alex, general availability",entries:[{type:"new",title:"Alex, your AI controller",description:"Ask ad-hoc questions about your numbers in natural language. Alex pulls context from your consolidation, planning and transaction data and delivers grounded answers with drill-down."},{type:"new",title:"Smart Story narratives",description:"Auto-generated management commentary on every monthly report, including variance analysis and hypotheses for what's behind deviations."},{type:"improved",title:"Faster consolidation",description:"Multi-entity consolidation up to 40% faster thanks to a rewritten aggregation engine. No changes to your setup required."}]},{version:"2026.02",date:"February 2026",headline:"Cashflow planning & scenarios",entries:[{type:"new",title:"13-week cashflow forecast",description:"Rolling forecast based on open AR, AP and planned outflows. Directly connected to your P&L and balance sheet."},{type:"new",title:"Scenario comparison",description:"Build best-, base- and worst-case scenarios and compare them side by side in a single view."},{type:"improved",title:"Drill-down to transaction level",description:"Jump from any report to the underlying journal entry in t
13666wo clicks, across entities too."},{type:"fixed",title:"FX conversion across reporting currencies",description:"Correct rate handling for entities with differing functional currencies in consolidated views."}]},{version:"2025.12",date:"December 2025",headline:"Month-end close in days, not weeks",entries:[{type:"new",title:"Close checklist & task ownership",description:"Standardize your month-end close with a repeatable checklist, owners per task, and real-time status for the entire team."},{type:"new",title:"Intercompany reconciliation",description:"Automatic matching of IC transactions and flagging of mismatches before consolidation."},{type:"improved",title:"Excel export with formatting preserved",description:"Exported reports keep formulas, formatting and drill-down structure intact."}]},{version:"2025.10",date:"October 2025",headline:"New integrations & reporting engine",entries:[{type:"new",title:"AFAS Profit integration",description:"Native connector to AFAS Profit for daily synchronization of GL and AR/AP."},{type:"new",title:"Twinfield connector",description:"Direct import of trial balance and transaction details from Twinfield, including multi-entity support."},{type:"improved",title:"Reporting templates",description:"New library of EBITDA bridges, working-capital dashboards and KPI overviews, use as-is or customize."}]}],DG={new:{labelNL:"Nieuw",labelEN:"New",icon:Jt,classes:"bg-teal/10 text-teal border-teal/20"},improved:{labelNL:"Verbeterd",labelEN:"Improved",icon:Bo,classes:"bg-orange/10 text-orange border-orange/20"},fixed:{labelNL:"Opgelost",labelEN:"Fixed",icon:db,classes:"bg-muted text-muted-foreground border-border"}},BG=()=>{const{i18n:e}=Y(),n=e.language!=="nl",t=n?TG:PG,i=n?"What's new, Smartbooks.ai product changelog":"Wat is er nieuw, Smartbooks.ai productupdates",a=n?"Stay up to date with new features, improvements and fixes in Smartbooks.ai. Quarterly product releases for finance teams.":"Blijf op de hoogte van nieuwe features, verbeteringen en fixes in Smartbooks.ai. Per kwartaal releases voor finance teams.";return r.jsxs(r.Fragment,{children:[r.jsx(Se,{title:i,description:a,pathByLocale:je("watIsNieuw")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("main",{className:"bg-background",children:[r.jsxs("section",{className:"pt-16 pb-12 gradient-hero relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 dot-grid opacity-30"}),r.jsx("div",{className:"container mx-auto px-4 relative z-10",children:r.jsxs("div",{className:"max-w-3xl mx-auto text-center animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-4 block",children:n?"Product changelog":"Productupdates"}),r.jsxs("h1",{className:"font-display text-4xl sm:text-5xl font-bold text-foreground tracking-tight mb-6",children:[n?"What's new in ":"Wat is er nieuw in ",r.jsx("span",{className:"text-gradient-multi",children:"Smartbooks"})]}),r.jsx("p",{className:"text-lg text-muted-foreground leading-relaxed",children:n?"Every release we ship new features, refinements and fixes that help finance teams close faster and report with more confidence.":"Elke release leveren we nieuwe features, verfijningen en fixes waarmee finance teams sneller afsluiten en met meer vertrouwen rapporteren."})]})})]}),r.jsx("section",{className:"py-16",children:r.jsxs("div",{className:"container mx-auto px-4",children:[r.jsx("div",{className:"max-w-3xl mx-auto space-y-12",children:t.map((o,s)=>r.jsxs("article",{className:"relative pl-8 border-l-2 border-border animate-fade-in-up",style:{animationDelay:`${s*50}ms`},children:[r.jsx("div",{className:"absolute -left-[9px] top-2 w-4 h-4 rounded-full bg-teal border-4 border-background"}),r.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-1 mb-1",children:[r.jsxs("span",{className:"font-display text-sm font-mono text-teal",children:["v",o.version]}),r.jsx("span",{className:"text-xs text-muted-foreground uppercase tracking-wider",children:o.date})]}),r.jsx("h2",{className:"font-display text-2xl sm:text-3xl font-bold text-foreground tracking-tight mb-6",children:o.headline}),r.jsx("ul",{className:"space-y-5",children:o.entries.map((l,d)=>{const c=DG[l.type],u=c.icon;return r.jsx("li",{className:"bg-card border border-border rounded-xl p-5",children:r.jsxs("div",{className:"flex items-start gap-3",children:[r.jsxs("span",{className:`shrink-0 inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full border text-[11px] font-semibold uppercase tracking-wider ${c.classes}`,children:[r.jsx(u,{className:"h-3 w-3"}),n?c.labelEN:c.labelNL]}),r.jsxs("div",{className:"min-w-0",children:[r.jsx("h3",{className:"font-display text-base font-bold text-foreground mb-1",children:l.title}),r.jsx("p",{className:"text-sm text-muted-foreground leading-relaxed",children:l.description})]})]})},d)})})]},o.version))}),r.jsx("div",{className:"max-w-3xl mx-auto mt-16 text-center",children:r.jsxs("p",{className:"text-sm text-muted-foreground",children:[n?"Want to suggest a feature or follow our roadmap? ":"Een feature voorstellen of onze roadmap volgen? ",r.jsx("a",{href:B("contact",e.language==="de"?"de":n?"en":"nl"),className:"text-teal font-medium hover:underline",children:n?"Get in touch":"Neem contact op"})]})})]})})]}),r.jsx(Ne,{})]})},MG="/assets/dashboard-consulting-profit-growth-CwOJLw4i.png",FG="/assets/dashboard-cashflow-C7qZoMaW.png",RG=["Budget_2024.xlsx","P&L Consolidatie.xlsx","Cashflow_Q3.xlsx","OPEX_Forecast.xlsx","Revenue_Model.xlsx","KPI_Dashboard.xlsx","Actuals_vs_Budget.xlsx","Headcount_Plan.xlsx","EBITDA_Bridge.xlsx","Maandrapportage.xlsx","Balans_Overzicht.xlsx","Cost_Allocatie.xl
13666sx","Intercompany.xlsx","Werkkapitaal.xlsx","Liquiditeit.xlsx"],$g=[{bar:"34, 139, 34",bg:"120, 30%, 95%"},{bar:"34, 139, 34",bg:"120, 25%, 93%"},{bar:"30, 100, 60",bg:"210, 20%, 94%"},{bar:"34, 139, 34",bg:"120, 28%, 94%"},{bar:"40, 120, 50",bg:"115, 25%, 92%"}],OG=({loop:e=!0,singleScreen:n=!1,logoMode:t=!1})=>{const i=b.useRef(null),a=b.useRef(0),o=b.useRef(null),s=b.useRef(null),l=b.useRef(null);return b.useEffect(()=>{const d=new Image;d.src=MG,o.current=d;const c=new Image;c.src=FG,s.current=c;const u=new Image;u.src=Yu,l.current=u;const h=i.current;if(!h)return;const g=h.getContext("2d"),m=()=>{const I=window.devicePixelRatio||1;h.width=h.offsetWidth*I,h.height=h.offsetHeight*I,g.setTransform(I,0,0,I,0,0)};m(),window.addEventListener("resize",m);const p=()=>h.offsetWidth,f=()=>h.offsetHeight,w=()=>p()/2,k=()=>f()/2,v=()=>RG.map(I=>({x:Math.random()*p(),y:Math.random()*f(),label:I,width:100+Math.random()*40,height:70+Math.random()*30,rotation:(Math.random()-.5)*.3,colorIdx:Math.floor(Math.random()*$g.length),angle:Math.random()*Math.PI*2,orbitRadius:40+Math.random()*80,orbitSpeed:.002+Math.random()*.005,orbitCenterX:Math.random()*p(),orbitCenterY:Math.random()*f(),driftVx:(Math.random()-.5)*.25,driftVy:(Math.random()-.5)*.25,opacity:.5+Math.random()*.5,rows:4+Math.floor(Math.random()*3),cols:3+Math.floor(Math.random()*3)})),x=(I,de,he=1)=>{g.save(),g.translate(I.x,I.y),g.rotate(I.rotation),g.scale(he,he),g.globalAlpha=de;const Z=I.width,ke=I.height,ce=14;g.shadowColor="rgba(0,0,0,0.25)",g.shadowBlur=12,g.shadowOffsetY=4,g.fillStyle=`hsla(${$g[I.colorIdx].bg}, 1)`,g.beginPath(),g.roundRect(-Z/2,-ke/2,Z,ke,4),g.fill(),g.shadowColor="transparent";const be=$g[I.colorIdx].bar;g.fillStyle=`rgb(${be})`,g.beginPath(),g.roundRect(-Z/2,-ke/2,Z,ce,[4,4,0,0]),g.fill(),g.fillStyle="rgba(255,255,255,0.9)",g.font='600 7px "Space Grotesk", system-ui',g.textAlign="left",g.textBaseline="middle",g.fillText(I.label.length>18?I.label.slice(0,18)+"…":I.label,-Z/2+5,-ke/2+ce/2);const Pe=-ke/2+ce+2,en=ke-ce-4,Oe=Z-4,Ge=Oe/I.cols,ln=en/I.rows;g.strokeStyle="rgba(0,0,0,0.08)",g.lineWidth=.5,g.beginPath();for(let Ke=0;Ke<=I.rows;Ke++)g.moveTo(-Z/2+2,Pe+Ke*ln),g.lineTo(-Z/2+2+Oe,Pe+Ke*ln);for(let Ke=0;Ke<=I.cols;Ke++)g.moveTo(-Z/2+2+Ke*Ge,Pe),g.lineTo(-Z/2+2+Ke*Ge,Pe+en);g.stroke(),g.globalAlpha=de*.4;for(let Ke=0;Ke<I.rows;Ke++)for(let kn=0;kn<I.cols;kn++)if(Math.random()>.4){const wt=Ge*(.3+Math.random()*.5);g.fillStyle=kn===0?"rgba(0,0,0,0.15)":`rgba(34,139,34,${.1+Math.random()*.15})`,g.fillRect(-Z/2+2+kn*Ge+2,Pe+Ke*ln+2,wt,ln-4)}g.globalAlpha=de,g.strokeStyle="rgba(0,0,0,0.1)",g.lineWidth=1,g.beginPath(),g.roundRect(-Z/2,-ke/2,Z,ke,4),g.stroke(),g.restore()},y=I=>1-Math.pow(1-I,3),j=I=>I*I*I;let z=v(),S=performance.now(),A=[];const E=2500,C=1200,O=500,T=1200,W=7e3;let F="float",L=0,G=0,X=0,D=0,M=0;const K=400,Q=(I,de,he,Z)=>{const ce=Math.min(p()*.92,1100)*Z/I.naturalWidth,be=I.naturalWidth*ce,Pe=I.naturalHeight*ce;return{x:w()+de-be/2,y:k()+he-Pe/2,w:be,h:Pe}},$=(I,de,he,Z,ke,ce=!1)=>{const Pe=Math.min(p()*.92,1100)*ke/I.naturalWidth,en=I.naturalWidth*Pe,Oe=I.naturalHeight*Pe,Ge=w()+he-en/2,ln=k()+Z-Oe/2,Ke=12,kn=.05+de*.95;g.save(),g.translate(w()+he,k()+Z),g.scale(kn,kn),g.translate(-(w()+he),-(k()+Z)),g.globalAlpha=Math.min(1,de*2)*(ce?.75:1),g.shadowColor=ce?"rgba(0,0,0,0.2)":"rgba(0,0,0,0.4)",g.shadowBlur=ce?20:40,g.shadowOffsetY=ce?6:12,g.beginPath(),g.roundRect(Ge,ln,en,Oe,Ke),g.clip(),g.drawImage(I,Ge,ln,en,Oe),g.restore(),g.save(),g.translate(w()+he,k()+Z),g.scale(kn,kn),g.translate(-(w()+he),-(k()+Z)),g.globalAlpha=Math.min(1,de*2)*(ce?.5:1),g.strokeStyle=`hsla(183, 70%, 48%, ${.3*de})`,g.lineWidth=1.5,g.beginPath(),g.roundRect(Ge,ln,en,Oe,Ke),g.stroke(),g.restore()},se=(I,de)=>{const Z=Math.min(p()*.6,520)/I.naturalWidth,ke=I.naturalWidth*Z,ce=I.naturalHeight*Z,be=w()-ke/2,Pe=k()-ce/2,en=.4+de*.6;g.save(),g.translate(w(),k()),g.scale(en,en),g.translate(-w(),-k()),g.globalAlpha=Math.min(1,de*1.5),g.drawImage(I,be,Pe,ke,ce),g.restore()},le=(I,de)=>{const he=o.current,Z=s.current,ke=l.current;if(t&&n&&ke?.complete){se(ke,I);const hn=Math.min(p()*.92,1100),On=.05+I*.95,Cn=g.createRadialGradient(w(),k(),hn*.1*On,w(),k(),hn*.7*On);Cn.addColorStop(0,`hsla(183, 70%, 48%, ${.1*I})`),Cn.addColorStop(1,"hsla(183, 70%, 48%, 0)"),g.fillStyle=Cn,g.fillRect(0,0,p(),f());return}if(!he?.complete||!Z?.complete){he?.complete&&$(he,I,0,0,.92,!1);return}if(n){$(he,I,0,0,.95,!1);const hn=Math.min(p()*.92,1100),On=.05+I*.95,Cn=g.createRadialGradient(w(),k(),hn*.1*On,w(),k(),hn*.7*On);Cn.addColorStop(0,`hsla(183, 70%, 48%, ${.06*I})`),Cn.addColorStop(1,"hsla(183, 70%, 48%, 0)"),g.fillStyle=Cn,g.fillRect(0,0,p(),f());return}const ce=Math.min(p()*.08,70);D===1&&(X=Math.min(1,(de-M)/K),X>=1&&(D=0,X=0));const be=D===1?y(X):0,Pe=-ce*.5,en=12,Oe=.95,Ge=ce,ln=-12,Ke=.85,kn=[{img:he,label:"pnl"},{img:Z,label:"cashflow"}],wt=G,Br=1-G;D===1?($(kn[wt].img,I,Pe+(Ge-Pe)*be,en+(ln-en)*be,Oe+(Ke-Oe)*be,!0),$(kn[Br].img,I,Ge+(Pe-Ge)*be,ln+(en-ln)*be,Ke+(Oe-Ke)*be,!1)):($(kn[Br].img,I,Ge,ln,Ke,!0),$(kn[wt].img,I,Pe,en,Oe,!1));const xt=Math.min(p()*.92,1100),yt=.05+I*.95,Ft=g.createRadialGradient(w(),k(),xt*.1*yt,w(),k(),xt*.7*yt);Ft.addColorStop(0,`hsla(183, 70%, 48%, ${.06*I})`),Ft.addColorStop(1,"hsla(183, 70%, 48%, 0)"),g.fillStyle=Ft,g.fillRect(0,0,p(),f())},we=I=>{if(F!=="hold"&&F!=="expand"||D===1)return;const de=h.getBoundingClientRect(),he=I.clientX-de.left,Z=I.clientY-de.top,ke=o.current,ce=s.current;if(!ke?.complete||!ce?.complete)return;const be=Math.min(p()*.15,120),Pe=[ke,ce],en=1-G,Oe=Pe[en],Ge=Q(Oe,be,-12,.7);he>=Ge.x&&he<=Ge.x+Ge.w&&Z>=Ge.y&&Z<=Ge.y+Ge.h&&(G=en,D=1,M=performance.now())};h.addEventListener("click",we),h.style.cursor="pointer";const Re=I=>{const de=I-S;if(g.clearRect(0,0,p(),f()),F==="float"){const he=Math.min(1,de/1e3);z.forEach(Z=>{Z.angle+=Z.orbitSpeed,Z.orbitCenterX+=Z.driftVx,Z.orbitCenterY+=Z.driftVy,(Z.orbitCenterX<-50||Z.orbitCenterX>p()+50)&&(Z.driftVx*=-1),(Z.orbitCenterY<-50||Z.orbitCenterY>f()+50)&&(Z.driftVy*=-1),Z.x=Z.orbitCenterX+Math.cos(Z.angle)*Z.orbitRadius,Z.y=Z.orbitCenterY+Math.sin(Z.angle)*Z.orbitRadius,x(Z,Z.opacity*he)}),de>E&&(F="converge",L=I,A=z.map(Z=>({x:Z.x,y:Z.y})))}else if(F==="converge"){const he=(I-L)/C,Z=Math.min(1,he),ke=j(Z);z.forEach((Pe,en)=>{const Oe=A[en];Pe.x=Oe.x+(w()-Oe.x)*ke,Pe.y=Oe.y+(k()-Oe.y)*ke,Pe.rotation*=1-ke;const Ge=Math.sqrt((Pe.x-w())**2+(Pe.y-k())**2),ln=Math.max(.2,Math.min(1,Ge/200)),Ke=Pe.opacity*Math.max(.05,ln);x(Pe,Ke,ln)});const ce=15+ke*50,be=g.createRadialGradient(w(),k(),0,w(),k(),ce);be.addColorStop(0,`hsla(183, 70%, 55%, ${.2+ke*.5})`),be.addColorStop(1,"hsla(183, 70%, 48%, 0)"),g.fillStyle=be,g.beginPath(),g.arc(w(),k(),ce,0,Math.PI*2),g.fill(),Z>=1&&(F="orb",L=I)}else if(F==="orb"){const he=(I-L)/O,Z=1+Math.sin(he*Math.PI*4)*.15,ke=(60+he*20)*Z,ce=.6+he*.4,be=g.createRadialGradient(w(),k(),0,w(),k(),ke);be.addColorStop(0,`hsla(183, 80%, 65%, ${ce})`),be.addColorStop(.4,`hsla(183, 70%, 50%, ${ce*.5})`),be.addColorStop(1,"hsla(183, 70%, 48%, 0)"),g.fillStyle=be,g.beginPath(),g.arc(w(),k(),
13666ke,0,Math.PI*2),g.fill(),he>=1&&(F="expand",L=I)}else if(F==="expand"){const he=(I-L)/T,Z=Math.min(1,he),ke=y(Z);if(Z<.5){const ce=1-Z*2,be=g.createRadialGradient(w(),k(),0,w(),k(),80);be.addColorStop(0,`hsla(183, 80%, 65%, ${ce*.8})`),be.addColorStop(1,"hsla(183, 70%, 48%, 0)"),g.fillStyle=be,g.beginPath(),g.arc(w(),k(),80,0,Math.PI*2),g.fill()}le(ke,I),Z>=1&&(F="hold",L=I)}else le(1,I),e&&I-L>W&&(F="float",z=v(),S=performance.now(),L=0);a.current=requestAnimationFrame(Re)};return a.current=requestAnimationFrame(Re),()=>{cancelAnimationFrame(a.current),window.removeEventListener("resize",m),h.removeEventListener("click",we)}},[e,t,n]),r.jsx("canvas",{ref:i,className:"absolute inset-0 w-full h-full"})},_G=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl",i=qn(),a=[{icon:vo,title:i("Foutgevoelig","Error-prone"),text:i("Excel heeft geen ingebouwde financiële logica. Eén verkeerde formule, referentie of kopieeractie en je cijfers kloppen niet. Fouten worden vaak pas ontdekt als iemand een vraag stelt.","Excel has no built-in financial logic. One wrong formula, reference or copy-paste and your numbers are off. Errors are often only discovered when someone asks a question.")},{icon:gD,title:i("Niet overdraagbaar","Not transferable"),text:i("Je hebt geen single source of truth. Je hebt een single source of knowledge en dat is één persoon. Bij vakantie, ziekte of vertrek valt het kaartenhuis om. Nieuwe medewerkers hebben maanden nodig om het model te doorgronden.","You don't have a single source of truth. You have a single source of knowledge and that's one person. With a vacation, illness or departure, the house of cards collapses. New hires need months to understand the model.")},{icon:lb,title:i("Elke maand hetzelfde handmatige ritueel","The same manual ritual every month"),text:i("Data handmatig ophalen en samenvoegen in Excel. Analyses en grafieken maken. Alles controleren. Presentatie maken voor MT. Fout in bron? Begin opnieuw. De maandafsluiting kost snel veel tijd en frustratie.","Pulling and merging data manually in Excel. Building analyses and charts. Checking everything. Preparing the management presentation. Error in the source? Start over. The month-end close quickly costs a lot of time and frustration.")},{icon:mo,title:i("Geen basis voor AI","No foundation for AI"),text:i("AI kan alleen betrouwbaar werken op gestructureerde, complete en toegankelijke data. Zolang die verspreid zit over Excel-bestanden en losse tools, kan AI niet effectief ingezet worden en blijft het een belofte.","AI can only work reliably on structured, complete and accessible data. As long as it's spread across Excel files and disconnected tools, AI can't be used effectively and remains a promise.")}],o=[{value:"47%",label:i("lagere kosten","lower costs"),sub:i("in de finance functie","in the finance function")},{value:"41%",label:i("sneller","faster"),sub:i("rapporteren","reporting")},{value:"44%",label:i("vaker gezien als","more often seen as"),sub:i("strategisch partner","strategic partner")}],s=[{icon:po,title:i("Rapportage","Reporting"),text:i("Real-time P&L, balans en cashflow met automatische vergelijkingen en drill-down tot aan de originele transactie.","Real-time P&L, balance sheet and cashflow with automatic comparisons and drill-down to the original transaction.")},{icon:$i,title:i("Consolidatie","Consolidation"),text:i("Multi-entity en multi-currency consolidatie met automatische intercompany-eliminaties en subconsolidatie op meerdere niveaus.","Multi-entity and multi-currency consolidation with automatic intercompany eliminations and sub-consolidation on multiple levels.")},{icon:ib,title:i("Planning & cashflow","Planning & cashflow"),text:i("Budget, forecast en scenario's in hetzelfde systeem als je actuals, met driver-based modellen die rekenen zoals jij ze opzet.","Budget, forecast and scenarios in the same system as your actuals, with driver-based models that calculate the way you set them up.")},{icon:mo,title:i("Alex, AI-controller","Alex, AI controller"),text:i("AI-ondersteuning voor maandafsluiting, analyses en presentatie, gebouwd op een betrouwbaar fundament van gestructureerde data.","AI support for month-end close, analyses and presentation, built on a reliable foundation of structured data.")}],l=[{n:i("Stap 1","Step 1"),title:i("Koppeling en inrichting","Connection and setup"),text:i("Je boekhouding staat in Smartbooks. Rapportage-, consolidatie- en planningsstructuur zijn ingericht op je grootboek. Wij doen het werk, jij ziet direct je eigen cijfers in het systeem.","Your accounting lives in Smartbooks. Reporting, consolidation and planning structures are set up on your ledger. We do the work, you see your own numbers in the system right away.")},{n:i("Stap 2","Step 2"),title:i("Training","Training"),text:i("Samen met je team gaan we door de kern-workflows: afsluiting, consolidatie, rapportage. Iedereen leert werken met wat voor hun rol relevant is. Geen generieke handleiding, training op jouw setup.","Together with your team we walk through the core workflows: close, consolidation, reporting. Everyone learns what's relevant for their role. No generic manual, training on your setup.")},{n:i("Stap 3","Step 3"),title:i("Finetuning","Fine-tuning"),text:i("Smartbooks werkt, je team werkt ermee. Nu finetunen we samen: standaardrapportages aanscherpen, extra dimensies toevoegen, checklists afstemmen. Jullie ritme bepaalt het tempo.","Smartbooks is running, your team is using it. Now we fine-tune together: sharpening standard reports, adding extra dimensions, aligning checklists. Your rhythm sets the pace.")}];return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("seo.lpFinance.title"),description:e("seo.lpFinance.description"),pathByLocale:je("lpFinance")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden pt-2 pb-10 md:pt-4 md:pb-12",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-20"}),r.jsx("div",{className:"absolute inset-0 gradient-mesh opacity-30"}),r.jsx("div",{className:"container relative z-10 mx-auto max-w-7xl px-4",children:r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-10 lg:gap-12 items-center",children:[r.jsxs("div",{className:"text-center lg:text-left",children:[r.jsx("div",{className:"animate-fade-in-up",children:r.jsx("span",{className:"inline-block rounded-full border border-accent/30 bg-accent/5 px-4 py-1.5 text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("Voor business & financial controllers","For business & financial controllers")})}),r.jsxs("h1",{className:"mt-6 font-display text-4xl font-bold leading-[1.1] tracking-tight text-foreground sm:text-5xl lg:text-5xl xl:text-6xl animate-fade-in-up",style:{animationDelay:"50ms"},children:[i("Jouw finance afdeling ","Your finance department "),r.jsx("span",{className:"text-gradient-multi",children:i("verdient beter dan Excel","deserves better than Excel")})]}),r.jsx("p",{className:"mt-6 max-w-xl text-base leading-relaxed text-muted-foreground md:text-lg mx-auto lg:mx-0 animate-fade-in-up",style:{animationDelay:"100ms"},children:i("Rapportage, consolidatie, planning, maandafsluiting, analyses en presentatie, in één professioneel platform. Live in dagen, niet in maanden.","Reporting, consolidation, planning, month-end close, analyses and presentation — in one professional platform. Live in days, not months.")}
13666),r.jsxs("div",{className:"mt-8 flex flex-col items-center lg:items-start justify-center lg:justify-start gap-3 sm:flex-row animate-fade-in-up",style:{animationDelay:"150ms"},children:[r.jsx(_,{to:B("planDemo",t),children:r.jsxs("button",{className:"btn-primary text-sm py-3 px-7 inline-flex items-center",children:[i("Plan een demo","Book a demo")," ",r.jsx(re,{className:"ml-2 h-4 w-4"})]})}),r.jsx(_,{to:B("liveWebinar",t),children:r.jsx(jn,{size:"lg",variant:"outline",className:"border-border/60 hover:border-accent/40 hover:bg-accent/5",children:i("Bekijk het live webinar","Watch the live webinar")})})]})]}),r.jsx("div",{className:"relative w-full aspect-[16/10] animate-fade-in-up",style:{animationDelay:"100ms"},children:r.jsx(OG,{loop:!1,singleScreen:!0,logoMode:!0})})]})})]}),r.jsx(Wo,{compact:!0}),r.jsx(av,{}),r.jsx("section",{className:"py-16 md:py-20 bg-muted/40 relative overflow-hidden border-y border-border/40",children:r.jsxs("div",{className:"container mx-auto max-w-6xl px-4",children:[r.jsxs("div",{className:"mb-14 text-center animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("Herken je dit?","Sound familiar?")}),r.jsx("h2",{className:"mt-3 font-display text-3xl font-bold text-foreground md:text-4xl",children:i("De meeste finance afdelingen draaien op Excel","Most finance departments run on Excel")}),r.jsx("p",{className:"mx-auto mt-4 max-w-2xl text-base leading-relaxed text-muted-foreground",children:i("Het werkt, maar professioneel is het niet. En diep van binnen weet je dat.","It works — but it's not professional. And deep down you know it.")})]}),r.jsx("div",{className:"grid grid-cols-1 gap-5 md:grid-cols-2",children:a.map((d,c)=>r.jsxs("div",{className:"group relative overflow-hidden rounded-2xl border border-border/60 glass-card p-7 transition-colors hover:border-accent/30 animate-fade-in-up",style:{animationDelay:`${c*80}ms`},children:[r.jsx("div",{className:"mb-5 flex h-11 w-11 items-center justify-center rounded-xl border border-accent/20 bg-accent/10",children:r.jsx(d.icon,{className:"h-5 w-5 text-accent"})}),r.jsx("h3",{className:"font-display text-lg font-bold text-foreground",children:d.title}),r.jsx("p",{className:"mt-3 text-sm leading-relaxed text-muted-foreground",children:d.text})]},d.title))}),r.jsxs("figure",{className:"mx-auto mt-10 max-w-3xl rounded-2xl border border-border/60 glass-card p-7 text-center animate-fade-in-up",children:[r.jsx(wi,{className:"mx-auto mb-3 h-5 w-5 text-accent/60"}),r.jsx("blockquote",{className:"font-display text-base leading-relaxed text-foreground md:text-lg",children:i('"Smartbooks heeft ons geholpen om in een fractie van de tijd betrouwbare rapportages op te leveren. Wat eerst dagen werk was, doen we nu in uren, en met meer vertrouwen in de cijfers."','"Smartbooks helped us deliver reliable reports in a fraction of the time. What used to take days now takes hours, and with more confidence in the numbers."')}),r.jsx("figcaption",{className:"mt-4 text-sm text-muted-foreground",children:"Karel van den Bos, CFO, Intermax"}),r.jsx("div",{className:"mt-5",children:r.jsx(_,{to:B("klantverhalen",t),children:r.jsxs(jn,{variant:"outline",size:"sm",className:"border-border/60 hover:border-accent/40 hover:bg-accent/5",children:[i("Lees de klantcase","Read the customer case")," ",r.jsx(re,{className:"ml-2 h-4 w-4"})]})})})]})]})}),r.jsxs("section",{className:"relative overflow-hidden py-16 md:py-20",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-20"}),r.jsxs("div",{className:"container relative z-10 mx-auto max-w-5xl px-4",children:[r.jsxs("div",{className:"max-w-3xl animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Wat er op het spel staat","What's at stake")}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:i("Zolang dit niet verandert, blijf je elke maand hetzelfde handmatige werk doen. Blijft finance kwetsbaar en afhankelijk van individuen. En mis je de kans om AI betrouwbaar in te zetten.","As long as this doesn't change, you keep doing the same manual work every month. Finance stays fragile and dependent on individuals. And you miss the opportunity to deploy AI reliably.")}),r.jsx("p",{className:"mt-5 font-display text-base font-bold text-foreground md:text-lg",children:i("De vraag is niet óf je dit wilt veranderen — maar hoe.","The question isn't whether you want to change this — but how.")}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:i("De best presterende finance teams laten zien wat er mogelijk is:","The best-performing finance teams show what's possible:")})]}),r.jsx("div",{className:"mt-8 grid grid-cols-1 gap-5 md:grid-cols-3",children:o.map((d,c
13666)=>r.jsxs("div",{className:"rounded-2xl border border-border/60 glass-card p-7 text-center animate-fade-in-up",style:{animationDelay:`${c*80}ms`},children:[r.jsx("div",{className:"font-display text-4xl font-bold text-foreground md:text-5xl",children:d.value}),r.jsxs("div",{className:"mt-3 text-sm leading-relaxed text-muted-foreground",children:[d.label,r.jsx("br",{}),d.sub]})]},d.value))}),r.jsx("p",{className:"mt-4 text-right text-xs text-muted-foreground/70 italic",children:i("Bron: The Hackett Group","Source: The Hackett Group")})]})]}),r.jsx("section",{className:"py-16 md:py-20 bg-background relative overflow-hidden",children:r.jsxs("div",{className:"container mx-auto max-w-6xl px-4",children:[r.jsxs("div",{className:"mb-14 text-center animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("De oplossing","The solution")}),r.jsx("h2",{className:"mt-3 font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Eén systeem voor de controller","One system for the controller")}),r.jsx("p",{className:"mx-auto mt-4 max-w-2xl text-base leading-relaxed text-muted-foreground",children:i("Smartbooks brengt alle kernprocessen van de business en financial controller samen in één platform, direct gekoppeld aan je boekhouding en bronsystemen, altijd dezelfde cijfers, zonder handmatig overzetten.","Smartbooks brings all the core processes of the business and financial controller together in one platform, directly connected to your accounting and source systems, always the same numbers, without manual transfers.")})]}),r.jsx("div",{className:"grid grid-cols-1 gap-5 md:grid-cols-2",children:s.map((d,c)=>r.jsx("div",{className:"group rounded-2xl border border-border/60 glass-card p-7 transition-colors hover:border-accent/30 animate-fade-in-up",style:{animationDelay:`${c*80}ms`},children:r.jsxs("div",{className:"flex items-start gap-4",children:[r.jsx("div",{className:"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl border border-accent/20 bg-accent/10",children:r.jsx(d.icon,{className:"h-5 w-5 text-accent"})}),r.jsxs("div",{children:[r.jsx("h3",{className:"font-display text-lg font-bold text-foreground",children:d.title}),r.jsx("p",{className:"mt-2 text-sm leading-relaxed text-muted-foreground",children:d.text})]})]})},d.title))}),r.jsx("div",{className:"mt-10 text-center",children:r.jsx(_,{to:B("functionaliteiten",t),children:r.jsxs(jn,{variant:"outline",className:"border-border/60 hover:border-accent/40 hover:bg-accent/5",children:[i("Ontdek alle functionaliteiten","Discover all features")," ",r.jsx(re,{className:"ml-2 h-4 w-4"})]})})})]})}),r.jsxs("section",{className:"relative overflow-hidden py-16 md:py-20 bg-muted/40 border-y border-border/40",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-20"}),r.jsxs("div",{className:"container relative z-10 mx-auto max-w-5xl px-4",children:[r.jsxs("div",{className:"mb-10 text-center animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("In de praktijk","In practice")}),r.jsx("h2",{className:"mt-3 font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Klantcase: Primus Wafer Paper","Customer case: Primus Wafer Paper")}),r.jsx("p",{className:"mt-3 text-sm text-muted-foreground",children:i("Voedingsmiddelenindustrie · internationaal actief · ERP + Excel","Food industry · internationally active · ERP + Excel")})]}),r.jsxs("figure",{className:"mx-auto mt-10 max-w-3xl rounded-2xl border border-border/60 glass-card p-8 text-center animate-fade-in-up",children:[r.jsx(wi,{className:"mx-auto mb-4 h-6 w-6 text-accent/60"}),r.jsx("blockquote",{className:"font-display text-lg leading-relaxed text-foreground md:text-xl",children:i('"Ik heb in mijn 30+ jaar ervaring met veel tools gewerkt, maar Smartbooks is by far de eenvoudigste en snelste om te implementeren. Binnen twee weken was het systeem volledig operationeel, met slechts 10 uur tijdsinvestering vanuit ons team."',`"In my 30+ years of experience I've worked with many tools, but Smartbooks is by far the easiest and fastest to implement. Within two weeks the system was fully operational, with just 10 hours of time investment from our team."`)}),r.jsx("figcaption",{className:"mt-5 text-sm text-muted-foreground",children:"Marcel Steenbrink, CFO, Primus Wafer Paper"})]}),r.jsx("div",{className:"mt-10 text-center",children:r.jsx(_,{to:B("klantverhalen",t),children:r.jsxs(jn,{variant:"outline",className:"border-border/60 hover:border-accent/40 hover:bg-accent/5",children:[i("Meer klantervaringen","More customer stories")," ",r.jsx(re,{className:"ml-2 h-4 w-4"})]})})})]})]}),r.jsx("section",{className:"py-16 md:py-20 bg-background relative overflow-hidden",children:r.jsxs("div",{className:"container mx-auto max-w-6xl px-4",children:[r.jsxs("div",{className:"mb-14 text-center animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("Hoe het werkt","How it works")}),r.jsx("h2",{className:"mt-3 font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Binnen een week live, vanaf dag één waarde.","Live within a week, value from day one.")}),r.jsx("p",{className:"mx-auto mt-4 max-w-2xl text-base leading-relaxed text-muted-foreground",children:i("Vergeet implementatietrajecten van maanden. Binnen twee dagen ben je technisch up-and-running. Daarna werken we samen met je team, onboarden, de inrichting verfijnen, en bepalen waar de grootste tijdwinst zit in jullie close, rapportage en dagelijkse workflows.","Forget multi-month implementations. You're technically up and running within two days. After that we work with your team, onboarding, refining the setup, and identifying where the biggest time savings are in y
13666our close, reporting and daily workflows.")})]}),r.jsx("div",{className:"grid grid-cols-1 gap-5 md:grid-cols-3",children:l.map((d,c)=>r.jsxs("div",{className:"relative rounded-2xl border border-border/60 glass-card p-7 animate-fade-in-up",style:{animationDelay:`${c*80}ms`},children:[r.jsx("span",{className:"absolute right-5 top-5 font-mono text-xs text-accent/40",children:d.n}),r.jsx("h3",{className:"font-display text-lg font-bold text-foreground",children:d.title}),r.jsx("p",{className:"mt-3 text-sm leading-relaxed text-muted-foreground",children:d.text})]},d.n))}),r.jsxs("div",{className:"mx-auto mt-12 max-w-3xl rounded-2xl border border-accent/30 bg-accent/5 p-8 text-center animate-fade-in-up",children:[r.jsx("h3",{className:"font-display text-xl font-bold text-foreground md:text-2xl",children:i("Start met een gratis pilot van 30 dagen","Start with a free 30-day pilot")}),r.jsx("p",{className:"mx-auto mt-3 max-w-xl text-sm leading-relaxed text-muted-foreground",children:i("Op jullie eigen data, in jullie eigen omgeving. Wij implementeren op ons eigen risico, je betaalt alleen als je tevreden bent en door wilt gaan.","On your own data, in your own environment. We implement at our own risk — you only pay if you're satisfied and want to continue.")}),r.jsxs("div",{className:"mt-6 flex flex-col items-center justify-center gap-3 sm:flex-row",children:[r.jsx(_,{to:B("planDemo",t),children:r.jsxs("button",{className:"btn-primary text-sm py-3 px-7 inline-flex items-center",children:[i("Plan een demo","Book a demo")," ",r.jsx(re,{className:"ml-2 h-4 w-4"})]})}),r.jsx("a",{href:"https://login.smartbooks.ai/u/signup?state=hKFo2SBMMWtrMThHSDBhcm1mOWtKOS1odHp1cmR3VGNpUjJDcaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEt1U1I4NUNGV0R5VDdlb1Q5Z3dJMG10dUYwTzZreUdDo2NpZNkgcjBlWG5FcG5EZngwNzd2dXI1N3hsS0o3dTVGQnNsaTE",target:"_blank",rel:"noopener noreferrer",children:r.jsx(jn,{variant:"outline",className:"border-border/60 hover:border-accent/40 hover:bg-accent/5",children:i("Start gratis proefperiode","Start free trial")})})]})]})]})}),r.jsxs("section",{className:"relative overflow-hidden py-16 md:py-20 bg-muted/40 border-y border-border/40",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh opacity-50"}),r.jsxs("div",{className:"container relative z-10 mx-auto max-w-5xl px-4",children:[r.jsxs("div",{className:"mb-10 text-center animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Boek direct een demo met Michel","Book a demo with Michel right now")}),r.jsx("p",{className:"mx-auto mt-4 max-w-2xl text-base leading-relaxed text-muted-foreground",children:i("25 minuten, persoonlijke walkthrough op basis van jullie situatie. Vrijblijvend en zonder verkoopverhaal.","25 minutes, personal walkthrough based on your situation. No obligation and no sales pitch.")})]}),r.jsxs("div",{className:"grid grid-cols-1 gap-8 lg:grid-cols-[320px_1fr] items-start rounded-2xl border border-border/60 glass-card p-6 md:p-8 animate-fade-in-up",children:[r.jsxs("div",{className:"text-center lg:text-left",children:[r.jsx("div",{className:"mx-auto lg:mx-0 h-32 w-32 overflow-hidden rounded-2xl border border-accent/30 shadow-lg",children:r.jsx("img",{src:qo,alt:i("Michel van Wijngaarden, Managing Director Smartbooks","Michel van Wijngaarden, Managing Director Smartbooks"),className:"h-full w-full object-cover"})}),r.jsx("h3",{className:"mt-5 font-display text-xl font-bold text-foreground",children:"Michel van Wijngaarden"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:i("Managing Director Smartbooks","Managing Director Smartbooks")}),r.jsx("p",{className:"mt-4 text-sm leading-relaxed text-muted-foreground",children:i("Ik laat je in 25 minuten zien hoe Smartbooks past bij jullie processen, en wat een realistische business case voor jullie team is.","In 25 minutes I'll show you how Smartbooks fits your processes, and what a realistic business case looks like for your team.")}),r.jsxs("div",{className:"mt-5 flex flex-col items-center lg:items-start gap-2 text-xs text-muted-foreground",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-accent/15 text-accent",children:r.jsx(_e,{className:"h-2.5 w-2.5"})}),i("Vrijblijvend, geen verkoopverhaal","No obligation, no sales pitch")]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-accent/15 text-accent",children:r.jsx(_e,{className:"h-2.5 w-2.5"})}),i("Live gedemonstreerd op echte data","Demonstrated live on real data")]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-accent/15 text-accent",children:r.jsx(_e,{className:"h-2.5 w-2.5"})}),i("Inclusief realistische business case","Including a realistic business case")]})]})]}),r.jsx("div",{className:"rounded-xl overflow-hidden border border-border/40 bg-background/40 min-h-[640px]",children:r.jsx("iframe",{src:"https://meetings-eu1.hubspot.com/michel-van-wijngaarden?embed=true",title:i("Plan een demo met Michel van Wijngaarden","Book a demo with Michel van Wijngaarden"),className:"w-full h-[680px] border-0",loading:"lazy"})})]}),r.jsx("div",{className:"mt-8 text-center",children:r.jsxs(_,{to:B("liveWebinar",t),className:"inline-flex items-center text-sm text-muted-foreground hover:text-accent transition-colors",children:[i("Liever eerst meer zien? Bekijk het live webinar","Prefer to see more first? Watch the live webinar"),r.jsx(re,{className:"ml-2 h-4 w-4"})]})})]})]}),r.jsx(Ne,{})]})},p0=e=>{const n=document.getElementById(e);n&&n.scrollIntoView({behavior:"smooth",block:"start"})},LG=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl",i=qn(),a=[{quote:i("Welke versie was nu de laatste?","Which version was the latest one?"),body:i("De consolidatie-Excel circuleert tussen meerdere mensen. Iemand werkt in een lokale kopie. Een formule wordt per ongeluk overschreven. Aan het einde van de maand weet niemand zeker welke versie de juiste is.","The consolidation Excel circulates between multiple people. Someone works in a local copy. A formula gets overwritten by accident. At the end of the month no one knows for sure which version is the right one.")},{quote:i("Waarom matchen deze IC-posten niet?","Why don't these IC entries match?"),body:i("Eén entiteit boekt een doorbelasting, de andere boekt het op een andere periode of een ander bedrag. Het verschil staat in de geconsolideerde cijfers. Je zoekt het handmatig terug, post-voor-post, tot het rondloopt.","One entity books a charge, the other posts it in a different period or for a different amount. The difference shows up in the consolidated numbers. You trace it manually, entry by entry, until it ties out.")},{quote:i("Elke entiteit boekt net iets anders.","Every entity books things slightly differently."),body:i("De grootboeken van verschillende entiteiten zijn historisch gegroeid. Voor consolidatie moet alles naar een gestandaardiseerde indeling. Die mapping zit in een tabblad dat één persoon onderhoudt — en als die persoon weg is, ligt het stil.","The general ledgers of different entities have grown organically. For consolidation, everything needs to map to a 
13666standardised layout. That mapping lives in a tab maintained by one person — and when they're gone, it stalls.")},{quote:i("Klopt dit rapport eigenlijk wel?","Is this report actually correct?"),body:i("De cijfers gaan naar het MT en de directie. Ze worden gebruikt voor besluiten. Maar je weet dat er ergens in de keten een handmatige stap zit die fout kan gaan — en je hebt geen tijd om alles dubbel te controleren.","The numbers go to the management team and the board. They drive decisions. But you know there's a manual step somewhere in the chain that can go wrong — and you don't have time to double-check everything.")}],o=[{question:i("Wat is consolidatiesoftware?","What is consolidation software?"),answer:i("Consolidatiesoftware combineert de financiële cijfers van meerdere entiteiten binnen een bedrijfsgroep tot één geconsolideerd rapport. Dat houdt in: data uit verschillende boekhoudpakketten samenbrengen, intercompany-transacties elimineren, valuta omrekenen waar nodig, en de groepscijfers presenteren in een gestandaardiseerde rapportage. Smartbooks is consolidatiesoftware voor Nederlandse bedrijfsgroepen met meerdere entiteiten.","Consolidation software combines the financial numbers of multiple entities within a corporate group into one consolidated report. This means: bringing together data from different accounting packages, eliminating intercompany transactions, translating currencies where needed, and presenting group numbers in a standardised report. Smartbooks is consolidation software for multi-entity groups.")},{question:i("Wat is het verschil tussen consolidatiesoftware en boekhoudsoftware?","What's the difference between consolidation software and accounting software?"),answer:i("Boekhoudsoftware (zoals Exact Online, Twinfield en Xero) registreert transacties van één entiteit. Consolidatiesoftware werkt op een laag erboven: het haalt grootboekdata op uit één of meerdere boekhoudpakketten en combineert die tot groepscijfers, inclusief intercompany-eliminatie en valutaomrekening. Smartbooks vervangt het boekhoudpakket niet — het sluit erop aan.","Accounting software (such as Exact Online, Twinfield and Xero) records transactions for a single entity. Consolidation software operates one layer above: it pulls ledger data from one or more accounting packages and combines it into group numbers, including intercompany elimination and currency translation. Smartbooks does not replace your accounting package — it sits on top of it.")},{question:i("Welke boekhoudpakketten ondersteunt Smartbooks?","Which accounting packages does Smartbooks support?"),answer:i("Smartbooks koppelt out-of-the-box aan Exact Online, Exact Globe, AFAS, Twinfield, QuickBooks en Odoo. Voor andere bronsystemen is een koppeling beschikbaar via een connector. Entiteiten op verschillende pakketten kunnen binnen één consolidatie worden samengevoegd.","Smartbooks integrates out-of-the-box with Exact Online, Exact Globe, AFAS, Twinfield, QuickBooks and Odoo. Other source systems can be connected via a connector. Entities on different packages can be combined within a single consolidation.")},{question:i("Hoe werkt intercompany eliminatie in Smartbooks?","How does intercompany elimination work in Smartbooks?"),answer:i("Intercompany-transacties die in beide entiteiten op daarvoor bestemde rekeningen zijn geboekt, worden door Smartbooks automatisch tegen elkaar weggestreept. Verschillen — door timing, ontbrekende tegenboekingen of afwijkende bedragen — worden zichtbaar gemaakt als IC Difference in de geconsolideerde P&L of balans, met directe doorklik naar de onderliggende transacties. Wanneer rekeningen niet als intercompany zijn geboekt, kunnen ze via reclassificatie alsnog als zodanig behandeld worden zonder aanpassing in het bronsysteem.","Intercompany transactions booked to designated accounts in both entities are automatically eliminated by Smartbooks. Differences — caused by timing, missing counter-entries or mismatched amounts — surface as IC Difference in the consolidated P&L or balance sheet, with direct drill-down to the underlying transactions. When accounts have not been posted as intercompany, they can be treated as such through reclassification, without any change in the source system.")},{question:i("Hoe gaat Smartbooks om met buitenlandse entiteiten in vreemde valuta?","How does Smartbooks handle foreign entities in different currencies?"),answer:i("Smartbooks past automatisch valutaomrekening toe op trial balance-niveau. De winst-en-verliesre
13666kening wordt per periode omgerekend tegen de geldende koers; de balans wordt omgerekend tegen de slotkoers. Het verschil dat hierdoor ontstaat tussen de cumulatieve P&L en de balans wordt automatisch berekend en als koersverschil geboekt.","Smartbooks automatically applies currency translation at trial balance level. The P&L is translated per period at the prevailing rate; the balance sheet is translated at the closing rate. The difference between cumulative P&L and balance sheet that arises is calculated automatically and posted as a translation difference.")},{question:i("Hoeveel entiteiten kun je consolideren met Smartbooks?","How many entities can you consolidate with Smartbooks?"),answer:i("Smartbooks ondersteunt consolidatie van bedrijfsgroepen met meerdere entiteiten, zonder vast plafond. Klanten consolideren in de praktijk groepen variërend van enkele tot tientallen entiteiten, met optionele subconsolidaties voor extra structuur.","Smartbooks supports consolidation of multi-entity groups, without a fixed cap. In practice, customers consolidate groups ranging from a handful to dozens of entities, with optional sub-consolidations for additional structure.")},{question:i("Hoe lang duurt het om Smartbooks in te richten?","How long does it take to set up Smartbooks?"),answer:i("De gemiddelde implementatie duurt circa twee weken. Een gratis proefperiode is beschikbaar waarin de inrichting volledig wordt afgerond, zodat de software direct na de proef productie-klaar is.","The average implementation takes about two weeks. A free trial is available during which the full setup is completed, so the software is production-ready immediately after the trial.")},{question:i("Moeten we Excel helemaal loslaten als we Smartbooks gebruiken?","Do we have to abandon Excel entirely if we use Smartbooks?"),answer:i("Nee. Smartbooks vervangt Excel voor de gestandaardiseerde, repetitieve consolidatie- en rapportageprocessen. Voor ad-hoc analyses blijft Excel beschikbaar — onder andere via een Excel add-in die live data uit Smartbooks ophaalt.","No. Smartbooks replaces Excel for the standardised, repetitive consolidation and reporting processes. For ad-hoc analyses Excel remains available — including through an Excel add-in that pulls live data from Smartbooks.")}];return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("seo.lpConsolidatie.title"),description:e("seo.lpConsolidatie.description"),pathByLocale:je("lpConsolidatieSoftware")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden pt-10 pb-20 md:pt-16 md:pb-28",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-20"}),r.jsx("div",{className:"absolute inset-0 gradient-mesh opacity-30"}),r.jsx("div",{className:"container relative z-10 mx-auto max-w-7xl px-4",children:r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[3fr_2fr] gap-10 lg:gap-14 items-center",children:[r.jsxs("div",{children:[r.jsx("h1",{className:"font-display text-4xl font-bold leading-[1.1] tracking-tight text-foreground sm:text-5xl lg:text-6xl animate-fade-in-up",children:i("Consolideer je groepscijfers zonder het Excel-werk eromheen","Consolidate your group numbers without the Excel work around it")}),r.jsx("p",{className:"mt-6 max-w-xl text-base leading-relaxed text-muted-foreground md:text-lg animate-fade-in-up",style:{animationDelay:"50ms"},children:i("Smartbooks is consolidatiesoftware voor Nederlandse bedrijfsgroepen met meerdere entiteiten. Het platform automatiseert intercompany eliminatie, valutaomrekening en groepsrapportage, met directe koppelingen aan onder andere Exact Online, AFAS en Twinfield.","Smartbooks is consolidation software for multi-entity groups. The platform automates intercompany elimination, currency translation and group reporting, with direct integrations to Exact Online, AFAS, Twinfield and more.")}),r.jsxs("div",{className:"mt-8 flex flex-col sm:flex-row gap-3 animate-fade-in-up",style:{animationDelay:"100ms"},children:[r.jsxs("button",{type:"button",onClick:()=>p0("demo"),className:"btn-primary text-sm py-3 px-7 inline-flex items-center justify-center",children:[i("Plan een demo","Book a demo")," ",r.jsx(re,{className:"ml-2 h-4 w-4"})]}),r.jsx("button",{type:"button",onClick:()=>p0("hoe-het-werkt"),className:"inline-flex items-center justify-center rounded-md border border-accent/40 px-6 py-3 text-sm font-semibold text-accent hover:bg-accent/5 transition-colors",children:i("Bekijk hoe het werkt","See how it works")})]}),r.jsxs("p",{className:"mt-6 text-sm text-muted-foreground",children:[i("60+ klanten","60+ customers")," ",r.jsx("span",{className:"mx-2 text-accent",children:"·"})," ",i("multi-entity consolidatie","multi-entity consolidation")," ",r.jsx("span",{className:"mx-2 text-accent",children:"·"})," ",i("binnen 14 dagen live","live within 14 days")]})]}),r.jsx("div",{className:"relative w-full animate-fade-in-up",style:{animationDelay:"100ms"},children:r.jsx("div",{className:"rounded-2xl border border-border/60 bg-background/40 shadow-2xl overflow-hidden",children:r.jsx("img",{src:_l,alt:i("Geconsolideerd rapport in Smartbooks met meerdere entiteiten en intercompany-eliminatie","Consolidated report in Smartbooks with multiple entities and intercompany elimination"),className:"w-full h-auto"})})})]})})]}),r.jsx("section",{className:"py-20 md:py-28 bg-muted/40 border-y border-border/40 relative overflow-hidden",children:r.jsxs("div",{className:"container mx-auto max-w-6xl px-4",children:[r.jsxs("div",{className:"max-w-3xl mx-auto text-center mb-14 animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Consolideren in Excel werkt — tot het bedrijf groeit","Consolidating in Excel works — until the company grows")}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:i("Met twee of drie entiteiten houd je het overzicht. Met acht, vijftien of meer entiteiten verandert consolidatie van een maandelijkse routine in een meerdaags project — met versiebeheer, handmatige IC-afstemming en de constante vraag of de cijfers wel kloppen. Op een gegeven moment is het niet meer een kwestie van slimmer werken in 
13666Excel, maar van een ander fundament.","With two or three entities you can keep an overview. With eight, fifteen or more entities, consolidation turns from a monthly routine into a multi-day project — with version control, manual IC reconciliation and the constant question whether the numbers are right. At some point it's no longer about working smarter in Excel, but about a different foundation.")})]}),r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-5",children:a.map((s,l)=>r.jsxs("div",{className:"relative rounded-2xl border border-border/60 glass-card p-7 border-l-2 border-l-accent/60 animate-fade-in-up",style:{animationDelay:`${l*60}ms`},children:[r.jsxs("p",{className:"font-display italic text-base text-foreground leading-snug",children:['"',s.quote,'"']}),r.jsx("p",{className:"mt-4 text-sm leading-relaxed text-muted-foreground",children:s.body})]},s.quote))})]})}),r.jsxs("section",{id:"hoe-het-werkt",className:"py-20 md:py-28 relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-15"}),r.jsxs("div",{className:"container relative z-10 mx-auto max-w-6xl px-4",children:[r.jsxs("div",{className:"max-w-3xl mx-auto text-center mb-16 animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Eén platform voor de volledige consolidatie","One platform for the full consolidation")}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:i("Smartbooks koppelt direct aan je boekhoudpakket en consolideert de cijfers van al je entiteiten in één omgeving. Het volledige consolidatieproces — inlezen, structureren, intercompany-eliminatie, eindrapportage — verloopt binnen Smartbooks, zonder Excel als tussenstap.","Smartbooks connects directly to your accounting package and consolidates the numbers of all your entities in one environment. The full consolidation process — ingesting, structuring, intercompany elimination, final reporting — runs inside Smartbooks, with no Excel in between.")})]}),r.jsxs("div",{className:"space-y-20 md:space-y-28",children:[r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-10 lg:gap-14 items-center",children:[r.jsx("div",{className:"rounded-2xl border border-border/60 bg-background/40 shadow-xl overflow-hidden animate-fade-in-left",children:r.jsx("img",{src:JA,alt:i("Koppelingoverzicht met meerdere entiteiten en boekhoudpakketten","Connections overview with multiple entities and accounting packages"),className:"w-full h-auto"})}),r.jsxs("div",{className:"animate-fade-in-right",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("Direct gekoppeld aan je boekhoudpakket","Directly connected to your accounting package")}),r.jsx("h3",{className:"mt-3 font-display text-2xl md:text-3xl font-bold text-foreground",children:i("Eén bron, altijd actueel","One source, always up to date")}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:i("Smartbooks haalt grootboekdata rechtstreeks op uit Exact Online, Exact Globe, AFAS, Twinfield, QuickBooks en Odoo. Wijzigingen in het boekhoudpakket zijn binnen minuten zichtbaar in de geconsolideerde cijfers. Geen exports, geen tussenbestanden, geen versies die rondzwerven.","Smartbooks pulls ledger data straight from Exact Online, Exact Globe, AFAS, Twinfield, QuickBooks and Odoo. Changes in the accounting package show up in the consolidated numbers within minutes. No exports, no intermediate files, no stray versions.")}),r.jsx("p",{className:"mt-4 text-base leading-relaxed text-muted-foreground",children:i("Een entiteit toevoegen aan de consolidatie kost ongeveer 10 minuten.","Adding an entity to the consolidation takes around 10 minutes.")})]})]}),r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-10 lg:gap-14 items-center",children:[r.jsxs("div",{className:"order-2 lg:order-1 animate-fade-in-left",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("Subconsolidaties & valuta","Sub-consolidations & currencies")}),r.jsx("h3",{className:"mt-3 font-display text-2xl md:text-3xl font-bold text-foreground",children:i("Groepsstructuur en valuta zonder handwerk","Group structure and currencies without manual work")}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:i("Groepsstructuren zijn zelden plat. Smartbooks ondersteunt subconsolidaties zodat je entiteiten kunt groeperen per regio, bedrijfsonderdeel of juridische structuur — en op elk niveau kunt rapporteren. Eigenaarspercentages worden per entiteit ingesteld voor correcte consolidatie.","Group structures are rarely flat. Smartbooks supports sub-consolidations so you can group entities by region, business unit or legal structure — and report on every level. Ownership percentages are set per entity for correct consolidation.")}),r.jsx("p",{className:"mt-4 text-base leading-relaxed text-muted-foreground",children:i("Voor groepen met buitenlandse entiteiten past Smartbooks automatische valutaomrekening toe op trial balance-niveau. De P&L wordt per periode omgerekend tegen de geldende koers; de balans tegen de slotkoers. Het verschil tussen beide methodes wordt automatisch berekend en als koersverschil verwerkt — zodat de cumulatieve P&L op de balans aansluit.","For groups with foreign entities, Smartbooks automatically applies currency translation at trial balance level. The P&L is translated per period at the prevailing rate; the balance sheet at the closing rate. The difference between both methods is calculated automatically and posted as a translation difference — so cumulative P&L ties to the balance sheet.")})]}),r.jsx("div",{className:"order-1 lg:order-2 rounded-2xl border border-border/60 bg-background/40 shadow-xl overflow-hidden p-6 md:p-8 animate-fade-in-right",children:r.jsx(LC,{})})]}),r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-10 lg:gap-14 items-center",children:[r.jsx("div",{className:"rounded-2xl border border-border/60 bg-background/40 shadow-xl overflow-hidden p-6 md:p-8 animate-fade-in-left",children:r.jsx(WC,{})}),r.jsxs("div",{className:"animate-fade-in-right",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("Intercompany eliminatie","Intercompany elimination")}),r.jsx("h3",{className:"mt-3 font-display text-2xl md:text-3xl font-bold text-foreground",children:i("Wat is intercompany eliminatie?","What is intercompany elimination?")}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:i("Intercompany eliminatie is het verwijderen van intragroep-transacties uit de geconsolideerde cijfers, zodat de groepscijfers alleen externe activiteit weergeven. Zonder eliminatie staan onderlinge doorbelastingen, leningen en omzet dubbel of vertekend in de groepsrapportage.","Intercompany elimination is the removal of intra-group transactions from the consolidated numbers, so the group figures reflect only external activity. Without elimination, internal 
13666charges, loans and revenue appear duplicated or distorted in the group report.")}),r.jsx("h4",{className:"mt-6 font-display text-lg font-bold text-foreground",children:i("Hoe Smartbooks het doet","How Smartbooks handles it")}),r.jsx("p",{className:"mt-3 text-base leading-relaxed text-muted-foreground",children:i("Intercompany-transacties die op daarvoor bestemde rekeningen zijn geboekt worden automatisch tegen elkaar weggestreept. Verschillen tussen entiteiten — door timing, ontbrekende tegenboekingen of afwijkende bedragen — worden zichtbaar gemaakt als IC Difference, met directe doorklik naar de onderliggende transacties zodat je het verschil gericht kunt oplossen in plaats van zoeken.","Intercompany transactions booked to designated accounts are automatically eliminated against each other. Differences between entities — caused by timing, missing counter-entries or mismatched amounts — surface as IC Difference, with direct drill-down to the underlying transactions so you can resolve the gap instead of searching for it.")}),r.jsx("p",{className:"mt-4 text-base leading-relaxed text-muted-foreground",children:i("Voor entiteiten waarvan het rekeningschema niet IC-vriendelijk is opgezet, kun je via reclassificatie alsnog intercompany-rekeningen creëren — zonder iets in het bronsysteem te wijzigen.","For entities whose chart of accounts isn't IC-friendly, you can still create intercompany accounts through reclassification — without changing anything in the source system.")})]})]})]}),r.jsxs("p",{className:"mt-20 text-center text-sm text-muted-foreground",children:[i("Smartbooks doet meer dan alleen consolideren. Bekijk ook ","Smartbooks does more than just consolidation. Also check out "),r.jsx(_,{to:B("rapporteren",t),className:"text-accent underline-offset-4 hover:underline",children:i("Rapporteren","Reporting")}),", ",r.jsx(_,{to:B("budgetterenCashflow",t),className:"text-accent underline-offset-4 hover:underline",children:i("Plannen & Cashflow","Planning & Cashflow")})," ",i("en ","and "),r.jsx(_,{to:B("close",t),className:"text-accent underline-offset-4 hover:underline",children:i("Close","Close")}),"."]})]})]}),r.jsx("section",{className:"py-20 md:py-28 bg-muted/40 border-y border-border/40 relative overflow-hidden",children:r.jsxs("div",{className:"container mx-auto max-w-5xl px-4",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground md:text-4xl text-center mb-12 animate-fade-in-up",children:i("Hoe Intermax tien entiteiten consolideert in een fractie van de tijd","How Intermax consolidates ten entities in a fraction of the time")}),r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[260px_1fr] gap-10 items-start rounded-2xl border border-border/60 border-l-2 border-l-accent/60 glass-card p-8 md:p-10 animate-fade-in-up",children:[r.jsxs("div",{className:"text-center lg:text-left",children:[r.jsx("h3",{className:"font-display text-lg font-bold text-foreground",children:"Karel van den Bos"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Finance, Intermax"}),r.jsxs("div",{className:"mt-5 text-xs text-muted-foreground space-y-1",children:[r.jsx("p",{children:i("10 entiteiten · Exact Globe","10 entities · Exact Globe")}),r.jsx("p",{children:i("Finance team van 7 · Meerdere dagen tijdwinst per maand","Finance team of 7 · Multiple days saved per month")})]})]}),r.jsxs("div",{children:[r.jsx("blockquote",{className:"font-display italic text-lg md:text-xl leading-relaxed text-foreground",children:i('"Maak van de implementatie geen groot project, want het gaat heel snel. Tijdens de gratis proefmaand is de hele inrichting al afgerond en is alles klaar voor gebruik."',`"Don't make the implementation a big project, because it goes really fast. During the free trial month, the entire setup is already done and everything is ready to use."`)}),r.jsx("p",{className:"mt-4 text-sm text-muted-foreground",children:"— Karel van den Bos, Finance, Intermax"}),r.jsx("p",{className:"mt-6 text-base leading-relaxed text-muted-foreground",children:i("Tien entiteiten op Exact Globe, voorheen meerdere dagen Excel-werk per maand. Met Smartbooks gaat de consolidatie sneller en betrouwbaarder.","Ten entities on Exact Globe, previously multiple days of Excel work per month. With Smartbooks, consolidation is faster and more reliable.")}),r.jsxs(_,{to:Pt("intermax",t),className:"mt-6 inline-flex items-center text-sm text-accent hover:underline underline-offset-4",children:[i("Lees de volledige klantcase","Read the full customer case")," ",r.jsx(re,{className:"ml-1.5 h-4 w-4"})]})]})]})]})}),r.jsx(Ol,{items:o,eyebrow:"FAQ",title:i("Veelgestelde vragen over consolidatiesoftware","Frequently asked questions about consolidation software")}),r.jsxs("section",{id:"demo",className:"relative overflow-hidden py-16 md:py-20 bg-muted/40 border-y border-border/40",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh opacity-50"}),r.jsxs("div",{className:"container relative z-10 mx-auto max-w-5xl px-4",children:[r.jsxs("div",{className:"mb-10 text-center animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Boek direct een demo met Michel","Book a demo with Michel right now")}),r.jsx("p",{className:"mx-auto mt-4 max-w-2xl text-base leading-relaxed text-muted-foreground",children:i("25 minuten, persoonlijke walkthrough waarin 
13666we je consolidatie live in Smartbooks doorlopen. Vrijblijvend en zonder verkoopverhaal.","25 minutes, personal walkthrough in which we run your consolidation live in Smartbooks. No obligations, no sales pitch.")})]}),r.jsxs("div",{className:"grid grid-cols-1 gap-8 lg:grid-cols-[320px_1fr] items-start rounded-2xl border border-border/60 glass-card p-6 md:p-8 animate-fade-in-up",children:[r.jsxs("div",{className:"text-center lg:text-left",children:[r.jsx("div",{className:"mx-auto lg:mx-0 h-32 w-32 overflow-hidden rounded-2xl border border-accent/30 shadow-lg",children:r.jsx("img",{src:qo,alt:i("Michel van Wijngaarden, Managing Director Smartbooks","Michel van Wijngaarden, Managing Director Smartbooks"),className:"h-full w-full object-cover"})}),r.jsx("h3",{className:"mt-5 font-display text-xl font-bold text-foreground",children:"Michel van Wijngaarden"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:i("Managing Director Smartbooks","Managing Director Smartbooks")}),r.jsx("p",{className:"mt-4 text-sm leading-relaxed text-muted-foreground",children:i("Ik laat je in 25 minuten zien hoe Smartbooks je consolidatieproces versnelt, en wat een realistische business case voor jullie groep is.","In 25 minutes I'll show you how Smartbooks speeds up your consolidation process, and what a realistic business case looks like for your group.")}),r.jsxs("div",{className:"mt-5 flex flex-col items-center lg:items-start gap-2 text-xs text-muted-foreground",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-accent/15 text-accent",children:r.jsx(_e,{className:"h-2.5 w-2.5"})}),i("Vrijblijvend, geen verkoopverhaal","No obligation, no sales pitch")]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-accent/15 text-accent",children:r.jsx(_e,{className:"h-2.5 w-2.5"})}),i("Live gedemonstreerd op echte data","Demonstrated live on real data")]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-accent/15 text-accent",children:r.jsx(_e,{className:"h-2.5 w-2.5"})}),i("Inclusief realistische business case","Including a realistic business case")]})]})]}),r.jsx("div",{className:"rounded-xl overflow-hidden border border-border/40 bg-background/40 min-h-[640px]",children:r.jsx("iframe",{src:"https://meetings-eu1.hubspot.com/michel-van-wijngaarden?embed=true",title:i("Plan een demo met Michel van Wijngaarden","Book a demo with Michel van Wijngaarden"),className:"w-full h-[680px] border-0",loading:"lazy"})})]}),r.jsx("div",{className:"mt-8 text-center",children:r.jsxs(_,{to:B("liveWebinar",t),className:"inline-flex items-center text-sm text-muted-foreground hover:text-accent transition-colors",children:[i("Liever eerst meer zien? Bekijk het live webinar","Prefer to see more first? Watch the live webinar"),r.jsx(re,{className:"ml-2 h-4 w-4"})]})})]})]}),r.jsx(Ne,{})]})},WG="/assets/rapporteren-dashboard-operationeel-OOvhC0_n.png",f0=e=>{const n=document.getElementById(e);n&&n.scrollIntoView({behavior:"smooth",block:"start"})},VG=[{quote:"Elke maand dezelfde rapporten opnieuw opbouwen.",body:"De cijfers komen uit de boekhouding, gaan door een export naar Excel en worden daar handmatig in een rapportagemodel geknipt en geplakt. Elke maand opnieuw, voor elke entiteit."},{quote:"Eén #REF! en het hele model klopt niet meer.",body:"Een fout in één cel werkt door in twaalf tabbladen. Je merkt het pas als iemand in het MT een cijfer niet kan plaatsen."},{quote:"Directie vraagt een nieuw inzicht en dat kost een halve dag.",body:"Een extra uitsplitsing per kostenplaats of project betekent het model verbouwen, in plaats van een rapportage aanpassen."},{quote:"De collega die het model bouwde, is weg.",body:"Niemand durft het Excel-model nog aan te passen, omdat niemand precies weet hoe het rekent."}],b0=[{question:"Wat is financiële rapportage software?",answer:"Financiële rapportage software haalt de cijfers rechtstreeks uit je boekhouding en zet ze om in managementrapportages en dashboards, zonder exports en handmatige bewerkingen in Excel. Je bepaalt zelf de rapportagestructuur, de dimensies en de formules, en elk cijfer is terug te volgen naar de onderliggende boeking en factuur. Smartbooks is rapportagesoftware voor controllers en CFO's, met k
13666oppelingen aan boekhoudpakketten als Exact Online, Exact Globe, AFAS, Twinfield, QuickBooks en Odoo."},{question:"Wat is het verschil met Excel of Power BI?",answer:"Excel is sterk voor ad-hoc analyse, maar zwak als vaste bron: exports verouderen, formules breken en versies gaan rondzwerven. Smartbooks neemt de gestandaardiseerde, terugkerende rapportages over en houdt Excel beschikbaar via een add-in met live data. Power BI is een visualisatielaag zonder financiële logica als consolidatie, intercompany-eliminatie en drill-down naar de boeking; Smartbooks levert die logica zelf en synchroniseert desgewenst met Power BI."},{question:"Met welke boekhoudpakketten werkt het?",answer:"Smartbooks koppelt out-of-the-box aan Exact Online, Exact Globe, AFAS, Twinfield, QuickBooks en Odoo. Voor andere bronsystemen is een koppeling beschikbaar via een connector. Entiteiten op verschillende pakketten kunnen binnen één rapportage en één consolidatie worden samengevoegd."},{question:"Wat kost het?",answer:"De prijs hangt af van je plan en het aantal entiteiten: Finance Professional voor uitgebreid automatisch rapporteren en Finance Leader voor geavanceerd rapporteren, budgetteren en consolideren. Op de prijzenpagina bereken je met het aantal holdings en werkmaatschappijen direct een prijsindicatie, inclusief de eenmalige begeleiding bij de start. De definitieve prijs volgt uit een korte intake."}],KG=()=>r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:"Financiële rapportage software voor het MKB | Smartbooks",description:"Rapportagesoftware voor controllers en CFO's: managementrapportages en dashboards rechtstreeks uit je boekhouding, met drill-down tot op de boeking en rapporteren in Excel.",bareTitle:!0,locale:"nl",alternateLocales:["nl"],pathByLocale:je("lpRapportageSoftware"),jsonLd:lh(b0)}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden pt-10 pb-20 md:pt-16 md:pb-28",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-20"}),r.jsx("div",{className:"absolute inset-0 gradient-mesh opacity-30"}),r.jsx("div",{className:"container relative z-10 mx-auto max-w-7xl px-4",children:r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[3fr_2fr] gap-10 lg:gap-14 items-center",children:[r.jsxs("div",{children:[r.jsx("h1",{className:"font-display text-4xl font-bold leading-[1.1] tracking-tight text-foreground sm:text-5xl lg:text-6xl animate-fade-in-up",children:"Financiële rapportage software die je maandrapportage automatiseert"}),r.jsx("p",{className:"mt-6 max-w-xl text-base leading-relaxed text-muted-foreground md:text-lg animate-fade-in-up",style:{animationDelay:"50ms"},children:"Smartbooks is financiële rapportage software voor controllers en CFO's in het MKB. Managementrapportages en dashboards komen rechtstreeks uit je boekhouding, met drill-down tot op de transactie en de factuur eronder, en met directe koppelingen aan onder andere Exact Online, AFAS en Twinfield."}),r.jsxs("div",{className:"mt-8 flex flex-col sm:flex-row gap-3 animate-fade-in-up",style:{animationDelay:"100ms"},children:[r.jsxs("button",{type:"button",onClick:()=>f0("demo"),className:"btn-primary text-sm py-3 px-7 inline-flex items-center justify-center",children:["Plan een demo ",r.jsx(re,{className:"ml-2 h-4 w-4"})]}),r.jsx("button",{type:"button",onClick:()=>f0("hoe-het-werkt"),className:"inline-flex items-center justify-center rounded-md border border-accent/40 px-6 py-3 text-sm font-semibold text-accent hover:bg-accent/5 transition-colors",children:"Bekijk hoe het werkt"})]}),r.jsxs("p",{className:"mt-6 text-sm text-muted-foreground",children:["60+ klanten ",r.jsx("span",{className:"mx-2 text-accent",children:"·"})," managementrapportages en dashboards ",r.jsx("span",{className:"mx-2 text-accent",children:"·"})," binnen 14 dagen live"]})]}),r.jsx("div",{className:"relative w-full animate-fade-in-up",style:{animationDelay:"100ms"},children:r.jsx("div",{className:"rounded-2xl border border-border/60 bg-background/40 shadow-2xl overflow-hidden",children:r.jsx("img",{src:qC,alt:"Managementrapportage in Smartbooks met financiële cijfers en dashboards",loading:"eager",decoding:"async",className:"w-full h-auto"})})})]})})]}),r.jsx(Wo,{compact:!0,slim:!0}),r.jsx("section",{className:"py-20 md:py-28 bg-muted/40 border-y border-border/40 relative overflow-hidden",children:r.jsxs("div",{className:"container mx-auto max-w-6xl px-4",children:[r.jsxs("div",{className:"max-w-3xl mx-auto text-center mb-14 animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground md:text-4xl",children:"De maandrapportage in Excel: knippen, plakken en hopen dat het klopt"}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:"Het rapportagemodel begint klein en groeit mee met de organisatie: meer entiteiten, meer kostenplaatsen, meer tabbladen. Het werkt, maar het kost elke maand dezelfde dagen handwerk — en het is precies in die handmatige stappen dat fouten ontstaan."})]}),r.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-
136665",children:VG.map((e,n)=>r.jsxs("div",{className:"relative rounded-2xl border border-border/60 glass-card p-7 border-l-2 border-l-accent/60 animate-fade-in-up",style:{animationDelay:`${n*60}ms`},children:[r.jsxs("p",{className:"font-display italic text-base text-foreground leading-snug",children:['"',e.quote,'"']}),r.jsx("p",{className:"mt-4 text-sm leading-relaxed text-muted-foreground",children:e.body})]},e.quote))})]})}),r.jsxs("section",{id:"hoe-het-werkt",className:"py-20 md:py-28 relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-15"}),r.jsxs("div",{className:"container relative z-10 mx-auto max-w-6xl px-4",children:[r.jsxs("div",{className:"max-w-3xl mx-auto text-center mb-16 animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground md:text-4xl",children:"Eén platform voor je volledige financiële rapportage"}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:"Smartbooks koppelt direct aan je boekhoudpakket en bouwt je rapportages op de bron. Inlezen, structureren, rapporteren en analyseren gebeurt in één omgeving, zonder Excel als tussenstap."})]}),r.jsxs("div",{className:"space-y-20 md:space-y-28",children:[r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-10 lg:gap-14 items-center",children:[r.jsx("div",{className:"rounded-2xl border border-border/60 bg-background/40 shadow-xl overflow-hidden animate-fade-in-left",children:r.jsx("img",{src:WG,alt:"Dashboard in Smartbooks met financiële en operationele cijfers naast elkaar",loading:"lazy",className:"w-full h-auto"})}),r.jsxs("div",{className:"animate-fade-in-right",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:"Direct gekoppeld aan je boekhoudpakket"}),r.jsx("h3",{className:"mt-3 font-display text-2xl md:text-3xl font-bold text-foreground",children:"Rapportages en dashboards op één bron"}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:"Smartbooks haalt grootboekdata rechtstreeks op uit Exact Online, Exact Globe, AFAS, Twinfield, QuickBooks en Odoo. Je bepaalt je eigen rapportagestructuur en past die op elk moment aan, rapporteert per kostenplaats, project of kostendrager, en voegt nieuwe rapportages en KPI's toe wanneer je ze nodig hebt."}),r.jsx("p",{className:"mt-4 text-base leading-relaxed text-muted-foreground",children:"In de dashboards staan financiële en operationele cijfers naast elkaar, met KPI-tiles die vergelijken met budget, vorig jaar of de vorige periode. Zo leest het MT één beeld, in plaats van een stapel PDF's."})]})]}),r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-10 lg:gap-14 items-center",children:[r.jsxs("div",{className:"order-2 lg:order-1 animate-fade-in-left",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:"Drill-down"}),r.jsx("h3",{className:"mt-3 font-display text-2xl md:text-3xl font-bold text-foreground",children:"Van rapportregel tot PDF-factuur"}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:"Zie je een afwijking? Klik door van het rapport naar het grootboek, de transactie en de originele factuur. De hele analyse gebeurt binnen Smartbooks, zonder terug te hoeven naar je boekhoudsysteem — op entiteitsniveau én geconsolideerd."}),r.jsx("p",{className:"mt-4 text-base leading-relaxed text-muted-foreground",children:"Met het rollenmodel (Viewer, Contributor, Admin) en restricties per kostenplaats en rapportage bepaal je precies wie welke informatie ziet."})]}),r.jsx("div",{className:"order-1 lg:order-2 rounded-2xl border border-border/60 bg-background/40 shadow-xl overflow-hidden p-6 md:p-8 animate-fade-in-right",children:r.jsx(VC,{})})]}),r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-10 lg:gap-14 items-center",children:[r.jsx("div",{className:"rounded-2xl border border-border/60 bg-background/40 shadow-xl overflow-hidden animate-fade-in-left",children:r.jsx("img",{src:_C,alt:"Live Smartbooks-data in Excel via de Excel add-in",loading:"lazy",className:"w-full h-auto"})}),r.jsxs("div",{className:"animate-fade-in-right",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:"Excel, consolidatie en AI-controller"}),r.jsx("h3",{className:"mt-3 font-display text-2xl md:text-3xl font-bold text-foreground",children:"Excel hoeft niet weg. Alleen niet meer als bron."}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:"Standaardprocessen draaien in Smartbooks, je ad-hoc werk blijft in Excel — met live Smartbooks-data via de Excel add-in, altijd te verversen. Zo twijfel je nooit meer of je cijfers actueel zijn."}),r.jsxs("p",{className:"mt-4 text-base leading-relaxed text-muted-foreground",children:["Heeft je groep meerdere entiteiten, dan rapporteer je geconsolideerd in hetzelfde systeem: intercompany-eliminatie, valutaomrekening en subconsolidaties horen bij de"," ",r.jsx(_,{to:B("lpConsolidatieSoftware","nl"),className:"text-accent underline-offset-4 hover:underline",children:"consolidatie software"})," ","van Smartbooks. En met de AI-controller stel je vragen over je cijfers op live data, met antwoorden die herleidbaar zijn naar de onderliggende boekingen."]})]})]})]}),r.jsxs("p",{className:"mt-20 text-center text-sm text-muted-foreground",children:["Meer over de functionaliteit vind je op"," ",r.jsx(_,{to:B("rapporteren","nl"),className:"text-accent underline-offset-4 hover:underline",children:"Rapporteren"}),", ",r.jsx(_,{to:B("budgetterenCashflow","nl"),className:"text-accent underline-offset-4 hover:underline",children:"Plannen & Cashflow"})," ","en"," ",r.jsx(_,{to:B("close","nl"),className:"text-accent underline-offset-4 hover:underline",children:"Close"}),"."]})]})]}),r.jsx("section",{className:"py-20 md:py-28 bg-muted/40 border-y border-border/40 relative overflow-hidden",children:r.jsxs("div",{className:"container mx-auto max-w-5xl px-4",children:[r.jsxs("div",{className:"max-w-3xl mx-auto text-center mb-12 animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground md:text-4xl",children:"Voor wie is deze rapportage software?"}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:"Smartbooks is gebouwd voor de mensen die de cijfers maken en de mensen die erop beslissen."})]}),r.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[r.jsxs("div",{className:"rounded-2xl border border-border/60 glass-card p-8 animate-fade-in-up",children:[r.jsx("h3",{className:"font-display text-xl font-bold text-foreground",children:"Financial en business controllers"}),r.jsx("p",{className:"mt-4 text-base leading-relaxed text-muted-foreground",children:"Minder tijd in het opbouwen van rapportages, meer tijd voor analyse. Rapportages die rekenen zoals jij ze opzet, met drill-down tot op de boeking als iemand doorvraagt."}),r.jsxs(_,{to:na("controller","nl"),className:"mt-5 inline-flex items-center text-sm text-accent hover:underline underline-offset-4",children:["Smartbooks voor de controller ",r.jsx(re,{className:"ml-1.5 h-4 w-4"})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 glass-card p-8 animate-fade-in-up",children:[r.jsx("h3",{className:"font-display text-xl font-bold text-foreground",children:"CFO's en directie"}),r.jsx("p",{className:"mt-4 text-base leading-relaxed text-muted-foreground",children:"Eén actueel beeld van de groep, financieel en operationeel, zonder te wachten op een Excel-bestand. Dashboards per doelgroep: directie, MT en operationeel."}),r.jsxs(_,{to:na("cfo","nl"),className:"mt-5 inline-flex items-center text-sm text-accent hover:underline underline-offset-4",children:["Smartbooks voor de CFO ",r.jsx(re,{className:"ml-1.5 h-4 w-4"})]})]})]}),r.jsxs("div",{className:"mt-12 rounded-2xl border border-border/60 border-l-2 border-l-accent/60 glass-card p-8 md:p-10 animate-fade-in-up",children:[r.jsx("blockquote",{className:"font-display italic text-lg md:text-xl leading-relaxed text-foreground",children:'"Smartbooks heeft onze maandafsluiting getransformeerd. Wat vroeger drie dagen duurde met Excel, doen we nu in een halve dag, met meer betrouwbaarheid en inzicht."'}),r.jsx("p",{className:"mt-4 text-sm text-muted-foreground",children:"— Mark Bakker, Business Controller · Tiqets"})]})]})}),r.jsx(Ol,{items:b0,eyebrow:"FAQ",title:"Veelgestelde vragen over rapportagesoftware"}),r.jsxs("section",{id:"demo",className:"relative overflow-hidden py-16 md:py-20 bg-muted/40 border-y border-border/40",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh opacity-50"}),r.jsxs("div",{className:"container relative z-10 mx-auto max-w-5xl px-4",children:[r.jsxs("div",{className:"mb-10 text-center animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground md:text-4xl",children:"Boek direct een demo met Michel"}),r.jsx("p",{className:"mx-auto mt-4 max-w-2xl text-base leading-relaxed text-muted-foreground",children:"25 minuten, persoonlijke walkthrough waarin 
13666we je maandrapportage live in Smartbooks doorlopen. Vrijblijvend en zonder verkoopverhaal."})]}),r.jsxs("div",{className:"grid grid-cols-1 gap-8 lg:grid-cols-[320px_1fr] items-start rounded-2xl border border-border/60 glass-card p-6 md:p-8 animate-fade-in-up",children:[r.jsxs("div",{className:"text-center lg:text-left",children:[r.jsx("div",{className:"mx-auto lg:mx-0 h-32 w-32 overflow-hidden rounded-2xl border border-accent/30 shadow-lg",children:r.jsx("img",{src:qo,alt:"Michel van Wijngaarden, Managing Director Smartbooks",className:"h-full w-full object-cover",loading:"lazy"})}),r.jsx("h3",{className:"mt-5 font-display text-xl font-bold text-foreground",children:"Michel van Wijngaarden"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Managing Director Smartbooks"}),r.jsx("p",{className:"mt-4 text-sm leading-relaxed text-muted-foreground",children:"Ik laat je in 25 minuten zien hoe Smartbooks je rapportageproces versnelt, en wat een realistische business case voor jullie organisatie is."}),r.jsxs("div",{className:"mt-5 flex flex-col items-center lg:items-start gap-2 text-xs text-muted-foreground",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-accent/15 text-accent",children:r.jsx(_e,{className:"h-2.5 w-2.5"})}),"Vrijblijvend, geen verkoopverhaal"]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-accent/15 text-accent",children:r.jsx(_e,{className:"h-2.5 w-2.5"})}),"Live gedemonstreerd op echte data"]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-accent/15 text-accent",children:r.jsx(_e,{className:"h-2.5 w-2.5"})}),"Inclusief realistische business case"]})]})]}),r.jsx("div",{className:"rounded-xl overflow-hidden border border-border/40 bg-background/40 min-h-[640px]",children:r.jsx("iframe",{src:"https://meetings-eu1.hubspot.com/michel-van-wijngaarden?embed=true",title:"Plan een demo met Michel van Wijngaarden",className:"w-full h-[680px] border-0",loading:"lazy"})})]}),r.jsx("div",{className:"mt-8 text-center",children:r.jsxs(_,{to:B("prijzen","nl"),className:"inline-flex items-center text-sm text-muted-foreground hover:text-accent transition-colors",children:["Eerst weten wat het kost? Bekijk de prijsindicatie",r.jsx(re,{className:"ml-2 h-4 w-4"})]})})]})]}),r.jsx(Ne,{})]}),qG=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl",i=qn(),a=[{icon:J2,title:i("Je bent een zoekmachine geworden","You've become a search engine"),text:i('"Waar staat de marge van Q2 ook alweer?", "kun je die afwijking nog eens uitsplitsen?", "heb jij die slide nog?". Vragen die jij in 30 seconden weet, maar 20 minuten kosten om netjes te beantwoorden. Tien keer per dag.',`"Where's the Q2 margin again?", "can you break down that variance?", "do you still have that slide?". Questions you know in 30 seconds but take 20 minutes to answer properly. Ten times a day.`)},{icon:xD,title:i("Dezelfde analyse, een nieuwe maand","The same analysis, a new month"),text:i("Variantieanalyse, debiteurenoverzicht, marge per BU. Elke maand opnieuw dezelfde stappen, dezelfde Excel-trucs, dezelfde controles. Je weet dat het slimmer kan — maar wie heeft de tijd om dat in te richten?","Variance analysis, debtor overview, margin per BU. Every month the same steps, the same Excel tricks, the same checks. You know it could be smarter — but who has time to set that up?")},{icon:tS,title:i("De kennis loopt om vijf uur de deur uit","The knowledge walks out the door at five"),text:i("Hoe die ene rapportage werkt, waarom die boeking zo gaat, welke regels gelden bij consolidatie — het zit in de hoofden van twee, drie mensen. Eén vakantie of vertrek, en het team staat stil.","How that one report works, why an entry is booked a certain way, which rules apply for consolidation — it lives in the heads of two or three people. One vacation or departure and the team grinds to a halt.")}],o=[{value:"47%",label:i("lagere kosten","lower costs"),sub:i("in de finance functie","in the finance function")},{value:"41%",label:i("sneller","faster"),sub:i("rapporteren","reporting")},{value:"44%",label:i("vaker gezien als","more often seen as"),sub:i("strategisch partner","strategic partner")}],s=[{icon:Q2,title:i("Ad-hoc vragen in natuurlijke taal","Ad-hoc questions in natural language"),text:i("Vraag 'wat is de marge per BU vs. budget?' of 'laat me de top-10 debiteuren zien' — en krijg direct antwoord, onderbouwd op jouw eigen cijfers in Smartbooks.","Ask 'what's the margin per BU vs. budget?' or 'show me the top-10 debtors' — and get an instant answer, grounded in your own numbers in Smartbooks.")},{icon:To,title:i("Support agent met documentatie","Support agent with documentation"),text:i("Een ingebouwde support agent met volledige toegang tot de Smartbooks-documentatie. 24/7 beschikbaar om je team op weg te helpen — zonder te wachten op een ticket.","A built-in supp
13666ort agent with full access to the Smartbooks documentation. Available 24/7 to help your team — without waiting for a ticket.")},{icon:$i,title:i("Beschikbaar vanuit elke module","Available from every module"),text:i("Inzetbaar vanuit rapportage, consolidatie, planning en close. De agent kent de context waarin je werkt — geen copy-paste tussen tools, geen losse logins.","Available from reporting, consolidation, planning and close. The agent knows the context you're working in — no copy-paste between tools, no separate logins.")},{icon:yr,title:i("Antwoorden op jouw data","Answers from your own data"),text:i("Geen generieke chatbot, maar een agent die werkt binnen jouw security-model en grootboek. Antwoorden komen uit jouw eigen cijfers — niet uit een algemeen taalmodel.","Not a generic chatbot, but an agent that works within your security model and ledger. Answers come from your own numbers — not from a general language model.")}],l=[{n:i("Stap 1","Step 1"),title:i("Koppeling en inrichting","Connection and setup"),text:i("Je boekhouding is gekoppeld aan Smartbooks. De AI-agent wordt getraind op jullie grootboek, dimensies en rapportagestructuur — zodat antwoorden altijd kloppen met jullie werkelijkheid. Wij doen het werk, jij ziet direct je eigen cijfers terug in de chat.","Your accounting is connected to Smartbooks. The AI agent is trained on your ledger, dimensions and reporting structure — so answers always match your reality. We do the work, you see your own numbers in the chat right away.")},{n:i("Stap 2","Step 2"),title:i("Training","Training"),text:i("Samen met je team gaan we door de kern-workflows: ad-hoc vragen stellen, analyses laten uitvoeren, presentaties genereren en de gespecialiseerde agents inzetten. Iedereen leert werken met wat voor hun rol relevant is — training op jouw setup, niet op een generieke handleiding.","Together with your team we walk through the core workflows: asking ad-hoc questions, running analyses, generating presentations and using the specialised agents. Everyone learns what's relevant for their role — training on your setup, not on a generic manual.")},{n:i("Stap 3","Step 3"),title:i("Finetuning","Fine-tuning"),text:i("De agent draait, je team werkt ermee. Nu finetunen we samen: prompts aanscherpen, custom workflows toevoegen, presentatietemplates uitlijnen op jullie huisstijl. Jullie ritme bepaalt het tempo.","The agent is running, your team is using it. Now we fine-tune together: sharpening prompts, adding custom workflows, aligning presentation templates with your brand. Your rhythm sets the pace.")}];return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("seo.lpVirtueleController.title"),description:e("seo.lpVirtueleController.description"),pathByLocale:je("lpVirtueleController")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden pt-2 pb-10 md:pt-4 md:pb-12",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-20"}),r.jsx("div",{className:"absolute inset-0 gradient-mesh opacity-30"}),r.jsx("div",{className:"container relative z-10 mx-auto max-w-7xl px-4",children:r.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-10 lg:gap-12 items-center",children:[r.jsxs("div",{className:"text-center lg:text-left",children:[r.jsx("div",{className:"animate-fade-in-up",children:r.jsx("span",{className:"inline-block rounded-full border border-accent/30 bg-accent/5 px-4 py-1.5 text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("AI-controller voor finance teams","AI controller for finance teams")})}),r.jsxs("h1",{className:"mt-6 font-display text-4xl font-bold leading-[1.1] tracking-tight text-foreground sm:text-5xl lg:text-5xl xl:text-6xl animate-fade-in-up",style:{animationDelay:"50ms"},children:[i("Je AI-controller, ","Your AI controller, "),r.jsx("span",{className:"text-gradient-multi",children:i("24/7 aan het werk","24/7 at work")})]}),r.jsx("p",{className:"mt-6 max-w-xl text-base leading-relaxed text-muted-foreground md:text-lg mx-auto lg:mx-0 animate-fade-in-up",style:{animationDelay:"100ms"},children:i("Een AI-agent die jouw financiële data kent, vragen beantwoordt in natuurlijke taal, presentaties bouwt en analyses uitvoert — direct vanuit elke module in Smartbooks.","An AI agent that knows your financial data, answers questions in natural language, builds presentations and runs analyses — directly from every module in Smartbooks.")}
13666),r.jsxs("div",{className:"mt-8 flex flex-col items-center lg:items-start justify-center lg:justify-start gap-3 sm:flex-row animate-fade-in-up",style:{animationDelay:"150ms"},children:[r.jsx(_,{to:B("planDemo",t),children:r.jsxs("button",{className:"btn-primary text-sm py-3 px-7 inline-flex items-center",children:[i("Plan een demo","Book a demo")," ",r.jsx(re,{className:"ml-2 h-4 w-4"})]})}),r.jsx(_,{to:B("liveWebinar",t),children:r.jsx(jn,{size:"lg",variant:"outline",className:"border-border/60 hover:border-accent/40 hover:bg-accent/5",children:i("Bekijk het live webinar","Watch the live webinar")})})]})]}),r.jsx("div",{className:"relative w-full flex items-center justify-center animate-fade-in-up",style:{animationDelay:"100ms"},children:r.jsx(OC,{})})]})})]}),r.jsx(Wo,{compact:!0}),r.jsx(av,{}),r.jsx("section",{className:"py-16 md:py-20 bg-muted/40 relative overflow-hidden border-y border-border/40",children:r.jsxs("div",{className:"container mx-auto max-w-6xl px-4",children:[r.jsxs("div",{className:"mb-14 text-center animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("Herken je dit?","Sound familiar?")}),r.jsx("h2",{className:"mt-3 font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Je werkt voor het systeem, in plaats van andersom","You work for the system, instead of the other way around")}),r.jsx("p",{className:"mx-auto mt-4 max-w-2xl text-base leading-relaxed text-muted-foreground",children:i("Finance teams hebben de data, de tools en de kennis. Maar de meeste tijd gaat niet naar duiden — die gaat naar zoeken, herhalen en uitleggen.","Finance teams have the data, the tools and the knowledge. But most of the time doesn't go into interpretation — it goes into searching, repeating and explaining.")})]}),r.jsx("div",{className:"grid grid-cols-1 gap-5 md:grid-cols-3",children:a.map((d,c)=>r.jsxs("div",{className:"group relative overflow-hidden rounded-2xl border border-border/60 glass-card p-7 transition-colors hover:border-accent/30 animate-fade-in-up",style:{animationDelay:`${c*80}ms`},children:[r.jsx("div",{className:"mb-5 flex h-11 w-11 items-center justify-center rounded-xl border border-accent/20 bg-accent/10",children:r.jsx(d.icon,{className:"h-5 w-5 text-accent"})}),r.jsx("h3",{className:"font-display text-lg font-bold text-foreground",children:d.title}),r.jsx("p",{className:"mt-3 text-sm leading-relaxed text-muted-foreground",children:d.text})]},d.title))}),r.jsxs("figure",{className:"mx-auto mt-10 max-w-3xl rounded-2xl border border-border/60 glass-card p-7 text-center animate-fade-in-up",children:[r.jsx(wi,{className:"mx-auto mb-3 h-5 w-5 text-accent/60"}),r.jsx("blockquote",{className:"font-display text-base leading-relaxed text-foreground md:text-lg",children:i('"Smartbooks heeft ons geholpen om in een fractie van de tijd betrouwbare rapportages op te leveren. Wat eerst dagen werk was, doen we nu in uren — en met meer vertrouwen in de cijfers."','"Smartbooks helped us deliver reliable reports in a fraction of the time. What used to take days now takes hours — and with more confidence in the numbers."')}),r.jsx("figcaption",{className:"mt-4 text-sm text-muted-foreground",children:"Karel van den Bos, CFO, Intermax"}),r.jsx("div",{className:"mt-5",children:r.jsx(_,{to:B("klantverhalen",t),children:r.jsxs(jn,{variant:"outline",size:"sm",className:"border-border/60 hover:border-accent/40 hover:bg-accent/5",children:[i("Lees de klantcase","Read the customer case")," ",r.jsx(re,{className:"ml-2 h-4 w-4"})]})})})]})]})}),r.jsxs("section",{className:"relative overflow-hidden py-16 md:py-20",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-20"}),r.jsxs("div",{className:"container relative z-10 mx-auto max-w-5xl px-4",children:[r.jsxs("div",{className:"max-w-3xl animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Wat er op het spel staat","What's at stake")}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:i("Zolang dit niet verandert, blijft je team brandjes blussen in plaats van vooruit te kijken. Blijven analyses afhankelijk van wie er net beschikbaar is. En blijft finance reageren in plaats van adviseren.","As long as this doesn't change, your team keeps fighting fires instead of looking ahead. Analyses keep depending on who's available. And finance keeps reacting instead of advising.")}),r.jsx("p",{className:"mt-5 font-display text-base font-bold text-foreground md:text-lg",children:i("De vraag is niet óf AI je werk verandert — maar wanneer je 'm zelf inzet.","The question isn't whether AI will change your work — but when you'll start using it yourself.")}),r.jsx("p",{className:"mt-5 text-base leading-relaxed text-muted-foreground",children:i("De best presterende finance teams laten zien wat er mogelijk is:","The best-performing finance teams show what's possible:")})]}),r.jsx("div",{className:"mt-8 grid grid-cols-1 gap-5 md:grid-cols-3",children:o.map((d,c
13666)=>r.jsxs("div",{className:"rounded-2xl border border-border/60 glass-card p-7 text-center animate-fade-in-up",style:{animationDelay:`${c*80}ms`},children:[r.jsx("div",{className:"font-display text-4xl font-bold text-foreground md:text-5xl",children:d.value}),r.jsxs("div",{className:"mt-3 text-sm leading-relaxed text-muted-foreground",children:[d.label,r.jsx("br",{}),d.sub]})]},d.value))}),r.jsx("p",{className:"mt-4 text-right text-xs text-muted-foreground/70 italic",children:i("Bron: The Hackett Group","Source: The Hackett Group")})]})]}),r.jsx("section",{className:"py-16 md:py-20 bg-background relative overflow-hidden",children:r.jsxs("div",{className:"container mx-auto max-w-6xl px-4",children:[r.jsxs("div",{className:"mb-14 text-center animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("De oplossing","The solution")}),r.jsx("h2",{className:"mt-3 font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Een AI-agent die finance écht begrijpt","An AI agent that truly understands finance")}),r.jsx("p",{className:"mx-auto mt-4 max-w-2xl text-base leading-relaxed text-muted-foreground",children:i("Geen generieke chatbot, maar een AI-controller die jouw grootboek, jouw dimensies en jouw rapportagestructuur kent. Inzetbaar vanuit elke module, met onderbouwing tot de bron.","Not a generic chatbot, but an AI controller that knows your ledger, your dimensions and your reporting structure. Available from every module, with traceability all the way to the source.")})]}),r.jsx("div",{className:"grid grid-cols-1 gap-5 md:grid-cols-2",children:s.map((d,c)=>r.jsx("div",{className:"group rounded-2xl border border-border/60 glass-card p-7 transition-colors hover:border-accent/30 animate-fade-in-up",style:{animationDelay:`${c*80}ms`},children:r.jsxs("div",{className:"flex items-start gap-4",children:[r.jsx("div",{className:"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl border border-accent/20 bg-accent/10",children:r.jsx(d.icon,{className:"h-5 w-5 text-accent"})}),r.jsxs("div",{children:[r.jsx("h3",{className:"font-display text-lg font-bold text-foreground",children:d.title}),r.jsx("p",{className:"mt-2 text-sm leading-relaxed text-muted-foreground",children:d.text})]})]})},d.title))}),r.jsx("div",{className:"mt-10 text-center",children:r.jsx(_,{to:B("virtueleController",t),children:r.jsxs(jn,{variant:"outline",className:"border-border/60 hover:border-accent/40 hover:bg-accent/5",children:[i("Bekijk de volledige AI-controller-functionaliteit","See the full AI Controller functionality"),r.jsx(re,{className:"ml-2 h-4 w-4"})]})})})]})}),r.jsxs("section",{className:"relative overflow-hidden py-16 md:py-20 bg-muted/40 border-y border-border/40",children:[r.jsx("div",{className:"absolute inset-0 line-grid opacity-20"}),r.jsxs("div",{className:"container relative z-10 mx-auto max-w-5xl px-4",children:[r.jsxs("div",{className:"mb-10 text-center animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("In de praktijk","In practice")}),r.jsx("h2",{className:"mt-3 font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Klantcase: Primus Wafer Paper","Customer case: Primus Wafer Paper")}),r.jsx("p",{className:"mt-3 text-sm text-muted-foreground",children:i("Voedingsmiddelenindustrie · internationaal actief · ERP + Excel","Food industry · internationally active · ERP + Excel")})]}),r.jsxs("figure",{className:"mx-auto mt-10 max-w-3xl rounded-2xl border border-border/60 glass-card p-8 text-center animate-fade-in-up",children:[r.jsx(wi,{className:"mx-auto mb-4 h-6 w-6 text-accent/60"}),r.jsx("blockquote",{className:"font-display text-lg leading-relaxed text-foreground md:text-xl",children:i('"Ik heb in mijn 30+ jaar ervaring met veel tools gewerkt, maar Smartbooks is by far de eenvoudigste en snelste om te implementeren. Binnen twee weken was het systeem volledig operationeel, met slechts 10 uur tijdsinvestering vanuit ons team."',`"In my 30+ years of experience I've worked with many tools, but Smartbooks is by far the easiest and fastest to implement. Within two weeks the system was fully operational, with just 10 hours of time investment from our team."`)}),r.jsx("figcaption",{className:"mt-5 text-sm text-muted-foreground",children:"Marcel Steenbrink, CFO, Primus Wafer Paper"})]}),r.jsx("div",{className:"mt-10 text-center",children:r.jsx(_,{to:B("klantverhalen",t),children:r.jsxs(jn,{variant:"outline",className:"border-border/60 hover:border-accent/40 hover:bg-accent/5",children:[i("Meer klantervaringen","More customer stories")," ",r.jsx(re,{className:"ml-2 h-4 w-4"})]})})})]})]}),r.jsx("section",{className:"py-16 md:py-20 bg-background relative overflow-hidden",children:r.jsxs("div",{className:"container mx-auto max-w-6xl px-4",children:[r.jsxs("div",{className:"mb-14 text-center animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-accent",children:i("Hoe het werkt","How it works")}),r.jsx("h2",{className:"mt-3 font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Binnen een week live, vanaf dag één waarde.","Live within a week, value from day one.")}),r.jsx("p",{className:"mx-auto mt-4 max-w-2xl text-base leading-relaxed text-muted-foreground",children:i("Vergeet implementatietrajecten van maanden. Binnen twee dagen ben je technisch up-and-running. Daarna werken we samen met je team aan onboarding, finetuning en het identificeren van waar de AI-agent de grootste tijdwinst oplevert in jullie dagelijkse workflows.","Forget multi-month implementations. You're technically up and running within two days. After that we work with your team on onboarding, fine-tuning and identifying where the AI agent saves the most time in your daily workflows.")})]}),r.jsx("div",{className:"grid grid-cols-1 gap-5 md:grid-cols-3",children:l.map((d,c
13666)=>r.jsxs("div",{className:"relative rounded-2xl border border-border/60 glass-card p-7 animate-fade-in-up",style:{animationDelay:`${c*80}ms`},children:[r.jsx("span",{className:"absolute right-5 top-5 font-mono text-xs text-accent/40",children:d.n}),r.jsx("h3",{className:"font-display text-lg font-bold text-foreground",children:d.title}),r.jsx("p",{className:"mt-3 text-sm leading-relaxed text-muted-foreground",children:d.text})]},d.n))}),r.jsxs("div",{className:"mx-auto mt-12 max-w-3xl rounded-2xl border border-accent/30 bg-accent/5 p-8 text-center animate-fade-in-up",children:[r.jsx("h3",{className:"font-display text-xl font-bold text-foreground md:text-2xl",children:i("Start met een gratis pilot van 30 dagen","Start with a free 30-day pilot")}),r.jsx("p",{className:"mx-auto mt-3 max-w-xl text-sm leading-relaxed text-muted-foreground",children:i("Op jullie eigen data, met jullie eigen rapportages. Wij implementeren op ons eigen risico — je betaalt alleen als je tevreden bent en door wilt gaan.","On your own data, with your own reports. We implement at our own risk — you only pay if you're satisfied and want to continue.")}),r.jsxs("div",{className:"mt-6 flex flex-col items-center justify-center gap-3 sm:flex-row",children:[r.jsx(_,{to:B("planDemo",t),children:r.jsxs("button",{className:"btn-primary text-sm py-3 px-7 inline-flex items-center",children:[i("Plan een demo","Book a demo")," ",r.jsx(re,{className:"ml-2 h-4 w-4"})]})}),r.jsx("a",{href:"https://login.smartbooks.ai/u/signup?state=hKFo2SBMMWtrMThHSDBhcm1mOWtKOS1odHp1cmR3VGNpUjJDcaFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEt1U1I4NUNGV0R5VDdlb1Q5Z3dJMG10dUYwTzZreUdDo2NpZNkgcjBlWG5FcG5EZngwNzd2dXI1N3hsS0o3dTVGQnNsaTE",target:"_blank",rel:"noopener noreferrer",children:r.jsx(jn,{variant:"outline",className:"border-border/60 hover:border-accent/40 hover:bg-accent/5",children:i("Start gratis proefperiode","Start free trial")})})]})]})]})}),r.jsxs("section",{className:"relative overflow-hidden py-16 md:py-20 bg-muted/40 border-y border-border/40",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh opacity-50"}),r.jsxs("div",{className:"container relative z-10 mx-auto max-w-5xl px-4",children:[r.jsxs("div",{className:"mb-10 text-center animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-3xl font-bold text-foreground md:text-4xl",children:i("Boek direct een demo met Michel","Book a demo with Michel right now")}),r.jsx("p",{className:"mx-auto mt-4 max-w-2xl text-base leading-relaxed text-muted-foreground",children:i("25 minuten, persoonlijke walkthrough waarin we de AI-controller live op jullie type vragen loslaten. Vrijblijvend en zonder verkoopverhaal.","25 minutes, personal walkthrough in which we run the AI controller live on your type of questions. No obligations, no sales pitch.")})]}),r.jsxs("div",{className:"grid grid-cols-1 gap-8 lg:grid-cols-[320px_1fr] items-start rounded-2xl border border-border/60 glass-card p-6 md:p-8 animate-fade-in-up",children:[r.jsxs("div",{className:"text-center lg:text-left",children:[r.jsx("div",{className:"mx-auto lg:mx-0 h-32 w-32 overflow-hidden rounded-2xl border border-accent/30 shadow-lg",children:r.jsx("img",{src:qo,alt:i("Michel van Wijngaarden, Managing Director Smartbooks","Michel van Wijngaarden, Managing Director Smartbooks"),className:"h-full w-full object-cover"})}),r.jsx("h3",{className:"mt-5 font-display text-xl font-bold text-foreground",children:"Michel van Wijngaarden"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:i("Managing Director Smartbooks","Managing Director Smartbooks")}),r.jsx("p",{className:"mt-4 text-sm leading-relaxed text-muted-foreground",children:i("Ik laat je in 25 minuten zien hoe de AI-controller jouw team kan ondersteunen, en wat een realistische business case voor jullie is.","In 25 minutes I'll show you how the AI controller can support your team, and what a realistic business case looks like for you.")}),r.jsxs("div",{className:"mt-5 flex flex-col items-center lg:items-start gap-2 text-xs text-muted-foreground",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-accent/15 text-accent",children:r.jsx(_e,{className:"h-2.5 w-2.5"})}),i("Vrijblijvend, geen verkoopverhaal","No obligation, no sales pitch")]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-accent/15 text-accent",children:r.jsx(_e,{className:"h-2.5 w-2.5"})}),i("Live gedemonstreerd op echte data","Demonstrated live on real data")]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-accent/15 text-accent",children:r.jsx(_e,{className:"h-2.5 w-2.5"})}),i("Inclusief realistische business case","Including a realistic business case")]})]})]}),r.jsx("div",{className:"rounded-xl overflow-hidden border border-border/40 bg-background/40 min-h-[640px]",children:r.jsx("iframe",{src:"https://meetings-eu1.hubspot.com/michel-van-wijngaarden?embed=true",title:i("Plan een demo met Michel van Wijngaarden","Book a demo with Michel van Wijngaarden"),className:"w-full h-[680px] border-0",loading:"lazy"})})]}),r.jsx("div",{className:"mt-8 text-center",children:r.jsxs(_,{to:B("liveWebinar",t),className:"inline-flex items-center text-sm text-muted-foreground hover:text-accent transition-colors",children:[i("Liever eerst meer zien? Bekijk het live webinar","Prefer to see more first? Watch the live webinar"),r.jsx(re,{className:"ml-2 h-4 w-4"})]})})]})]}),r.jsx(Ne,{})]})},CE="/assets/cashflow-forecast-BaHVEbL1.png",HG=[{title:"1. Eén centraal dashboard",description:"Open Smartbooks en je ziet direct de status van al je administraties — geconsolideerd of per entiteit.",image:_l,hotspot:{to
13666p:"18%",left:"22%"},tooltip:{top:"10%",left:"30%",align:"left"},tooltipTitle:"Realtime, niet maandelijks",tooltipBody:"Cijfers worden live gesynchroniseerd uit je boekhoudpakket. Geen export, geen kopiëren naar Excel."},{title:"2. Drilldown tot op de boeking",description:"Klik op een willekeurig getal en zie meteen waar het vandaan komt — tot aan de originele factuur.",image:dv,hotspot:{top:"42%",left:"58%"},tooltip:{top:"30%",left:"62%",align:"right"},tooltipTitle:"Geen black box",tooltipBody:"Elk bedrag is klikbaar. Drilldown tot grootboek, journaalpost en brondocument."},{title:"3. Cashflow forecast in seconden",description:"13-weeks cashflow met automatische scenario's. Zie welk effect een trage debiteur of nieuwe investering heeft.",image:CE,hotspot:{top:"55%",left:"48%"},tooltip:{top:"20%",left:"52%",align:"right"},tooltipTitle:"Wat-als-scenario's",tooltipBody:"Pas één parameter aan en zie de cashflow-impact direct in de grafiek."},{title:"4. Budget vs Actual met variantie-analyse",description:"Budget, forecast en realisatie naast elkaar. AI markeert direct waar de afwijkingen zitten.",image:oz,hotspot:{top:"38%",left:"70%"},tooltip:{top:"12%",left:"55%",align:"right"},tooltipTitle:"AI vindt de outliers",tooltipBody:"Geen handmatig zoekwerk meer — Smartbooks markeert variantie groter dan jouw drempel."},{title:"5. Multi-entity consolidatie",description:"Eén klik om alle entiteiten te consolideren — inclusief intercompany-eliminatie en valuta-omrekening.",image:Qu,hotspot:{top:"25%",left:"32%"},tooltip:{top:"15%",left:"40%",align:"left"},tooltipTitle:"Geen Excel-consolidatie meer",tooltipBody:"Sub-consolidaties, multi-currency en intercompany — automatisch en altijd in balans."},{title:"6. Rapportage die jouw stakeholders begrijpen",description:"Custom dashboards en bestuursrapportages. Exporteerbaar als PDF of live link voor je RvC.",image:sv,hotspot:{top:"30%",left:"60%"},tooltip:{top:"18%",left:"20%",align:"left"},tooltipTitle:"Board-ready in 1 klik",tooltipBody:"Selecteer een sjabloon, kies je periode, en je rapportage staat klaar — inclusief commentaar-velden."}],UG=[{title:"1. One central dashboard",description:"Open Smartbooks and instantly see the status of all your entities — consolidated or per entity.",image:_l,hotspot:{top:"18%",left:"22%"},tooltip:{top:"10%",left:"30%",align:"left"},tooltipTitle:"Real-time, not monthly",tooltipBody:"Numbers sync live from your accounting package. No exports, no copy-pasting into Excel."},{title:"2. Drilldown to the journal entry",description:"Click any number and see immediately where it comes from — all the way to the original invoice.",image:dv,hotspot:{top:"42%",left:"58%"},tooltip:{top:"30%",left:"62%",align:"right"},tooltipTitle:"No black box",tooltipBody:"Every amount is clickable. Drill down to ledger, journal entry and source document."},{title:"3. Cashflow forecast in seconds",description:"13-week cashflow with automatic scenarios. See the impact of a slow-paying customer or a new investment.",image:CE,hotspot:{top:"55%",left:"48%"},tooltip:{top:"20%",left:"52%",align:"right"},tooltipTitle:"What-if scenarios",tooltipBody:"Change a single parameter and see the cashflow impact directly in the chart."},{title:"4. Budget vs Actual with variance analysis",description:"Budget, forecast and actuals side by side. AI highlights exactly where the deviations are.",image:oz,hotspot:{top:"38%",left:"70%"},tooltip:{top:"12%",left:"55%",align:"right"},tooltipTitle:"AI spots the outliers",tooltipBody:"No more manual hunting — Smartbooks flags any variance larger than your threshold."},{title:"5. Multi-entity consolidation",description:"One click to consolidate all entities — including intercompany elimination and currency conversion.",image:Qu,hotspot:{top:"25%",left:"32%"},tooltip:{top:"15%",left:"40%",align:"left"},tooltipTitle:"No more Excel consolidation",tooltipBody:"Sub-consolidations, multi-currency and intercompany — automated and always in balance."},{title:"6. Reporting your stakeholders understand",description:"Custom dashboards and board reports. Exportable as PDF or as a live link for your supervisory board.",image:sv,hotspot:{to
13666p:"30%",left:"60%"},tooltip:{top:"18%",left:"20%",align:"left"},tooltipTitle:"Board-ready in 1 click",tooltipBody:"Pick a template, choose your period, and your report is ready — including commentary fields."}],GG={nl:{badge:"Interactieve tour · 90 sec",h1:"Bekijk Smartbooks in actie",intro:"Klik door zes schermen en zie hoe controllers binnen één omgeving rapporteren, consolideren en budgetten.",stepOf:(e,n)=>`Stap ${e} van ${n}`,restart:"Opnieuw beginnen",prev:"Vorige",next:"Volgende stap",finish:"Tour afronden",goToStep:e=>`Ga naar stap ${e}`,finishedH2:"Dat was Smartbooks in 90 seconden.",finishedP:"Onder de indruk? Plan een live demo met één van onze finance-experts en zie het op jouw eigen data.",planDemo:"Plan een demo",pricing:"Bekijk de prijzen",rewatch:"Tour opnieuw bekijken"},en:{badge:"Interactive tour · 90 sec",h1:"See Smartbooks in action",intro:"Click through six screens and see how controllers report, consolidate and budget in a single environment.",stepOf:(e,n)=>`Step ${e} of ${n}`,restart:"Start over",prev:"Previous",next:"Next step",finish:"Finish tour",goToStep:e=>`Go to step ${e}`,finishedH2:"That was Smartbooks in 90 seconds.",finishedP:"Impressed? Book a live demo with one of our finance experts and see it on your own data.",planDemo:"Book a demo",pricing:"See pricing",rewatch:"Rewatch the tour"},de:{badge:"Interaktive Tour · 90 Sek.",h1:"Smartbooks in Aktion erleben",intro:"Klicken Sie durch sechs Screens und sehen Sie, wie Controller in einer Umgebung berichten, konsolidieren und budgetieren.",stepOf:(e,n)=>`Schritt ${e} von ${n}`,restart:"Neu starten",prev:"Zurück",next:"Nächster Schritt",finish:"Tour beenden",goToStep:e=>`Zu Schritt ${e}`,finishedH2:"Das war Smartbooks in 90 Sekunden.",finishedP:"Überzeugt? Buchen Sie eine Live-Demo mit einem unserer Finance-Experten und sehen Sie es mit Ihren eigenen Daten.",planDemo:"Demo buchen",pricing:"Preise ansehen",rewatch:"Tour erneut ansehen"}},$G=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl",i=t==="nl"?HG:UG,a=GG[t],[o,s]=b.useState(0),[l,d]=b.useState(!1),c=i[o],u=(o+1)/i.length*100,h=()=>{o<i.length-1?s(o+1):d(!0)},g=()=>o>0&&s(o-1),m=()=>{s(0),d(!1)};return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("seo.productTour.title"),description:e("seo.productTour.description"),pathByLocale:je("productTour")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsx("section",{className:"pt-10 pb-6 bg-background",children:r.jsxs("div",{className:"container mx-auto px-4 max-w-6xl",children:[r.jsxs("div",{className:"text-center mb-6",children:[r.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-teal/10 px-3 py-1 text-[11px] font-bold uppercase tracking-[0.14em] text-teal mb-3",children:[r.jsx(Jt,{className:"h-3 w-3"})," ",a.badge]}),r.jsx("h1",{className:"font-display text-3xl md:text-4xl font-bold text-foreground tracking-tight mb-2",children:a.h1}),r.jsx("p",{className:"text-muted-foreground text-base max-w-2xl mx-auto",children:a.intro})]}),r.jsxs("div",{className:"max-w-3xl mx-auto mb-4",children:[r.jsxs("div",{className:"flex items-center justify-between mb-2 text-xs text-muted-foreground",children:[r.jsx("span",{children:a.stepOf(l?i.length:o+1,i.length)}),r.jsx("button",{onClick:m,className:"text-teal hover:underline",children:a.restart})]}),r.jsx("div",{className:"h-1.5 w-full rounded-full bg-muted overflow-hidden",children:r.jsx(Dt.div,{className:"h-full bg-teal",initial:!1,animate:{width:l?"100%":`${u}%`},transition:{duration:.4,ease:"easeOut"}})})]})]})}),r.jsx("section",{className:"pb-16 bg-background",children:r.jsx("div",{className:"container mx-auto px-4 max-w-6xl",children:r.jsx(Bl,{mode:"wait",initial:!1,children:l?r.jsxs(Dt.div,{initial:{opacity:0,scale:.96},animate:{opacity:1,scale:1},transition:{duration:.4},className:"rounded-2xl border-2 border-teal/40 bg-gradient-to-br from-teal/[0.06] to-transparent p-10 md:p-14 text-center max-w-3xl mx-auto",children:[r.jsx("div",{className:"inline-flex h-14 w-14 items-center justify-center rounded-full bg-teal/15 mb-5",children:r.jsx(_e,{className:"h-7 w-7 text-teal"})}),r.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-foreground mb-3",children:a.finishedH2}),r.jsx("p",{className:"text-muted-foreground text-base mb-8 max-w-xl mx-auto",children:a.finishedP}),r.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center",children:[r.jsxs(_,{to:B("planDemo",t),className:"inline-flex items-center justify-center gap-2 rounded-full bg-accent px-6 py-3 text-sm font-bold text-accent-foreground hover:bg-accent/90 transition-colors",children:[a.planDemo," ",r.jsx(re,{className:"h-4 w-4"})]}),r.jsx(_,{to:B("prijzen",t),className:"inline-flex items-center justify-center gap-2 rounded-full border border-border px-6 py-3 text-sm font-bold text-foreground hover:bg-muted transition-colors",children:a.pricing}),r.jsxs("button",{onClick:m,className:"inline-flex items-center justify-center gap-2 rounded-full border border-border px-6 py-3 text-sm font-medium text-foreground hover:bg-muted transition-colors",children:[r.jsx(xi,{className:"h-4 w-4"})," ",a.rewatch]})]})]},"finished"):r.jsx(Dt.div,{initial:{opacity:0,y:12}
13666,animate:{opacity:1,y:0},exit:{opacity:0,y:-12},transition:{duration:.3},className:"rounded-2xl border-2 border-teal/30 bg-card overflow-hidden shadow-[0_18px_46px_-30px_hsl(var(--teal)/0.65)]",children:r.jsxs("div",{className:"grid lg:grid-cols-[1fr_2fr]",children:[r.jsxs("div",{className:"p-6 md:p-8 border-b lg:border-b-0 lg:border-r border-border bg-gradient-to-br from-teal/[0.04] to-transparent",children:[r.jsx("div",{className:"text-xs font-bold uppercase tracking-[0.14em] text-teal mb-2",children:c.title.split(".")[0]}),r.jsx("h2",{className:"font-display text-xl md:text-2xl font-bold text-foreground mb-3",children:c.title.split(". ").slice(1).join(". ")}),r.jsx("p",{className:"text-muted-foreground text-sm leading-relaxed mb-6",children:c.description}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsxs("button",{onClick:g,disabled:o===0,className:"inline-flex items-center gap-1.5 rounded-full border border-border px-4 py-2 text-sm font-medium text-foreground hover:bg-muted disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:[r.jsx(K2,{className:"h-4 w-4"})," ",a.prev]}),r.jsxs("button",{onClick:h,className:"inline-flex items-center gap-1.5 rounded-full bg-primary px-5 py-2 text-sm font-bold text-primary-foreground hover:bg-primary/90 transition-colors",children:[o===i.length-1?a.finish:a.next,r.jsx(re,{className:"h-4 w-4"})]})]}),r.jsx("div",{className:"mt-6 flex gap-1.5",children:i.map((p,f)=>r.jsx("button",{onClick:()=>s(f),"aria-label":a.goToStep(f+1),className:`h-1.5 flex-1 rounded-full transition-all ${f===o?"bg-primary":f<o?"bg-primary/40":"bg-muted"}`},f))})]}),r.jsx("div",{className:"relative bg-muted/30 p-4 md:p-6",children:r.jsxs("div",{className:"relative rounded-xl overflow-hidden border border-border bg-background aspect-[16/10]",children:[r.jsx("img",{src:c.image,alt:c.title,className:"w-full h-full object-contain object-center"}),r.jsx("div",{className:"absolute -translate-x-1/2 -translate-y-1/2 animate-pop-in",style:{to
13666p:c.hotspot.top,left:c.hotspot.left,animationDelay:"300ms"},children:r.jsxs("span",{className:"relative flex h-5 w-5",children:[r.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full bg-teal opacity-75"}),r.jsx("span",{className:"relative inline-flex h-5 w-5 rounded-full bg-teal border-2 border-background shadow-lg"})]})}),r.jsx("div",{className:`absolute ${c.tooltip.align==="right"?"-translate-x-full":""}`,style:{top:c.tooltip.top,left:c.tooltip.left},children:r.jsxs("div",{className:"max-w-[260px] rounded-xl border-2 border-teal/50 bg-card p-3.5 shadow-xl animate-fade-in-up",style:{animationDelay:"450ms"},children:[r.jsx("div",{className:"text-[11px] font-bold uppercase tracking-wider text-teal mb-1",children:c.tooltipTitle}),r.jsx("div",{className:"text-xs text-foreground leading-relaxed",children:c.tooltipBody})]})})]})})]})},o)})})}),r.jsx(Ne,{})]})},fu={nl:{eyebrow:"Onboarding",h1:"Snel en eenvoudig onboarden",intro:"Wij richten Smartbooks in op jullie boekhouding en rapportages. Je ziet vanaf dag één jullie eigen cijfers in het systeem — meestal binnen één week up and running.",stepsLead:"Ons onboardingproces bestaat uit vier stappen.",steps:[{n:"Stap 1",title:"Demo & Connect",duration:"1 uur",bullets:["Leer over de Smartbooks mogelijkheden","Verbind jullie boekhouding met Smartbooks"],tagline:"Basis rapportage"},{n:"Stap 2",title:"Actuals Rapportage",duration:"2 – 4 uur",bullets:["Pas structuren aan voor P&L, Balans en Cashflow","Selecteer en pas dashboard templates toe","Pas dashboards en KPI's aan","Configureer de consolidatie, indien van toepassing"],tagline:"Uitgebreide maatwerk rapportage"},{n:"Stap 3",title:"Budget Modellering",duration:"2 – 4 uur",bullets:["Deel jullie huidige budgetteringsmodel","Configureer het model in Smartbooks","Verrijk het model met geavanceerde planning templates","Voer de business drivers in voor het volgende budget"],tagline:"Dynamische planning"},{n:"Stap 4",title:"Gebruik en breid uit",duration:"Doorlopend",bullets:["Gebruik de automatisch gegenereerde rapporten","Genereer meer en betere inzichten voor het bedrijf","Reageer betrouwbaar en snel op ad-hoc vragen","Beheer hoe je rapportages deelt met de business"],tagline:"In control en proactief de business informeren"}],ctaSecondary:"Plan een demo",ctaHint:"Geen verplichtingen — direct gevolgd door een gratis proefmaand."},en:{eyebrow:"Onboarding",h1:"Quick and simple onboarding",intro:"We configure Smartbooks on your bookkeeping and reports. You'll see your own numbers in the system from day one — usually up and running within a week.",stepsLead:"Our onboarding process consists of four steps.",steps:[{n:"Step 1",title:"Demo & Connect",duration:"1 hour",bullets:["Learn about Smartbooks capabilities","Connect your bookkeeping to Smartbooks"],tagline:"Basic reporting"},{n:"Step 2",title:"Actuals Reporting",duration:"2 – 4 hours",bullets:["Adjust structures for P&L, Balance Sheet and Cashflow","Select and apply dashboard templates","Tailor dashboards and KPIs","Configure consolidation, if applicable"],tagline:"Tailored reporting"},{n:"Step 3",title:"Budget Modelling",duration:"2 – 4 hours",bullets:["Share your current budgeting model","Configure the model in Smartbooks","Enrich the model with advanced planning templates","Enter the business drivers for the next budget"],tagline:"Dynamic planning"},{n:"Step 4",title:"Use and expand",duration:"Ongoing",bullets:["Use the automatically generated reports","Generate more and better insights for the business","Respond reliably and quickly to ad-hoc questions","Manage how you share reports with the business"],tagline:"In control and proactively informing the business"}],ctaSecondary:"Book a demo",ctaHint:"No obligations — directly followed by a free trial month."}};fu.de=fu.en;const ZG=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl",i=fu[t]??fu.en;return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("seo.onboarding.title"),description:e("seo.onboarding.description"),pathByLocale:je("onboarding")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 -z-10 bg-gradient-to-b from-[#EAF7FB] via-[#F5FBFD] to-background"}),r.jsx("div",{className:"absolute -top-40 left-1/2 -translate-x-1/2 w-[1100px] h-[700px] rounded-full bg-primary/15 blur-[160px] -z-10"}),r.jsx("div",{className:"absolute top-1/2 -right-40 w-[500px] h-[500px] rounded-full bg-primary/10 blur-[140px] -z-10"}),r.jsxs("div",{className:"max-w-[1240px] mx-auto px-5 md:px-10 lg:px-16 pt-14 md:pt-16 pb-16 md:pb-20",children:[r.jsxs("div",{className:"text-center max-w-3xl mx-auto animate-fade-in-up",children:[r.jsx("span",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-primary/10 text-primary text-[11px] font-semibold uppercase tracking-[0.18em]",children:i.eyebrow}),r.jsx("h1",{className:"mt-4 font-display text-4xl md:text-5xl font-bold tracking-[-0.02em] text-foreground",children:i.h1}),r.jsx("p",{className:"mt-4 text-base md:text-lg text-muted-foreground leading-relaxed",children:i.intro}),r.jsx("p",{className:"mt-4 text-sm md:text-base text-foreground
13666/70",children:i.stepsLead})]}),r.jsx("div",{className:"mt-12 md:mt-14 grid md:grid-cols-2 lg:grid-cols-4 gap-x-8 gap-y-10",children:i.steps.map((a,o)=>r.jsxs("div",{className:"flex flex-col animate-fade-in-up",style:{animationDelay:`${100+o*60}ms`},children:[r.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[r.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-[0.18em] text-primary whitespace-nowrap",children:a.n}),r.jsx("span",{className:"flex-1 h-px bg-primary/40"})]}),r.jsx("h3",{className:"font-display text-xl font-bold text-foreground leading-snug",children:a.title}),r.jsx("div",{className:"mt-1 text-sm text-muted-foreground",children:a.duration}),r.jsx("ul",{className:"mt-5 space-y-3",children:a.bullets.map((s,l)=>r.jsxs("li",{className:"flex items-start gap-2.5",children:[r.jsx(_e,{className:"h-4 w-4 text-primary shrink-0 mt-[3px]",strokeWidth:2.5}),r.jsx("span",{className:"text-sm text-foreground/80 leading-snug",children:s})]},l))}),r.jsx("div",{className:"mt-auto pt-6 text-sm font-semibold text-foreground",children:a.tagline})]},o))}),r.jsxs("div",{className:"mt-14 md:mt-16 text-center",children:[r.jsxs("div",{className:"flex flex-col items-center justify-center gap-3 sm:flex-row",children:[r.jsx(jn,{asChild:!0,size:"lg",children:r.jsxs(_,{to:B("onboardingMeeting",t),children:[e("onboardingMeeting.cta")," ",r.jsx(re,{className:"h-4 w-4"})]})}),r.jsx(jn,{asChild:!0,size:"lg",variant:"outline",children:r.jsx(_,{to:B("planDemo",t),children:i.ctaSecondary})})]}),r.jsx("p",{className:"mt-3 text-xs text-muted-foreground",children:i.ctaHint})]})]})]}),r.jsx(Ne,{})]})},YG="https://calendly.com/robin-van-den-born-smartbooks/onboarding-meeting?hide_gdpr_banner=1&background_color=ffffff&primary_color=00b4d8&text_color=0f172a",QG=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language==="en"?"en":"nl",i=e("onboardingMeeting.bullets",{returnObjects:!0}),a=e("onboardingMeeting.benefits",{returnObjects:!0}),o=e("onboardingMeeting.trust",{returnObjects:!0});return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("seo.onboardingMeeting.title"),description:e("seo.onboardingMeeting.description"),pathByLocale:je("onboardingMeeting")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden pt-12 pb-20 md:pt-16 md:pb-28",children:[r.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-midnight via-surface to-midnight"}),r.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_60%_50%_at_50%_30%,rgba(0,180,216,0.08),transparent)]"}),r.jsxs("div",{className:"relative z-10 mx-auto max-w-[1200px] px-5 md:px-10 lg:px-16",children:[r.jsxs("div",{className:"mx-auto mb-12 max-w-3xl animate-fade-in-up text-center md:mb-16",children:[r.jsx("span",{className:"eyebrow-badge",children:e("onboardingMeeting.eyebrow")}),r.jsx("h1",{className:"mt-4 mb-5 text-[32px] font-bold leading-[1.15] text-white md:text-[44px] lg:text-[52px]",children:e("onboardingMeeting.title")}),r.jsx("p",{className:"text-secondary text-lg leading-relaxed md:text-xl",children:e("onboardingMeeting.subtitle")}),r.jsx("ul",{className:"mt-6 flex flex-wrap items-center justify-center gap-x-6 gap-y-2",children:Array.isArray(o)&&o.map(s=>r.jsxs("li",{className:"flex items-center gap-2 text-sm text-secondary",children:[r.jsx(Yn,{className:"h-4 w-4 shrink-0 text-turquoise"}),r.jsx("span",{children:s})]},s))})]}),r.jsxs("div",{className:"grid items-start gap-8 lg:grid-cols-2 lg:gap-12",children:[r.jsxs("div",{className:"animate-fade-in-up",style:{animationDelay:"100ms"},children:[r.jsx("h2",{className:"mb-5 text-xl font-bold text-white md:text-2xl",children:e("onboardingMeeting.bulletsHeading")}),r.jsx("ul",{className:"space-y-4",children:Array.isArray(i)&&i.map(s=>r.jsxs("li",{className:"flex items-start gap-3 text-base leading-relaxed text-secondary md:text-lg",children:[r.jsx(Yn,{className:"mt-0.5 h-6 w-6 shrink-0 text-turquoise"}),r.jsx("span",{children:s})]},s))}),r.jsx("h2",{className:"mt-10 mb-5 text-xl font-bold text-white md:text-2xl",children:e("onboardingMeeting.benefitsHeading")}),r.jsx("ul",{className:"space-y-4",children:Array.isArray(a)&&a.map(s=>r.jsxs("li",{className:"flex items-start gap-3 text-base leading-relaxed text-secondary md:text-lg",children:[r.jsx(Yn,{className:"mt-0.5 h-6 w-6 shrink-0 text-turquoise"}),r.jsx("span",{children:s})]},s))}),r.jsxs("p",{className:"mt-8 text-sm leading-relaxed text-secondary",children:[e("onboardingMeeting.footnote.prefix")," ",r.jsx(_,{to:B("planDemo",t),className:"font-semibold text-turquoise underline underline-offset-4 transition-colors hover:text-primary",children:e("onboardingMeeting.footnote.link")}),e("onboardingMeeting.footnote.suffix")]})]}),r.jsx("div",{className:"relative animate-fade-in-up",style:{animationDelay:"150ms"},children:r.jsxs("div",{className:"overflow-hidden rounded-2xl border border-white/10 bg-card/40 shadow-2xl backdrop-blur-sm",children:[r.jsxs("div",{className:"flex items-center gap-3 border-b border-white/10 p-5",children:[r.jsx("img",{src:tE,alt:e("onboardingMeeting.calendar.portraitAlt"),className:"h-12 w-12 rounded-full border border-white/20 object-cover"}),r.jsxs("div",{children:[r.jsx("div",{className:"font-semibold text-white",children:e("onboardingMeeting.calendar.title")}),r.jsx("div",{className:"text-sm text-secondary",children:e("onboardingMeeting.calendar.subtitle")}),r.jsx("div",{className:"text-xs text-secondary",children:e("onboardingMeeting.calendar.role")})]})]}),r.jsx("div",{className:"bg-background",children:r.jsx("iframe",{src:YG,title:e("onboardingMeeting.calendar.iframeTitle"),loading:"lazy",style:{minHeight:900,border:0},className:"w-full"})})]})})]})]})]}),r.jsx(Ne,{})]})},JG="https://smartbooks.gitbook.io/smartbooks-docs/mcp-server/connect-smartbooks-to-claude",XG=[Bo,fD,G2],e$=[rb,nS,yr,cD],n$=[fo,db],t$=[mo,Jt],i$=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language==="en"?"en":"nl",i=f=>{const w=e(`aiConnectors.${f}`,{returnObjects:!0});return Array.isArray(w)?w:[]}
13666,a=i("tools"),o=i("chat.rows"),s=i("benefits"),l=i("hubData"),d=i("examples"),c=i("security"),u=i("setup"),h=i("choice"),g=i("faq"),m=B("onboardingMeeting",t),p="inline-flex items-center gap-2 rounded-full bg-orange px-7 py-3.5 font-semibold text-white shadow-lg shadow-orange/20 transition-opacity hover:opacity-90";return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("aiConnectors.seo.title"),description:e("aiConnectors.seo.description"),pathByLocale:je("aiKoppelingen")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("main",{children:[r.jsxs("section",{className:"relative overflow-hidden bg-footer dark-surface",children:[r.jsxs("div",{className:"pointer-events-none absolute inset-0","aria-hidden":!0,children:[r.jsx("div",{className:"absolute -top-40 left-1/2 h-[600px] w-[1100px] -translate-x-1/2 rounded-full bg-[radial-gradient(ellipse_at_center,hsl(var(--accent)/0.28),transparent_65%)] blur-2xl"}),r.jsx("div",{className:"absolute inset-0 opacity-[0.07] [background-image:linear-gradient(hsl(var(--accent))_1px,transparent_1px),linear-gradient(90deg,hsl(var(--accent))_1px,transparent_1px)] [background-size:48px_48px] [mask-image:radial-gradient(ellipse_at_center,black,transparent_75%)]"})]}),r.jsxs("div",{className:"relative z-10 mx-auto grid max-w-[1200px] items-center gap-12 px-5 pt-14 pb-16 md:px-10 md:pt-20 md:pb-24 lg:grid-cols-[1.05fr_1fr]",children:[r.jsxs("div",{className:"animate-fade-in-up text-center lg:text-left",children:[r.jsxs("span",{className:"inline-flex items-center gap-2 rounded-full border border-accent/30 bg-accent/10 px-3.5 py-1.5 text-xs font-semibold uppercase tracking-[0.15em] text-accent",children:[r.jsx("span",{className:"h-1.5 w-1.5 animate-pulse rounded-full bg-accent"}),e("aiConnectors.eyebrow")]}),r.jsx("h1",{className:"mt-5 mb-5 text-[34px] font-extrabold leading-[1.08] tracking-[-0.02em] text-white md:text-[52px]",children:e("aiConnectors.title")}),r.jsx("p",{className:"mx-auto mb-8 max-w-xl text-lg leading-relaxed text-white/75 lg:mx-0",children:e("aiConnectors.subtitle")}),r.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-3 lg:justify-start",children:[r.jsxs(_,{to:m,className:p,children:[e("aiConnectors.ctaPrimary")," ",r.jsx(re,{className:"h-4 w-4"})]}),r.jsx("a",{href:JG,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 rounded-full border border-white/25 px-6 py-3.5 font-semibold text-white transition-colors hover:bg-white/10",children:e("aiConnectors.ctaDocs")})]}),r.jsxs("div",{className:"mt-10",children:[r.jsx("p",{className:"mb-3 text-xs font-semibold uppercase tracking-[0.2em] text-white/50",children:e("aiConnectors.worksWith")}),r.jsx("div",{className:"flex flex-wrap justify-center gap-2 lg:justify-start",children:a.map(f=>r.jsx("span",{className:"rounded-lg border border-white/10 bg-white/[0.05] px-3.5 py-2 text-sm font-medium text-white/85",children:f},f))})]})]}),r.jsxs("div",{className:"relative animate-fade-in-up",style:{animationDelay:"150ms"},"aria-hidden":!0,children:[r.jsx("div",{className:"absolute -inset-4 rounded-[28px] bg-accent/20 blur-3xl"}),r.jsxs("div",{className:"relative overflow-hidden rounded-2xl border border-white/10 bg-card shadow-2xl",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[r.jsx("span",{className:"h-2.5 w-2.5 rounded-full bg-muted"}),r.jsx("span",{className:"h-2.5 w-2.5 rounded-full bg-muted"}),r.jsx("span",{className:"h-2.5 w-2.5 rounded-full bg-muted"}),r.jsx("span",{className:"ml-auto text-[11px] font-medium uppercase tracking-wider text-muted-foreground",children:e("aiConnectors.chat.note")})]}),r.jsxs("div",{className:"space-y-4 p-5 md:p-6",children:[r.jsx("div",{className:"ml-auto max-w-[85%] rounded-2xl rounded-br-sm bg-accent px-4 py-3 text-sm font-medium text-white",children:e("aiConnectors.chat.user")}),r.jsxs("div",{className:"inline-flex items-center gap-2 rounded-full border border-accent/30 bg-accent/10 px-3 py-1 text-xs font-medium text-accent",children:[r.jsx(_e,{className:"h-3.5 w-3.5"})," ",e("aiConnectors.chat.tool")]}),r.jsxs("div",{className:"max-w-[92%] rounded-2xl rounded-bl-sm border border-border bg-surface px-4 py-3 text-sm leading-relaxed text-foreground",children:[r.jsx("p",{className:"mb-3",children:e("aiConnectors.chat.answer")}),r.jsx("div",{className:"overflow-hidden rounded-lg border border-border bg-card",children:o.map(([f,w])=>r.jsxs("div",{className:"flex items-center justify-between border-b border-border px-3 py-2 last:border-b-0",children:[r.jsx("span",{className:"text-muted-foreground",children:f}),r.jsx("span",{className:"font-semibold tabular-nums text-foreground",children:w})]},f))})]})]})]})]})]})]}),r.jsx("section",{className:"py-16 md:py-24",children:r.jsxs("div",{className:"mx-auto max-w-6xl px-5",children:[r.jsx("h2",{className:"mx-auto mb-12 max-w-2xl text-center text-3xl font-bold tracking-tight text-foreground md:text-[42px] md:leading-[1.1]",children:e("aiConnectors.benef
13666itsHeading")}),r.jsx("div",{className:"grid gap-5 md:grid-cols-3",children:s.map((f,w)=>{const k=XG[w]??Bo;return r.jsxs("div",{className:"group rounded-2xl border border-border bg-card p-7 shadow-sm transition-all hover:-translate-y-1 hover:border-accent/40 hover:shadow-lg",children:[r.jsx("span",{className:"mb-5 flex h-12 w-12 items-center justify-center rounded-xl bg-accent/10 text-accent ring-1 ring-accent/20 transition-colors group-hover:bg-accent group-hover:text-white",children:r.jsx(k,{className:"h-6 w-6"})}),r.jsx("h3",{className:"mb-2 text-xl font-bold text-foreground",children:f.title}),r.jsx("p",{className:"leading-relaxed text-muted-foreground",children:f.body})]},f.title)})})]})}),r.jsxs("section",{className:"relative overflow-hidden bg-footer dark-surface py-16 md:py-24",children:[r.jsx("div",{className:"pointer-events-none absolute inset-0 bg-[radial-gradient(ellipse_50%_60%_at_50%_50%,hsl(var(--accent)/0.15),transparent)]","aria-hidden":!0}),r.jsxs("div",{className:"relative z-10 mx-auto max-w-6xl px-5",children:[r.jsxs("div",{className:"mx-auto mb-12 max-w-2xl text-center",children:[r.jsx("h2",{className:"mb-4 text-3xl font-bold tracking-tight text-white md:text-[42px]",children:e("aiConnectors.hubHeading")}),r.jsx("p",{className:"text-lg leading-relaxed text-white/70",children:e("aiConnectors.hubBody")})]}),r.jsxs("div",{className:"grid items-center gap-6 md:grid-cols-[1fr_auto_1fr]",children:[r.jsx("div",{className:"space-y-3",children:a.map(f=>r.jsxs("div",{className:"flex items-center gap-3 rounded-xl border border-white/10 bg-white/[0.04] px-4 py-3 text-white/90",children:[r.jsx(xw,{className:"h-4 w-4 text-accent"})," ",r.jsx("span",{className:"font-medium",children:f})]},f))}),r.jsxs("div",{className:"flex flex-col items-center gap-3 py-4",children:[r.jsx("div",{className:"hidden h-px w-24 bg-gradient-to-r from-transparent via-accent to-transparent md:block"}),r.jsxs("div",{className:"relative flex h-36 w-36 items-center justify-center rounded-full border border-accent/40 bg-accent/10 text-center shadow-[0_0_60px_hsl(var(--accent)/0.35)]",children:[r.jsx("span",{className:"absolute inset-0 animate-ping rounded-full border border-accent/20 [animation-duration:3s]"}),r.jsx("span",{className:"px-4 text-sm font-bold text-white",children:e("aiConnectors.hubCenter")})]}),r.jsx("div",{className:"hidden h-px w-24 bg-gradient-to-r from-transparent via-accent to-transparent md:block"})]}),r.jsx("div",{className:"space-y-3",children:l.map(f=>r.jsxs("div",{className:"flex items-center gap-3 rounded-xl border border-accent/25 bg-accent/[0.08] px-4 py-3 text-white/90",children:[r.jsx(G2,{className:"h-4 w-4 text-accent"})," ",r.jsx("span",{className:"font-medium",children:f})]},f))})]})]})]}),r.jsx("section",{className:"py-16 md:py-24",children:r.jsxs("div",{className:"mx-auto max-w-4xl px-5",children:[r.jsx("h2",{className:"mb-10 text-center text-3xl font-bold tracking-tight text-foreground md:text-[42px]",children:e("aiConnectors.examplesHeading")}),r.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:d.map((f,w)=>r.jsxs("div",{className:`rounded-2xl rounded-br-sm border border-accent/20 bg-accent/[0.06] p-5 text-foreground ${w%2?"sm:translate-y-6":""}`,children:[r.jsx(xw,{className:"mb-3 h-5 w-5 text-accent"}),r.jsxs("p",{className:"text-lg font-medium leading-snug",children:["“",f,"”"]})]},f))})]})}),r.jsx("section",{className:"bg-surface py-16 md:py-24",children:r.jsxs("div",{className:"mx-auto grid max-w-6xl items-start gap-10 px-5 lg:grid-cols-[1fr_1.4fr]",children:[r.jsxs("div",{children:[r.jsx(yr,{className:"mb-4 h-10 w-10 text-accent"}),r.jsx("h2",{className:"mb-4 text-3xl font-bold tracking-tight text-foreground md:text-[42px]",children:e("aiConnectors.securityHeading")}),r.jsx("p",{className:"text-lg leading-relaxed text-muted-foreground",children:e("aiConnectors.securityBody")})]}),r.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:c.map((f,w)=>{const k=e$[w]??yr;return r.jsxs("div",{className:"rounded-2xl border border-border bg-card p-6",children:[r.jsx(k,{className:"mb-3 h-5 w-5 text-accent"}),r.jsx("h3",{className:"mb-1 font-bold text-foreground",children:f.title}),r.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:f.body})]},f.title)})})]})}),r.jsx("section",{className:"py-16 md:py-24",children:r.jsxs("div",{className:"mx-auto max-w-5xl px-5",children:[r.jsx("h2",{className:"mb-10 text-center text-3xl font-bold tracking-tight text-foreground md:text-[42px]",children:e("aiConnectors.setupHeading")}),r.jsx("div",{className:"grid gap-5 md:grid-cols-2",children:u.map((f,w)=>{const k=n$[w]??fo;return r.jsxs("div",{className:"rounded-2xl border border-border bg-card p-7 shadow-sm",children:[r.jsxs("div",{className:"mb-4 flex items-center justify-between gap-3",children:[r.jsx(k,{className:"h-6 w-6 text-accent"}),r.jsx("span",{className:"rounded-full bg-accent/10 px-3 py-1 text-xs font-semibold text-accent",children:f.badge})]}),r.jsx("h3",{className:"mb-2 text-xl font-bold text-foreground",children:f.title}),r.jsx("p",{className:"leading-relaxed text-muted-foreground",children:f.body})]},f.title)})})]})}),r.jsx("section",{className:"bg-surface py-16 md:py-24",children:r.jsxs("div",{className:"mx-auto max-w-5xl px-5",children:[r.jsx("h2",{className:"mb-10 text-center text-3xl font-bold tracking-tight text-foreground md:text-[42px]",children:e("aiConnectors.choiceHeading")}),r.jsx("div",{className:"grid gap-5 md:grid-cols-2",children:h.map((f,w)=>{const k=t$[w]??mo;return r.jsxs("div",{className:"rounded-2xl border border-border bg-card p-7 shadow-sm",children:[r.jsx(k,{className:"mb-4 h-7 w-7 text-accent"}),r.jsx("h3",{className:"mb-2 text-xl font-bold text-foreground",children:f.title}),r.jsx("p",{className:"leading-relaxed text-muted-foreground",children:f.body}),f.link&&r.jsxs(_,{to:B("virtueleController",t),className:"mt-4 inline-flex items-center gap-1 font-semibold text-accent hover:opacity-80",children:[f.link," ",r.jsx(re,{className:"h-4 w-4"})]})]},f.title)})})]})}),r.jsx("section",{className:"py-16 md:py-24",children:r.jsxs("div",{className:"mx-auto max-w-3xl px-5",children:[r.jsx("h2",{className:"mb-8 text-center text-3xl font-bold tracking-tight text-foreground md:text-[42px]",children:e("aiConnectors.faqHeading")}),r.jsx("div",{className:"space-y-3",children:g.map(f=>r.jsxs("details",{className:"group rounded-2xl border border-border bg-card px-5 py-4",children:[r.jsxs("summary",{className:"flex cursor-pointer list-none items-center justify-between gap-4 font-semibold text-foreground",children:[f.q,r.jsx("span",{className:"text-xl text-accent transition-transform group-open:rotate-45",children:"+"})]}),r.jsx("p",{className:"mt-3 leading-relaxed text-muted-foreground",children:f.a})]},f.q))})]})}),r.jsxs("section",{className:"relative overflow-hidden bg-footer dark-surface py-20 md:py-24",children:[r.jsx("div",{className:"pointer-events-none absolute inset-0 bg-[radial-gradient(ellipse_60%_80%_at_50%_100%,hsl(var(--accent)/0.25),transparent)]","aria-hidden":!0}),r.jsxs("div",{className:"relative z-10 mx-auto max-w-3xl px-5 text-center",children:[r.jsx("h2",{className:"mb-4 text-3xl font-bold tracking-tight text-white md:text-[44px]",children:e("aiConnectors.ctaHeading")}),r.jsx("p",{className:"mb-8 text-lg text-white/80",children:e("aiConnectors.ctaBody")}),r.jsxs(_,{to:m,className:p,children:[e("aiConnectors.ctaPrimary")," ",r.jsx(re,{className:"h-4 w-4"})]})]})]})]}),r.jsx(Ne,{})]})},Ao=({title:e,intro:n,children:t})=>r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Be,{}),r.jsx(Ee,{}),r.jsx("main",{className:"pt-12 pb-20",children:r.jsxs("div",{className:"container mx-auto px-4 max-w-3xl",children:[r.jsx("h1",{className:"font-display text-3xl sm:text-5xl font-bold text-foreground mb-4 tracking-tight",children:e}),n&&r.jsx("p",{className:"text-muted-foreground text-base mb-10 italic",children:n}),r.jsx("article",{className:"prose prose-slate max-w-none prose-headings:font-display prose-headings:text-foreground prose-h2:text-2xl prose-h2:mt-10 prose-h2:mb-4 prose-h3:text-xl prose-h3:mt-6 prose-h3:mb-3 prose-p:text-foreground
13666/90 prose-p:leading-relaxed prose-li:text-foreground/90 prose-a:text-primary hover:prose-a:underline",children:t})]})}),r.jsx(Ne,{})]}),r$=()=>{const{i18n:e}=Y(),n=e.language!=="nl",t=e.language==="de"?"de":n?"en":"nl";return n?r.jsxs(r.Fragment,{children:[r.jsx(Se,{title:"Privacy Policy",description:'Smartbooks AI B.V. ("Smartbooks", "we", "us" or "our") wants to inform you about the ways we process your personal data. In this Privacy & Cookie Notice',pathByLocale:je("privacybeleid")}),r.jsxs(Ao,{title:"Privacy Policy",intro:"This Privacy & Cookie Notice was last updated on 27 November 2023 and applies to visitors of smartbooks.ai and users of our services.",children:[r.jsx("p",{children:'Smartbooks AI B.V. ("Smartbooks", "we", "us" or "our") wants to inform you about the way we process your personal data. In this Privacy & Cookie Notice we explain which personal data we collect, use and share.'}),r.jsx("p",{children:"Personal data means any information relating to a person who can be directly or indirectly identified on the basis of that information. This may include information such as names, contact details, (online) identifiers or other characteristics specific to that person."}),r.jsx("p",{children:'This Privacy & Cookie Notice applies when you visit our websites or events, or use our solutions and other services that refer or link to this notice ("Services"). This Privacy & Cookie Notice may be supplemented or replaced by additional privacy statements or terms provided to you from time to time.'}),r.jsx("h2",{children:"Who we are"}),r.jsx("p",{children:"Personal data provided to Smartbooks or collected by Smartbooks via our website is controlled by Smartbooks AI B.V., a company incorporated under Dutch law, with its registered office at Haarlemmerweg 331A, 1051 LH Amsterdam, the Netherlands, registered with the Dutch Chamber of Commerce under number 89636171."}),r.jsx("p",{children:'For questions about your personal data, please refer to the section "How to contact us" below.'}),r.jsx("h2",{children:"What personal data do we collect?"}),r.jsx("p",{children:"The type of personal data we collect depends on your relationship with us and the Services we provide to you. We may collect the following personal data about you:"}),r.jsxs("ul",{children:[r.jsx("li",{children:"Name and contact details, such as first and last name, email address, postal address, telephone number;"}),r.jsx("li",{children:"Work-related information, such as job title and other information about work or education;"}),r.jsx("li",{children:"Account details, such as passwords and other security information for authentication and access;"}),r.jsx("li",{children:"Financial information, such as bank account, credit and debit card numbers for processing payments;"}),r.jsx("li",{children:"Usage information, such as behavioural information about how you navigate our Services;"}),r.jsx("li",{children:"Computer, device and connection information, such as IP address, browser type and version, and location;"}),r.jsx("li",{children:"Audio and visual information, such as your voice and image as captured in photos, video or audio recordings;"}),r.jsx("li",{children:"Any other information shared by you via our websites, apps, webshops and other products and services."})]}),r.jsx("h2",{children:"How we collect personal data"}),r.jsxs("ul",{children:[r.jsx("li",{children:"Direct interactions, such as when you register for our Services or make a purchase;"}),r.jsx("li",{children:"Third-party data, such as information from third-party websites or other information you have made public;"}),r.jsx("li",{children:"Automated tracking technologies, such as information automatically collected about your interaction with our Services through cookies, web logs, beacons and internet tags."})]}),r.jsx("h2",{children:"How we use your personal data"}),r.jsx("p",{children:"Personal data is used for the purposes for which it was collected and may only be further used for legal or other legitimate purposes. We process personal data when necessary for the performance of a contract, for our legitimate interests, to comply with a legal obligation, or with your given consent."}),r.jsx("p",{children:"Our processing purposes include:"}),r.jsxs("ul",{children:[r.jsx("li",{children:"Registering users in Smartbooks;"}),r.jsx("li",{children:"Responding to data requests;"}),r.jsx("li",{children:"Managing licences, invoicing and reminders;"}),r.jsx("li",{children:"Answering user questions through our support platform;"}),r.jsx("li",{children:"Informing users about changes to our products and services;"}),r.jsx("li",{children:"Inviting users to events and trainings;"}),r.jsx("li",{children:"Other general business support purposes, including HR, procurement, financial and tax management, risk and compliance management, and external reporting."})]}),r.jsx("h2",{children:"Sharing your personal data"}),r.jsx("p",{children:"To provide you with the best possible Services, we may share certain information internally or with selected third parties. Parties with whom we may share data include:"}),r.jsxs("ul",{children:[r.jsx("li",{children:"our service providers, e.g. for managing or hosting services;"}),r.jsx("li",{children:"organisations involved in business transfers;"}),r.jsx("li",{children:"other parties, e.g. for external audits, compliance and risk management;"}),r.jsx("li",{children:"governments and regulators, as required under applicable law."})]}),r.jsxs("p",{children:["Smartbooks' use and transfer of information received from Google APIs adheres to the"," ",r.jsx("a",{href:"https://developers.google.com/terms/api-services-user-data-policy",target:"_blank",rel:"noopener noreferrer",children:"Google API Services 
13666User Data Policy"}),", including the Limited Use requirements. We do not share user data with third-party tools, including AI models."]}),r.jsx("h2",{children:"How long do we retain your personal data?"}),r.jsx("p",{children:"Your personal data is processed to the extent necessary for the performance of our obligations, and for the time necessary to achieve the purposes for which the information was collected, in accordance with our data retention policy and applicable data protection legislation."}),r.jsx("h2",{children:"How we protect your personal data"}),r.jsx("p",{children:"To ensure an appropriate level of security, we have implemented advanced technical and organisational security measures. In particular, we limit access to personal data on a need-to-know basis."}),r.jsx("h2",{children:"What are your rights?"}),r.jsxs("ul",{children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Right of access"}),": the right to obtain an overview of your personal data we process."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Right to rectification"}),": the right to ask us to correct inaccurate or incomplete data."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Right to erasure"}),": the right to request that we delete your personal data to the extent permitted by law."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Right to data portability"}),": the right to ask us to transfer your personal data directly to you."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Right to restriction of processing"}),": the right to request that we restrict or stop processing your personal data."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Right to object"}),": the right to object to the processing of your personal data."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Withdrawal of consent"}),": the right to withdraw your consent for processing at any time."]})]}),r.jsx("h2",{children:"The use of cookies"}),r.jsx("p",{children:"We use cookies to optimise our websites and to analyse website traffic. Sometimes, after your explicit consent, we use third-party cookies for marketing and social media purposes."}),r.jsxs("p",{children:["See our ",r.jsx("a",{href:B("cookiebeleid",t),children:"Cookie Policy"})," for more details."]}),r.jsx("h2",{children:"Links to other websites"}),r.jsx("p",{children:"Our websites may contain links to other Smartbooks or third-party websites, which may have privacy and cookie statements that differ from ours. We are not responsible for the collection, processing or disclosure of personal data via such websites."}),r.jsx("h2",{children:"How to contact us"}),r.jsxs("p",{children:["For questions about the processing of your personal data or to exercise any of your rights, you can contact us at"," ",r.jsx("a",{href:"mailto:[email protected]",children:"[email protected]"})," or"," ",r.jsx("a",{href:"tel:+31853039670",children:"+31 85 303 9670"}),"."]}),r.jsx("p",{children:"If you believe we are not responding adequately or you disagree with our privacy practices, you have the right to lodge a complaint with the Dutch Data Protection Authority."}),r.jsx("h2",{children:"Changes to this notice"}),r.jsx("p",{children:"From time to time we may update this Privacy & Cookie Notice. When changes are made, we will add a new date to this statement."}),r.jsx("p",{className:"text-sm text-muted-foreground mt-8",children:"© Smartbooks AI B.V., version 1.5, November 2023."})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(Se,{title:"Privacybeleid",description:"Privacy & Cookie Notice van Smartbooks AI B.V. — hoe wij persoonsgegevens verzamelen, gebruiken en beschermen.",pathByLocale:je("privacybeleid")}),r.jsxs(Ao,{title:"Privacybeleid",intro:"Deze Privacy & Cookie Notice is voor het laatst bijgewerkt op 27 november 2023 en is van toepassing op bezoekers van smartbooks.ai en gebruikers van onze diensten.",children:[r.jsx("p",{children:'Smartbooks AI B.V. ("Smartbooks", "wij", "ons" of "onze") wil u informeren over de manier waarop wij uw persoonsgegevens verwerken. In deze Privacy & Cookie Notice leggen we uit welke persoonsgegevens we verzamelen, gebruiken en delen.'}),r.jsx("p",{children:"Persoonsgegevens betekent alle gegevens die betrekking hebben op een persoon die direct of indirect kan worden geïdentificeerd op basis van die informatie. Dit kan informatie omvatten zoals namen, contactgegevens, (online) i
13666dentificatiegegevens, online identifiers of andere kenmerken die specifiek zijn voor die persoon."}),r.jsx("p",{children:'Deze Privacy & Cookie Notice is van toepassing wanneer u onze websites of evenementen bezoekt, of onze oplossingen en andere diensten gebruikt die naar deze notice verwijzen of er een link naar weergeven ("Diensten"). Deze Privacy & Cookie Notice kan worden aangevuld of vervangen door aanvullende privacyverklaringen of voorwaarden die u van tijd tot tijd worden verstrekt.'}),r.jsx("h2",{children:"Wie wij zijn"}),r.jsx("p",{children:"Persoonsgegevens die aan Smartbooks worden verstrekt of door Smartbooks worden verzameld via onze website worden beheerd door Smartbooks AI B.V., een vennootschap opgericht naar Nederlands recht, statutair gevestigd aan de Haarlemmerweg 331A, 1051 LH Amsterdam, Nederland, ingeschreven bij de Kamer van Koophandel onder nummer 89636171."}),r.jsx("p",{children:"Voor vragen over uw persoonsgegevens verwijzen wij u naar de sectie 'Hoe u contact met ons kunt opnemen' hieronder."}),r.jsx("h2",{children:"Welke persoonsgegevens verzamelen wij?"}),r.jsx("p",{children:"Het type persoonsgegevens dat wij verzamelen, hangt af van uw relatie met ons en de Diensten die wij aan u leveren. Wij kunnen de volgende persoonsgegevens over u verzamelen:"}),r.jsxs("ul",{children:[r.jsx("li",{children:"Naam en contactgegevens, zoals voor- en achternaam, e-mailadres, postadres, telefoonnummer;"}),r.jsx("li",{children:"Werkgerelateerde informatie, zoals functietitel en andere informatie over werk of opleiding;"}),r.jsx("li",{children:"Accountgegevens, zoals wachtwoorden en andere beveiligingsinformatie voor authenticatie en toegang;"}),r.jsx("li",{children:"Financiële informatie, zoals bankrekening-, creditcard- en debitcardnummers voor de verwerking van betalingen;"}),r.jsx("li",{children:"Gebruiksinformatie, zoals gedragsinformatie over hoe u door onze Diensten navigeert;"}),r.jsx("li",{children:"Computer-, apparaat- en verbindingsinformatie, zoals IP-adres, browsertype en -versie en locatie;"}),r.jsx("li",{children:"Audio- en visuele informatie, zoals uw stem en beeld zoals vastgelegd in foto's, video- of audio-opnamen;"}),r.jsx("li",{children:"Alle andere informatie die door u wordt gedeeld via onze websites, apps, webshops en andere producten en diensten."})]}),r.jsx("h2",{children:"Hoe wij persoonsgegevens verzamelen"}),r.jsxs("ul",{children:[r.jsx("li",{children:"Directe interacties, zoals wanneer u zich registreert voor onze Diensten of een aankoop doet;"}),r.jsx("li",{children:"Gegevens van derden, zoals informatie op websites van derden of andere informatie die u openbaar heeft gemaakt;"}),r.jsx("li",{children:"Geautomatiseerde tracking-technologieën, zoals informatie die automatisch wordt verzameld over uw interactie met onze Diensten via cookies, weblogs, beacons en internettags."})]}),r.jsx("h2",{children:"Hoe wij uw persoonsgegevens gebruiken"}),r.jsx("p",{children:"De persoonsgegevens worden gebruikt voor de doeleinden waarvoor ze zijn verzameld en mogen alleen verder worden gebruikt voor wettelijke of andere legitieme doeleinden. Wij verwerken persoonsgegevens als dit noodzakelijk is voor de uitvoering van een overeenkomst, ten behoeve van onze gerechtvaardigde belangen, voor naleving van een wettelijke verplichting of met uw gegeven toestemming."}),r.jsx("p",{children:"Onze verwerkingsdoeleinden omvatten:"}),r.jsxs("ul",{children:[r.jsx("li",{children:"Het registreren van gebruikers in Smartbooks;"}),r.jsx("li",{children:"Het beantwoorden van gegevensverzoeken;"}),r.jsx("li",{children:"Het beheren van licenties, facturatie en herinneringen;"}),r.jsx("li",{children:"Het beantwoorden van gebruikersvragen via ons supportplatform;"}),r.jsx("li",{children:"Het informeren van gebruikers over wijzigingen in onze producten en diensten;"}),r.jsx("li",{children:"Het uitnodigen van gebruikers voor evenementen en trainingen;"}),r.jsx("li",{children:"Andere algemene bedrijfsondersteunende doeleinden, waaronder HR, inkoop, financieel en fiscaal beheer, risico- en compliancebeheer, en externe rapportage."})]}),r.jsx("h2",{children:"Het delen van uw persoonsgegevens"}),r.jsx("p",{children:"Om u de best mogelijke Diensten te kunnen leveren, kunnen wij bepaalde informatie intern of met geselecteerde derden delen. Partijen waarmee wij gegevens kunnen delen zijn onder andere:"}),r.jsxs("ul",{children:[r.jsx("li",{children:"onze dienstverleners, bijv. voor het beheren of hosten van diensten;"}),r.jsx("li",{children:"organisaties die betrokken zijn bij bedrijfsoverdrachten;"}),r.jsx("li",{children:"andere partijen, bijv. voor externe audits, compliance en risicobeheer;"}),r.jsx("li",{children:"overheden en toezichthouders, zoals vereist onder de toepasselijke wetgeving."})]}),r.jsxs("p",{children:["Het gebruik en de overdracht door Smartbooks van informatie ontvangen van Google API's voldoet aan het"," ",r.jsx("a",{href:"https://developers.google.com/terms/api-services-user-data-policy",target:"_blank",rel:"noopener noreferrer",children:"Google API Services 
13666User Data Policy"}),", inclusief de Limited Use-vereisten. Wij delen geen gebruikersgegevens met derde tools, inclusief AI-modellen."]}),r.jsx("h2",{children:"Hoe lang bewaren wij uw persoonsgegevens?"}),r.jsx("p",{children:"Uw persoonsgegevens worden verwerkt voor zover noodzakelijk voor de uitvoering van onze verplichtingen, en voor de tijd die nodig is om de doeleinden te bereiken waarvoor de informatie is verzameld, in overeenstemming met ons gegevensbewaarbeleid en de toepasselijke wetgeving inzake gegevensbescherming."}),r.jsx("h2",{children:"Hoe wij uw persoonsgegevens beschermen"}),r.jsx("p",{children:"Om een passend beveiligingsniveau te waarborgen hebben wij geavanceerde technische en organisatorische beveiligingsmaatregelen geïmplementeerd. In het bijzonder beperken wij de toegang tot persoonsgegevens tot een 'need-to-know' basis."}),r.jsx("h2",{children:"Wat zijn uw rechten?"}),r.jsxs("ul",{children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Recht op inzage"}),": het recht om een overzicht te krijgen van uw persoonsgegevens die wij verwerken."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Recht op rectificatie"}),": het recht om ons te vragen onjuiste of onvolledige gegevens te corrigeren."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Recht op verwijdering"}),": het recht om te verzoeken dat wij uw persoonsgegevens verwijderen voor zover toegestaan door de wet."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Recht op gegevensoverdraagbaarheid"}),": het recht om ons te vragen uw persoonsgegevens rechtstreeks aan u over te dragen."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Recht op beperking van de verwerking"}),": het recht om te verzoeken dat wij de verwerking van uw persoonsgegevens beperken of stopzetten."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Recht van bezwaar"}),": het recht om bezwaar te maken tegen de verwerking van uw persoonsgegevens."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Intrekking van toestemming"}),": het recht om uw toestemming voor de verwerking op elk moment in te trekken."]})]}),r.jsx("h2",{children:"Het gebruik van cookies"}),r.jsx("p",{children:"Wij gebruiken cookies om onze websites te optimaliseren en het websiteverkeer te analyseren. Soms gebruiken wij, na uw uitdrukkelijke toestemming, cookies van derden voor marketing- en social-media-doeleinden."}),r.jsxs("p",{children:["Zie ons ",r.jsx("a",{href:B("cookiebeleid",t),children:"Cookiebeleid"})," voor meer details."]}),r.jsx("h2",{children:"Links naar andere websites"}),r.jsx("p",{children:"Onze websites kunnen links bevatten naar andere Smartbooks- of websites van derden, die mogelijk privacy- en cookie-verklaringen hebben die afwijken van de onze. Wij zijn niet verantwoordelijk voor de verzameling, verwerking of openbaarmaking van persoonsgegevens via dergelijke websites."}),r.jsx("h2",{children:"Hoe u contact met ons kunt opnemen"}),r.jsxs("p",{children:["Voor vragen over de verwerking van uw persoonsgegevens of om een van uw rechten uit te oefenen, kunt u contact met ons opnemen via"," ",r.jsx("a",{href:"mailto:[email protected]",children:"[email protected]"})," of"," ",r.jsx("a",{href:"tel:+31853039670",children:"+31 85 303 9670"}),"."]}),r.jsx("p",{children:"Indien u meent dat wij niet adequaat reageren of het oneens bent met onze privacypraktijken, heeft u het recht om een klacht in te dienen bij de Autoriteit Persoonsgegevens."}),r.jsx("h2",{children:"Wijzigingen in deze notice"}),r.jsx("p",{children:"Van tijd tot tijd kunnen wij deze Privacy & Cookie Notice bijwerken. Bij wijzigingen voegen wij een nieuwe datum toe aan deze verklaring."}),r.jsx("p",{className:"text-sm text-muted-foreground mt-8",children:"© Smartbooks AI B.V., versie 1.5, november 2023."})]})]})},a$=()=>{const{i18n:e}=Y(),n=e.language!=="nl",t=e.language==="de"?"de":n?"en":"nl";return n?r.jsxs(r.Fragment,{children:[r.jsx(Se,{title:"Cookie Policy",description:"Smartbooks Cookie Statement — which cookies we use, why, and how you can manage your preferences.",pathByLocale:je("cookiebeleid")}),r.jsxs(Ao,{title:"Cookie Policy",intro:"This Cookie Statement was last updated on 4 September 2026 and applies to citizens and lawful permanent residents of the European Economic Area and Switzerland.",children:[r.jsx("h2",{children:"1. Introduction"}),r.jsxs("p",{children:["Our site, ",r.jsx("a",{href:B("index",t),children:"smartbooks.ai"}),' (hereinafter: "the site") uses cookies and other related technologies (hereinafter collectively referred to as: "cookies"). Cookies are also placed by third parties we have engaged. In this document we inform you about the use of cookies on our site.']}),r.jsx("h2",{children:"2. What are cookies?"}),r.jsx("p",{children:"A cookie is a small, simple file sent together with pages of this site and stored by your browser on the hard drive of your computer or other device. The information stored therein may be returned to our servers or to the servers of the relevant third parties during a subsequent visit."}),r.jsx("h2",{children:"3. What are scripts?"}),r.jsx("p",{children:"A script is a piece of program code used to make our site function properly and interactively. This code is executed on our server, or on your device."}),r.jsx("h2",{children:"4. What is a web beacon?"}),r.jsx("p",{children:"A web beacon (or pixel tag) is a small, invisible piece of text or image on a site that is used to map traffic on a site."}),r.jsx("h2",{children:"5. Cookies"}
13666),r.jsx("h3",{children:"5.1 Technical or functional cookies"}),r.jsx("p",{children:"Some cookies ensure that certain parts of the site function properly and that your user preferences are remembered. We may place these cookies without your consent."}),r.jsx("h3",{children:"5.2 Statistics cookies"}),r.jsx("p",{children:"We use statistics cookies to optimise the experience for our users. We ask your consent to place statistics cookies."}),r.jsx("h3",{children:"5.3 Advertising cookies"}),r.jsx("p",{children:"On this site we use advertising cookies in order to gain insight into campaign results."}),r.jsx("h3",{children:"5.4 Marketing/Tracking cookies"}),r.jsx("p",{children:"Marketing/tracking cookies are used to create user profiles in order to display advertisements or to track the user across this and various sites for similar marketing purposes. We ask your consent to place these."}),r.jsx("h2",{children:"6. Cookies placed"}),r.jsx("h3",{children:"6.1 Functional (always active)"}),r.jsxs("ul",{children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Smartbooks cookie preferences"})," (",r.jsx("code",{children:"sb-cookie-consent-v1"}),", local storage) — stores your cookie choice."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Google Tag Manager"})," (GTM-WR8WV7QW) — tag management; loads the services below only after your consent."]})]}),r.jsx("h3",{children:"6.2 Statistics (consent required)"}),r.jsxs("ul",{children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Google Analytics 4"})," (",r.jsx("code",{children:"_ga"}),", ",r.jsx("code",{children:"_ga_*"}),", ",r.jsx("code",{children:"_gid"}),", ",r.jsx("code",{children:"_gat"}),") — website usage statistics."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Microsoft Clarity"})," (",r.jsx("code",{children:"_clck"}),", ",r.jsx("code",{children:"_clsk"}),", ",r.jsx("code",{children:"CLID"}),") — heatmaps and session recordings to improve usability."]})]}),r.jsx("h3",{children:"6.3 Marketing (consent required)"}),r.jsxs("ul",{children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Google Ads / DoubleClick"})," (",r.jsx("code",{children:"_gcl_au"}),", ",r.jsx("code",{children:"test_cookie"}),", ",r.jsx("code",{children:"IDE"}),") — conversion measurement and remarketing."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Meta Pixel (Facebook)"})," (",r.jsx("code",{children:"_fbp"}),", ",r.jsx("code",{children:"fr"}),") — conversion measurement and advertising on Facebook/Instagram."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"LinkedIn Insight Tag"})," (",r.jsx("code",{children:"li_sugr"}),", ",r.jsx("code",{children:"bcookie"}),", ",r.jsx("code",{children:"lidc"}),", ",r.jsx("code",{children:"UserMatchHistory"}),") — conversion measurement and advertising on LinkedIn."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"HubSpot"})," (",r.jsx("code",{children:"hubspotutk"}),", ",r.jsx("code",{children:"__hstc"}),", ",r.jsx("code",{children:"__hssc"}),", ",r.jsx("code",{children:"__hssrc"}),") — forms, meeting scheduling and lead tracking. The HubSpot script is only loaded after your consent."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Leadfeeder"})," (",r.jsx("code",{children:"_lfa"}),") — recognising the company behind a website visit."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Apollo.io"})," — recognising business visitors and click tracking."]})]}),r.jsx("h3",{children:"6.4 Third parties without cookies (data transfer only)"}),r.jsxs("ul",{children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Google Fonts"})," — loading fonts; your IP address is transmitted to Google."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"logo.dev"})," — loading logos of integration partners."]})]}),r.jsxs("p",{children:['Do you not want statistics or marketing cookies? Choose "Only necessary" in the cookie banner, or change your choice at any time via ',r.jsx("strong",{children:"Cookie settings"})," in the footer."]}),r.jsx("h2",{children:"7. Consent"}),r.jsx("p",{children:'When you visit our site for the first time, we show you a pop-up explaining cookies. As soon as you click "Accept", you give us permission to use the categories of cookies and plug-ins you have selected as described 
13666in this cookie statement.'}),r.jsx("p",{children:"You can disable the use of cookies through your browser, but this may cause our site to no longer function properly."}),r.jsx("h2",{children:"8. Your rights regarding personal data"}),r.jsxs("p",{children:["You have, among other things, the right of access, rectification, erasure, restriction, objection and data portability. See our ",r.jsx("a",{href:B("privacybeleid",t),children:"Privacy Policy"})," for a complete description of your rights."]}),r.jsx("h2",{children:"9. Contact details"}),r.jsx("p",{children:"For questions and/or comments about our cookie policy, you can contact us:"}),r.jsxs("ul",{children:[r.jsx("li",{children:"Smartbooks AI B.V."}),r.jsx("li",{children:"Haarlemmerweg 331A, 1051 LH Amsterdam"}),r.jsx("li",{children:"The Netherlands"}),r.jsxs("li",{children:["Email: ",r.jsx("a",{href:"mailto:[email protected]",children:"[email protected]"})]}),r.jsxs("li",{children:["Phone: ",r.jsx("a",{href:"tel:+31853039670",children:"+31 85 303 9670"})]})]})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(Se,{title:"Cookiebeleid",description:"Cookieverklaring van Smartbooks — welke cookies wij gebruiken, waarom, en hoe u uw voorkeuren kunt beheren.",pathByLocale:je("cookiebeleid")}),r.jsxs(Ao,{title:"Cookiebeleid",intro:"Deze Cookieverklaring is voor het laatst bijgewerkt op 4 september 2026 en is van toepassing op burgers en wettelijke permanente inwoners van de Europese Economische Ruimte en Zwitserland.",children:[r.jsx("h2",{children:"1. Introductie"}),r.jsxs("p",{children:["Op onze site, ",r.jsx("a",{href:"/",children:"smartbooks.ai"}),' (hierna: "de site") wordt gebruikgemaakt van cookies en andere aanverwante technieken (hierna gezamenlijk: "cookies"). Ook via derden die door ons zijn ingeschakeld worden cookies geplaatst. In dit document informeren wij u over het gebruik van cookies op onze site.']}),r.jsx("h2",{children:"2. Wat zijn cookies?"}),r.jsx("p",{children:"Een cookie is een klein eenvoudig bestand dat samen met pagina's van deze site wordt verzonden en door uw browser op de harde schijf van uw computer of ander apparaat wordt opgeslagen. De daarin opgeslagen informatie kan tijdens een volgend bezoek terug worden gestuurd naar onze servers of naar de servers van de betreffende derde partijen."}),r.jsx("h2",{children:"3. Wat zijn scripts?"}),r.jsx("p",{children:"Een script is een stukje programmacode dat wordt gebruikt om onze site goed te laten functioneren en interactief te maken. Deze code wordt uitgevoerd op onze server, of op uw apparatuur."}),r.jsx("h2",{children:"4. Wat is een web beacon?"}),r.jsx("p",{children:"Een web beacon (ook pixel tag) is een klein, onzichtbaar stukje tekst of afbeelding op een site dat gebruikt wordt om verkeer op een site in kaart te brengen."}),r.jsx("h2",{children:"5. Cookies"}
13666),r.jsx("h3",{children:"5.1 Technische of functionele cookies"}),r.jsx("p",{children:"Sommige cookies zorgen ervoor dat bepaalde onderdelen van de site goed werken en dat uw gebruikersvoorkeuren bekend blijven. Deze cookies mogen wij plaatsen zonder dat u hier toestemming voor geeft."}),r.jsx("h3",{children:"5.2 Statistieken cookies"}),r.jsx("p",{children:"Wij gebruiken statistieken cookies om de beleving voor onze gebruikers te optimaliseren. Wij vragen uw toestemming om statistieken cookies te plaatsen."}),r.jsx("h3",{children:"5.3 Advertentie cookies"}),r.jsx("p",{children:"Op deze site maken we gebruik van advertentiecookies, met het doel om inzicht te krijgen in campagneresultaten."}),r.jsx("h3",{children:"5.4 Marketing/Tracking cookies"}),r.jsx("p",{children:"Marketing/tracking cookies worden gebruikt om gebruikersprofielen te maken met als doel advertenties te tonen of om de gebruiker te volgen op deze of verschillende sites voor soortgelijke marketingdoeleinden. Voor het plaatsen hiervan vragen wij uw toestemming."}),r.jsx("h2",{children:"6. Geplaatste cookies"}),r.jsx("h3",{children:"6.1 Functioneel (altijd actief)"}),r.jsxs("ul",{children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Smartbooks cookievoorkeuren"})," (",r.jsx("code",{children:"sb-cookie-consent-v1"}),", local storage) — bewaart uw cookiekeuze."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Google Tag Manager"})," (GTM-WR8WV7QW) — tagbeheer; laadt de onderstaande diensten pas na uw toestemming."]})]}),r.jsx("h3",{children:"6.2 Statistieken (toestemming vereist)"}),r.jsxs("ul",{children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Google Analytics 4"})," (",r.jsx("code",{children:"_ga"}),", ",r.jsx("code",{children:"_ga_*"}),", ",r.jsx("code",{children:"_gid"}),", ",r.jsx("code",{children:"_gat"}),") — statistieken over websitegebruik."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Microsoft Clarity"})," (",r.jsx("code",{children:"_clck"}),", ",r.jsx("code",{children:"_clsk"}),", ",r.jsx("code",{children:"CLID"}),") — heatmaps en sessieopnames om de gebruiksvriendelijkheid te verbeteren."]})]}),r.jsx("h3",{children:"6.3 Marketing (toestemming vereist)"}),r.jsxs("ul",{children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Google Ads / DoubleClick"})," (",r.jsx("code",{children:"_gcl_au"}),", ",r.jsx("code",{children:"test_cookie"}),", ",r.jsx("code",{children:"IDE"}),") — conversiemeting en remarketing."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Meta Pixel (Facebook)"})," (",r.jsx("code",{children:"_fbp"}),", ",r.jsx("code",{children:"fr"}),") — conversiemeting en advertenties op Facebook/Instagram."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"LinkedIn Insight Tag"})," (",r.jsx("code",{children:"li_sugr"}),", ",r.jsx("code",{children:"bcookie"}),", ",r.jsx("code",{children:"lidc"}),", ",r.jsx("code",{children:"UserMatchHistory"}),") — conversiemeting en advertenties op LinkedIn."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"HubSpot"})," (",r.jsx("code",{children:"hubspotutk"}),", ",r.jsx("code",{children:"__hstc"}),", ",r.jsx("code",{children:"__hssc"}),", ",r.jsx("code",{children:"__hssrc"}),") — formulieren, afspraakplanning en lead-tracking. Het HubSpot-script wordt pas na uw toestemming geladen."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Leadfeeder"})," (",r.jsx("code",{children:"_lfa"}),") — herkennen van het bedrijf achter een websitebezoek."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Apollo.io"})," — herkennen van zakelijke bezoekers en klik-tracking."]})]}),r.jsx("h3",{children:"6.4 Derde partijen zonder cookies (wel gegevensdoorgifte)"}),r.jsxs("ul",{children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Google Fonts"})," — laden van lettertypen; hierbij wordt uw IP-adres aan Google doorgegeven."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"logo.dev"})," — laden van logo's van integratiepartners."]})]}),r.jsxs("p",{children:['Wilt u geen statistieken- of marketingcookies? Kies dan "Alleen noodzakelijke" in de cookiebanner, of pas uw keuze op elk moment aan via ',r.jsx("strong",{children:"Cookie-instellingen"})," in de footer."]}),r.jsx("h2",{children:"7. Toestemming"}),r.jsx("p",{children:'Wanneer u onze site voor het eerst bezoekt, tonen wij u een pop-up met uitleg over cookies. Zodra u op "Accepteren" klikt, geeft u ons toestemming om de door u gekozen categorieën cookies en plug-ins te gebruiken zoals omschreven in deze cookieverklaring.'}),r.jsx("p",{children:"U kunt het gebruik van cookies via uw browser uitschakelen, maar dit kan ertoe leiden dat onze site niet meer goed werkt."}),r.jsx("h2",{children:"8. Uw rechten met betrekking tot persoonsgegevens"}),r.jsxs("p",{children:["U hebt onder meer recht op inzage, rectificatie, verwijdering, beperking, bezwaar en gegevensoverdraagbaarheid. Zie ons ",r.jsx("a",{href:B("privacybeleid",t),children:"Privacybeleid"})," voor een volledige beschrijving van uw rechten."]}),r.jsx("h2",{children:"9. Contactgegevens"}),r.jsx("p",{children:"Voor vragen en/of opmerkingen over ons cookiebeleid kunt u contact met ons opnemen:"}),r.jsxs("ul",{children:[r.jsx("li",{children:"Smartbooks AI B.V."}),r.jsx("li",{children:"Haarlemmerweg 331A, 1051 LH Amsterdam"}),r.jsx("li",{children:"Nederland"}),r.jsxs("li",{children:["E-mail: ",r.jsx("a",{href:"mailto:[email protected]",children:"[email protected]"})]}),r.jsxs("li",{children:["Telefoon: ",r.jsx("a",{href:"tel:+31853039670",children:"+31 85 303 9670"})]})]})]})]})},o$=()=>{const{i18n:e}=Y();return e.language!=="nl"?r.jsxs(r.Fragment,{children:[r.jsx(Se,{title:"General Terms",description:"General Terms of Smartbooks AI B.V.",pathByLocale:je("algemeneVoorwa
13666arden")}),r.jsxs(Ao,{title:"General Terms",intro:"Version August 2025 — applicable to all agreements with Smartbooks AI B.V.",children:[r.jsxs("a",{href:"/docs/algemene-voorwaarden-smartbooks.pdf",download:!0,className:"inline-flex items-center gap-2 rounded-md bg-primary/10 hover:bg-primary/20 border border-primary/20 px-4 py-2.5 text-primary font-medium transition-colors mb-8",children:[r.jsx(ww,{className:"h-4 w-4"}),"Download General Terms (PDF)"]}),r.jsx("h2",{children:"Questions?"}),r.jsxs("p",{children:["Do you have questions about these terms? Please contact us at"," ",r.jsx("a",{href:"mailto:[email protected]",children:"[email protected]"})," or"," ",r.jsx("a",{href:"tel:+31853039670",children:"+31 85 303 9670"}),"."]})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(Se,{title:"Algemene Voorwaarden",description:"De algemene voorwaarden van Smartbooks AI B.V.",pathByLocale:je("algemeneVoorwaarden")}),r.jsxs(Ao,{title:"Algemene Voorwaarden",intro:"Versie augustus 2025 — van toepassing op alle overeenkomsten met Smartbooks AI B.V.",children:[r.jsxs("a",{href:"/docs/algemene-voorwaarden-smartbooks.pdf",download:!0,className:"inline-flex items-center gap-2 rounded-md bg-primary/10 hover:bg-primary/20 border border-primary/20 px-4 py-2.5 text-primary font-medium transition-colors mb-8",children:[r.jsx(ww,{className:"h-4 w-4"}),"Algemene voorwaarden downloaden (PDF)"]}),r.jsx("h2",{children:"Vragen?"}),r.jsxs("p",{children:["Heeft u vragen over deze voorwaarden? Neem dan contact met ons op via"," ",r.jsx("a",{href:"mailto:[email protected]",children:"[email protected]"})," of"," ",r.jsx("a",{href:"tel:+31853039670",children:"+31 85 303 9670"}),"."]})]})]})},s$=()=>{const{t:e,i18n:n}=Y(),t=n.language==="de"?"de":n.language!=="nl"?"en":"nl";return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:e("seo.bedanktWebinar.title"),description:e("seo.bedanktWebinar.description"),pathByLocale:je("bedanktWebinar"),noindex:!0}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden pt-16 md:pt-24 pb-24 md:pb-32 min-h-[70vh] flex items-center",children:[r.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-midnight via-surface to-midnight"}),r.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_70%_60%_at_50%_30%,rgba(0,180,216,0.10),transparent)]"}),r.jsxs("svg",{className:"absolute top-0 right-0 w-1/2 h-full opacity-30 pointer-events-none",viewBox:"0 0 600 800",preserveAspectRatio:"none",fill:"none","aria-hidden":"true",children:[r.jsx("defs",{children:r.jsxs("linearGradient",{id:"thanksWave",x1:"0",y1:"0",x2:"1",y2:"1",children:[r.jsx("stop",{offset:"0%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.4"}),r.jsx("stop",{offset:"100%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0"})]})}),[0,1,2,3,4,5].map(i=>r.jsx("path",{d:`M ${300+i*30} 0 Q ${500+i*20} 400, ${200+i*40} 800`,stroke:"url(#thanksWave)",strokeWidth:"1",fill:"none"},i))]}),r.jsx("div",{className:"max-w-[1100px] mx-auto px-5 md:px-10 lg:px-16 relative z-10 w-full",children:r.jsxs("div",{className:"max-w-3xl animate-fade-in-up",children:[r.jsxs("div",{className:"inline-flex items-center gap-2 mb-6 px-4 py-2 rounded-full bg-turquoise/15 border border-turquoise/30",children:[r.jsx(Yn,{className:"h-4 w-4 text-turquoise"}),r.jsx("span",{className:"text-turquoise text-sm font-medium",children:"Aanmelding ontvangen"})]}),r.jsx("h1",{className:"text-[36px] md:text-[52px] lg:text-[64px] font-bold leading-[1.1] tracking-[-0.02em] text-white mb-6",children:"Bedankt voor jouw aanmelding"}),r.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl",children:"Je ontvangt een e-mail met daarin een link naar het webinar."}),r.jsxs("div",{className:"flex flex-wrap gap-4",children:[r.jsxs(_,{to:B("index",t),className:"btn-primary inline-flex items-center gap-2",children:["Terug naar home ",r.jsx(re,{className:"h-4 w-4"})]}),r.jsx(_,{to:B("kenniscentrum",t),className:"inline-flex items-center gap-2 px-6 py-3 rounded-lg border border-turquoise/40 text-white hover:bg-turquoise/10 transition-colors",children:"Verken het kenniscentrum"})]})]})})]}),r.jsx(Ne,{})]})},l$=()=>{const{i18n:e}=Y(),n=e.language==="de"?"de":e.language!=="nl"?"en":"nl",i=n!=="nl"?{badge:"Request received",title:"Thank y
13666ou for requesting the whitepaper",body:"You will receive an email with a link to this PDF.",home:"Back to home",kc:"Explore the knowledge center",seoTitle:"Thank you — Whitepaper",seoDescription:"Thank you for requesting the Smartbooks whitepaper. Check your inbox for the download link."}:{badge:"Aanvraag ontvangen",title:"Bedankt voor het aanvragen van de whitepaper",body:"Je ontvangt een email met daarin een link naar deze PDF.",home:"Terug naar home",kc:"Verken het kenniscentrum",seoTitle:"Bedankt — Whitepaper",seoDescription:"Bedankt voor het aanvragen van de Smartbooks whitepaper. Check je inbox voor de downloadlink."};return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:i.seoTitle,description:i.seoDescription,pathByLocale:je("bedanktWhitepaper"),noindex:!0}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden pt-16 md:pt-24 pb-24 md:pb-32 min-h-[70vh] flex items-center",children:[r.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-midnight via-surface to-midnight"}),r.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_70%_60%_at_50%_30%,rgba(0,180,216,0.10),transparent)]"}),r.jsxs("svg",{className:"absolute top-0 right-0 w-1/2 h-full opacity-30 pointer-events-none",viewBox:"0 0 600 800",preserveAspectRatio:"none",fill:"none","aria-hidden":"true",children:[r.jsx("defs",{children:r.jsxs("linearGradient",{id:"thanksWpWave",x1:"0",y1:"0",x2:"1",y2:"1",children:[r.jsx("stop",{offset:"0%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.4"}),r.jsx("stop",{offset:"100%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0"})]})}),[0,1,2,3,4,5].map(a=>r.jsx("path",{d:`M ${300+a*30} 0 Q ${500+a*20} 400, ${200+a*40} 800`,stroke:"url(#thanksWpWave)",strokeWidth:"1",fill:"none"},a))]}),r.jsx("div",{className:"max-w-[1100px] mx-auto px-5 md:px-10 lg:px-16 relative z-10 w-full",children:r.jsxs("div",{className:"max-w-3xl animate-fade-in-up",children:[r.jsxs("div",{className:"inline-flex items-center gap-2 mb-6 px-4 py-2 rounded-full bg-turquoise/15 border border-turquoise/30",children:[r.jsx(Yn,{className:"h-4 w-4 text-turquoise"}),r.jsx("span",{className:"text-turquoise text-sm font-medium",children:i.badge})]}),r.jsx("h1",{className:"text-[36px] md:text-[52px] lg:text-[64px] font-bold leading-[1.1] tracking-[-0.02em] text-white mb-6",children:i.title}),r.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl",children:i.body}),r.jsxs("div",{className:"flex flex-wrap gap-4",children:[r.jsxs(_,{to:B("index",n),className:"btn-primary inline-flex items-center gap-2",children:[i.home," ",r.jsx(re,{className:"h-4 w-4"})]}),r.jsx(_,{to:B("kenniscentrum",n),className:"inline-flex items-center gap-2 px-6 py-3 rounded-lg border border-turquoise/40 text-white hover:bg-turquoise/10 transition-colors",children:i.kc})]})]})})]}),r.jsx(Ne,{})]})},d$=()=>{const{i18n:e}=Y(),t=(e.language==="de"?"de":e.language!=="nl"?"en":"nl")!=="nl",i=t?{badge:"Request received",title:"Thank you for your demo request",body:"We will contact you shortly to schedule your personal demo.",home:"Back to home",kc:"Explore the knowledge center",seoTitle:"Thank you — Demo",seoDescription:"Thank you for requesting a Smartbooks demo. We will contact you shortly."}:{badge:"Aanvraag ontvangen",title:"Bedankt voor je demo-aanvraag",body:"We nemen zo spoedig mogelijk contact met je op om je persoonlijke demo in te plannen.",home:"Terug naar home",kc:"Verken het kenniscentrum",seoTitle:"Bedankt — Demo",seoDescription:"Bedankt voor je Smartbooks demo-aanvraag. We nemen spoedig contact met je op."};return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:i.seoTitle,description:i.seoDescription,pathByLocale:je("bedanktDemo"),noindex:!0}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden pt-16 md:pt-24 pb-24 md:pb-32 min-h-[70vh] flex items-center",children:[r.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-midnight via-surface to-midnight"}),r.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_70%_60%_at_50%_30%,rgba(0,180,216,0.10),transparent)]"}),r.jsxs("svg",{className:"absolute top-0 right-0 w-1/2 h-full opacity-30 pointer-events-none",viewBox:"0 0 600 800",preserveAspectRatio:"none",fill:"none","aria-hidden":"true",children:[r.jsx("defs",{children:r.jsxs("linearGradient",{id:"thanksDemoWave",x1:"0",y1:"0",x2:"1",y2:"1",children:[r.jsx("stop",{offset:"0%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.4"}),r.jsx("stop",{offset:"100%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0"})]})}),[0,1,2,3,4,5].map(a=>r.jsx("path",{d:`M ${300+a*30} 0 Q ${500+a*20} 400, ${200+a*40}
13666 800`,stroke:"url(#thanksDemoWave)",strokeWidth:"1",fill:"none"},a))]}),r.jsx("div",{className:"max-w-[1200px] mx-auto px-5 md:px-10 lg:px-16 relative z-10 w-full",children:r.jsxs("div",{className:"grid lg:grid-cols-2 gap-10 lg:gap-14 items-start",children:[r.jsxs("div",{className:"animate-fade-in-up",children:[r.jsxs("div",{className:"inline-flex items-center gap-2 mb-6 px-4 py-2 rounded-full bg-turquoise/15 border border-turquoise/30",children:[r.jsx(Yn,{className:"h-4 w-4 text-turquoise"}),r.jsx("span",{className:"text-turquoise text-sm font-medium",children:i.badge})]}),r.jsx("h1",{className:"text-[32px] md:text-[44px] lg:text-[52px] font-bold leading-[1.1] tracking-[-0.02em] text-white mb-6",children:i.title}),r.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed",children:i.body})]}),r.jsxs("div",{className:"bg-slate-100 rounded-2xl p-6 md:p-8 shadow-xl border border-slate-300",children:[r.jsx("h2",{className:"font-display text-xl font-bold text-slate-800 mb-1",children:t?"Tell us a bit more":"Vertel ons iets meer"}),r.jsx("p",{className:"text-slate-600 text-sm mb-5",children:t?"So we can prepare the right demo for you.":"Zodat we de juiste demo voor je kunnen voorbereiden."}),r.jsx(Ko,{portalId:"144146156",formId:t?"acf55c92-fab7-4559-9afc-38a547c5aadc":"86114292-7cf0-464e-84e4-c550ca4ffa5c",region:"eu1"})]})]})})]}),r.jsx(Ne,{})]})},c$=()=>{const{i18n:e}=Y(),n=e.language==="de"?"de":e.language!=="nl"?"en":"nl",i=n!=="nl"?{badge:"Message received",title:"Thank you for contacting us",body:"We have received your message and will get back to you as soon as possible.",home:"Back to home",kc:"Explore the knowledge center",seoTitle:"Thank you — Contact",seoDescription:"Thank you for contacting Smartbooks. We will get back to you shortly."}:{badge:"Bericht ontvangen",title:"Bedankt voor je bericht",body:"We hebben je bericht ontvangen en nemen zo spoedig mogelijk contact met je op.",home:"Terug naar home",kc:"Verken het kenniscentrum",seoTitle:"Bedankt — Contact",seoDescription:"Bedankt voor je bericht aan Smartbooks. We nemen spoedig contact met je op."};return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:i.seoTitle,description:i.seoDescription,pathByLocale:je("bedanktContact"),noindex:!0}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden pt-16 md:pt-24 pb-24 md:pb-32 min-h-[70vh] flex items-center",children:[r.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-midnight via-surface to-midnight"}),r.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_70%_60%_at_50%_30%,rgba(0,180,216,0.10),transparent)]"}),r.jsxs("svg",{className:"absolute top-0 right-0 w-1/2 h-full opacity-30 pointer-events-none",viewBox:"0 0 600 800",preserveAspectRatio:"none",fill:"none","aria-hidden":"true",children:[r.jsx("defs",{children:r.jsxs("linearGradient",{id:"thanksContactWave",x1:"0",y1:"0",x2:"1",y2:"1",children:[r.jsx("stop",{offset:"0%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.4"}),r.jsx("stop",{offset:"100%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0"})]})}),[0,1,2,3,4,5].map(a=>r.jsx("path",{d:`M ${300+a*30} 0 Q ${500+a*20} 400, ${200+a*40} 800`,stroke:"url(#thanksContactWave)",strokeWidth:"1",fill:"none"},a))]}),r.jsx("div",{className:"max-w-[1100px] mx-auto px-5 md:px-10 lg:px-16 relative z-10 w-full",children:r.jsxs("div",{className:"max-w-3xl animate-fade-in-up",children:[r.jsxs("div",{className:"inline-flex items-center gap-2 mb-6 px-4 py-2 rounded-full bg-turquoise/15 border border-turquoise/30",children:[r.jsx(Yn,{className:"h-4 w-4 text-turquoise"}),r.jsx("span",{className:"text-turquoise text-sm font-medium",children:i.badge})]}),r.jsx("h1",{className:"text-[36px] md:text-[52px] lg:text-[64px] font-bold leading-[1.1] tracking-[-0.02em] text-white mb-6",children:i.title}),r.jsx("p",{className:"text-secondary text-lg md:text-xl leading-relaxed mb-10 max-w-2xl",children:i.body}),r.jsxs("div",{className:"flex flex-wrap gap-4",children:[r.jsxs(_,{to:B("index",n),className:"btn-primary inline-flex items-center gap-2",children:[i.home," ",r.jsx(re,{className:"h-4 w-4"})]}),r.jsx(_,{to:B("kenniscentrum",n),className:"inline-flex items-center gap-2 px-6 py-3 rounded-lg border border-turquoise/40 text-white hover:bg-turquoise/10 transition-colors",children:i.kc})]})]})})]}),r.jsx(Ne,{})]})},u$="https://app.smartbooks.ai",h$=()=>{const{i18n:e}=Y(),n=e.language==="de"?"de":e.language!=="nl"?"en":"nl",i=n!=="nl"?{title:"QuickBooks Disconnected",crumbHome:"Home",crumbCurrent:"QuickBooks Disconnected",intro:"You have disconnected from QuickBooks but you can easily re-connnect. You can do so by following the below steps:",steps:["Click the button 'Re-connect to QuickBooks', which leads you to our Smartbooks app.","Log in to your Smartbooks account.","In the top-right corner, click on the menu button (three lines).","Navigate to Admin Console > Settings > Integration.","Set up the connection with QuickBooks."],cta:"Re-connect to QuickBooks",seoTitle:"QuickBooks Disconnected",seoDescription:"You have disconnected from QuickBooks. Follow the steps to re-connect QuickBooks with Smartbooks."}:{title:"QuickBooks Disconnected",crumbHome:"Home",crumbCurrent:"QuickBooks Disconnected",intro:"Je bent losgekoppeld van QuickBooks, maar je kunt eenvoudig opnieuw verbinden. V
13666olg hiervoor de onderstaande stappen:",steps:["Klik op de knop 'Re-connect to QuickBooks', deze brengt je naar onze Smartbooks-app.","Log in op je Smartbooks-account.","Klik rechtsboven op de menuknop (drie streepjes).","Ga naar Admin Console > Settings > Integration.","Stel de verbinding met QuickBooks in."],cta:"Re-connect to QuickBooks",seoTitle:"QuickBooks Disconnected",seoDescription:"Je bent losgekoppeld van QuickBooks. Volg de stappen om QuickBooks opnieuw te verbinden met Smartbooks."};return r.jsxs("div",{className:"min-h-screen bg-background",children:[r.jsx(Se,{title:i.seoTitle,description:i.seoDescription,pathByLocale:je("quickbooksDisconnected"),noindex:!0}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("section",{className:"relative overflow-hidden dark-surface bg-footer pt-16 md:pt-24 pb-16 md:pb-20",children:[r.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_70%_60%_at_50%_30%,rgba(0,180,216,0.10),transparent)]"}),r.jsxs("svg",{className:"absolute inset-0 w-full h-full opacity-30 pointer-events-none",viewBox:"0 0 1200 400",preserveAspectRatio:"none",fill:"none","aria-hidden":"true",children:[r.jsx("defs",{children:r.jsxs("linearGradient",{id:"qbDisconnectWave",x1:"0",y1:"0",x2:"1",y2:"1",children:[r.jsx("stop",{offset:"0%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0.5"}),r.jsx("stop",{offset:"100%",stopColor:"hsl(var(--turquoise))",stopOpacity:"0"})]})}),[0,1,2,3,4,5,6,7].map(a=>r.jsx("path",{d:`M 0 ${50+a*30} Q 600 ${a*40}, 1200 ${80+a*30}`,stroke:"url(#qbDisconnectWave)",strokeWidth:"1",fill:"none"},a))]}),r.jsxs("div",{className:"max-w-[1100px] mx-auto px-5 md:px-10 lg:px-16 relative z-10",children:[r.jsx("h1",{className:"text-[36px] md:text-[56px] lg:text-[72px] font-bold leading-[1.05] tracking-[-0.02em] text-white mb-4",children:i.title}),r.jsxs("nav",{"aria-label":"Breadcrumb",className:"text-sm text-white/80",children:[r.jsx(_,{to:B("index",n),className:"underline hover:text-turquoise",children:i.crumbHome}),r.jsx("span",{className:"mx-2",children:"-"}),r.jsx("span",{children:i.crumbCurrent})]})]})]}),r.jsx("section",{className:"bg-background py-16 md:py-20",children:r.jsxs("div",{className:"max-w-[1100px] mx-auto px-5 md:px-10 lg:px-16",children:[r.jsx("p",{className:"text-foreground text-lg leading-relaxed mb-8",children:i.intro}),r.jsx("ol",{className:"list-decimal pl-6 space-y-3 text-foreground text-base md:text-lg mb-10",children:i.steps.map((a,o)=>r.jsx("li",{className:"leading-relaxed",children:a},o))}),r.jsxs("a",{href:u$,className:"btn-primary inline-flex items-center gap-2",rel:"noopener",children:[i.cta," ",r.jsx(re,{className:"h-4 w-4"})]})]})}),r.jsx(Ne,{})]})},g$=()=>{const{t:e}=Y();return r.jsxs(r.Fragment,{children:[r.jsx(Se,{title:e("seo.whitepapers.title"),description:e("seo.whitepapers.description"),pathByLocale:je("whitepapers")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsx("main",{className:"container mx-auto px-4 py-20 md:py-28",children:r.jsxs("div",{className:"max-w-2xl mx-auto",children:[r.jsxs("header",{className:"mb-10 text-center",children:[r.jsx("h1",{className:"font-display text-3xl md:text-4xl font-bold tracking-[-0.02em] text-foreground mb-4",children:"Whitepapers"}),r.jsx("p",{className:"text-muted-foreground",children:"Vul het formulier in en ontvang de whitepaper direct in je inbox."})]}),r.jsx("div",{className:"rounded-2xl border border-turquoise/20 bg-slate-50 p-6 md:p-8 shadow-[0_8px_28px_-12px_rgba(15,25,35,0.12)]",children:r.jsx(Ko,{portalId:"144146156",formId:"6b5c1c86-3cbc-490a-9b80-1ef38dc5b481",region:"eu1"})})]})}),r.jsx(Ne,{})]})},m$="/assets/excel-addin-DW3K2Nlx.png",p$=()=>{const{i18n:e}=Y(),n=e.language==="de"?"de":e.language!=="nl"?"en":"nl",t=n!=="nl",i=[{icon:qa,label:"Plug-and-play"},{icon:Bo,label:t?"Live in days":"Live in dagen"},{icon:yr,label:t?"Secure & GDPR-compliant":"Veilig & GDPR-compliant"}],a=[{icon:$i,title:t?"Ledger, dimensions & cost centres":"Grootboek, dimensies & kostenplaatsen",body:t?"Full chart of accounts including all dimensions and cost centres — not just totals.":"Volledig grootboek inclusief alle dimensies en kostenplaatsen — geen totalen, maar de echte data."},{icon:lb,title:t?"Real-time automatic sync":"Real-time automatische sync",body:t?"Transactions and invoices flow into Smartbooks automatically every day. No exp
13666orts, no manual upload.":"Transacties en facturen lopen elke dag automatisch in Smartbooks binnen. Geen exports, geen handmatig uploaden."},{icon:ab,title:t?"Historical data included":"Historische data wordt meegeladen",body:t?"We load your full history during onboarding so you can compare, consolidate and forecast from day one.":"We laden je volledige historie mee tijdens onboarding, zodat je vanaf dag één kunt vergelijken, consolideren en forecasten."}],o=[{icon:nD,label:"Volumes"},{icon:zi,label:t?"FTEs":"FTE's"},{icon:sD,label:t?"Production":"Productie"},{icon:Do,label:t?"Revenue per channel":"Omzet per kanaal"}];return r.jsxs(r.Fragment,{children:[r.jsx(Se,{title:t?"Integrations":"Integraties",description:t?"Smartbooks integrates with every accounting system, operational platform and BI tool — Exact, Twinfield, AFAS, QuickBooks, Power BI, Excel and 300+ more.":"Smartbooks koppelt met elk boekhoudsysteem, operationeel platform en BI-tool — Exact, Twinfield, AFAS, QuickBooks, Power BI, Excel en 300+ meer.",pathByLocale:je("integraties")}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("main",{className:"bg-background",children:[r.jsxs("section",{className:"relative pt-24 pb-16 md:pt-32 md:pb-20 overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 gradient-mesh opacity-60"}),r.jsx("div",{className:"container mx-auto px-4 relative z-10",children:r.jsxs("div",{className:"max-w-3xl mx-auto text-center animate-fade-in-up",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-4 block",children:t?"Integrations":"Integraties"}),r.jsx("h1",{className:"font-display text-3xl sm:text-4xl md:text-5xl font-bold tracking-[-0.02em] text-foreground mb-6",children:t?r.jsxs(r.Fragment,{children:["Smartbooks integrates with ",r.jsx("span",{className:"text-gradient-teal",children:"every accounting system"})]}):r.jsxs(r.Fragment,{children:["Smartbooks integreert met ",r.jsx("span",{className:"text-gradient-teal",children:"alle boekhoudsystemen"})]})}),r.jsx("p",{className:"text-base md:text-lg text-muted-foreground mb-8",children:t?"Deep integrations with the leading Dutch accounting packages at transaction and invoice level, plus 300+ extra integrations via API.":"Diepgaande koppelingen met de belangrijkste Nederlandse boekhoudpakketten op transactie- en factuurniveau, plus 300+ extra integraties via API."}),r.jsx("div",{className:"flex flex-wrap items-center justify-center gap-3",children:i.map(({icon:s,label:l})=>r.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 rounded-full glass-card border border-border text-sm text-foreground",children:[r.jsx(s,{className:"h-4 w-4 text-teal"}),r.jsx("span",{className:"font-medium",children:l})]},l))})]})})]}),r.jsx(Rl,{hideHeader:!0,accountingHeading:t?"Core accounting integrations":"Kerngekoppelde boekhoudpakketten",accountingCaption:t?"For the accounting packages with the highest coverage in the Dutch SME market we have ready-to-use, deep integrations down to transaction and invoice level.":"Voor de boekhoudpakketten met de hoogste dekking in het Nederlandse MKB hebben we kant-en-klare, diepgaande koppelingen tot op transactie- en factuurniveau."}),r.jsx("section",{className:"py-16 md:py-20",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-5xl mx-auto",children:[r.jsxs("div",{className:"text-center mb-10",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-3 block",children:t?"Deep dive":"Verdieping"}),r.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-foreground tracking-tight",children:t?"Per-system integration details":"Per systeem in detail"})]}),r.jsx("div",{className:"grid md:grid-cols-3 gap-5",children:[{name:"Exact Online",domain:"exact.com",slugKey:"integratieExact",desc:t?"Deep, transaction-level integration with Exact Online.":"Diepgaande koppeling met Exact Online tot op transactieniveau."},{name:"QuickBooks",domain:"quickbooks.intuit.com",logo:ah,slugKey:"integratieQuickbooks",desc:t?"Connect QuickBooks Online for automated reporting and consolidation.":"Koppel QuickBooks Online voor automatische rapportage en consolidatie."},{name:"Twinfield",domain:"twinfield.com",slugKey:"integratieTwinfield",desc:t?"Native Twinfield integration with full historical data.":"Native Twinfield-koppeling inclusief volledige historie."},{name:"AFAS",domain:"afas.nl",slugKey:"integratieAfas",desc:t?"Deep integration with AFAS Profit at transaction level.":"Diepgaande koppeling met AFAS Profit op transactieniveau."},{name:"Exact Globe",domain:"exact.com",slugKey:"integratieExactGlobe",desc:t?"Native Exact Globe integration including full history.":"Native Exact Globe-koppeling inclusief volledige historie."},{name:"Odoo",domain:"odoo.com",slugKey:"integratieOdoo",desc:t?"Connect Odoo for automated reporting and consolidation.":"Koppel Odoo voor automatische rapportage en consolidatie."}].map((s,l)=>r.jsx("div",{className:"animate-fade-in-up",style:{animationDelay:`${l*50}ms`},children:r.jsxs(_,{to:B(s.slugKey,n),className:"group block h-full rounded-2xl glass-card p-6 hover:border-teal/40 transition-colors",children:[r.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[r.jsx("div",{className:`rounded-xl bg-white flex items-center justify-center overflow-hidden border border-border shrink-0 ${s.logo?"h-16 min-w-40 px-5":"h-14 w-14 p-1.5"}`,children:r.jsx("img",{src:s.logo??`https://img.logo.dev/${s.domain}?token=pk_X-1ZO13GSgeOoUrIuJ6GMQ&size=120&format=png`,alt:`${s.name} logo`,loading:"lazy",className:s.logo?"w-32 h-auto max-w-none object-contain":"max-h-full max-w-full object-contain"})}),s.name!=="QuickBooks"&&r.jsx("h3",{className:"font-display text-lg font-bold text-foreground tracking-tight",children:s.name})]}),r.jsx("p",{className:"text-sm text-muted-foreground leading-relaxed mb-4",children:s.desc}),r.jsxs("span",{className:"inline-flex items-center gap-1.5 text-sm font-semibold text-teal group-hover:gap-2.5 transition-all",children:[t?"Read more":"Lees meer",r.jsx(re,{className:"h-4 w-4"})]})]})},s.name))})]})})}),r.jsx("section",{className:"py-16 md:py-20",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-5xl mx-auto",children:[r.jsx("div",{className:"text-center mb-10",children:r.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-foreground tracking-tight",children:t?"What we sync":"Wat we koppelen"})}),r.jsx("div",{className:"grid md:grid-cols-3 gap-5",children:a.map(({icon:s,title:l,body:d}
13666,c)=>r.jsxs("div",{className:"rounded-2xl glass-card p-6 animate-fade-in-up",style:{animationDelay:`${c*50}ms`},children:[r.jsx("div",{className:"flex items-center justify-center h-11 w-11 rounded-xl bg-teal/10 text-teal mb-4",children:r.jsx(s,{className:"h-5 w-5"})}),r.jsx("h3",{className:"font-display text-lg font-bold text-foreground mb-2 tracking-tight",children:l}),r.jsx("p",{className:"text-sm text-muted-foreground leading-relaxed",children:d})]},l))})]})})}),r.jsx("section",{className:"py-16 md:py-24 bg-surface border-y border-white/[0.04]",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsx("div",{className:"max-w-5xl mx-auto",children:r.jsxs("div",{className:"grid md:grid-cols-2 gap-10 items-center animate-fade-in-up",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-3 block",children:t?"Beyond finance":"Voorbij finance"}),r.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-foreground mb-4 tracking-tight",children:t?"Integration with operational systems":"Integratie met operationele systemen"}),r.jsx("p",{className:"text-muted-foreground leading-relaxed mb-4",children:t?"Beyond financial data, Smartbooks lets you include non-financial KPIs from your operational systems. Almost every modern platform exposes an API — we connect it and bring financial and operational data together in one reporting environment.":"Naast financiële data kun je in Smartbooks ook niet-financiële KPI's opnemen uit je operationele systemen. Vrijwel elk modern platform heeft een API — die koppelen we, zodat financiële en operationele data samenkomen in één rapportageomgeving."}),r.jsx("p",{className:"text-muted-foreground leading-relaxed",children:t?"That makes it easier to spot patterns and create better steering information.":"Zo zie je sneller verbanden en bouw je betere stuurinformatie."})]}),r.jsxs("div",{className:"rounded-2xl glass-card p-6 md:p-8",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground mb-4 block",children:t?"Mix data like":"Meng bijvoorbeeld"}),r.jsx("div",{className:"grid grid-cols-2 gap-3",children:o.map(({icon:s,label:l})=>r.jsxs("div",{className:"flex items-center gap-3 px-4 py-3 rounded-xl border border-border bg-background/40",children:[r.jsx("div",{className:"flex items-center justify-center h-9 w-9 rounded-lg bg-teal/10 text-teal shrink-0",children:r.jsx(s,{className:"h-4 w-4"})}),r.jsx("span",{className:"text-sm font-medium text-foreground",children:l})]},l))})]})]})})})}),r.jsx("section",{className:"py-16 md:py-20",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsx("div",{className:"max-w-3xl mx-auto",children:r.jsx("article",{className:"rounded-2xl glass-card p-6 md:p-8 animate-fade-in-up",children:r.jsxs("div",{className:"flex items-start gap-4",children:[r.jsx("div",{className:"flex items-center justify-center h-12 w-12 rounded-xl bg-teal/10 text-teal shrink-0",children:r.jsx(aS,{className:"h-6 w-6"})}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsx("h2",{className:"font-display text-xl md:text-2xl font-bold text-foreground mb-3 tracking-tight",children:t?"Outgoing API":"Uitgaande API"}),r.jsx("p",{className:"text-muted-foreground leading-relaxed mb-5",children:t?"Smartbooks has an outgoing API that makes your financial data available to other systems — push it to your CRM, a custom reporting app, or via integration platforms such as Make and Zapier.":"Smartbooks heeft een uitgaande API waarmee je financiële data beschikbaar maakt voor andere systemen — bijvoorbeeld doorzetten naar je CRM, een eigen rapportage-app of via integratieplatforms zoals Make en Zapier."}),r.jsx("div",{className:"flex flex-wrap gap-2",children:["HubSpot CRM",t?"Custom apps":"Eigen apps",t?"Make / Zapier / integration platforms":"Make / Zapier / integratieplatforms"].map(s=>r.jsx("span",{className:"inline-flex items-center px-3 py-1.5 rounded-full border border-border bg-background/40 text-xs font-medium text-foreground",children:s},s))})]})]})})})})}),r.jsx("section",{className:"pb-20 md:pb-28",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsx("div",{className:"max-w-3xl mx-auto",children:r.jsx("article",{className:"rounded-2xl glass-card p-6 md:p-8 animate-fade-in-up",children:r.jsxs("div",{className:"flex items-start gap-4",children:[r.jsx("div",{className:"flex items-center justify-center h-12 w-12 rounded-xl bg-teal/10 text-teal shrink-0",children:r.jsx($2,{className:"h-6 w-6"})}),r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsx("h2",{className:"font-display text-xl md:text-2xl font-bold text-foreground mb-3 tracking-tight",children:t?"Excel as workbench, not as system":"Excel als werkbank, niet als systeem"}),r.jsx("p",{className:"text-muted-foreground leading-relaxed mb-3",children:t?"Standard processes — 
13666consolidation, close, reporting — run inside Smartbooks. Excel stays available, but only as a workbench for ad-hoc analyses.":"Standaardprocessen — consolidatie, afsluiting, rapportage — draaien in Smartbooks. Excel blijft beschikbaar, maar alleen als werkbank voor ad-hoc analyses."}),r.jsx("p",{className:"text-muted-foreground leading-relaxed",children:t?"Connect Excel live to Smartbooks: you work in a familiar environment, but the data comes from one trusted source — not from loose exports that are already outdated by tomorrow morning.":"Koppel Excel live aan Smartbooks: je werkt in een vertrouwde omgeving, maar de data komt uit één betrouwbare bron — geen losse exports die morgenochtend al verouderd zijn."}),r.jsx("div",{className:"mt-6 rounded-xl overflow-hidden border border-border bg-white",children:r.jsx("img",{src:m$,alt:t?"Smartbooks Excel add-in showing a profit statement with monthly columns":"Smartbooks Excel add-in met maandelijkse cijfers van een resultatenrekening",loading:"lazy",className:"w-full h-auto block"})})]})]})})})})}),r.jsx("section",{className:"py-16 md:py-20 bg-surface border-t border-white/[0.04]",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-3xl mx-auto text-center animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-foreground mb-4 tracking-tight",children:t?"Does Smartbooks work with your systems?":"Werkt Smartbooks met jullie systemen?"}),r.jsx("p",{className:"text-muted-foreground mb-8",children:t?"In a short demo we go through your stack together and show exactly what can be connected — and how Smartbooks fits in.":"In een korte demo bespreken we jouw stack en laten we zien wat er gekoppeld kan worden — en hoe Smartbooks daarin past."}),r.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-3",children:[r.jsxs(_,{to:B("planDemo",n),className:"inline-flex items-center gap-2 px-6 py-3 rounded-full bg-orange text-white font-semibold hover:opacity-90 transition-opacity",children:[t?"Plan a demo":"Plan een demo",r.jsx(re,{className:"h-4 w-4"})]}),r.jsx(_,{to:B("contact",n),className:"inline-flex items-center gap-2 px-6 py-3 rounded-full border border-border text-foreground font-semibold hover:bg-foreground
13666/[0.04] transition-colors",children:t?"Ask about your stack":"Stel je vraag over jouw stack"})]})]})})})]}),r.jsx(Ne,{})]})},f$=()=>{const[e,n]=b.useState(!1);if(b.useEffect(()=>{n(!0)},[]),!e)return null;const t=1440,i=700,a=180,o=46,s=70,l=(d,c)=>{const u=c/t,h=d/o,g=Math.sin(u*6.283*1+d*.18),m=Math.sin(u*6.283*2.3+d*.32+1.7),p=Math.sin(u*6.283*.5+d*.07-.4),f=g*.55+m*.28+p*.6,w=8+Math.pow(h,1.6)*90,k=-Math.exp(-Math.pow((u-.5)*3.2,2))*(10+h*55);return f*w+k};return r.jsxs("svg",{className:"absolute inset-0 w-full h-full",viewBox:"0 0 1440 700",preserveAspectRatio:"xMidYMid slice",fill:"none","aria-hidden":"true",children:[r.jsxs("defs",{children:[r.jsxs("linearGradient",{id:"hero-wave-grad",x1:"0",y1:"0",x2:"1",y2:"0",children:[r.jsx("stop",{offset:"0%",stopColor:"#00B4D8",stopOpacity:"0"}),r.jsx("stop",{offset:"35%",stopColor:"#22D3EE",stopOpacity:"0.7"}),r.jsx("stop",{offset:"65%",stopColor:"#00B4D8",stopOpacity:"0.7"}),r.jsx("stop",{offset:"100%",stopColor:"#0F1923",stopOpacity:"0"})]}),r.jsxs("filter",{id:"hero-wave-glow",x:"-10%",y:"-10%",width:"120%",height:"120%",children:[r.jsx("feGaussianBlur",{stdDeviation:"1.4",result:"blur"}),r.jsxs("feMerge",{children:[r.jsx("feMergeNode",{in:"blur"}),r.jsx("feMergeNode",{in:"SourceGraphic"})]})]})]}),Array.from({length:o}
13666).map((d,c)=>{const u=c/(o-1),h=a+Math.pow(u,1.35)*(i-a),g=[];for(let m=0;m<=s;m++){const p=m/s*t;g.push(`${p.toFixed(1)},${(h+l(c,p)).toFixed(1)}`)}return r.jsx("polyline",{points:g.join(" "),stroke:"url(#hero-wave-grad)",strokeWidth:.55+u*1,fill:"none",opacity:.18+Math.pow(u,.6)*.7,filter:u>.55?"url(#hero-wave-glow)":void 0,strokeLinecap:"round",strokeLinejoin:"round"},`ridge-${c}`)})]})},b$="/assets/integratie-hero-dashboard-Bytqyrb1.png",v$={ledger:$i,dimensions:SD,sync:lb,history:ab},k$=({q:e,a:n})=>{const[t,i]=b.useState(!1);return r.jsxs("div",{className:"rounded-2xl glass-card border border-border overflow-hidden",children:[r.jsxs("button",{type:"button",onClick:()=>i(a=>!a),className:"w-full flex items-center justify-between gap-4 px-5 md:px-6 py-4 md:py-5 text-left hover:bg-foreground/[0.02] transition-colors",children:[r.jsx("span",{className:"font-display font-semibold text-foreground text-base md:text-lg",children:e}),r.jsx(Ut,{className:`h-5 w-5 text-teal shrink-0 transition-transform ${t?"rotate-180":""}`})]}),t&&r.jsx("div",{className:"px-5 md:px-6 pb-5 md:pb-6 text-muted-foreground leading-relaxed",children:n})]})},Ho=({cfg:e})=>{const{i18n:n}=Y(),t=n.language!=="nl",i=n.language==="de"?"de":t?"en":"nl",a=t&&e.en?{heroSubtext:e.en.heroSubtext??e.heroSubtext,whatWeConnectIntro:e.en.whatWeConnectIntro??e.whatWeConnectIntro,cards:e.en.cards??e.cards,testimonial:e.en.testimonial??e.testimonial,authMethod:e.en.authMethod??e.authMethod,faq:e.en.faq??e.faq,ctaSubtext:e.en.ctaSubtext??e.ctaSubtext,ctaPrimaryLabel:e.en.ctaPrimaryLabel??e.ctaPrimaryLabel,ctaPrimaryHref:e.en.ctaPrimaryHref??e.ctaPrimaryHref,ctaSecondaryLabel:e.en.ctaSecondaryLabel??e.ctaSecondaryLabel,ctaSecondaryHref:e.en.ctaSecondaryHref??e.ctaSecondaryHref,metaTitle:e.en.metaTitle??e.metaTitle,metaDescription:e.en.metaDescription??e.metaDescription}:e;i==="de"&&(a.ctaPrimaryHref=vp(a.ctaPrimaryHref,"de"),a.ctaSecondaryHref=vp(a.ctaSecondaryHref,"de"));const o={backLabel:t?"← Integration":"← Integratie",heroH1:t?`Smartbooks for ${e.systemName}`:`Smartbooks voor ${e.systemName}`,badges:t?["Plug-and-play","Live in days","Secure & GDPR-compliant"]:["Plug-and-play","Live in dagen","Veilig & GDPR-compliant"],sectionEyebrow:t?"The integration":"De koppeling",sectionH2:t?`What we pull from ${e.systemName}`:`Wat we ophalen uit ${e.systemName}`,sectionFinePrint:t?`One-time authorisation via ${a.authMethod}. We configure the mapping, load your history and set up a real-time sync — without an IT project on your end.`:`Eenmalige autorisatie via ${a.authMethod}. Wij richten de mapping in, laden je historie mee en zetten daarna een real-time sync op — zonder IT-traject aan jouw kant.`,faqEyebrow:t?"Frequently asked questions":"Veelgestelde vragen",faqH2:t?`Questions about the ${e.systemName} integration`:`Vragen over de ${e.systemName}-koppeling`,ctaH2:t?`Ready to connect ${e.systemName} and Smartbooks?`:`Klaar om ${e.systemName} en Smartbooks te koppelen?`,ctaFinePrint:t?"60+ finance teams use Smartbooks · Live in days, not months":"60+ finance teams gebruiken Smartbooks · Live in dagen, niet maanden",heroDashboardAlt:t?`Smartbooks dashboard with ${e.systemName} data`:`Smartbooks-dashboard met ${e.systemName}-data`};return r.jsxs(r.Fragment,{children:[r.jsx(Se,{title:a.metaTitle,description:a.metaDescription,pathByLocale:je(e.slugKey),locale:i,bareTitle:!0}),r.jsx(Be,{}),r.jsx(Ee,{}),r.jsxs("main",{className:"bg-background",children:[r.jsxs("section",{className:"relative pt-12 pb-16 md:pt-16 md:pb-20 overflow-hidden bg-footer dark-surface",children:[r.jsxs("div",{className:"absolute inset-0 pointer-events-none overflow-hidden","aria-hidden":"true",children:[r.jsx("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[1200px] h-[600px] rounded-full bg-[radial-gradient(ellipse_at_center,#00B4D8_0%,transparent_60%)] opacity-[0.18] blur-3xl"}),r.jsx(f$,{}),r.jsx("div",{className:"absolute inset-x-0 bottom-0 h-2/3 bg-gradient-to-b from-transparent via-[#0F1923]/40 to-[#0F1923]/85"}),r.jsx("div",{className:"absolute inset-y-0 left-0 w-40 bg-gradient-to-r from-[#0F1923]/70 to-transparent"}),r.jsx("div",{className:"absolute inset-y-0 right-0 w-40 bg-gradient-to-l from-[#0F1923]/70 to-transparent"})]}),r.jsxs("div",{className:"container mx-auto px-4 relative z-10",children:[r.jsxs("div",{className:"max-w-3xl mx-auto text-center animate-fade-in-up",children:[r.jsx(_,{to:B("integraties",i),className:"inline-flex items-center gap-2 text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-6 hover:opacity-80 transition-opacity",children:o.backLabel}),r.jsx("h1",{className:"font-display text-3xl sm:text-4xl md:text-5xl font-bold tracking-[-0.02em] text-white mb-6",children:o.heroH1}),r.jsx("p",{className:"text-base md:text-lg text-white/75 mb-8",children:a.heroSubtext}),r.jsxs("div",{className:"flex items-center justify-center gap-4 md:gap-6 mb-8",children:[r.jsx("div",{className:e.systemLogoBoxClassName??"h-16 md:h-20 w-44 md:w-56 rounded-2xl bg-white flex items-center justify-center border border-white/10 shadow-elegant px-5",children:r.jsx("img",{src:e.systemLogoSrc,alt:`${e.systemName} logo`,className:e.systemLogoClassName??"max-h-10 md:max-h-12 w-auto object-contain"})}),r.jsx(sb,{className:"h-6 w-6 text-teal shrink-0","aria-hidden":!0}),r.jsx("div",{className:"h-16 md:h-20 w-44 md:w-56 rounded-2xl bg-white flex items-center justify-center border border-white/10 shadow-elegant px-5",children:r.jsx("img",{src:Yu,alt:"Smartbooks logo",className:"max-h-8 md:max-h-10 w-auto object-contain"})})]})]}),r.jsx("div",{className:"max-w-5xl mx-auto mt-14 md:mt-16 animate-fade-in-up",style:{animationDelay:"150ms"},children:r.jsx("div",{className:"rounded-2xl border border-white/10 bg-white shadow-elegant overflow-hidden",children:r.jsx("img",{src:b$,alt:o.heroDashboardAlt,className:"w-full h-auto block",loading:"eager"})})})]})]}),r.jsxs("section",{className:"py-16 md:py-24 bg-surface relative overflow-hidden",children:[r.jsx("div",{className:"absolute inset-0 opacity-[0.04] [background-image:radial-gradient(circle_at_1px_1px,#0F1923_1px,transparent_0)] [background-size:24px_24px]"}),r.jsx("div",{className:"container mx-auto px-4 relative z-10",children:r.jsx("div",{className:"max-w-6xl mx-auto",children:r.jsxs("div",{className:"grid lg:grid-cols-2 gap-10 lg:gap-14 items-center",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-3 block",children:o.sectionEyebrow}),r.jsx("h2",{className:"font-display text-2xl md:text-4xl font-bold text-foreground tracking-tight mb-5",children:o.sectionH2}
13666),r.jsx("p",{className:"text-foreground/80 leading-relaxed mb-4",children:a.whatWeConnectIntro}),r.jsx("p",{className:"text-muted-foreground text-sm leading-relaxed",children:o.sectionFinePrint})]}),r.jsx("div",{className:"grid sm:grid-cols-2 gap-4",children:a.cards.map((s,l)=>{const d=v$[s.icon]??$i;return r.jsxs("div",{style:{animationDelay:`${l*50}ms`},className:"rounded-2xl bg-white border border-border shadow-sm p-5 animate-fade-in-up",children:[r.jsx("div",{className:"flex items-center justify-center h-10 w-10 rounded-xl bg-teal/10 ring-1 ring-teal/20 text-teal mb-3",children:r.jsx(d,{className:"h-4.5 w-4.5"})}),r.jsx("h3",{className:"font-display text-base font-bold text-foreground mb-1.5 tracking-tight",children:s.title}),r.jsx("p",{className:"text-sm text-muted-foreground leading-relaxed",children:s.body})]},s.title)})})]})})})]}),a.testimonial&&r.jsx("section",{className:"py-10 md:py-12",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-4xl mx-auto rounded-2xl glass-card px-6 md:px-8 py-5 md:py-6 flex items-center gap-5 flex-wrap md:flex-nowrap animate-fade-in-up",children:[r.jsx(wi,{className:"h-6 w-6 text-teal shrink-0"}),r.jsxs("blockquote",{className:"font-display text-base md:text-lg text-foreground leading-snug grow",children:['"',a.testimonial.quote,'"']}),r.jsxs("div",{className:"flex items-center gap-3 shrink-0",children:[a.testimonial.logoSrc&&r.jsx("div",{className:"h-10 px-2.5 rounded-lg bg-white border border-border flex items-center",children:r.jsx("img",{src:a.testimonial.logoSrc,alt:a.testimonial.company,className:"h-6 w-auto object-contain"})}),r.jsxs("div",{className:"text-xs leading-tight",children:[r.jsx("div",{className:"font-semibold text-foreground",children:a.testimonial.name}),r.jsxs("div",{className:"text-muted-foreground",children:[a.testimonial.role,", ",a.testimonial.company]})]})]})]})})}),r.jsx("section",{className:"py-16 md:py-24",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-3xl mx-auto",children:[r.jsxs("div",{className:"text-center mb-10",children:[r.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.2em] text-teal mb-3 block",children:o.faqEyebrow}),r.jsx("h2",{className:"font-display text-2xl md:text-4xl font-bold text-foreground tracking-tight",children:o.faqH2})]}),r.jsx("div",{className:"space-y-3",children:a.faq.slice(0,4).map(s=>r.jsx(k$,{q:s.q,a:s.a},s.q))})]})})}),r.jsx("section",{className:"py-16 md:py-20 bg-footer dark-surface",children:r.jsx("div",{className:"container mx-auto px-4",children:r.jsxs("div",{className:"max-w-3xl mx-auto text-center animate-fade-in-up",children:[r.jsx("h2",{className:"font-display text-2xl md:text-4xl font-bold text-white tracking-tight mb-4",children:o.ctaH2}),r.jsx("p",{className:"text-white/80 mb-8",children:a.ctaSubtext}),r.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-3",children:[r.jsxs(_,{to:a.ctaPrimaryHref,className:"inline-flex items-center gap-2 px-6 py-3 rounded-full bg-orange text-white font-semibold hover:opacity-90 transition-opacity",children:[a.ctaPrimaryLabel,r.jsx(re,{className:"h-4 w-4"})]}),r.jsx(_,{to:a.ctaSecondaryHref,className:"inline-flex items-center gap-2 px-6 py-3 rounded-full border border-white/30 text-white font-semibold hover:bg-white/10 transition-colors",children:a.ctaSecondaryLabel})]}),r.jsx("p",{className:"text-sm text-white/80 mt-6 max-w-2xl mx-auto leading-relaxed",children:t?"No credit card, no commitments, no costs if it doesn't work out. We fully configure Smartbooks for your accounting during the trial month. If it doesn't fit, we stop — no invoice.":"Geen creditcard, geen verplichtingen, geen kosten als het niet bevalt. Wij richten Smartbooks volledig in op jullie boekhouding tijdens de proefmaand. Bevalt het niet, dan stoppen we — geen factuur."}),r.jsx("p",{className:"text-xs text-white/60 mt-3",children:o.ctaFinePrint})]})})})]}),r.jsx(Ne,{})]})},w$="https://img.logo.dev/twinfield.com?token=pk_X-1ZO13GSgeOoUrIuJ6GMQ&size=200&format=png",x$=()=>r.jsx(Ho,{cfg:{slugKey:"integratieTwinfield",systemName:"Twinfield",systemLogoSrc:w$,systemLogoClassName:"max-h-10 md:max-h-12 w-auto object-contain",heroSubtext:"Diepgaande koppeling tussen Twinfield en Smartbooks — voor consolidatie, rapportage, planning en maandafsluiting over al je Twinfield-administraties.",whatWeConnectIntro:"Smartbooks koppelt direct aan Twinfield (Wolters Kluwer) via de officiële API. Geen handmatige exports, geen losse bestanden — gewoon één veilige, dagelijkse data-stroom van Twinfield naar Smartbooks.",cards:[{icon:"ledger",title:"Volledig grootboek",body:"Alle journaalposten en mutaties op transactieniveau uit Twinfield."},{icon:"dimensions",title:"Dimensies & kostenplaatsen",body:"Twinfield-dimensies, kostenplaatsen en projecten komen automatisch mee. Jouw bestaande structuur blijft intact."},{icon:"sync",title:"Dagelijkse sync",body:"Boekingen en mutaties lopen elke dag automatisch door naar Smartbooks. Altijd actuele cijfers, zonder handmatig werk."},{icon:"history",title:"Historische data",body:"Bij onboarding laden we je volledige Twinfield-historie mee — inclusief vorige boekjaren."}],forWhomTitle:"Voor Twinfield-gebruikers met meerdere administraties",forWhomBody:"Smartbooks is gebouwd voor controllers en CFO's bij groeiende organisaties en accountantskantoren met meerdere Twinfield-administraties. Twinfield doet veel goed binnen één administratie — voor multi-entity consolidatie, managementrapportage over de hele groep en cashflowplanning pakt Smartbooks op waar Twinfield ophoudt.",scenarios:["Maandelijkse consolidatie van meerdere Twinfield-administraties","Intercompany-eliminaties en valutaomrekening","Eén managementrapportage-sjabloon over alle administraties","Cashflow-overzicht op groeps- en administratieniveau"],steps:[{title:"Koppel Twinfield via OAuth",body:"Eenmalig inloggen met je Twinfield-account, akkoord geven op de scopes en de koppeling staat. Geen IT-traject, geen exports."},{title:"Wij richten je administraties in",body:"Voor elke Twinfield-administratie configureren we de mapping na
13666ar Smartbooks. Jij ziet binnen dagen je eigen cijfers in het systeem."},{title:"Dagelijkse sync, automatisch",body:"Vanaf dat moment komen boekingen, mutaties en dimensies automatisch door naar Smartbooks."}],authMethod:"OAuth via Twinfield",faq:[{q:"Werkt het ook als we meerdere Twinfield-administraties hebben?",a:"Ja. We koppelen elke administratie afzonderlijk en consolideren ze automatisch in Smartbooks — inclusief intercompany-eliminaties en valutaomrekening."},{q:"Wat als onze grootboekstructuur per BV verschilt?",a:"Geen probleem. We mappen elke administratie naar één uniforme rapportagestructuur in Smartbooks, zodat je geconsolideerde cijfers krijgt zonder dat Twinfield aangepast hoeft te worden."},{q:"Komen Twinfield-dimensies en kostenplaatsen mee?",a:"Ja, alle dimensies, kostenplaatsen en projecten uit Twinfield lopen automatisch mee. Daarmee kun je in Smartbooks zonder extra werk dezelfde analyses maken — én erbovenop consolideren en rapporteren."},{q:"Hoe activeren we de koppeling?",a:"Smartbooks koppelt via de officiële Twinfield API met OAuth. Je logt eenmalig in met je Twinfield-account, geeft akkoord op de gevraagde scopes en de koppeling is actief — typisch binnen een paar minuten."},{q:"Hoe lang duurt implementatie van de Twinfield-koppeling?",a:"Doorgaans ben je binnen één week live: koppeling actief, historie ingeladen en eerste rapportages opgeleverd."}],ctaSubtext:"In een korte demo koppelen we Smartbooks aan jouw Twinfield-data en laten we zien wat er mogelijk is voor consolidatie, rapportage en cashflow.",ctaPrimaryLabel:"Plan een demo",ctaPrimaryHref:B("planDemo","nl"),ctaSecondaryLabel:"Start een proefmaand",ctaSecondaryHref:B("contact","nl"),metaTitle:"Twinfield rapportage & consolidatie tool | Smartbooks.ai",metaDescription:"Rapportage uit Twinfield zonder Excel: managementrapportages, consolidatie en cashflowplanning over al je administraties. Frequente sync, live in dagen.",en:{heroSubtext:"Deep integration between Twinfield and Smartbooks — for consolidation, reporting, planning and month-end close across all your Twinfield administrations.",whatWeConnectIntro:"Smartbooks connects directly to Twinfield (Wolters Kluwer) via the official API. No manual exports, no loose files — just one secure, daily data flow from Twinfield into Smartbooks.",cards:[{icon:"ledger",title:"Full general ledger",body:"All journal entries and movements at transaction level from Twinfield."},{icon:"dimensions",title:"Dimensions & cost centres",body:"Twinfield dimensions, cost centres and projects flow in automatically. Your existing structure stays intact."},{icon:"sync",title:"Daily sync",body:"Postings and movements update every day — always current numbers, no manual work."},{icon:"history",title:"Historical data",body:"During onboarding we load your full Twinfield history — including prior fiscal years."}],authMethod:"OAuth via Twinfield",faq:[{q:"Does it work if we have multiple Twinfield administrations?",a:"Yes. We connect each administration individually and consolidate them automatically in Smartbooks — including intercompany eliminations and currency conversion."},{q:"What if our chart of accounts differs per entity?",a:"Not a problem. We map each administration to one uniform reporting structure in Smartbooks, so you get consolidated figures without changing anything in Twinfield."},{q:"Do Twinfield dimensions and cost centres come along?",a:"Yes — all dimensions, cost centres and projects from Twinfield flow in automatically, so the same analyses you run in Twinfield work in Smartbooks, with consolidation and reporting on top."},{q:"How do we activate the integration?",a:"Smartbooks connects via the official Twinfield API using OAuth. You log in once with your Twinfield account, approve the requested scopes and the integration is active — typically within a few minutes."},{q:"How long does the Twinfield integration take to implement?",a:"Typically you're live within one week: integration active, history loaded and first reports delivered."}],ctaSubtext:"In a short demo we connect Smartbooks to your Twinfield data and show what's possible for consolidation, reporting and cashflow.",ctaPrimaryLabel:"Book a demo",ctaPrimaryHref:B("planDemo","en"),ctaSecondaryLabel:"Start a trial month",ctaSecondaryHref:B("contact","en"),metaTitle:"Twinfield consolidation & reporting tool | Smartbooks.ai",metaDescription:"Connect Twinfield to Smartbooks for c
13666onsolidation, reporting and cashflow planning across all your administrations. Frequent sync, live in days, no Excel."}}}),y$=()=>r.jsx(Ho,{cfg:{slugKey:"integratieQuickbooks",systemName:"QuickBooks",systemLogoSrc:ah,systemLogoClassName:"max-h-24 md:max-h-28 w-auto object-contain",systemLogoBoxClassName:"h-32 md:h-36 w-32 md:w-36 rounded-2xl bg-white flex items-center justify-center border border-white/10 shadow-elegant p-4",heroSubtext:"Diepgaande koppeling tussen QuickBooks Online en Smartbooks — voor consolidatie, rapportage, planning en maandafsluiting over al je QuickBooks-entities.",whatWeConnectIntro:"Smartbooks koppelt direct aan QuickBooks Online via de officiële Intuit API. Geen handmatige exports, geen losse bestanden — gewoon één veilige, real-time data-stroom van QuickBooks naar Smartbooks.",cards:[{icon:"ledger",title:"Volledig grootboek",body:"Alle journaalposten en mutaties op transactieniveau uit QuickBooks Online."},{icon:"dimensions",title:"Classes, locations & projects",body:"QuickBooks classes, locations en projects komen automatisch mee als dimensies in Smartbooks."},{icon:"sync",title:"Real-time sync",body:"Boekingen en mutaties lopen continu door naar Smartbooks. Altijd actuele cijfers, zonder handmatig werk."},{icon:"history",title:"Historische data",body:"Bij onboarding laden we je volledige QuickBooks-historie mee — inclusief vorige boekjaren."}],forWhomTitle:"Voor QuickBooks-gebruikers met meerdere entities",forWhomBody:"Smartbooks is gebouwd voor controllers en CFO's bij internationale scale-ups en groepen die met meerdere QuickBooks Online-entities werken. QuickBooks doet veel goed binnen één company file — voor multi-entity consolidatie, multi-currency rapportage en cashflowplanning op groepsniveau pakt Smartbooks op waar QuickBooks ophoudt.",scenarios:["Maandelijkse consolidatie van meerdere QuickBooks-entities","Intercompany-eliminaties en multi-currency omrekening","Eén managementrapportage-sjabloon over alle entities","Cashflow-overzicht op groeps- en entity-niveau"],steps:[{title:"Koppel QuickBooks via OAuth",body:"Eenmalig inloggen met je Intuit-account, akkoord geven op de scopes en de koppeling staat. Geen IT-traject, geen exports."},{title:"Wij richten je entities in",body:"Voor elke QuickBooks-entity configureren we de mapping na
13666ar Smartbooks. Jij ziet binnen dagen je eigen cijfers in het systeem."},{title:"Real-time sync, automatisch",body:"Vanaf dat moment komen boekingen, mutaties en dimensies automatisch door naar Smartbooks."}],authMethod:"OAuth via Intuit",faq:[{q:"Werkt het ook als we meerdere QuickBooks-entities hebben?",a:"Ja. We koppelen elke entity afzonderlijk en consolideren ze automatisch in Smartbooks — inclusief intercompany-eliminaties en valutaomrekening."},{q:"Wat als onze chart of accounts per entity verschilt?",a:"Geen probleem. We mappen elke entity naar één uniforme rapportagestructuur in Smartbooks, zodat je geconsolideerde cijfers krijgt zonder dat QuickBooks aangepast hoeft te worden."},{q:"Komen QuickBooks classes, locations en projects mee?",a:"Ja, classes, locations en projects lopen automatisch mee als dimensies. Daarmee kun je in Smartbooks zonder extra werk dezelfde analyses maken — én erbovenop consolideren en rapporteren."},{q:"Hoe activeren we de koppeling?",a:"Smartbooks koppelt via de officiële Intuit API met OAuth. Je logt eenmalig in met je Intuit-account, geeft akkoord op de gevraagde scopes en de koppeling is actief — typisch binnen een paar minuten."},{q:"Hoe lang duurt implementatie van de QuickBooks-koppeling?",a:"Doorgaans ben je binnen één week live: koppeling actief, historie ingeladen en eerste rapportages opgeleverd."}],ctaSubtext:"In een korte demo koppelen we Smartbooks aan jouw QuickBooks-data en laten we zien wat er mogelijk is voor consolidatie, rapportage en cashflow.",ctaPrimaryLabel:"Plan een demo",ctaPrimaryHref:B("planDemo","nl"),ctaSecondaryLabel:"Start een proefmaand",ctaSecondaryHref:B("contact","nl"),metaTitle:"QuickBooks consolidatie & rapportage tool | Smartbooks.ai",metaDescription:"Smartbooks synchroniseert met QuickBooks via een snelle en veilige API-verbinding. Het is gemakkelijk om te verbinden en te beginnen met het werken met uw",en:{heroSubtext:"Deep integration between QuickBooks Online and Smartbooks — for consolidation, reporting, planning and month-end close across all your QuickBooks entities.",whatWeConnectIntro:"Smartbooks connects directly to QuickBooks Online via the official Intuit API. No manual exports, no loose files — just one secure, real-time data flow from QuickBooks into Smartbooks.",cards:[{icon:"ledger",title:"Full general ledger",body:"All journal entries and movements at transaction level from QuickBooks Online."},{icon:"dimensions",title:"Classes, locations & projects",body:"QuickBooks classes, locations and projects flow in automatically as dimensions in Smartbooks."},{icon:"sync",title:"Real-time sync",body:"Postings and movements update continuously — always current numbers, no manual work."},{icon:"history",title:"Historical data",body:"During onboarding we load your full QuickBooks history — including prior fiscal years."}],authMethod:"OAuth via Intuit",faq:[{q:"Does it work if we have multiple QuickBooks entities?",a:"Yes. We connect each entity individually and consolidate them automatically in Smartbooks — including intercompany eliminations and currency conversion."},{q:"What if our chart of accounts differs per entity?",a:"Not a problem. We map each entity to one uniform reporting structure in Smartbooks, so you get consolidated figures without changing anything in QuickBooks."},{q:"Do QuickBooks classes, locations and projects come along?",a:"Yes — classes, locations and projects flow in automatically as dimensions, so the same analyses you run in QuickBooks work in Smartbooks, with consolidation and reporting on top."},{q:"How do we activate the integration?",a:"Smartbooks connects via the official Intuit API using OAuth. You log in once with your Intuit account, approve the requested scopes and the integration is active — typically within a few minutes."},{q:"How long does the QuickBooks integration take to implement?",a:"Typically you're live within one week: integration active, history loaded and first reports delivered."}],ctaSubtext:"In a short demo we connect Smartbooks to your QuickBooks data and show what's possible for consolidation, reporting and cashflow.",ctaPrimaryLabel:"Book a demo",ctaPrimaryHref:B("planDemo","en"),ctaSecondaryLabel:"Start a trial month",ctaSecondaryHref:B("contact","en"),metaTitle:"QuickBooks consolidation & reporting tool | Smartbooks.ai",metaDescription:"Smartbooks syncs with QuickBooks via a fast and secure API connection. It's easy to connect and start working with your QuickBooks data in Smartbooks. Call us"}}}),j$="https://img.logo.dev/afas.nl?token=pk_X-1ZO13GSgeOoUrIuJ6GMQ&size=200&format=png",S$=()=>r.jsx(Ho,{cfg:{slugKey:"integratieAfas",systemName:"AFAS",systemLogoSrc:j$,heroSubtext:"Diepgaande koppeling tussen AFAS Profit en Smartbooks — voor consolidatie, rapportage, planning en maandafsluiting over al je AFAS-eenheden.",whatWeConnectIntro:"Smartbooks koppelt direct aan AFAS Profit via een veilige API-verbinding. Geen handmatige exports, geen losse bestanden — gewoon één betrouwbare data-stroom van AFAS naar Smartbooks.",cards:[{icon:"ledger",title:"Volledig grootboek",body:"Alle journaalposten en mutaties op transactieniveau uit AFAS Profit."},{icon:"dimensions",title:"Dimensies & kostenplaatsen",body:"AFAS-dimensies, kostenplaatsen en projecten komen automatisch mee."},{icon:"sync",title:"Real-time sync",body:"Boekingen en mutaties lopen elke dag automatisch door. Altijd actuele cijfers."},{icon:"history",title:"Historische data",body:"Bij onboarding laden we je volledige AFAS-historie mee."}],forWhomTitle:"Voor AFAS-gebruikers met meerdere eenheden",forWhomBody:"Smartbooks is gebouwd voor controllers en CFO's bij groeiende organisaties met meerdere AFAS-eenheden. AFAS doet veel goed binnen één eenheid — maar voor multi-entity consolidatie, managementrapportage over de gehele groep en cashflowplanning pakt Smartbooks op waar AFAS ophoudt.",scenarios:["Maandelijkse consolidatie van meerdere AFAS-eenheden","Intercompany-eliminaties","Eén managementrapportage-sjabloon over alle eenheden","Cashflow-overzicht op groeps- en eenheidsniveau"],steps:[{title:"Configureer de AFAS GetConnector",body:"Je krijgt van ons een document met de exacte stappen om de GetConnector vanuit je eigen AFAS-omgeving in te richten. Eenmalige actie, doe je zelf, geen IT-traject nodig."},{title:"Wij richten je eenheden in",body:"Voor elke AFAS-eenheid configureren we de mapping na
13666ar Smartbooks. Jij ziet binnen dagen je eigen cijfers."},{title:"Real-time sync, automatisch",body:"Boekingen, mutaties en dimensies komen automatisch door naar Smartbooks."}],authMethod:"AFAS GetConnector",faq:[{q:"Werkt het ook als we meerdere AFAS-eenheden hebben?",a:"Ja. We koppelen elke eenheid afzonderlijk en consolideren ze automatisch in Smartbooks — inclusief intercompany-eliminaties en managementinformatie op groepsniveau."},{q:"Wat als onze grootboekstructuur per eenheid verschilt?",a:"Geen probleem. We mappen elke eenheid naar één uniforme rapportagestructuur in Smartbooks, zodat je geconsolideerde cijfers krijgt zonder dat AFAS aangepast hoeft te worden."},{q:"Komen AFAS-dimensies en kostenplaatsen mee?",a:"Ja, alle dimensies, kostenplaatsen en projecten uit AFAS lopen automatisch mee. Daarmee kun je in Smartbooks zonder extra werk dezelfde analyses maken als in AFAS — én erbovenop consolideren en rapporteren."},{q:"Hoe activeren we de koppeling vanuit AFAS?",a:"Smartbooks koppelt via een AFAS GetConnector — de standaard manier om data uit AFAS Profit te ontsluiten. Wij sturen je een document met de exacte velden, definities en instellingen. Een AFAS-beheerder configureert de GetConnector eenmalig in jullie eigen AFAS-omgeving (typisch 15-30 minuten werk). Daarna kunnen wij verbinden en starten met de inrichting in Smartbooks."},{q:"Hoe lang duurt implementatie van de AFAS-koppeling?",a:"Doorgaans ben je binnen één week live: koppeling actief, data ingeladen en eerste rapportages opgeleverd."}],ctaSubtext:"In een korte demo koppelen we Smartbooks aan jouw AFAS-data en laten we zien wat er mogelijk is voor consolidatie, rapportage en cashflow.",ctaPrimaryLabel:"Plan een demo",ctaPrimaryHref:B("planDemo","nl"),ctaSecondaryLabel:"Start een proefmaand",ctaSecondaryHref:B("contact","nl"),metaTitle:"AFAS Profit consolidatie & rapportage tool | Smartbooks.ai",metaDescription:"Koppel AFAS Profit aan Smartbooks voor consolidatie, rapportage en cashflowplanning over al je AFAS-eenheden. Real-time sync, live in dagen, zonder Excel.",en:{heroSubtext:"Deep integration between AFAS Profit and Smartbooks — for consolidation, reporting, planning and month-end close across all your AFAS entities.",whatWeConnectIntro:"Smartbooks connects directly to AFAS Profit via a secure API. No manual exports, no loose files — just one reliable data flow from AFAS into Smartbooks.",cards:[{icon:"ledger",title:"Full general ledger",body:"All journal entries and movements at transaction level from AFAS Profit."},{icon:"dimensions",title:"Dimensions & cost centres",body:"AFAS dimensions, cost centres and projects flow in automatically."},{icon:"sync",title:"Real-time sync",body:"Postings and movements update continuously — always current numbers."},{icon:"history",title:"Historical data",body:"During onboarding we load your full AFAS history."}],authMethod:"AFAS GetConnector",faq:[{q:"Does it work if we have multiple AFAS entities?",a:"Yes. We connect each entity individually and consolidate them automatically in Smartbooks — including intercompany eliminations and group-level management information."},{q:"What if our chart of accounts differs per entity?",a:"Not a problem. We map each entity to one uniform reporting structure in Smartbooks, so you get consolidated figures without changing anything in AFAS."},{q:"Do AFAS dimensions and cost centres come along?",a:"Yes — all dimensions, cost centres and projects from AFAS flow in automatically, so the same analyses you run in AFAS work in Smartbooks, with consolidation and reporting on top."},{q:"How do we activate the integration from AFAS?",a:"Smartbooks connects via an AFAS GetConnector — the standard way to expose data from AFAS Profit. We send you a document with the exact fields, definitions and settings. An AFAS administrator configures the GetConnector once in your own AFAS environment (typically 15-30 minutes of work). After that we connect and start the setup in Smartbooks."},{q:"How long does the AFAS integration take to implement?",a:"Typically you're live within one week: integration active, data loaded and first reports delivered."}],ctaSubtext:"In a short demo we connect Smartbooks to your AFAS data and show what's possible for consolidation, reporting and cashflow.",ctaPrimaryLabel:"Book a demo",ctaPrimaryHref:B("planDemo","en"),ctaSecondaryLabel:"Start a trial month",ctaSecondaryHref:B("contact","en"),metaTitle:"AFAS Profit consolidation & reporting tool | Smartbooks.ai",metaDescription:"Connect AFAS Profit to Smartbooks for c
13666onsolidation, reporting and cashflow planning across all your AFAS entities. Real-time sync, live in days, no Excel."}}}),z$="https://img.logo.dev/exact.com?token=pk_X-1ZO13GSgeOoUrIuJ6GMQ&size=200&format=png",A$=()=>r.jsx(Ho,{cfg:{slugKey:"integratieExactGlobe",systemName:"Exact Globe",systemLogoSrc:z$,systemLogoClassName:"h-10 md:h-12 w-auto object-contain",heroSubtext:"Diepgaande koppeling tussen Exact Globe en Smartbooks — voor consolidatie, rapportage, planning en maandafsluiting over al je administraties. Geen migratie naar de cloud nodig.",whatWeConnectIntro:"Smartbooks koppelt direct aan je Exact Globe-omgeving via onze eigen connector. Geen handmatige exports, geen tussenliggende databases — gewoon één veilige koppeling die je Exact-data continu naar Smartbooks brengt.",cards:[{icon:"ledger",title:"Volledig grootboek",body:"Alle journaalposten en mutaties op transactieniveau uit Exact Globe."},{icon:"dimensions",title:"Dimensies & kostenplaatsen",body:"Globe-dimensies, kostenplaatsen en projecten komen automatisch mee. Jouw bestaande Globe-structuur blijft intact."},{icon:"sync",title:"Real-time sync",body:"De Smartbooks-connector synchroniseert in real-time. Altijd actuele cijfers, zonder handmatige uploads."},{icon:"history",title:"Historische data",body:"Bij onboarding laden we je volledige Globe-historie mee — inclusief vorige boekjaren."}],forWhomTitle:"Voor Exact Globe-gebruikers die niet willen migreren",forWhomBody:"Smartbooks is gebouwd voor controllers en CFO's bij groeiende organisaties met meerdere Exact Globe-administraties. Typisch on-premise, met de wens om consolidatie en rapportage te professionaliseren zonder dat de hele finance-administratie naar de cloud hoeft.",testimonial:{quote:"Ik heb in mijn 30+ jaar ervaring met veel tools gewerkt, maar Smartbooks is by far de eenvoudigste en snelste om te implementeren.",name:"Karel van den Bos",role:"CFO",company:"Intermax",stat:"10 entiteiten in Exact Globe · maandelijkse consolidatie van dagen naar uren",logoSrc:zo},steps:[{title:"Neem contact op voor de Globe-connector",body:"De Globe-koppeling werkt via onze eigen connector. We installeren en configureren deze samen met je IT-team — geen self-service, wel snel en zonder gedoe."},{title:"Wij richten je administraties in",body:"Voor elke Globe-administratie configureren we de mapping na
13666ar Smartbooks. Jij ziet binnen dagen je eigen cijfers in het systeem."},{title:"Real-time sync, automatisch",body:"Vanaf dat moment komen boekingen, mutaties en dimensies automatisch door naar Smartbooks."}],authMethod:"eigen connector, versleuteld",faq:[{q:"Werkt het ook als we meerdere Exact Globe-administraties hebben?",a:"Ja. We koppelen elke Globe-administratie afzonderlijk en consolideren ze automatisch in Smartbooks — inclusief intercompany-eliminaties en valutaomrekening."},{q:"Moeten we van Globe naar Exact Online migreren om Smartbooks te kunnen gebruiken?",a:"Nee. De hele meerwaarde van Smartbooks voor Globe-gebruikers is juist dat je niet hoeft te migreren. Je houdt Globe als bronsysteem en Smartbooks doet de rapportage- en consolidatielaag erbovenop."},{q:"Hoe loopt de technische installatie van de Globe-connector?",a:"Onze connector wordt samen met je IT-team geïnstalleerd op de plek waar je Globe draait. We begeleiden de hele setup; doorgaans zijn we binnen een paar uur klaar."},{q:"Wat als onze grootboekstructuur per BV verschilt?",a:"Dat is eerder regel dan uitzondering. We mappen elke administratie naar één rapportagestructuur in Smartbooks, zodat je geconsolideerde cijfers en uniforme rapportage krijgt zonder dat je in Globe iets hoeft aan te passen."},{q:"Hoe lang duurt implementatie van de Globe-koppeling?",a:"In de meeste gevallen ben je binnen één tot twee weken volledig live, inclusief mapping, historische data en eerste rapportages."}],ctaSubtext:"De Globe-koppeling vraagt om een korte technische intake. Plan een demo, dan bespreken we hoe we Smartbooks aan jouw Globe-omgeving koppelen.",ctaPrimaryLabel:"Plan een demo",ctaPrimaryHref:B("planDemo","nl"),ctaSecondaryLabel:"Neem contact op",ctaSecondaryHref:B("contact","nl"),metaTitle:"Exact Globe rapportage & consolidatie zonder migratie | Smartbooks.ai",metaDescription:"Koppel Exact Globe aan Smartbooks voor consolidatie, rapportage en planning. Eigen connector, geen cloudmigratie nodig. 10 entiteiten in dagen live.",en:{heroSubtext:"Deep integration between Exact Globe and Smartbooks — for consolidation, reporting, planning and month-end close across all your administrations. No cloud migration required.",whatWeConnectIntro:"Smartbooks connects directly to your Exact Globe environment via our own connector. No manual exports, no intermediate databases — just one secure link that brings your Exact data into Smartbooks every day.",cards:[{icon:"ledger",title:"Full general ledger",body:"All journal entries and movements at transaction level from Exact Globe."},{icon:"dimensions",title:"Dimensions & cost centres",body:"Globe dimensions, cost centres and projects flow in automatically. Your existing Globe structure stays intact."},{icon:"sync",title:"Real-time sync",body:"The Smartbooks connector syncs in real time — always current numbers, no manual uploads."},{icon:"history",title:"Historical data",body:"During onboarding we load your full Globe history — including prior fiscal years."}],testimonial:{quote:"I've worked with many tools in my 30+ years of experience, but Smartbooks is by far the easiest and fastest to implement.",name:"Karel van den Bos",role:"CFO",company:"Intermax",stat:"10 entities in Exact Globe · monthly close from days to hours",logoSrc:zo},authMethod:"proprietary connector, encrypted",faq:[{q:"Does it work if we have multiple Exact Globe administrations?",a:"Yes. We connect each Globe administration individually and consolidate them automatically in Smartbooks — including intercompany eliminations and currency conversion."},{q:"Do we need to migrate from Globe to Exact Online to use Smartbooks?",a:"No. The whole point of Smartbooks for Globe users is that you don't have to migrate. You keep Globe as the source system, and Smartbooks adds the reporting and consolidation layer on top."},{q:"How does the technical install of the Globe connector work?",a:"Our connector is installed together with your IT team where Globe runs. We guide the entire setup; typically we're done within a few hours."},{q:"What if our chart of accounts differs per BV?",a:"That's the rule rather than the exception. We map each administration to one reporting structure in Smartbooks, so you get consolidated figures and uniform reporting without changing anything in Globe."},{q:"How long does the Globe integration take to implement?",a:"In most cases you're fully live within one to two weeks, including mapping, historical data and first reports."}],ctaSubtext:"The Globe integration starts with a short technical intake. Book a demo and we'll walk through how we 
13666connect Smartbooks to your Globe environment.",ctaPrimaryLabel:"Book a demo",ctaPrimaryHref:B("planDemo","en"),ctaSecondaryLabel:"Get in touch",ctaSecondaryHref:B("contact","en"),metaTitle:"Exact Globe reporting & consolidation without migration | Smartbooks.ai",metaDescription:"Connect Exact Globe to Smartbooks for consolidation, reporting and planning. Proprietary connector, no cloud migration. 10 entities live in days."}}}),C$="https://img.logo.dev/odoo.com?token=pk_X-1ZO13GSgeOoUrIuJ6GMQ&size=200&format=png",E$=()=>r.jsx(Ho,{cfg:{slugKey:"integratieOdoo",systemName:"Odoo",systemLogoSrc:C$,heroSubtext:"Diepgaande koppeling tussen Odoo en Smartbooks — voor consolidatie, rapportage, planning en maandafsluiting over al je Odoo-instances.",whatWeConnectIntro:"Smartbooks koppelt direct aan Odoo via een veilige API-verbinding. Werk je met meerdere Odoo-instances voor verschillende landen of bedrijfsonderdelen? Dan koppelen we die parallel.",cards:[{icon:"ledger",title:"Volledig grootboek",body:"Alle journaalposten en mutaties op transactieniveau uit Odoo."},{icon:"dimensions",title:"Dimensies, kostenplaatsen & projecten",body:"Odoo-analytic accounts, dimensies en projecten komen automatisch mee."},{icon:"sync",title:"Real-time sync",body:"Boekingen en mutaties lopen elke dag automatisch door. Altijd actuele cijfers."},{icon:"history",title:"Historische data",body:"Bij onboarding laden we je volledige Odoo-historie mee."}],forWhomTitle:"Voor Odoo-gebruikers die internationaal consolideren",forWhomBody:"Smartbooks is gebouwd voor scale-ups en groeiende organisaties die met meerdere Odoo-instances werken — vaak één per land of bedrijfsonderdeel. Smartbooks brengt al die instances samen in één geconsolideerd financieel beeld, met currency conversion en intercompany-eliminaties ingebouwd.",scenarios:["Maandelijkse consolidatie over meerdere Odoo-instances","Intercompany-eliminaties tussen entiteiten en landen","Eén rapportagesjabloon over alle instances","Cashflow-overzicht op groeps- en entiteitsniveau"],steps:[{title:"Autoriseer Smartbooks in Odoo",body:"Eenmalige API-koppeling per Odoo-instance. We helpen met de inrichting."},{title:"Wij richten je instances in",body:"Voor elke Odoo-instance configureren we de mapping na
13666ar Smartbooks. Jij ziet binnen dagen je eigen cijfers, geconsolideerd over alle landen."},{title:"Real-time sync, automatisch",body:"Boekingen, mutaties en dimensies komen automatisch door — uit alle instances tegelijk."}],authMethod:"API-key, versleuteld",faq:[{q:"Werkt het als we meerdere Odoo-instances hebben (bijvoorbeeld één per land)?",a:"Ja, dat is precies de use case waarvoor Smartbooks is gebouwd. We koppelen elke instance afzonderlijk en consolideren ze in één geconsolideerd financieel beeld."},{q:"Hoe gaat Smartbooks om met verschillende valuta?",a:"Smartbooks ondersteunt multi-currency consolidatie. Je definieert per entiteit de functionele valuta; Smartbooks rekent automatisch om naar de groepsvaluta volgens de wisselkoersen die jij configureert."},{q:"Werkt het met zowel Odoo Online als Odoo Enterprise?",a:"Ja. De koppeling werkt op zowel Odoo Online (SaaS) als Odoo Enterprise (self-hosted), zolang de Odoo API beschikbaar is."},{q:"Wat als onze chart of accounts per instance verschilt?",a:"Dat is gangbaar bij internationale Odoo-setups. We mappen elke instance naar één uniforme rapportagestructuur in Smartbooks — je hoeft in Odoo niets aan te passen."},{q:"Hoe lang duurt implementatie van de Odoo-koppeling?",a:"Voor een setup met enkele instances ben je doorgaans binnen één tot twee weken volledig live, inclusief mapping en historische data."}],ctaSubtext:"In een korte demo koppelen we Smartbooks aan jouw Odoo-instances en laten we zien hoe internationale consolidatie eruit kan zien.",ctaPrimaryLabel:"Plan een demo",ctaPrimaryHref:B("planDemo","nl"),ctaSecondaryLabel:"Start een proefmaand",ctaSecondaryHref:B("contact","nl"),metaTitle:"Odoo consolidatie tool voor multi-entity groepen | Smartbooks.ai",metaDescription:"Koppel Odoo aan Smartbooks voor consolidatie, rapportage en planning over al je instances. Multi-instance, multi-currency, real-time sync. Live in dagen.",en:{heroSubtext:"Deep integration between Odoo and Smartbooks — for consolidation, reporting, planning and month-end close across all your Odoo instances.",whatWeConnectIntro:"Smartbooks connects directly to Odoo via a secure API. Working with multiple Odoo instances for different countries or business units? We connect them in parallel.",cards:[{icon:"ledger",title:"Full general ledger",body:"All journal entries and movements at transaction level from Odoo."},{icon:"dimensions",title:"Dimensions, cost centres & projects",body:"Odoo analytic accounts, dimensions and projects flow in automatically."},{icon:"sync",title:"Real-time sync",body:"Postings and movements update continuously — always current numbers."},{icon:"history",title:"Historical data",body:"During onboarding we load your full Odoo history."}],authMethod:"API key, encrypted",faq:[{q:"Does it work if we have multiple Odoo instances (e.g. one per country)?",a:"Yes — that's exactly the use case Smartbooks was built for. We connect each instance individually and consolidate them into one consolidated financial view."},{q:"How does Smartbooks handle multiple currencies?",a:"Smartbooks supports multi-currency consolidation. You define the functional currency per entity; Smartbooks converts to the group currency using the FX rates you configure."},{q:"Does it work with both Odoo Online and Odoo Enterprise?",a:"Yes. The integration works with both Odoo Online (SaaS) and Odoo Enterprise (self-hosted) as long as the Odoo API is available."},{q:"What if our chart of accounts differs per instance?",a:"Common in international Odoo setups. We map each instance to one uniform reporting structure in Smartbooks — no changes needed in Odoo."},{q:"How long does the Odoo integration take to implement?",a:"For a setup with a few instances you're typically fully live within one to two weeks, including mapping and historical data."}],ctaSubtext:"In a short demo we connect Smartbooks to your Odoo instances and show what international consolidation can look like.",ctaPrimaryLabel:"Book a demo",ctaPrimaryHref:B("planDemo","en"),ctaSecondaryLabel:"Start a trial month",ctaSecondaryHref:B("contact","en"),metaTitle:"Odoo consolidation tool for multi-entity groups | Smartbooks.ai",metaDescription:"Connect Odoo to Smartbooks for c
13666onsolidation, reporting and planning across all your instances. Multi-instance, multi-currency, real-time sync. Live in days."}}}),N$="https://img.logo.dev/exact.com?token=pk_X-1ZO13GSgeOoUrIuJ6GMQ&size=200&format=png",I$=()=>r.jsx(Ho,{cfg:{slugKey:"integratieExact",systemName:"Exact Online",systemLogoSrc:N$,systemLogoClassName:"h-10 md:h-12 w-auto object-contain",heroSubtext:"Diepgaande, kant-en-klare koppeling met Exact Online — voor consolidatie, rapportage, planning en maandafsluiting over al je administraties. Plug-and-play, zonder Excel.",whatWeConnectIntro:"Smartbooks koppelt direct aan Exact Online via de officiële API. Geen handmatige exports, geen losse bestanden — gewoon één veilige, real-time data-stroom van Exact Online naar Smartbooks.",cards:[{icon:"ledger",title:"Volledig grootboek",body:"Alle journaalposten en mutaties op transactieniveau uit Exact Online."},{icon:"dimensions",title:"Dimensies & kostenplaatsen",body:"Exact-dimensies, kostenplaatsen en projecten komen automatisch mee. Jouw bestaande structuur blijft intact."},{icon:"sync",title:"Real-time sync",body:"Boekingen en mutaties lopen continu door naar Smartbooks. Altijd actuele cijfers, zonder handmatig werk."},{icon:"history",title:"Historische data",body:"Bij onboarding laden we je volledige Exact Online-historie mee — inclusief vorige boekjaren."}],forWhomTitle:"Voor Exact Online-gebruikers met meerdere administraties",forWhomBody:"Smartbooks is gebouwd voor controllers en CFO's bij groeiende organisaties met meerdere Exact Online-administraties. Exact doet veel goed binnen één administratie — maar voor multi-entity consolidatie, managementrapportage over de hele groep en cashflowplanning pakt Smartbooks op waar Exact Online ophoudt.",scenarios:["Maandelijkse consolidatie van meerdere Exact Online-administraties","Intercompany-eliminaties en valutaomrekening","Eén managementrapportage-sjabloon over alle administraties","Cashflow-overzicht op groeps- en administratieniveau"],steps:[{title:"Koppel Exact Online via OAuth",body:"Eenmalig inloggen met je Exact Online-account, akkoord geven op de scopes en de koppeling staat. Geen IT-traject, geen exports."},{title:"Wij richten je administraties in",body:"Voor elke Exact Online-administratie configureren we de mapping na
13666ar Smartbooks. Jij ziet binnen dagen je eigen cijfers in het systeem."},{title:"Real-time sync, automatisch",body:"Vanaf dat moment komen boekingen, mutaties en dimensies automatisch door naar Smartbooks."}],authMethod:"OAuth via Exact Online",faq:[{q:"Werkt het ook als we meerdere Exact Online-administraties hebben?",a:"Ja. We koppelen elke administratie afzonderlijk en consolideren ze automatisch in Smartbooks — inclusief intercompany-eliminaties en valutaomrekening."},{q:"Wat als onze grootboekstructuur per BV verschilt?",a:"Geen probleem. We mappen elke administratie naar één uniforme rapportagestructuur in Smartbooks, zodat je geconsolideerde cijfers krijgt zonder dat Exact Online aangepast hoeft te worden."},{q:"Komen Exact-dimensies en kostenplaatsen mee?",a:"Ja, alle dimensies, kostenplaatsen en projecten uit Exact Online lopen automatisch mee. Daarmee kun je in Smartbooks zonder extra werk dezelfde analyses maken — én erbovenop consolideren en rapporteren."},{q:"Hoe activeren we de koppeling?",a:"Smartbooks koppelt via de officiële Exact Online API met OAuth. Je logt eenmalig in met je Exact-account, geeft akkoord op de gevraagde scopes en de koppeling is actief — typisch binnen een paar minuten."},{q:"Hoe lang duurt implementatie van de Exact Online-koppeling?",a:"Doorgaans ben je binnen één week live: koppeling actief, historie ingeladen en eerste rapportages opgeleverd."}],ctaSubtext:"In een korte demo koppelen we Smartbooks aan jouw Exact Online-data en laten we zien wat er mogelijk is voor consolidatie, rapportage en cashflow.",ctaPrimaryLabel:"Plan een demo",ctaPrimaryHref:B("planDemo","nl"),ctaSecondaryLabel:"Start een proefmaand",ctaSecondaryHref:B("contact","nl"),metaTitle:"Rapportagetool voor Exact Online: rapportage & consolidatie | Smartbooks.ai",metaDescription:"Rapportagetool voor Exact Online: managementrapportages, consolidatie en cashflowplanning over al je administraties. Near real-time sync, live in dagen.",en:{heroSubtext:"Deep, ready-to-use integration with Exact Online — for consolidation, reporting, planning and month-end close across all your administrations. Plug-and-play, no Excel.",whatWeConnectIntro:"Smartbooks connects directly to Exact Online via the official API. No manual exports, no loose files — just one secure, real-time data flow from Exact Online into Smartbooks.",cards:[{icon:"ledger",title:"Full general ledger",body:"All journal entries and movements at transaction level from Exact Online."},{icon:"dimensions",title:"Dimensions & cost centres",body:"Exact dimensions, cost centres and projects flow in automatically. Your existing structure stays intact."},{icon:"sync",title:"Real-time sync",body:"Postings and movements update continuously — always current numbers, no manual work."},{icon:"history",title:"Historical data",body:"During onboarding we load your full Exact Online history — including prior fiscal years."}],authMethod:"OAuth via Exact Online",faq:[{q:"Does it work if we have multiple Exact Online administrations?",a:"Yes. We connect each administration individually and consolidate them automatically in Smartbooks — including intercompany eliminations and currency conversion."},{q:"What if our chart of accounts differs per entity?",a:"Not a problem. We map each administration to one uniform reporting structure in Smartbooks, so you get consolidated figures without changing anything in Exact Online."},{q:"Do Exact dimensions and cost centres come along?",a:"Yes — all dimensions, cost centres and projects from Exact Online flow in automatically, so the same analyses you run in Exact work in Smartbooks, with consolidation and reporting on top."},{q:"How do we activate the integration?",a:"Smartbooks connects via the official Exact Online API using OAuth. You log in once with your Exact account, approve the requested scopes and the integration is active — typically within a few minutes."},{q:"How long does the Exact Online integration take to implement?",a:"Typically you're live within one week: integration active, history loaded and first reports delivered."}],ctaSubtext:"In a short demo we connect Smartbooks to your Exact Online data and show what's possible for consolidation, reporting and cashflow.",ctaPrimaryLabel:"Book a demo",ctaPrimaryHref:B("planDemo","en"),ctaSecondaryLabel:"Start a trial month",ctaSecondaryHref:B("contact","en"),metaTitle:"Exact Online consolidation & reporting tool | Smartbooks.ai",metaDescription:"Connect Exact Online to Smartbooks for c
13666onsolidation, reporting and cashflow planning across all your administrations. Near real-time sync, live in days, no Excel."}}}),P$=typeof document<"u"?b.useLayoutEffect:b.useEffect,T$=()=>{const{pathname:e,search:n,hash:t,key:i}=dt();return b.useEffect(()=>{if(!("scrollRestoration"in window.history))return;const a=window.history.scrollRestoration;return window.history.scrollRestoration="manual",()=>{window.history.scrollRestoration=a}},[]),P$(()=>{if(t){requestAnimationFrame(()=>{document.getElementById(decodeURIComponent(t.slice(1)))?.scrollIntoView()});return}const a=()=>{window.scrollTo(0,0),document.documentElement.scrollTop=0,document.body.scrollTop=0};a(),requestAnimationFrame(a),setTimeout(a,0)},[e,n,t,i]),null},v0="sb_sticky_cta_dismissed_at",D$=600,B$=1e3*60*60*24,M$=()=>{const[e,n]=b.useState(!1),[t,i]=b.useState(!1),a=dt(),{i18n:o}=Y(),s=o.language!=="nl",l=o.language==="de"?"de":s?"en":"nl",d=B("planDemo",l),c=B("contact",l),h=[d,c].some(v=>a.pathname===v||a.pathname.startsWith(`${v}/`));b.useEffect(()=>{i(!0)},[]),b.useEffect(()=>{if(!t||h)return;const v=Number(localStorage.getItem(v0)||0);if(v&&Date.now()-v<B$)return;const x=()=>{window.scrollY>D$&&n(!0)};return x(),window.addEventListener("scroll",x,{passive:!0}),()=>window.removeEventListener("scroll",x)},[t,h,a.pathname]);const g=()=>{localStorage.setItem(v0,String(Date.now())),n(!1)};if(!t||h)return null;const m=d,p=s?"Ready to see Smartbooks in action?":"Klaar om Smartbooks in actie te zien?",f=s?"Personal demo, no commitments":"Persoonlijke demo, geen verplichtingen",w=s?"Book demo":"Plan demo",k=s?"Close":"Sluiten";return r.jsx(Bl,{children:e&&r.jsxs(r.Fragment,{children:[r.jsx(Dt.div,{initial:{y:100,opacity:0},animate:{y:0,opacity:1},exit:{y:100,opacity:0},transition:{type:"spring",stiffness:260,damping:28},className:"md:hidden fixed bottom-0 inset-x-0 z-50 px-3 pb-3",style:{paddingBottom:"calc(env(safe-area-inset-bottom) + 0.75rem)"},children:r.jsxs("div",{className:"glass-card rounded-2xl border border-teal/30 shadow-2xl shadow-teal/10 backdrop-blur-xl bg-surface/90 px-4 py-3 flex items-center gap-3",children:[r.jsxs("div",{className:"flex-1 min-w-0",children:[r.jsx("p",{className:"text-[13px] font-semibold text-foreground leading-tight",children:p}),r.jsx("p",{className:"text-[11px] text-muted-foreground leading-tight mt-0.5",children:f})]}),r.jsxs(_,{to:m,className:"btn-primary flex items-center gap-1 text-sm px-4 py-2.5 whitespace-nowrap shrink-0",children:[w," ",r.jsx(re,{className:"h-3.5 w-3.5"})]}),r.jsx("button",{onClick:g,"aria-label":k,className:"shrink-0 h-8 w-8 -mr-1 flex items-center justify-center rounded-full text-muted-foreground hover:text-foreground hover:bg-white/5 transition",children:r.jsx(xi,{className:"h-4 w-4"})})]})}),r.jsx(Dt.div,{initial:{y:60,opacity:0},animate:{y:0,opacity:1},exit:{y:60,opacity:0},transition:{type:"spring",stiffness:260,damping:28},className:"hidden md:flex fixed bottom-6 right-6 z-50 items-center gap-2",children:r.jsxs("div",{className:"glass-card rounded-full border border-teal/30 shadow-2xl shadow-teal/10 backdrop-blur-xl bg-surface/95 pl-5 pr-2 py-2 flex items-center gap-3",children:[r.jsx("span",{className:"text-sm font-semibold text-foreground whitespace-nowrap",children:p}),r.jsxs(_,{to:m,className:"btn-primary flex items-center gap-1.5 text-sm px-4 py-2 whitespace-nowrap shrink-0 rounded-full",children:[w," ",r.jsx(re,{className:"h-3.5 w-3.5"})]}),r.jsx("button",{onClick:g,"aria-label":k,className:"shrink-0 h-8 w-8 flex items-center justify-center rounded-full text-muted-foreground hover:text-foreground hover:bg-white/5 transition",children:r.jsx(xi,{className:"h-4 w-4"})})]})})]})})},F$=60*60*24*365,R$=e=>{if(typeof document>"u")return;const n=typeof window<"u"&&window.location.protocol==="https:",t=[`lang=${e}`,"path=/",`max-age=${F$}`,"samesite=lax"];n&&t.push("secure"),document.cookie=t.join("; ")},O$=()=>{const e=dt(),{i18n:n}=Y();return b.useEffect(()=>{if(typeof window>"u")return;const t=e.pathname,i=t==="/en"||t.startsWith("/en/")?"en":t==="/de"||t.startsWith("/de/")?"de":"nl";n.language!==i&&n.changeLanguage(i),R$(i)},[e.pathname,n]),null},_$=()=>{const e=t2();return b.useEffect(()=>{const n=e instanceof Error?e.message:String(e);
13666if(n.includes("is not valid JSON")||n.includes("Unexpected token")||n.includes("<!DOCTYPE")){window.location.assign(`${window.location.pathname}${window.location.search}${window.location.hash}`);return}console.error("[RouteErrorRecovery]",e)},[e]),r.jsx("div",{className:"flex min-h-[40vh] items-center justify-center bg-midnight px-4",children:r.jsx("p",{className:"text-sm text-white/70",children:"Loading…"})})},L$=()=>r.jsx(Wl,{pillarKey:"reporting"}),W$=()=>r.jsx(Wl,{pillarKey:"consolidation"}),V$=()=>r.jsx(Wl,{pillarKey:"budgetterenCashflow"}),K$=()=>r.jsx(Wl,{pillarKey:"close"}),q$=()=>r.jsx(Wl,{pillarKey:"virtualController"}),H$=()=>{const[e]=b.useState(()=>new GT);return r.jsx(ZT,{client:e,children:r.jsxs(xb,{children:[r.jsx(d5,{}),r.jsx(W5,{}),r.jsx(T$,{}),r.jsx(O$,{}),r.jsx(M$,{}),r.jsx(P9,{}),r.jsx(W3,{})]})})},ve=Zi.static,En=Zi.dynamic,Up=e=>e.startsWith("/")?e.slice(1):e,k0=Zi.articleCategoryBases,U$=new Set(Cb.map(e=>e.slug)),zt=(e,n)=>{if(e==="de"){const a=Up(En[n].de);return Li.filter(o=>(k0[o.category]??"artikelDetail")===n).filter(o=>U$.has(o.slug)).map(o=>`${a}/${o.slug}`)}const t=Up(En[n][e]);return Li.filter(a=>(k0[a.category]??"artikelDetail")===n).map(a=>`${t}/${e==="nl"?a.slug:a.enSlug}`)},Zg=e=>{if(e==="de")return[];const n=Up(En.voorWie[e]),t=Zi.roles;return ru.map(i=>`${n}/${e==="nl"?i:t[i]??i}`)},Yg=[{kind:"index",Component:gq},{kind:"static",pathByLocale:ve.functionaliteiten,Component:D9},{kind:"static",pathByLocale:ve.rapporteren,Component:L$},{kind:"static",pathByLocale:ve.consolideren,Component:W$},{kind:"static",pathByLocale:ve.budgetterenCashflow,Component:V$},{kind:"static",pathByLocale:ve.close,Component:K$},{kind:"static",pathByLocale:ve.virtueleController,Component:q$},{kind:"static",pathByLocale:ve.aiKoppelingen,Component:i$},{kind:"static",pathByLocale:ve.prijzen,Component:kU},{kind:"static",pathByLocale:ve.projecten,Component:wU},{kind:"static",pathByLocale:ve.consulting,Component:xU},{kind:"static",pathByLocale:ve.overOns,Component:BU},{kind:"static",pathByLocale:ve.contact,Component:FU},{kind:"static",pathByLocale:ve.klantverhalen,Component:GU},{kind:"static",pathByLocale:ve.kenniscentrum,Component:qU},{kind:"dynamic",pathByLocale:{nl:`${En.artikelDetail.nl}/:slug`,en:`${En.artikelDetail.en}/:slug`,de:`${En.artikelDetail.de}/:slug`},Component:_d,staticPathsByLocale:{nl:()=>zt("nl","artikelDetail"),en:()=>zt("en","artikelDetail"),de:()=>zt("de","artikelDetail")}},{kind:"dynamic",pathByLocale:{nl:`${En.klantervaringen.nl}/:slug`,en:`${En.klantervaringen.en}/:slug`,de:`${En.klantervaringen.de}/:slug`},Component:_d,staticPathsByLocale:{nl:()=>zt("nl","klantervaringen"),en:()=>zt("en","klantervaringen"),de:()=>zt("de","klantervaringen")}},{kind:"dynamic",pathByLocale:{nl:`${En.klantcase.nl}/:slug`,en:`${En.klantcase.en}/:slug`,de:`${En.klantcase.de}/:slug`},Component:_d,staticPathsByLocale:{nl:()=>zt("nl","klantcase"),en:()=>zt("en","klantcase"),de:()=>zt("de","klantcase")}},{kind:"dynamic",pathByLocale:{nl:`${En.videos.nl}/:slug`,en:`${En.videos.en}/:slug`,de:`${En.videos.de}/:slug`},Component:_d,staticPathsByLocale:{nl:()=>zt("nl","videos"),en:()=>zt("en","videos"),de:()=>zt("de","videos")}},{kind:"static",pathByLocale:ve.vergelijkSoftware,Component:wG},{kind:"static",pathByLocale:ve.waaromSmartbooks,Component:yG},{kind:"dynamic",pathByLocale:{nl:`${En.voorWie.nl}/:role`,en:`${En.voorWie.en}/:role`,de:`${En.voorWie.de}/:role`},Component:SG,staticPathsByLocale:{nl:()=>Zg("nl"),en:()=>Zg("en"),de:()=>Zg("de")}},{kind:"static",pathByLocale:ve.planDemo,Component:AG},{kind:"static",pathByLocale:ve.webinar,Component:NG},{kind:"static",pathByLocale:ve.liveWebinar,Component:IG},{kind:"static",pathByLocale:ve.watIsNieuw,Component:BG},{kind:"static",pathByLocale:ve.lpFinance,Component:_G},{kind:"static",pathByLocale:ve.lpConsolidatieSoftware,Component:LG},{kind:"static",pathByLocale:ve.lpRapportageSoftware,Component:KG,nlOnly:!0},{kind:"static",pathByLocale:ve.lpVirtueleController,Component:qG},{kind:"static",pathByLocale:ve.productTour,Component:$G},{kind:"static",pathByLocale:ve.onboarding,Component:ZG},{kind:"static",pathByLocale:ve.onboardingMeeting,Component:QG},{kind:"static",pathByLocale:ve.privacybeleid,Component:r$},{kind:"static",pathByLocale:ve.cookiebeleid,Component:a$}
13666,{kind:"static",pathByLocale:ve.algemeneVoorwaarden,Component:o$},{kind:"static",pathByLocale:ve.whitepapers,Component:g$},{kind:"static",pathByLocale:ve.integraties,Component:p$},{kind:"static",pathByLocale:ve.integratieExact,Component:I$},{kind:"static",pathByLocale:ve.integratieQuickbooks,Component:y$},{kind:"static",pathByLocale:ve.integratieTwinfield,Component:x$},{kind:"static",pathByLocale:ve.integratieAfas,Component:S$},{kind:"static",pathByLocale:ve.integratieExactGlobe,Component:A$},{kind:"static",pathByLocale:ve.integratieOdoo,Component:E$},{kind:"static",pathByLocale:ve.bedanktWebinar,Component:s$},{kind:"static",pathByLocale:ve.bedanktWhitepaper,Component:l$},{kind:"static",pathByLocale:ve.bedanktDemo,Component:d$},{kind:"static",pathByLocale:ve.bedanktContact,Component:c$},{kind:"static",pathByLocale:ve.quickbooksDisconnected,Component:h$},{kind:"static",pathByLocale:ve.notFound,Component:AE}],G$=e=>e.startsWith("/")?e.slice(1):e,Qg=(e,n)=>e.filter(t=>!(t.kind==="static"&&t.nlOnly&&n!=="nl")).map(t=>{if(t.kind==="index")return{index:!0,Component:t.Component};const i=G$(t.pathByLocale[n]);return t.kind==="dynamic"?{path:i,Component:t.Component,getStaticPaths:t.staticPathsByLocale[n]}:{path:i,Component:t.Component}}),$$=[{path:"/",Component:H$,errorElement:r.jsx(_$,{}),children:[...Qg(Yg,"nl"),{path:"en",children:[...Qg(Yg,"en")]},{path:"de",children:[...Qg(Yg,"de")]},{path:"*",Component:AE}]}],Z$={assistantName:"Alex · AI-controller",statusOnline:"Online · reageert direct",placeholder:"Stel Alex een finance-vraag…",typing:"Alex is aan het typen",turns:[{question:"Hoe liggen we YTD ten opzichte van budget?",answer:"YTD-omzet is €4,82M (+6,3% vs. budget). EBITDA komt uit op €612K (-2,1% vs. budget), drukke maanden in Q2 zijn gecompenseerd door hogere personeelslasten."},{question:"Wat is de grootste afwijking dit kwartaal?",answer:"Marketing zit €84K boven budget (+18%), met name door een eenmalige campagne in juni. Wil je dat ik dit per entiteit uitsplits?"},{question:"Maak een board deck voor de directievergadering",answer:"Ik genereer een 8-slide deck met P&L-overzicht, top-3 varianties, cashflow-positie en forecast. Klaar in ~30 seconden, wil je 'm in jullie huisstijl?"}]},Y$={product:"Product",pricing:"Prijzen",projects:"Projecten",knowledgeCenter:"Kenniscentrum",aboutUs:"Over ons",customerStories:"Klantverhalen",planDemo:"Plan een demo",account:{login:"Inloggen",signup:"Aanmelden"},knowledge:{viewAll:"Alle content bekijken",onboardingMeeting:"Start je gratis pilot",categories:{articles:{title:"Artikelen",subtitle:"Diepgaande stukken"},videos:{title:"Videos",subtitle:"Demo's & uitleg"},experiences:{title:"Klantervaringen",subtitle:"Wat klanten zeggen"},cases:{title:"Klantcases",subtitle:"Uitgewerkte cases"}}},about:{team:"Ons team",teamSubtitle:"Maak kennis met ons team",why:"Waarom Smartbooks?",whySubtitle:"Wat ons onderscheidt",contact:"Contact",contactSubtitle:"Neem contact met ons op"},aiConnectors:"AI-koppelingen (MCP)"},Q$={seoTitle:"Plan een demo",seoDescription:"Plan een persoonlijke demo met Jaap van der Ende en ontdek hoe Smartbooks jouw finance-team verder helpt.",eyebrow:"Plan een demo",title:"Plan een demo. Wij laten zien hoe Smartbooks voor jullie werkt.",subtitle:"Een persoonlijke demo, afgestemd op jullie situatie. Geen verplichtingen, geen verkoopdruk, een concreet gesprek over wat Smartbooks voor jullie finance-team kan betekenen.",playVideo:"Speel intro-video af",videoCaption:"Co-Founder",bulletsHeading:"Plan een demo en ontdek hoe je:",bullets:["De maandafsluiting versnelt","Consolidatie automatiseert","Finance processen professionaliseert","AI betrouwbaar inzet in finance","Rapportages automatisch klaarzet","Cijfers sneller analyseert"],calendar:{title:"Afspreken met Jaap van der Ende",subtitle:"Kies een tijd die jou uitkomt"}}
13666,J$={eyebrow:"Gratis pilot",title:"Start je gratis pilot",subtitle:"In een eerste gesprek maken we kennis, koppelen we samen jullie boekhouding en spreken we af wat we in de pilot inrichten. Daarna werk je een maand lang in je eigen, volledig ingerichte omgeving. Volledig vrijblijvend.",trust:["Je betaalt niks","Geen abonnement of opzegtermijn","Stoppen kan altijd"],bulletsHeading:"Zo starten we",bullets:["Kennismaken — wie wij zijn, en waar jullie finance nu staat","Samen door de verbinding lopen — hoe jullie boekhouding aan Smartbooks gekoppeld wordt","Je eigen cijfers zien — wat er direct in Smartbooks staat zodra de koppeling actief is","De vervolgstappen bespreken — wat er nodig is voor rapportage, consolidatie of planning"],calendar:{title:"Kies een moment voor de kennismaking",subtitle:"Met Robin van den Born",role:"Smartbooks",iframeTitle:"Start je gratis pilot met Robin van den Born",portraitAlt:"Portret van Robin van den Born, Smartbooks"},footnote:{prefix:"Wil je eerst meer weten over Smartbooks?",link:"Plan dan gerust een kennismaking",suffix:", dan bespreken we samen de opties."},benefitsHeading:"Wat de pilot je oplevert",benefits:["Je eigen cijfers direct live in Smartbooks","Een volledig ingerichte omgeving op jullie structuur: rapportages, consolidatie en budgetten","Minimaal één echte maandafsluiting in Smartbooks, zodat je het resultaat in je eigen cijfers ziet","Beoordelen op een werkend systeem in plaats van op een demo","Geen kosten, geen abonnement en geen opzegtermijn: bevalt het niet, dan stopt het daar"],cta:"Start je gratis pilot"},X$={trustBadge:"Vertrouwd door 60+ financiële teams in Nederland",title1:"Consolidatie en maandafsluiting.",title2:"Zonder Excel.",subtitle:"Hét systeem voor de financial en business controller. Professionaliseer finance met gecontroleerde inzet van AI.",featureList:["Rapporteren","Consolideren","Budgetten & Cashflow","Maandafsluiting","AI-controller"],cta:"Plan een demo",ctaSecondary:"Bekijk functionaliteiten",ctaWebinar:"Meld je aan voor het webinar",trialReassurance:"Of start direct met een <1>gratis proefmaand</1> op je eigen data — geen verplichtingen.",bookWithMichel:"Plan je intake direct met Michel",tabs:{reporting:"Rapporteren",consolidation:"Consolideren",budgetterenCashflow:"Budgetten & Cashflow",virtualController:"AI-controller"},tabAlts:{reporting:"Smartbooks, Financiële rapportages en dashboards",consolidation:"Smartbooks, Geconsolideerde P&L over meerdere entiteiten",budgetterenCashflow:"Smartbooks, Budgettering, planning en cashflow forecast",virtualController:"Smartbooks, AI-controller voor finance teams"}},eZ={eyebrow:"Het team",title:"Gebouwd door mensen die finance écht kennen",subtitle:"Smartbooks is opgezet door een team met decennia ervaring in EPM, controlling en SaaS. Geen gezichtsloze tool, je werkt met mensen die het vak kennen.",cta:"Maak kennis met het hele team"},nZ={clients:"Bedrijven vertrouwen op Smartbooks",daysBack:"Minder tijd aan rapporteren en consolideren",live:"Volledig geïmplementeerd binnen een week",uptime:"Voor consolidatie, rapportage, planning & cashflow"},tZ={title:"Vertrouwd door finance teams",titleCompact:"Vertrouwd door finance teams"},iZ={eyebrow:"Het probleem",title:"Finance draait nog op",titleHighlight:"Excel en handwerk",subtitle:"Het werkt, tot het niet meer werkt. Deze uitdagingen remmen je team af en blokkeren verdere professionalisering.",items:{spreadsheets:{title:"Versnipperde Excel-modellen",description:"Consolidatie over meerdere entiteiten draait op complexe, historisch gegroeide spreadsheets die niemand anders begrijpt."},manualWork:{title:"Elke ad-hoc vraag kost een middag",description:"Een simpele vraag van de directie betekent een export, een draaitabel en een middag werk. Voordat je überhaupt aan analyse toekomt."},errors:{title:"Fouten die te laat worden ontdekt",description:"Handmatige invoer en koppelingen tussen bestanden leiden tot fouten die pas bij de directiepresentatie zichtbaar worden."},knowledge:{title:"Kennis zit in hoofden",description:"Als één persoon uitvalt, ligt het proces stil. De complexiteit is kwetsbaar en niet overdraagbaar."}}},rZ={eyebrow:"Het probleem",title:"Herken jij dit als",titleHighlight:"finance professional",items:["Handmatige Excel-rapportages kosten je uren per week","Fouten in formules leiden tot onbetrouwbare cijfers","Consolidatie van meerdere entiteiten is een nachtmerrie","Geen real-time inzicht in financiële prestaties","Versiebeheer van spreadsheets is onmogelijk","Budgettering en forecasting kost te veel tijd","Management krijgt rapporten te laat","Audit trails ontbreken volledig"]},aZ={eyebrow:"ALEX, JOUW AI CONTROLLER",title:"AI is zo betrouwbaar als de data eronder.",subtitle:"Daarom bouwden we eerst het fundament: één gecontroleerde, geconsolideerde versie van je cijfers over alle entiteiten. Alex werkt uitsluitend dáárop, met bronvermelding bij elk antwoord.",alexCardTitle:"Alex, AI controller",capabilities:[{title:"Controleert",description:"IC-m
13666ismatches en waar ze vandaan komen"},{title:"Analyseert",description:"Varianties tot op transactieniveau"},{title:"Produceert",description:"Board decks op verzoek"},{title:"Plant",description:"Forecasts & scenario's doornemen"},{title:"Sparringspartner",description:"Ad-hoc vragen, direct antwoord met bron"}],contextLabel:"betrouwbare context voor AI",fundamentTitle:"Smartbooks: het fundament",fundamentPillars:[{title:"Consolidatie",description:"Geautomatiseerd IC-eliminaties & valuta"},{title:"Maandafsluiting",description:"Geautomatiseerde checklists & controles"},{title:"Rapportage",description:"Geautomatiseerde gestandaardiseerde structuur"},{title:"Budgetten & cashflow",description:"Geautomatiseerd budget, forecast & cash"}],fundamentFootnote:"Alles geautomatiseerd in het fundament. Alex doet de analyses erbovenop, met bronvermelding.",dataSources:{accounting:"BOEKHOUDING & ERP",accountingDesc:"Exact · Twinfield · AFAS · Odoo · en veel meer",operational:"OPERATIONELE DATA",operationalDesc:"CRM · HR · projecten · uren · en meer beschikbaar"},valueProps:{truth:{title:"Één versie van de waarheid",description:"Geen losse exports. Alle entiteiten, geconsolideerd, in één systeem."},auditable:{title:"Altijd auditbaar",description:"Elke berekening en elk antwoord is te herleiden naar de bron. Controleerbaar voor accountant en toezichthouder."},control:{title:"Jij houdt de regie",description:"AI staat uit tot jij hem aanzet, per tenant. Jij beoordeelt en beslist."}},ctaPrimary:"Zie Alex werken op jouw cijfers",ctaSecondary:"Of lees hoe de AI controller werkt"},oZ={eyebrow:"Hoe het werkt",title:"Binnen een week live, vanaf dag één waarde.",subtitle:"Vergeet implementatietrajecten van maanden. Binnen twee dagen ben je technisch up-and-running. Daarna werken we samen met je team, onboarden, de inrichting verfijnen, en bepalen waar de grootste tijdwinst zit in jullie close, rapportage en dagelijkse workflows.",trialBadge:{label:"Gratis proefmaand",title:"Een maand gratis proberen met je eigen financiële gegevens.",description:"Tijdens je gratis proefmaand richten we Smartbooks volledig in op jullie boekhouding, structuur en rapportages. Zo zie je niet alleen een demo, maar werk je direct in je eigen omgeving — en weet je precies wat Smartbooks voor jullie doet vóór je beslist."},step1:{label:"Stap 1",title:"Koppeling en inrichting",description:"Je boekhouding staat in Smartbooks. Rapportage-, consolidatie- en planningsstructuur zijn ingericht op je grootboek. Wij doen het werk, jij ziet direct je eigen cijfers in het systeem."},step2:{label:"Stap 2",title:"Training",description:"Samen met je team gaan we door de kern-workflows: afsluiting, consolidatie, rapportage. Iedereen leert werken met wat voor hun rol relevant is. Geen generieke handleiding, training op jouw setup."},step3:{label:"Stap 3",title:"Finetuning",description:"Smartbooks werkt, je team werkt ermee. Nu finetunen we samen: standaardrapportages aanscherpen, extra dimensies toevoegen, checklists afstemmen. Jullie ritme bepaalt het tempo."},flexNote:"Precieze tijdlijn stemmen we af op jullie beschikbaarheid. Sommige klanten willen intensief in één week, anderen spreiden training liever over een maand.",trialCta:"Start een gratis proefmaand",trialCtaSub:"Geen verplichtingen, geen kosten. Niet tevreden? Geen factuur.",quotes:[{quote:"Maak van de implementatie niet een groot project, want het gaat heel snel. Tijdens de gratis proefmaand is de hele inrichting al afgerond en is alles klaar voor gebruik.",author:"Karel van den Bos",role:"CFO, Intermax"},{quote:"Ik heb in mijn 30+ jaar ervaring met veel tools gewerkt, maar Smartbooks is by far de eenvoudigste en snelste om te implementeren.",author:"Marcel Steenbrink",role:"CFO, Primus Wafer Paper"}]},sZ={eyebrow:"Functionaliteiten",title:"Alles wat finance nodig heeft",subtitle:"Eén platform voor consolidatie, planning, rapportage en AI-analyse.",consolidation:{title:"Consolidatie",description:"Automatische consolidatie over al je entiteiten. Intercompany-eliminaties, valutaomrekening en multi-level structuren."},planning:{title:"Planning & forecasting",description:"Budgettering en rolling forecasts die direct aansluiten op je actuals. Scenario-analyses in seconden."},reporting:{title:"Rapportage",description:"Professionele managementrapportages en board decks. Altijd actueel, altijd consistent."},cashPlanning:{title:"Cashplanning",description:"Real-time liquiditeitsprognoses en cashflow-analyses. Altijd zicht op je financiële positie."},ai:{title:"AI Business Controller",description:"Stel vragen aan Alex, je AI-assistent. Van variantie-analyse tot ad-hoc rapportages, in natuurlijke taal."},viewAll:"Bekijk alle functionaliteiten"},lZ={eyebrow:"Klaar om te starten?",title:"Klaar om finance te professionaliseren?",subtitle:"Ervaar in jullie eigen finance omgeving hoe Smartbooks business control professionaliseert en de basis legt voor betrouwbare AI.",cta:"Plan een demo",ctaTrial:"Start een proefmaand",trialReassurance:"Geen creditcard, geen verplichtingen. Wij richten Smartbooks volledig in op jullie boekhouding. Bevalt het niet, dan stoppen we — geen factuur.",onboardingMeeting:{prefix:"Liever eerst vrijblijvend kennismaken?",link:"Start je gratis pilot"},ctaWebinar:"Meld je aan voor het webinar",noObligations:"Geen verplichtingen",liveIn14Days:"Binnen een week live",personalGuidance:"Persoonlijke begeleiding"},dZ={seoTitle:"Webinar: Slim rapporteren, consolideren & budgetteren met AI",
13666seoDescription:"Bekijk de Smartbooks webinar en leer in 25 minuten hoe je financiële discipline vergroot en tijd bespaart met slimme rapportage, consolidatie en AI.",eyebrow:"On-demand webinar",title:"Webinar: Slim Rapporteren, Consolideren & Budgetteren met AI",subtitle:"Leer hoe je de financiële discipline in jouw bedrijf kan vergroten en tegelijkertijd veel tijd bespaart.",heroCta:"Ja, ik doe mee",hostRole:"Co-Founder",bulletsHeading:"Na dit webinar van 25 minuten:",bullets:["Heb je nieuwe ideeën voor hoe je de financiële discipline kunt vergroten","Weet je of Smartbooks voor jullie een interessante oplossing is","Begrijp je hoe je 80% tijd kunt besparen in rapporteren en consolideren"],benefitsHeading:"Krijg meer rust, overzicht en inzicht met een betere rapportage, planning en consolidatie",benefits:[{title:"Bespaar tijd",description:"Tot 80% minder werk aan rapportage, consolidatie en analyses."},{title:"Meer financiële discipline",description:"Betrouwbare cijfers en consistente processen door je hele organisatie."},{title:"Sneller inzicht",description:"Realtime cijfers en heldere dashboards op het moment dat je ze nodig hebt."}],form:{eyebrow:"Schrijf je in voor het webinar:",title:"AI in Finance: van Belofte naar Resultaat",successTitle:"Bedankt voor je aanmelding!",successBody:"Je ontvangt binnen enkele minuten een e-mail met de link naar de webinar."}},cZ={seoTitle:"Live webinar: AI effectief inzetten in finance",seoDescription:"Meld je aan voor het live webinar en zie hoe je AI écht effectief inzet bij consolidatie, analyse en rapportage. Praktische inzichten, geen productpraatje. Kies direct een datum en tijdstip.",eyebrow:"Gratis · online",title:"Live webinar: AI effectief inzetten in finance",subtitle:"In dit live webinar laat Jaap zien hoe je AI écht effectief inzet binnen consolidatie, analyse en rapportage. Kies hieronder een datum en tijdstip.",meta:{date:"Kies zelf een datum en tijdstip",audience:"Voor controllers en CFO's"},host:{name:"Jaap van der Ende",role:"Co-Founder & Director Growth & Strategy",intro:"Gastheer van dit webinar",bio:"Met jarenlange ervaring in management- en strategy consulting, als serial entrepreneur en iemand die zelf dagelijks met AI werkt, deelt Jaap hoe finance teams AI in de praktijk écht effectief inzetten. Geen theorie, maar aanpak die direct werkt."},privacyPrefix:"Je gegevens worden verwerkt conform ons",privacyLink:"privacybeleid",privacySuffix:".",ondemand:{title:"Liever direct aan de slag?",description:"Geen zin om te wachten op een livesessie? Plan dan een persoonlijke demo in en zie zelf hoe AI jouw finance werk slimmer maakt.",button:"Plan een demo"}},uZ={tagline:"Professioneel finance voor groeiende organisaties met meerdere entiteiten.",product:"Product",features:"Functionaliteiten",pricing:"Prijzen",integrations:"Integraties",company:"Bedrijf",aboutUs:"Over ons",knowledgeCenter:"Kenniscentrum",contact:"Contact",copyright:"© 2026 Smartbooks B.V. Alle rechten voorbehouden.",privacy:"Privacy",terms:"Voorwaarden",privacyPolicy:"Privacybeleid",cookiePolicy:"Cookiebeleid",termsConditions:"Algemene voorwaarden",isaeCertified:"ISAE 3402 Type II<br />gecertificeerd"},hZ={alt:"De oprichters van Smartbooks",eyebrow:"Over ons",title:"Gebouwd door mensen die finance écht kennen",body:"Smartbooks is opgericht door een team met decennia ervaring in EPM, controlling en SaaS. Geen gezichtsloze tool. Je werkt met mensen die het vak kennen en eerder bewezen producten bouwden voor concerns als Akzo Nobel, Philips, KPN en KLM.",cta:"Maak kennis met het team"},gZ={text:"🎓 Gratis webinar: Ontdek hoe AI jouw rapportage transformeert",cta:"Meld je aan"},mZ={eyebrow:"Integraties",title:"Koppel eenvoudig",titleHighlight:"je systemen",subtitle:"Smartbooks sluit naadloos aan op je bestaande boekhoud-, ERP- en BI-stack. Geen IT-project, geen migratie, gewoon plug-and-play met de tools die je vandaag al gebruikt.",footnote:"Mis je een integratie? Vrijwel elke koppeling is mogelijk via onze API en integratieplatforms.",badges:{plugAndPlay:"Plug-and-play koppeling",fastSetup:"Live in dagen, niet maanden",secure:"Veilig & GDPR-compliant"},groups:{accounting:"Boekhouding & ERP",dataBi:"Data & BI",automation:"Automatisering & API",systems:"Systemen & automatisering",extra:"En 300+ andere koppelingen"},extra:{label:"Extra koppelingen",description:"Voor BI-tools en automation-platforms gebruiken we open API's en kant-en-klare connectoren."},compact:"Koppelt direct met Exact Online, Exact Globe, Twinfield, AFAS en Odoo.",moreComingSoon:"Meer integraties volgen"},pZ={valueProp:{title:"Eén systeem, geen implementatietraject van zes maanden",body:"Smartbooks is gebouwd voor finance-teams met 2 tot 20 entiteiten die uit Excel zijn gegroeid, maar geen zwaar enterprise-traject willen starten. Je koppelt je boekhouding en gaat in 2-3 weken aan de slag met 4-6 trainingssessies van een uur door een professionele trainer.",stats:{connect:{value:"10 minuten",label:"tot je boekhouding gekoppeld is"},live:{value:"4-6 sessies",label:"van een uur met een professionele trainer"},effort:{value:"5-6 uur",label:"totale inzet vanuit jullie team"}}},onboardingMeeting:{prefix:"Nog niet zeker welk pakket past, of hoe de koppeling werkt?",link:"Start je gratis pilot"}},fZ={eyebrow:"Prijsindicatie",title:"Bereken je",titleHighlight:"prijsindicatie",titleEnd:"",subt
13666itle:"Geef je aantal entiteiten op en zie direct een indicatie van wat Smartbooks voor jouw groep kost. Definitieve prijs op basis van een korte intake.",configuratorTitle:"Stel je configuratie samen",configuratorSubtitle:"Kies je plan en geef het aantal entiteiten op.",holdings:"Holdings",perMonth:"/maand per stuk",subsidiaries:"Werkmaatschappijen",platformFee:"Platformkosten",platformFeeFixed:"vast per maand",monthlyTotal:"Indicatie maandprijs",monthlySuffix:"/maand",breakdownTitle:"Opbouw maandprijs",oneTimeBlockTitle:"Eenmalig bij start",annualCosts:"Jaarlijkse kosten (× 12)",oneTimeImplementation:"Eenmalige begeleiding",implementationTooltip:"Persoonlijke onboarding door iemand uit ons team: inrichting, training en begeleiding totdat je team Smartbooks zelfstandig beheert. Geen verplicht doorlopend consultancy-traject.",totalFirstYear:"Indicatie totaal jaar 1",moreThanEntities:"Meer dan {{max}} entiteiten?",contactForQuote:"Neem contact op met Smartbooks voor een offerte op maat.",contactUs:"Neem contact op",startTrial:"Neem contact op of plan een demo",users:"gebruikers",plans:{professional:{name:"Finance Professional",desc:"Uitgebreid automatisch rapporteren voor kleinere organisaties"},leader:{name:"Finance Leader",desc:"Geavanceerd rapporteren, budgetten en consolideren"}},planFeatures:{professional:["Financiële resultaten in V&W en Balans","Automatische Cash Flow","Dynamische rapportages","Periode-op-periode vergelijking","Workflow maandafsluiting"],leader:["Alles van Professional, plus:","Consolidatie & IC eliminaties","Budgettering & Forecasting","Dashboards op maat","AI-gestuurde inzichten","Power BI synchronisatie"]}},bZ={title:"Vergelijk",titleHighlight:"alle features",subtitle:"Alle functionaliteiten per pakket, met uitleg waar dat helpt.",professional:"Professional",leader:"Leader",enterprise:"Enterprise",onRequest:"Prijs op aanvraag",annualBilling:"Bedragen zijn op basis van jaarfacturatie",aiOfferNote:"* AI-functies zijn t/m {{date}} kosteloos te gebruiken in elk pakket. Daarna gelden mogelijk andere voorwaarden en zijn ze niet automatisch bij de pakketprijs inbegrepen.",implementationNote:"† Voor meer informatie zie het implementatieplan.",showDifferencesOnly:"Alleen verschillen tonen",groups:{costDetails:"Kosten Details",ai:"AI",monthEndClose:"Versnelling Maandafsluiting",reportingConsolidation:"Automatische Rapportage & Consolidatie",planning:"Businessmodel-gedreven Planning"},rows:{baseFee:"Vaste basisfee per abonnement per maand",perSubsidiary:"Per werkmaatschappij per maand",perHolding:"Per holding per maand",fixedImplementation:"Vaste eenmalige implementatiefee†",variableImplementation:"Variabele eenmalige implementatiefee†",operationalData:"Uitbreiding met operationele gegevens",costCenters:"Kostenplaatsen/dragers en/of grote data-volumes",aiController:"AI Controller*",aiCommentary:"Automatische managementtoelichting*",aiBreakdowns:"Getallen uitsplitsen met AI*",mcpServer:"MCP-server voor je AI-assistent*",monthCloseWorkflow:"Workflow voor vrijgave maandcijfers",textAnnotations:"Tekstuele toelichting bij de cijfers",aiErrorDetection:"Signalering van boekingsfouten met AI",drilldown:"Drilldown tot journaalpost en factuur",plResults:"Financiële resultaten in V&W en Balans",autoCashflow:"Automatische Cash Flow",dynamicReports:"Gebruikersvriendelijke dynamische rapportages",periodComparison:"Periode-op-periode vergelijking",customDashboards:"Dashboards op maat met eigen, ook non-financial, KPI's",mgmtReportBook:"Management rapportage boek",powerBiSync:"Synchronisatie met Power BI",costCenterAnalysis:"Analyse op kostenplaats, kostendrager of project",budgetForecast:"Modelleren van budget en forecast, inclusief automatische jaareindeprognose",businessModelTemplates:"Businessmodel templates, eigen dimensies en KPI's",varianceAnalysis:"Actual versus budget en forecast, met automatische variantie-analyse",cashflowForecast13w:"13-weekse gedetailleerde cashflowprognose",multiYearPlanning:"Meerjaren planning",subConsolidation:"Consolidatie op één niveau én subconsolidatie op meerdere niveaus",budgetConsolidation:"Consolidatie van budget",costCenterConsolidation:"Consolidatie van kostenplaatsen",multiCurrency:"Multi-currency consolidatie",uploadWithoutApi:"Upload van administraties zonder API",oneTimeMonthly:"1 × maandfee",twoTimeMonthly:"2 × maandfee",notApplicable:"N.v.t.",onRequest:"Prijs op aanvraag",upTo3Years:"Tot 3 jaar",upTo5Years:"Tot 5 jaar"}},vZ={eyebrow:"Klanten",title:"Wat onze klanten",titleHighlight:"zeggen"},kZ={title:"Ons",titleHighlight:"team",subtitle:"Decennia ervaring in finance, technologie en strategie.",founderRoles:{katja:"HR, Legal & Finance"}},wZ={tabs:{team:"Ons team",contact:"Contact"}},xZ={eyebrow:"Over Smartbooks",title:"Wij bouwen de finance-tool die wij zelf altijd hadden willen hebben.",subt
13666itle:"Een team met decennia ervaring in EPM en controlling, op een missie om enterprise-finance binnen handbereik van het MKB te brengen."},yZ={seo:{title:"Contact",description:"Neem contact op met Smartbooks. Bel, mail of stuur ons een bericht via het contactformulier."},heroTitle:"Neem contact op",heroSubtitle:"We horen graag van je. Stuur ons een bericht of bel direct.",address:{title:"Adres"},email:{title:"E-mail"},phone:{title:"Telefoon"},helpdesk:{title:"Email helpdesk",description:"Ons Customer Success team staat klaar om je te ondersteunen tijdens het onboardingproces, om vragen te beantwoorden tijdens het gebruik en om Best Practices met je te delen wanneer dat nuttig is."},form:{title:"Contactformulier",subtitle:"Velden gemarkeerd met een * zijn verplicht."}},jZ={title:"Waar we voor",titleHighlight:"staan",mission:{title:"Onze Missie",subtitle:"Enterprise-grade financiële software, gebouwd voor het MKB.",description:"Wij maken enterprise-niveau financiële rapportage, planning en consolidatie toegankelijk voor het MKB. Dezelfde kracht die multinationals gebruiken, nu beschikbaar voor bedrijven met een kleiner team en minder budget, zonder complexiteit, zonder specialisten, zonder weken implementatie."},vision:{title:"Onze Visie",subtitle:"De financiële data-infrastructuur die AI en controllers vertrouwen.",description:"Smartbooks wordt de financiële data-infrastructuur voor het AI-tijdperk. Wij geloven dat de toekomst van finance niet draait om handmatig rapporten bouwen, maar om vertrouwen op betrouwbare data. Smartbooks levert de vertrouwenslaag tussen je boekhouding en je beslissingen, vandaag voor controllers, morgen voor AI."},whySmartbooks:{title:"Waarom Smartbooks",description:"Enterprise-logica, gebouwd voor het MKB. Onze founders hebben 65+ jaar gecombineerde ervaring in EPM, finance consulting en tech scale-ups. Smartbooks is de derde generatie EPM, klaar voor het AI-tijdperk."}},SZ={sectionEyebrow:"Ontdek meer",sectionTitle:"Zie Smartbooks zelf in actie",whitepaper:{eyebrow:"Verdiepend leesvoer",title:"Gratis Whitepaper",description:"Ontdek in ons whitepaper hoe AI de financiële sector transformeert en hoe jouw organisatie kan profiteren.",button:"Download whitepaper"},webinar:{title:"Zie Smartbooks live in actie",description:"In ons live webinar laten we stap voor stap zien hoe je consolideert, analyseert en rapporteert met AI — met ruimte voor jouw vragen.",recommended:"Aanbevolen",duration:"Live sessie · kies zelf je moment",bullets:["Demo in een echte multi-entity omgeving","Hoe je je maandafsluiting met dagen verkort","Praktijkvoorbeelden van finance teams zoals dat van jou"],button:"Bekijk het live webinar",microcopy:"Kies direct een datum en tijdstip",hostedBy:"Gepresenteerd door",hostRole:"Managing Director",posterLabel:"Smartbooks Webinar · Met Michel van Wijngaarden"},dialog:{title:"Download Whitepaper",description:"Vul je gegevens in om het whitepaper te ontvangen."}},zZ={eyebrow:"Onze capabilities",title:"Drie kerngebieden,",titleLine2:"één",titleHighlight:"platform",consolidation:{title:"Consolidatie & rapportage",description:"Multi-entity consolidatie met automatische intercompany-eliminaties en valutaomrekening. Rapportages die zich aanpassen aan jouw structuur, drill-down tot de originele transactie."},planning:{title:"Planning & variance-analyse",description:"Budgetten, forecasts en scenario's naast je actuals. Zie afwijkingen direct, met onderbouwing, en stuur bij voordat het MT erom vraagt."},close:{title:"Period close-ondersteuning",description:"Een gedeelde checklist, taakverdeling en realtime status van je maandafsluiting. Iedereen weet wat er moet gebeuren en waar het vastloopt."}},AZ={eyebrow:"Functionaliteiten",title:"Alles wat",titleHighlight:"Smartbooks",titleEnd:"kan",subtitle:"Van rapportage tot consolidatie, van budgettering tot cashflow forecasting. Eén platform voor al je financiële processen."},CZ={eyebrow:"Roadmap",title:"Onze",titleHighlight:"product roadmap",subtitle:"Van slimme AI-features op korte termijn tot een volledig geautomatiseerd financieel platform.",inDevelopment:"Nu in ontwikkeling",planned:"Gepland",tba:"To be announced",longTerm:"Long-term visie",comingSoon:"Wordt binnenkort aangekondigd, stay tuned!",items:{mcpServer:{title:"MCP Server",desc:"Praat met je cijfers. Stel vragen in natuurlijke taal en krijg direct antwoorden uit je financiële data."},odoo:{title:"Connectie met Odoo",desc:"Koppel Odoo als bronsysteem en importeer je financiële data automatisch in Smartbooks."},smartClose:{title:"Smart Close",desc:"Automatische variantie-analyses die afwijkingen signaleren en je month-end close versnellen."}
13666,drilldown:{title:"Consolidated Drilldown",desc:"Drill down naar individuele transacties vanuit geconsolideerde rapportages voor volledige transparantie."},visualUpgrade:{title:"Visual Upgrade",desc:"Vernieuwde grafieken, dashboards en rapportage-visuals voor nog scherpere financiële inzichten."},multipleScenarios:{title:"Multiple Scenarios",desc:"Werk met meerdere budget- en forecast-scenario's en vergelijk ze naast elkaar."},smartSlides:{title:"Smart Slides",desc:"Genereer automatisch presentaties en slide sets vanuit je Smartbooks rapportages."},aiAdvisor:{title:"AI Financial Advisor",desc:"Proactieve AI-gestuurde inzichten en aanbevelingen op basis van je historische data en trends."},workflowAutomation:{title:"Workflow Automation",desc:"Automatiseer repetitieve financiële processen met slimme triggers en acties."}}},EZ={title:"Kenniscentrum",subtitle:"Practical articles, videos, and customer stories on consolidation, reporting, planning, and AI for finance professionals.",searchPlaceholder:"Zoek artikelen...",noResults:"Geen artikelen gevonden.",readMore:"Lees meer",all:"Alle",tagsTitle:"Filter op onderwerp",tagsClear:"Wis filters",tagsEmpty:"Geen tags beschikbaar",activeTagsLabel:"Actieve tags:"},NZ={seoTitle:"Klantverhalen",seoDescription:"Ontdek hoe finance teams van Anove, ACE, Glomar, LifeWatcher, Primus, Risketeers en Tjojs werken met Smartbooks.",eyebrow:"Klantverhalen",title:"Wat klanten zeggen over Smartbooks",subtitle:"Echte ervaringen en uitgewerkte cases van finance teams die met Smartbooks hun rapportage, consolidatie en planning hebben geprofessionaliseerd.",all:"Alle",noResults:"Nog geen verhalen beschikbaar.",tabs:{caseStudies:"Klantcases",customerStories:"Klantervaringen"}},IZ={articles:"Artikelen",videos:"Video's",caseStudies:"Klantcase",customerStories:"Klantervaringen"},PZ={title:"Voor",titleHighlight:"wie",subtitle:"Smartbooks is gebouwd voor iedereen die betrokken is bij financiële sturing en verantwoording.",whySmartbooks:"Waarom Smartbooks"},TZ={eyebrow:"Hoe het werkt",title:"In",titleHighlight:"3 stappen",titleEnd:"aan de slag",step1:{title:"Sign-up",desc:"Maak een account aan en kies het pakket dat bij jouw organisatie past."},step2:{title:"Set-up",desc:"Koppel je boekhoudsoftware en configureer je rapportages in minuten."},step3:{title:"Speed-up",desc:"Begin direct met geautomatiseerde rapportages en AI-gestuurde inzichten."}},DZ={eyebrow:"Onboarding",title:"Binnen twee dagen technisch live",intro:"Vergeet implementaties van maanden. Iemand uit ons team begeleidt je stap voor stap: koppelingen leggen, rapportages inrichten en je team opleiden tot ze Smartbooks zelfstandig beheren.",ctaPrimary:"Plan een demo",ctaSecondary:"Naar het kenniscentrum",timelineTitle:"Realistische tijdlijn",timelineDesc:"Dag 1–2: technische koppelingen en eerste rapportages. Week 1–4: configuratie van consolidatie, budget en cashflow. Vanaf week 5: optimalisatie en training.",supportTitle:"Persoonlijke begeleiding",supportDesc:"Geen ticketsysteem of doorlopend consultancytraject. Eén vast aanspreekpunt uit ons team totdat jouw team Smartbooks volledig in eigen beheer heeft."},BZ={eyebrow:"Onze impact",title:"Cijfers die voor zich",titleHighlight:"spreken",companies:"Bedrijven",timeSaved:"Tijdsbesparing",fasterReporting:"Sneller rapporteren",financeProfessionals:"Finance professionals"},MZ={pillars:{reporting:"Rapporteren",consolidation:"Consolideren",budgetterenCashflow:"Budgetten & Cashflow",close:"Maandafsluiting",virtualController:"AI-controller"},pillarDescriptions:{reporting:"Snelle, betrouwbare rapportages met real-time updates. Eigen datamodel, security model en dashboards met visualisaties, KPI-tiles en tabellen.",consolidation:"Volledige consolidatie met subconsolidaties, IC-eliminaties, currency conversion en reconciliatie, altijd up-to-date.",budgetterenCashflow:"Budgetten, forecasts, scenario's, leningen, investeringen en een 13-weekse directe cashplanning in één systeem.",close:"Gestructureerde checklists voor maand-, kwartaal- en jaarafsluiting met automatiseringen, dependencies en audit trail.",virtualController:"Jouw AI-controller voor finance teams. 24/7 beschikbaar voor ad-hoc vragen, analyses, presentaties en gespecialiseerde financiële ondersteuning."},pillarFeatures:{reporting:["Snel rapportages aanmaken en vastzetten","Real-time updates uit je bronsystemen","Eigen datamodel afgestemd op je managementbehoeften","Security model, jij bepaalt wie wat ziet","Rapporteren op kostenplaats, project of kostendrager","Dashboards met visualisaties, KPI-tiles en tabellen","Drilldown vanuit rapportages tot op transactieniveau met PDF-facturen","Snelle inzichten in transacties naar/van bepaalde klanten","Aging analysis per entiteit en geconsolideerd","Operationele metrics via handmatige input, formules of API","Viewer, Contributor en Admin rollen met restricties per k
13666ostenplaats","Excel add-in: rapportages naar Excel halen en altijd verversen"],consolidation:["Subconsolidaties en geconsolideerde overzichten","Currency conversion","Intercompany eliminaties","Aparte consolidatiestructuur","Geconsolideerde kostenplaatsen","IC-reconciliatietool, zie waar de verschillen vandaan komen","Altijd up-to-date rapportages","Transacties op geconsolideerd niveau bekijken","Splitsen van rekeningen met zowel IC als 3de partij boekingen"],budgetterenCashflow:["Budgetten en forecasts aanmaken en beheren","Meerdere scenario's naast elkaar","Budget per grootboekrekening of subtotaal, per regel instelbaar","Harde invoer of op basis van formules","Business modules: productgroepen, salaris, FTE, pensioen","Leningen en investeringen doorvloeien naar je P&L","Balansplanning via afhankelijkheden in de P&L","Automatische cashflow forecast (indirecte methode)","13-weekse directe cashplanning op basis van debiteuren/crediteuren","Recurring payments op dagelijkse, wekelijkse of maandelijkse basis","Verwachte betaaldata aanpassen en impact op cashplanning zien","Plan nieuwe leningen, kredietfaciliteiten en investeringen met afschrijvingen"],close:["Checklists voor maandafsluiting, kwartaalafsluiting én jaarafsluiting","Taken toewijzen aan specifieke teamleden","Werkomschrijvingen en documenten per taak in het template","Automatiseringen koppelen aan taken","Dependencies instellen tussen taken","Per taak een eigen chat om met collega's te overleggen","Audit trail van wat er wanneer door wie is gedaan","Maand pas afsluiten wanneer alle taken zijn afgerond","Beschikbaar op entiteitsniveau én geconsolideerd niveau"],virtualController:["Support agent met toegang tot documentatie, 24/7 beschikbaar","Ad-hoc vragen stellen in natuurlijke taal","Automatisch PowerPoint-presentaties genereren","Gespecialiseerde agents die helpen bij financiële analyses","Beschikbaar vanuit elke module: rapportage, consolidatie, planning en close"]}},FZ={smartbooksFor:"Smartbooks voor",theChallenge:"De uitdaging",whySmartbooks:"Waarom Smartbooks",alsoSee:"Bekijk ook",roles:{cfo:{title:"CFO",subtitle:"Real-time financieel inzicht voor strategische beslissingen",description:"Als CFO draag je de eindverantwoordelijkheid voor de financiële gezondheid van je organisatie. Toch werk je vaak met verouderde data, versnipperde Excel-modellen en rapportages die dagen kosten om samen te stellen. Smartbooks verandert dat.",benefits:["Real-time consolidatie over alle entiteiten en dochtermaatschappijen","AI-gedreven scenario-analyses en rolling forecasts","Board-ready rapportages genereren in één klik","Directe toegang tot KPI-dashboards zonder tussenkomst van finance","Automatische variantieanalyses tussen budget, forecast en actuals"],painPoints:["Geen vertrouwen in de cijfers door handmatige processen","Wekenlange rapportagecycli die besluitvorming vertragen","Onvoldoende inzicht in kasstromen en werkkapitaal"],seoTitle:"Smartbooks.ai voor CFO",seoDescription:"Ontdek hoe Smartbooks CFO's helpt met real-time consolidatie, AI-forecasting en board-ready rapportages."},controller:{title:"Controller",subtitle:"Van maandafsluiting in dagen naar uren",description:"Als controller ben je de spil van financiële rapportage. Maar te vaak besteed je je tijd aan het handmatig samenvoegen van data in plaats van het analyseren ervan. Smartbooks automatiseert het zware werk zodat jij kunt doen waar je goed in bent.",benefits:["Maandafsluiting in uren in plaats van dagen","Eén bron van waarheid voor alle financiële data","Volledig auditeerbaar met versiebeheer en audit trail","Geautomatiseerde intercompany-eliminaties en reconciliaties","Naadloze integratie met je bestaande ERP en boekhoudsysteem"],painPoints:["Eindeloos kopiëren en plakken tussen Excel-bestanden","Fouten die pas laat in het proces ontdekt worden","Geen tijd over voor analyse en business partnering"],seoTitle:"Smartbooks.ai voor Controller",seoDescription:"Smartbooks helpt controllers met geautomatiseerde consolidatie, audit trails en snellere maandafsluitingen."}
13666,aandeelhouders:{title:"Aandeelhouders",subtitle:"Transparante rapportages die vertrouwen opbouwen",description:"Als aandeelhouder wil je weten hoe je investering presteert, zonder weken te wachten op rapportages of te moeten vertrouwen op incomplete informatie. Smartbooks biedt altijd actuele, betrouwbare financiële inzichten.",benefits:["Altijd actuele financiële rapportages op elk moment beschikbaar","Consistente formats die vergelijking over periodes vergemakkelijken","Transparante data die het vertrouwen in het management versterkt","Duidelijke KPI-dashboards zonder financiële achtergrond","Historische trendanalyses voor langetermijnbeslissingen"],painPoints:["Rapportages komen te laat en in wisselende formats","Gebrek aan transparantie over de financiële werkelijkheid","Moeilijk om prestaties van verschillende entiteiten te vergelijken"],seoTitle:"Smartbooks.ai voor Aandeelhouders",seoDescription:"Smartbooks geeft aandeelhouders transparante, actuele financiële rapportages en KPI-dashboards."},accountants:{title:"Accountants",subtitle:"Audit-ready data zonder het heen-en-weer",description:"Als accountant wil je efficiënt werken met betrouwbare data. In de praktijk besteed je veel tijd aan het opvragen, controleren en corrigeren van informatie. Smartbooks levert gestructureerde, audit-ready output rechtstreeks uit het systeem.",benefits:["Audit-ready output zonder handmatig voorbereidingswerk","Directe toegang tot klantdata via een beveiligd portaal","Minder fouten en snellere controles door gestandaardiseerde data","Volledige audit trail voor elke financiële mutatie","Geautomatiseerde checks op consistentie en volledigheid"],painPoints:["Eindeloos heen-en-weer mailen om de juiste bestanden te krijgen","Data die niet klopt of incompleet is bij aanlevering","Tijdverlies door handmatige reconciliatie"],seoTitle:"Smartbooks.ai voor Accountants",seoDescription:"Smartbooks helpt accountants met audit-ready output, directe datatoegang en geautomatiseerde checks."},stakeholders:{title:"Stakeholders",subtitle:"Complexe financiële data, eenvoudig gepresenteerd",description:"Van investeerders tot commissarissen, van afdelingsmanagers tot externe adviseurs, iedereen die betrokken is bij strategische beslissingen heeft behoefte aan helder financieel inzicht. Smartbooks maakt dat mogelijk.",benefits:["Toegankelijke dashboards zonder financiële achtergrond nodig","Strategische KPI's overzichtelijk in één scherm","Data-gedreven besluitvorming op elk niveau van de organisatie","Gepersonaliseerde rapportages per stakeholdergroep","Realtime inzichten in plaats van maandelijkse snapshots"],painPoints:["Financiële rapportages zijn te complex om snel te doorgronden","Beslissingen worden genomen op onderbuikgevoel i.p.v. data","Geen uniform beeld van de organisatieprestaties"],seoTitle:"Smartbooks.ai voor Stakeholders",seoDescription:"Smartbooks biedt stakeholders toegankelijke dashboards en heldere KPI-rapportages voor betere besluitvorming."}}},RZ={index:{title:"Smartbooks | Consolidatie, Rapportage & Planning",description:"Eén professioneel systeem voor consolidatie, rapportage en planning. Vervang versnipperde Excel-modellen door betrouwbare, geautomatiseerde processen."},functionaliteiten:{title:"Functionaliteiten",description:"Ontdek alle functies van Smartbooks: financiële planning, consolidatie, rapportage, budgettering en meer, aangedreven door AI."},overOns:{title:"Over Ons",description:"Leer meer over Smartbooks: ons team, missie en visie op AI-gedreven financiële software voor business control."},prijzen:{title:"Prijzen",description:"Bekijk de Smartbooks pakketten voor consolidatie, rapportage en planning. Start met een gratis pilot — pas betalen als het werkt."},projecten:{title:"Projecten | AI-integratie in financiële processen & custom finance apps",description:"Van AI-integratie in financiële processen tot custom financial applications. Onze mensen helpen je met opzetten, bouwen en onderhouden. Zodat AI en maatwerk écht werken."},consulting:{title:"Consulting | AI-integratie in financiële processen",description:"Plan een consulting traject met Smartbooks: AI-integratie in jouw finance-workflows, opgezet en onderhouden door ons team."},productTour:{title:"Interactieve product tour",description:"Klik in 90 seconden door Smartbooks. Geen demo, geen formulier — ervaar het Finance Operating System zelf."}
13666,onboarding:{title:"Onboarding",description:"Zo verloopt de onboarding bij Smartbooks: van sign-up tot live in productie. Persoonlijke begeleiding door iemand uit ons team."},onboardingMeeting:{title:"Gratis pilot starten | Smartbooks",description:"Start je gratis pilot met Smartbooks. Koppel je boekhouding, werk een maand in je volledig ingerichte omgeving en beoordeel het systeem met je eigen cijfers."},bedanktWebinar:{title:"Bedankt voor jouw aanmelding",description:"Je aanmelding voor het Smartbooks webinar is ontvangen. Je krijgt per e-mail een link naar het webinar."},whitepapers:{title:"Whitepapers",description:"Download onze whitepapers en ontdek hoe Smartbooks de financiële functie versterkt."},lpConsolidatie:{title:"Consolidatie software voor bedrijfsgroepen",description:"Consolidatie software voor groepen met meerdere entiteiten: automatische intercompany eliminatie, valutaomrekening en groepsrapportage. Direct gekoppeld aan Exact, Twinfield en AFAS."},lpVirtueleController:{title:"Je AI-controller, 24/7 aan het werk",description:"Een AI-agent voor finance teams: vragen in natuurlijke taal, analyses in seconden, board-ready presentaties in één klik. Plan een demo van de Smartbooks AI-controller."},lpFinance:{title:"Jouw finance afdeling verdient beter dan Excel",description:"Rapportage, consolidatie, planning, maandafsluiting en analyses in één professioneel platform. Live in dagen, niet in maanden. Plan een demo."}},OZ={quote:"Smartbooks heeft onze maandafsluiting getransformeerd. Wat vroeger drie dagen duurde met Excel, doen we nu in een halve dag, met meer betrouwbaarheid en inzicht.",name:"Mark Bakker",role:"Business Controller · Tiqets"},_Z={rapporteren:{hero:{headline:"Managementrapportages die altijd kloppen, zonder de Excel-stress",subtext:"Bouw rapportages en dashboards die bij jouw organisatie passen. Met drill-down tot transactie en factuur, zodat elk cijfer terug te voeren is naar de bron."},promises:{eyebrow:"Wat dit oplevert",title:"Wat je hieraan hebt",subtitle:"Rapportages die rekenen zoals jij ze opzet, en cijfers die kloppen zonder dat jij iets hoeft te controleren.",items:[{title:"Rapporten die zich aanpassen aan jou",text:"Bouw rapporten met je eigen structuur, dimensies en formules. Pas ze net zo snel aan als je business verandert — geen rigide templates, geen consultants nodig."},{title:"Van groepsrapport tot originele factuur",text:"Drill-down van geconsolideerd rapport naar entiteit, grootboek, transactie en de PDF eronder. Elk cijfer is altijd terug te traceren naar z'n bron."},{title:"Eén bron voor alle rapportages",text:"Financiële cijfers, operationele metrics en dimensies, allemaal in één systeem. Niet meer cijfers bij elkaar rapen uit losse bronnen, maar geautomatiseerd samengevoegd in Smartbooks."}]},painPoints:["Elke maand dezelfde rapporten opnieuw handmatig opbouwen in Excel","Een #REF!-fout in één cel die doorwerkt in 12 tabbladen","Directie vraagt een nieuw inzicht en dat kost je een halve dag","Collega gaat weg en niemand begrijpt het Excel-model"],solutionBlocks:[{title:"Jouw rapportages, altijd actueel",text:"Bouw je eigen rapportages en pas ze gemakkelijk aan wanneer je wilt.",bullets:["Bepaal je eigen rapportagestructuur en pas 'm op elk moment aan","Rapporteren per kostenplaats, project of kostendrager","Realtime synchronisatie met je boekhouding, zonder exports of handmatige updates","Voeg snel nieuwe rapportages en KPI's toe wanneer je ze nodig hebt"]},{title:"Dashboards met financiële én operationele cijfers",text:"Eén dashboard met financiële én operationele cijfers, zodat het MT één beeld leest in plaats van een stapel PDF's.",bullets:["KPI-tiles met vergelijking (budget, vorig jaar, vorige periode) en trendlijn","Operationele metrics naast financiële cijfers, via invoer, formule of API","Meerdere dashboards per doelgroep: directie, MT, operationeel"]},{title:"Van rapportregel tot PDF-factuur. In drie klikken.",text:"Een afwijking in je cijfers? Klik door van rapport naar grootboek tot de originele factuur. Alle analyse binnen Smartbooks, zonder terug te hoeven naar je boekhoudsysteem.",bullets:["Drilldown van rapport naar grootboek, transactie en PDF","Snel zicht op alle transacties naar of van een specifieke klant over een periode","Werkt op entiteits- en geconsolideerd niveau"]},{title:"Excel hoeft niet weg. Alleen niet meer als bron.",text:"Standaardprocessen draaien in Smartbooks, jouw ad-hoc werk in Excel, met live data en zonder knip-en-plak.",bullets:["Live Smartbooks-data direct in Excel","Altijd te verversen, nooit meer twijfelen of je cijfers actueel zijn"]}],subSections:[{title:"Security & Rollen",text:"Bepaal wie wat ziet. Met het rollenmodel (Viewer, Contributor, Admin) en restricties per k
13666ostenplaats en rapportage hou je grip op wie welke informatie kan inzien."}],painPointsEyebrow:"Herkenbaar?",painPointsTitle:"Waar financial controllers dagelijks tegenaan lopen"},consolideren:{hero:{headline:"Consolidatie die in minuten klaar is, niet in dagen",subtext:"Consolideren van subconsolidaties tot IC-eliminaties, alles in één systeem. Altijd up-to-date, zonder handmatig gepuzzel of Excel-workarounds."},promises:{eyebrow:"Wat dit oplevert",title:"Eén bron van waarheid voor de hele groep",items:[{title:"Consolidatie in minuten",text:"Geen handmatig harken meer. Smartbooks aggregeert automatisch alle entiteiten, altijd up-to-date."},{title:"Intercompany onder controle",text:"Automatische IC-eliminaties en een reconciliatie-tool die direct laat zien waar verschillen zitten."},{title:"Schaalt mee met de groep",text:"Nieuwe entiteit, ander boekhoudsysteem of valuta? Plug & play, geen Excel-herbouw."}]},painPoints:["Versnipperde data: cijfers uit verschillende ERP- en boekhoudsystemen die niet één-op-één op elkaar aansluiten","Foutgevoelige intercompany-eliminaties: één gemiste interne transactie tussen moeder en dochter en de groepscijfers kloppen niet","Valutaomrekeningen: koersverschillen bij buitenlandse entiteiten maken elke afsluiting onnodig complex","Handwerk in spreadsheets: data verzamelen en controleren kost dagen en vergroot het risico op fouten"],solutionBlocks:[{title:"Groepscijfers met één klik",text:"Bekijk je resultaten op groepsniveau zonder handmatig te aggregeren. Smartbooks telt automatisch alle entiteiten in je consolidatiestructuur op, P&L, balans, cashflow en dashboards, altijd up-to-date, altijd consistent.",bullets:["Geconsolideerde P&L, balans en cashflow in één omgeving","Dashboards op groepsniveau met de KPI's die jullie sturen","Altijd actueel, geen maandelijkse handmatige update","Drilldown van geconsolideerd cijfer naar onderliggende entiteit en transactie"]},{title:"Structuur die past bij jullie groep",text:"Heb je een holding met een operationele tak en een vastgoed-tak? Of een internationale structuur met meerdere subgroepen? Stel je consolidatiestructuur in met drag & drop en definieer eigendomspercentages per entiteit. Rapporteer op elk niveau, hoofdgroep, subconsolidatie of individuele entiteit.",bullets:["Drag & drop consolidatiestructuur, zelf in te richten zoals jullie groep werkt","Eigendomspercentages per entiteit, ook voor minority interests","Rapporteer op elk niveau: hoofdconsolidatie, subconsolidatie of entiteit","Pas de structuur aan als de groep verandert, zonder opnieuw te hoeven opzetten"]},{title:"Intercompany, volledig onder controle",text:"Eén gemiste IC-boeking verstoort je hele consolidatie. Smartbooks identificeert intercompany-transacties automatisch en elimineert ze. Zie direct waar verschillen zitten met de reconciliatie-tool. En zelfs als je bronsysteem IC niet op aparte rekeningen boekt: Smartbooks splitst het voor je, zonder iets in je boekhouding aan te passen.",bullets:["Automatische IC-eliminaties, geconsolideerde cijfers tonen alleen externe activiteit","IC-reconciliatie-tool, zie direct welke posten tussen entiteiten niet matchen, tot op transactieniveau","Intercompany Relation Mapping, stel per entiteitscombinatie in welke debiteur of crediteur bij welke groepsentiteit hoort","IC-reclassificatie, splits rekeningen in Smartbooks als je boekhouding IC niet apart boekt"]},{title:"Buitenlandse entiteiten zonder hoofdpijn",text:"Heb je entiteiten in het buitenland? Smartbooks vertaalt automatisch: P&L tegen de gemiddelde periodekoers, balans tegen de slotkoers. Koersverschillen worden apart gerapporteerd, zodat je direct ziet wat operationeel is en wat door wisselkoersen komt.",bullets:["Automatische valutaconversie per entiteit","P&L op gemiddelde periodekoers, balans op slotkoers","Koersverschillen apart gerapporteerd voor transparantie"]},{title:"Rapporteer op groepsniveau, tot op kostenplaats",text:"Consolidatie stopt niet bij winst-en-verlies. Rapporteer op geconsolideerd niveau per kostenplaats, project of dimensie, zodat het MT dezelfde diepte krijgt op groepsniveau als op entiteitsniveau.",bullets:["Geconsolideerde rapportage per kostenplaats, project of dimensie","Zelfde dimensies werken over alle entiteiten heen","Drilldown van geconsolideerde dimensie naar onderliggende entiteit"]}],subSections:[],accountingStrip:{title:"Werkt met alle boekhoudsystemen in jullie groep",
13666subtitle:"Ook als jullie entiteiten in verschillende boekhoudsystemen zitten. Smartbooks consolideert over systemen heen, geen noodzaak om eerst één standaard af te dwingen.",footnote:"Entiteiten in verschillende systemen? Geen probleem. Smartbooks consolideert ze alsnog."},painPointsEyebrow:"Herkenbaar?",painPointsTitle:"Consolidatie-uitdagingen die tijd en vertrouwen kosten"},budgetterenCashflow:{hero:{headline:"Van budget tot cashflow-forecast, in één systeem",subtext:"Businessmodel-gedreven budgetteren, forecasten, balansplanning en cashflow-projecties. Zonder versnipperde Excel-modellen die niemand begrijpt."},promises:{eyebrow:"Wat dit oplevert",title:"Eén systeem voor de hele planning-keten",items:[{title:"Plan op ieder niveau",text:"Van grootboekrekening tot driver-gebaseerd model, jij kiest het detailniveau per business area."},{title:"Plan de hele financiële realiteit",text:"P&L, balans, leningen, investeringen, alles verbonden in één doorgerekend model."},{title:"Lange termijn én operationeel",text:"Van jaarbudget tot week-tot-week cash, strategische planning en weekcashflow in één systeem."}]},painPoints:["De budgetronde kost 3 maanden en het resultaat is een Excel dat niemand meer durft aan te passen","Een forecast bijstellen betekent handmatig 4 tabbladen updaten","Directie vraagt 'wat als we die investering doen?' en je hebt geen antwoord","Je hebt een P&L-budget maar geen idee wat het betekent voor je cash"],solutionBlocks:[{title:"Budgetten, forecasts & scenario's",text:"Bouw jaarbudgetten en forecasts op het niveau dat past bij jouw rapportage: per grootboekrekening, kostenplaats of subtotaal. Werk met harde invoer of formules, en hou base case, optimistisch en pessimistisch scenario's naast elkaar aan, direct vergelijkbaar met actuals in dezelfde rapportage.",bullets:["Invoer per grootboekrekening, kostenplaats of subtotaal — jij bepaalt het detailniveau","Harde invoer of formule-gebaseerd, jij bepaalt per regel","Meerdere scenario's naast elkaar: base, optimistisch, pessimistisch","Direct vergelijken met actuals in dezelfde rapportage, geen exports"]},{title:"Business modules (driver-based planning)",text:"Bouw driver-based planningsmodellen per business area. Plan omzet als aantal × prijs per productgroep. Plan personeelskosten met FTE, brutoloon, sociale lasten en pensioen per team. De uitkomsten rollen automatisch door naar je P&L, verander een driver, zie je budget bewegen.",bullets:["Omzetplanning: aantal × prijs per productgroep of segment","Personeelsplanning: FTE, brutoloon, sociale lasten en pensioen per team","Eigen modules voor andere kostendrivers (locaties, contracten, marketing)","Resultaten vloeien automatisch door naar de P&L, geen handmatige consolidatie"]},{title:"Balansplanning, leningen & investeringen",text:"Plan balansposten op basis van metrics (DSO, DPO, voorraaddagen) en directe afhankelijkheden met P&L-regels. Voer bestaande leningen in met hun aflossings- en renteschema, en voeg nieuwe financiering toe. Plan investeringen en desinvesteringen inclusief afschrijvingen. Alles schrijft terug naar P&L en balans, en een indirecte cashflow-forecast genereert automatisch uit het hele plaatje.",bullets:["Balansplanning op basis van DSO, DPO en voorraaddagen","Bestaande en nieuwe leningen met aflossings- en renteschema's","Investeringen en desinvesteringen inclusief afschrijvingen","Indirecte cashflow-forecast genereert automatisch uit P&L + balans"]},{title:"13-weekse cashflow & aging analysis",text:"Voor week-tot-week cashmanagement draai je een directe 13-weekse forecast op basis van je werkelijke openstaande debiteuren en crediteuren. Drill door naar de geconsolideerde aging analysis om debiteuren- en crediteurenexposure op groepsniveau te zien. Pas verwachte betaaldata aan, voeg recurring payments toe, neem leningen en investeringen mee, en zie liquiditeit in real time bewegen.",bullets:["Directe 13-weekse forecast vanuit werkelijke debiteuren en crediteuren","Geconsolideerde aging analysis op groepsniveau","Verwachte betaaldata aanpassen en recurring payments toevoegen","Leningen en investeringen automatisch meegenomen in de cashpositie"]}],subSections:[],founderQuote:{quote:"Een budget maken in Excel is geen planning, het is een momentopname die meteen verouderd is. Controllers verdienen een systeem waarin budget, balans en cashflow samenhangen en waarin scenario's daadwerkelijk doorrekenen.",author:"Jaap",role:"Founder, Smartbooks"},painPointsEyebrow:"Herkenbaar?",painPointsTitle:"Planning & cashflow: waar het vaak misgaat"},close:{hero:{headline:"Sluit je maand sneller af, met minder stress en meer grip",subtext:"Templates, automatische analyses en gecontroleerde publicatie. Alles wat een close tijdrovend maakt, geautomatiseerd."},promises:{eyebrow:"Wat dit oplevert",title:"Van afsluiting tot publicatie in één keten",items:[{title:"Structuur in elk afsluitingsproces",text:"Maand, kwartaal of jaar, één template, altijd dezelfde werkwijze. Geen verrassingen, geen gemiste stappen."},{title:"Samenwerking op taakniveau",text:"Iedereen weet wat te doen, waar we staan en wat er al besloten is. Overleg en audit trail in dezelfde plek als het werk."},{title:"Van afsluiting tot analyse tot publicatie",text:"Close-c
13666hecklist, automatische variantie-analyse en periode-publicatie in één doorlopende keten, zonder export, zonder hand-overs."}]},painPoints:["De maandafsluiting hangt af van wie er toevallig aanwezig is en of iedereen aan alles denkt","Halverwege de close ontdek je dat een collega zijn deel nog niet heeft gedaan","Cijfers de deur uit voordat de close formeel is afgesloten, geen lock, geen check, geen zekerheid","De close is klaar, maar je hebt geen tijd meer om te analyseren wat er opvallend is"],solutionBlocks:[{title:"Het afsluitingsproces zelf",text:"Definieer je maand-, kwartaal- en jaarafsluiting eenmalig als template, met taken, deadlines, dependencies en automatiseringen, en hergebruik het elke periode. Automatiseringen worden pas getriggerd nadat de taken waar ze van afhangen zijn afgerond, zodat de volgorde geborgd is zonder dat iemand het hoeft te bewaken.",bullets:["Templates voor maand, kwartaal en jaar, eenmalig opzetten, elke periode hergebruiken","Taken met deadlines en eigenaren, geen e-mails of mondelinge afspraken","Dependencies tussen taken, automatiseringen wachten tot voorgangers klaar zijn","Werkt op zowel entiteits- als geconsolideerd niveau"]},{title:"Collaboratie en documentatie",text:"Per taak voeg je werkomschrijvingen en documenten toe aan het template, zodat niemand bij elke close opnieuw hoeft te zoeken hoe iets ook alweer moest. Discussies gebeuren in de chat per taak, en alles wat er gebeurt, wie, wanneer, waarom, wordt automatisch vastgelegd in de audit trail.",bullets:["Werkomschrijvingen en documenten meegegeven per taak in het template","Chat per taak, overleg met collega's zonder e-mail of Slack","Audit trail: wie heeft wat wanneer gedaan","Kennis blijft in het systeem, niet bij één persoon"]},{title:"Smart Story, automatische variantie-analyse",badge:"Met Alex",text:"Zodra de boekhouding klaar is, draait Smartbooks automatisch de analyses en wijst je op wat opvalt, in plaats van dat jij zelf moet gaan zoeken. Standaard analyses draaien parallel: Transaction, Budget, Trend en Ratio Analysis. Alleen varianties boven jouw eigen ingestelde thresholds komen op je bureau, met urgentiescore zodat je weet waar je eerst naar moet kijken. Per variantie kies je: boekingsfout, uitleggen, of negeren, en de verklaring blijft vast voor de audit en voor volgende maand.",bullets:["Vier analyses automatisch: Transaction, Budget, Trend en Ratio","Thresholds die jij bepaalt, geen ruis van onbelangrijke verschillen","Urgentiescore per variantie voor prioritering","Beslissing per variantie vastgelegd voor audit trail"],footerLink:{label:"Smart Story is onderdeel van Alex, meer over Alex",to:"/functionaliteiten/virtuele-controller"}},{title:"Entiteit, consolidatie en publicatie",text:"De close-checklist werkt zowel op entiteitsniveau als geconsolideerd niveau. Pas wanneer alle taken zijn afgerond, kan een periode worden gepubliceerd. Met Reporting Perio
13666d Management preview je de periode voordat hij live gaat, zo weet je zeker dat consolidatie en rapportages pas draaien op compleet gecontroleerde data. Alleen admins publiceren.",bullets:["Close op entiteitsniveau én geconsolideerd niveau","Reporting Period Management: preview voordat je publiceert","Publicatie alleen door admins, geborgd proces","Rapportages werken altijd op gepubliceerde, gecontroleerde data"]}],subSections:[],founderQuote:{quote:"Een maandafsluiting hoort geen project te zijn dat elke keer opnieuw geïmproviseerd wordt. Met een vast proces, automatische variantie-analyse en gecontroleerde publicatie wordt close eindelijk wat het altijd had moeten zijn: een betrouwbare cyclus, niet een sprint.",author:"Jaap",role:"Founder, Smartbooks"},painPointsEyebrow:"Herkenbaar?",painPointsTitle:"Maandafsluiting: een terugkerend knelpunt"},virtueleController:{hero:{eyebrow:"Alex, jouw AI controller",headline:"AI die je cijfers begrijpt, omdat het systeem eronder klopt",subtext:"Alex analyseert je financiële data, verklaart afwijkingen en stelt managementrapportages op — onder jouw controle."},promises:{eyebrow:"Wat dit oplevert",title:"Alex, jouw AI-collega, onder controle, op data die klopt",items:[{title:"Alex doet finance werk",text:"Van ad-hoc vragen tot automatische variantie-analyse, taken die normaal bij een controller op het bureau liggen."},{title:"Op betrouwbaar fundament",text:"Alex werkt alleen op de gestructureerde data in Smartbooks. Geen hallucinaties op losse Excel-bestanden, geen verzonnen cijfers."},{title:"Onder jouw controle",text:"Jij bepaalt per entiteit of AI ingezet wordt, met welke context, en in welke richting. Je zet Alex aan op wat jou helpt."}]},painPoints:[],solutionBlocks:[{title:"Ask Me Anything, jouw data in gewone taal",badge:"AI-feature",text:'Stel vragen zoals je ze aan een collega zou stellen, en krijg direct antwoord, 24/7. "Hoe liggen we YTD ten opzichte van budget?" "Welke entiteit heeft de grootste afwijking dit kwartaal?" "Welke debiteuren lopen het meest achter met betalen?" Alex zoekt het antwoord in je Smartbooks-data en antwoordt in gewone taal. Bronvermelding erbij, zodat je precies ziet waar het cijfer vandaan komt.',bullets:["Natuurlijke taal-vragen over actuals, budget, forecast en historie","Toegang tot alle entiteiten en dimensies die in Smartbooks staan","Bronvermelding per antwoord, je ziet waar het cijfer vandaan komt","Beschikbaar buiten kantooruren, zonder een collega te hoeven mailen"]},{title:"P&L Assistant, analyse, commentary én board deck",badge:"AI-feature",text:"Laat Alex je resultatenrekening analyseren, commentary schrijven en een board deck genereren, in jouw huisstijl. Wat zijn de belangrijkste varianties? Waar zit de afwijking ten opzichte van budget? Alex schrijft het op in taal die je directie begrijpt, en exporteert de analyse direct naar een presentatie in jullie huisstijl. Klaar voor de MT-vergadering, jij schaaft alleen nog bij waar nodig.",bullets:["Automatische variantie-analyse tegen budget en vorig jaar","Commentary in Nederlandse bedrijfstaal, niet in AI-speak","Export naar board deck met jullie huisstijl en rapportagestructuur","Bewerkbaar, Alex levert de eerste versie, jij bepaalt de finale"]},{title:"Smart Story, varianties worden gevonden, jij beslist wat ermee gebeurt",badge:"AI-feature · Binnenkort",text:"Zodra de boekhouding klaar is, draait Alex automatisch de analyses en legt varianties voor je neer met urgentiescore. Standaard analyses draaien parallel: Transaction, Budget, Trend en Ratio. Alleen varianties boven jouw ingestelde thresholds komen op je bureau, met urgentiescore, zodat je weet waar je eerst naar moet kijken. Per variantie kies je: boekingsfout, uitleggen, of negeren. Je gaat niet meer op zoek naar wat opvalt, het valt zelf op.",bullets:["Vier analyses automatisch: Transaction, Budget, Trend, Ratio","Thresholds die jij bepaalt, geen ruis van onbelangrijke verschillen","Urgentiescore per variantie voor prioritering","Beslissing per variantie vastgelegd voor audit trail"],footerLink:{label:"Smart Story draait automatisch tijdens je close-proces, meer over Smart Close",to:"/functionaliteiten/maandafsluiten"}},{title:"Onder jouw controle, jij bepaalt wat Alex doet",badge:"Gecontroleerde AI",text:"AI die je niet kan uitleggen aan je directie, zet je niet in. Daarom staat Alex standaard in gecontroleerde modus. Per entiteit bepaal jij of Alex actief is. Je geeft context over jullie organisatie zodat analyses relevant zijn, branche, rapportagestructuur, specifieke KPI's. En met custom prompts stuur je Alex ric
13666hting analyses die passen bij jullie manier van werken.",bullets:["Per-entiteit aan/uit, Alex werkt alleen waar jij wilt","Eigen context: branche, rapportagestructuur, specifieke KPI's","Custom prompts voor herhalende analyses","Volledige audit trail, je ziet welke analyse waar vandaan kwam"]}],subSections:[{title:"Waarom Alex werkt waar andere AI faalt",text:"ChatGPT en Copilot kunnen slim zijn over algemene kennis, maar kennen jouw cijfers niet. Alex is anders. Hij werkt op het gestructureerde data-fundament van Smartbooks: eenduidige definities, gecontroleerde processen, gevalideerde consolidatie. Geen hallucinaties op basis van losse Excel-bestanden, maar analyses op basis van cijfers die jij zelf al vertrouwt."}],founderQuote:{quote:"AI heeft alleen waarde in finance als je de uitkomst kunt uitleggen aan je directie. Daarom hebben we Alex zo gebouwd dat jij altijd ziet waar een cijfer vandaan komt en wat de analyse heeft gedaan, niet ondanks de controle, maar dankzij de controle.",author:"Jaap",role:"Founder, Smartbooks"},painPointsEyebrow:"Herkenbaar?",painPointsTitle:"Zonder controller loop je tegen deze muren aan"}},LZ={eyebrow:"Overzicht",title:"Wat we bespreken"},WZ={hero:{eyebrow:"Projecten",title:"AI-integratie in financiële processen en custom financial applications",subtitle:"Naast ons standaardplatform integreren we AI in jouw bestaande finance-workflows en bouwen we op maat gemaakte financiële applicaties. Samen opgezet, samen onderhouden.",cta:"Plan een kennismaking",secondaryCta:"Stuur een bericht"},consulting:{tag:"Consulting uren",title:"AI-integratie in financiële processen",description:"Onze consultants integreren AI in jouw bestaande finance-omgeving en processen. Van procesanalyse tot livegang, met heldere consulting uren en resultaat dat je terugziet in het dagelijkse werk.",bullets:["AI-integratie afgestemd op jouw processen, datastructuur en workflows","Bestaande systemen en workflows blijven leidend, AI sluit er naadloos op aan","Consultants met finance-achtergrond, geen generieke IT-inzet","Werken op basis van consulting uren, transparant en stuurbaar","Overdracht en documentatie, zodat je team het zelf verder kan brengen"],cta:"Bespreek AI-integratie"},custom:{tag:"Custom financial applications",title:"Financiële applicaties op maat",description:"Voor vraagstukken die net buiten het standaardplatform vallen bouwen we custom financial applications. Onze mensen helpen bij het opzetten en blijven betrokken bij het onderhoud, zodat het meebeweegt met jouw organisatie.",bullets:["Ontworpen en gebouwd samen met onze finance- en tech-experts","Volledige begeleiding bij het opzetten, van idee tot productie","Doorlopend onderhoud en doorontwikkeling door hetzelfde team","Naadloze integratie met Smartbooks en jouw bestaande systemen"],cta:"Neem contact op"},why:{eyebrow:"Waarom Smartbooks",title:"Waarom teams ons kiezen voor AI-projecten",subtitle:"Wij bouwen niet alleen automatisering voor jou, we werken er zelf dagelijks mee. Dat verschil merk je in snelheid, keuzes en onderhoud.",items:[{title:"Tijdwinst waar het pijn doet",text:"We beginnen bij de handelingen die elke maand terugkomen: data ophalen, afstemmen, rapporteren. Die stappen automatiseren we eerst, zodat je team merkbaar minder uren aan repeterend werk kwijt is."},{title:"We werken zelf al volledig geautomatiseerd",text:"Onze eigen finance- en dataprocessen lopen op geautomatiseerde flows en AI-agents. We adviseren dus geen theorie, maar patronen die we in onze eigen praktijk al hebben laten werken."},{title:"Finance-experts, geen generieke IT",text:"Onze consultants kennen consolidatie, afsluiting en rapportage van binnenuit. Daardoor is er minder uitleg nodig en gaat het gesprek direct over de inhoud van je proces."},{title:"Van pilot naar productie in weken",text:"We werken in korte iteraties met een werkend resultaat per stap. Zo zie je snel effect en bepaal je zelf per fase of we doorpakken of bijsturen."},{title:"Het blijft werken na de oplevering",text:"Hetzelfde team dat bouwt, blijft betrokken bij onderhoud en doorontwikkeling. Documentatie en overdracht horen erbij, zodat je niet afhankelijk bent van één persoon."},{title:"Eén platform, geen losse tooling",text:"Wat we bouwen sluit aan op Smartbooks en op je bestaande boekhoud- en ERP-systemen. Geen extra eiland dat je later weer moet integreren."}]},bottom:{title:"Klaar om AI te integreren in je processen?",subtitle:"Vertel ons waar je tegenaan loopt. We denken mee over de aanpak en laten zien wat haalbaar is in weken, niet in maanden.",cta:"Plan een kennismaking"}},VZ={eyebrow:"Consulting uren",title:"AI-integratie in jouw financiële processen",subtitle:"Onze consultants integreren AI in jouw bestaande finance-omgeving. Van procesanalyse tot livegang, met heldere consulting uren en resultaat dat je terugziet in het dagelijkse werk.",blockTitle:"Wat je van ons kan verwachten",blockDescription:"We werken op basis van consulting uren, transparant en stuurbaar. Samen kijken we waar AI de meeste waarde toevoegt in jouw processen en zetten we het stap voor stap op.",bullets:["AI-integratie afgestemd op jouw processen, datastructuur en workflows","Bestaande systemen en workflows blijven leidend, AI sluit er naadloos o
13666p aan","Consultants met finance-achtergrond, geen generieke IT-inzet","Werken op basis van consulting uren, transparant en stuurbaar","Overdracht en documentatie, zodat je team het zelf verder kan brengen"],formTitle:"Laat je gegevens achter",formSubtitle:"Vul het formulier in en we nemen binnen één werkdag contact op om je vraag te bespreken.",backToProjects:"Terug naar Projecten"},KZ={title:"We gebruiken cookies",body:"We plaatsen functionele cookies om de site te laten werken. Met jouw toestemming gebruiken we ook analytische en marketingcookies om de site te verbeteren en onze communicatie relevanter te maken.",policyLink:"Lees ons cookiebeleid",acceptAll:"Alles accepteren",reject:"Alleen noodzakelijke",settings:"Instellingen",saveSelection:"Selectie opslaan",alwaysOn:"Altijd aan",formBlocked:{title:"Marketingcookies staan uit",body:"Dit formulier komt van HubSpot en plaatst marketingcookies. Accepteer marketingcookies om het te laden.",cta:"Cookievoorkeuren aanpassen"},categories:{functional:{title:"Functioneel",description:"Noodzakelijk voor de werking van de website en het onthouden van je cookievoorkeur."},analytics:{title:"Statistieken",description:"Google Analytics via Google Tag Manager, om websitegebruik te meten."},marketing:{title:"Marketing",description:"HubSpot en advertentiecookies voor formulieren, leadherkenning en conversiemeting."}}},qZ={seo:{title:"AI-koppelingen via MCP: ChatGPT, Claude en Copilot",description:"Koppel Claude, ChatGPT, Copilot of je eigen AI-agent veilig aan Smartbooks via MCP. Vraag in gewone taal naar je cijfers, met je eigen rechten."},eyebrow:"Nieuw · Smartbooks MCP-server",title:"Je financiële cijfers, in elke AI die je team al gebruikt",subtitle:"Vraag Claude, ChatGPT, Copilot of elke andere AI met MCP-ondersteuning naar je P&L, budget of debiteuren en krijg direct antwoord uit je live Smartbooks-data. Geen exports, geen copy-paste, geen gedoe met spreadsheets.",ctaPrimary:"Start een gratis pilot",ctaDocs:"Bekijk de handleiding",worksWith:"Werkt met",tools:["Claude","ChatGPT","Microsoft Copilot","Elke AI met MCP"],chat:{user:"Waarom is onze brutomarge in Q3 gedaald?",tool:"Smartbooks · P&L Q3 vs budget",answer:"De brutomarge daalde vooral door hogere inkoopkosten bij twee entiteiten. Hier zijn de grootste afwijkingen ten opzichte van budget:",rows:[["Inkoopkosten","+8,2%"],["Omzet","−1,4%"],["Brutomarge","−3,1 pp"]],note:"Voorbeeldweergave"},benefitsHeading:"Stop met exporteren. Begin met vragen.",benefits:[{title:"Antwoord in seconden",body:"Geen rapport bouwen of Excel-export maken. Stel je vraag en de AI haalt de cijfers live op."},{title:"In je eigen omgeving",body:"Werk in de AI-tool die je team al kent, naast je mail, documenten en andere tools."},{title:"Eén bron van waarheid",body:"Elke AI werkt op dezelfde gecontroleerde Smartbooks-data. Geen losse versies meer."}],hubHeading:"Eén koppeling, elke AI",hubBody:"De Smartbooks MCP-server is de veilige brug tussen je AI-tools en al je administraties, inclusief consolidatie, budgetten en forecasts.",hubCenter:"Smartbooks MCP",hubData:["Alle administraties","Consolidatie","Budget & forecast","Debiteuren & crediteuren"],examplesHeading:"Vragen die je morgen al stelt",examples:["Laat de P&L van september zien, vergeleken met budget.","Welke klanten hebben achterstallige debiteuren?","Verklaar de grootste afwijking in de operationele kosten dit kwartaal.","Maak een korte toelichting op de maandcijfers voor de directie."],securityHeading:"Veilig by design",securityBody:"Je cijfers zijn gevoelig. Daarom is de koppeling vanaf de basis veilig opgezet.",security:[{title:"Alleen-lezen",body:"De AI leest data. Er worden geen boekingen gemaakt en je bronadministratie verandert niet."},{title:"Jouw rechten",body:"De AI ziet alleen de administraties waar jij toegang toe hebt."},{title:"Eigen login",body:"Iedere gebruiker koppelt met zijn eigen Smartbooks-account."},{title:"Toestemming per tool",body:"Je bepaalt zelf wanneer de AI een Smartbooks-tool mag gebruiken."}],setupHeading:"Zo snel ben je live",setup:[{title:"Claude",badge:"In een paar minuten",body:"Voeg Smartbooks toe als custom connector, log in met je Smartbooks-account en stel je eerste vraag."},{title:"Elke andere AI met MCP",badge:"Via de standaard MCP-koppeling",body:"ChatGPT, Microsoft Copilot, eigen agents of workflow-automatisering: elke AI-tool die MCP ondersteunt kan Smartbooks aanroepen. Ons team helpt je bij de inrichting."}],choiceHeading:"Onze AI, jouw AI, of allebei",choice:[{title:"Smartbooks AI-controller",body:"Ingebouwd in Smartbooks: analyses, toelichtingen en antwoorden met de onderliggende boekingen bij elk getal.",link:"Meer over de AI-controller"},{title:"Je eigen AI-tool",body:"Werkt je team al met Claude, ChatGPT, Copilot of een andere AI met MCP? Koppel Smartbooks en gebruik je cijfers waar je al werkt."}],faqHeading:"Veelgestelde vragen",faq:[{q:"Welke AI-tools werken met Smartbooks?",a:"Elke AI-tool die MCP (Model Context Protocol) ondersteunt, zoals Claude, ChatGPT, Microsoft Copilot of je eigen agents. Claude koppel je zelf in een paar minuten; bij andere tools helpt ons team je met de inrichting."},{q:"Kan de AI boekingen maken of data wijzigen?",a:"Nee. De koppeling is alleen-lezen: er worden geen journaalposten gemaakt en je bronadministratie verandert niet."},{q:"Ziet de AI alle administraties?",a:"Nee. De AI gebruikt jouw login en z
13666iet alleen de administraties waar jij in Smartbooks toegang toe hebt."},{q:"Wat heb ik nodig om met Claude te starten?",a:"Een Smartbooks-account met toegang tot minimaal één administratie en een Claude-abonnement dat custom connectors ondersteunt. Bij Claude Team of Enterprise voegt een beheerder de connector toe."}],ctaHeading:"Stel je eerste vraag aan je eigen cijfers",ctaBody:"In de gratis pilot koppelen we je boekhouding en zetten we de AI-koppeling voor je klaar."},HZ={virtualControllerChat:Z$,nav:Y$,planDemo:Q$,onboardingMeeting:J$,hero:X$,founders:eZ,socialProof:nZ,trustedBy:tZ,painPoints:iZ,painPointsAlt:rZ,aiControllerBlock:aZ,steps:oZ,features:sZ,ctaBottom:lZ,webinar:dZ,liveWebinar:cZ,footer:uZ,teamStrip:hZ,announcement:gZ,integrations:mZ,pricingCards:pZ,pricing:fZ,featureComparison:bZ,testimonials:vZ,about:kZ,overOns:wZ,overOnsHero:xZ,contact:yZ,missionVision:jZ,cta:SZ,benefits:zZ,featuresHero:AZ,roadmap:CZ,knowledgeCenter:EZ,customerStories:NZ,articleCategories:IZ,forWhom:PZ,onboarding:TZ,onboardingPage:DZ,animatedStats:BZ,featureCategories:MZ,voorWie:FZ,seo:RZ,testimonialSection:OZ,pages:_Z,featureNav:LZ,projecten:WZ,consulting:VZ,cookieConsent:KZ,aiConnectors:qZ},UZ={assistantName:"Alex, AI Controller",statusOnline:"Online · responds instantly",placeholder:"Ask Alex a finance question…",typing:"Alex is typing",turns:[{question:"How are we tracking YTD vs. budget?",answer:"YTD revenue is €4.82M (+6.3% vs. budget). EBITDA lands at €612K (-2.1% vs. budget), strong Q2 months were offset by higher personnel costs."},{question:"What's the biggest variance this quarter?",answer:"Marketing is €84K over budget (+18%), mainly due to a one-off campaign in June. Want me to break this down by entity?"},{question:"Generate a board deck for the next meeting",answer:"I'll generate an 8-slide deck with P&L overview, top-3 variances, cash position and forecast. Ready in ~30 seconds, want it in your brand template?"}]},GZ={product:"Product",pricing:"Pricing",projects:"Projects",knowledgeCenter:"Knowledge Center",aboutUs:"About Us",customerStories:"Customer Stories",planDemo:"Book a demo",account:{login:"Log in",signup:"Sign up"},knowledge:{viewAll:"View all content",onboardingMeeting:"Start your free pilot",categories:{articles:{title:"Articles",subtitle:"In-depth reads"},videos:{title:"Videos",subtitle:"Demos & explainers"},experiences:{title:"Customer stories",subtitle:"What clients say"},cases:{title:"Case studies",subtitle:"Detailed cases"}}},about:{team:"Our team",teamSubtitle:"Meet our team",why:"Why Smartbooks?",whySubtitle:"What sets us apart",contact:"Contact",contactSubtitle:"Get in touch with us"},aiConnectors:"AI connectors (MCP)"},$Z={seoTitle:"Book a demo",seoDescription:"Book a personal demo with Jaap van der Ende and see how Smartbooks helps your finance team move forward.",eyebrow:"Book a demo",title:"Book a demo. We'll show you how Smartbooks works for you.",subtitle:"A personal demo, tailored to your situation. No obligations, no sales pressure, just a concrete conversation about what Smartbooks can mean for your finance team.",playVideo:"Play intro video",videoCaption:"Co-Founder",bulletsHeading:"Book a demo and discover how you:",bullets:["Speed up month-end close","Automate consolidation","Professionalize finance processes","Deploy AI reliably in finance","Automatically prepare reports","Analyze figures faster"],calendar:{title:"Meet with Jaap van der Ende",subtitle:"Pick a time that works for you"}},ZZ={eyebrow:"Free pilot",title:"Start your free pilot",subtitle:"In an initial conversation, we'll get acquainted, connect your accounting system together and agree on what we'll configure during the pilot. You can then work for a month in your own, fully configured environment. Completely without obligation.",trust:["You pay nothing","No subscription or notice period","Stop at any time"],bulletsHeading:"How we get started",bullets:["Get acquainted — who we are and where your finance function stands today","Walk through the connection together — how your accounting system connects to Smartbooks","See your own figures — what appears in Smartbooks as soon as the connection is active","Discuss the next steps — what is needed for reporting, consolidation, or planning"],calendar:{title:"Pick a time for the introduction",subtitle:"With Robin van den Born",role:"Smartbooks",iframeTitle:"Start your free pilot with Robin van den Born",portraitAlt:"Portrait of Robin van den Born, Smartbooks"},footnote:{prefix:"Want to learn more about Smartbooks first? Feel free to",link:"book an introductory call",suffix:" and we'll go through the options together."},benefitsHeading:"What the pilot delivers",benefits:["Your own figures live in Smartbooks right away","A fully configured environment based on your structure: reporting, consolidation and budgets","At least one real month-end close in Smartbooks, so you can see the result in your own figures","Evaluate a working system instead of a demo","No costs, no subscription and no notice period: if it doesn't fit, it ends there"],cta:"Start your free pilot"},YZ={trustBadge:"Trusted by 60+ finance teams in the Netherlands",title1:"Consolidation and close.",title2:"Without Excel.",subtitle:"The system for the financial and business controller. Professionalize finance with controlled use of AI.",featureList:["Reporting","Consolidation","Planning & Cashflow","Close","AI Controller"],cta:"Book a demo",ctaSecondary:"View features",ctaWebinar:"Sign up for the webinar",trialReassurance:"Or start straight away with a <1>free trial month</1> on your own data — no commitments.",bookWithMichel:"Book your intake directly with Michel",tabs:{reporting:"Reporting",consolidation:"Consolidation",budgetterenCashflow:"Planning & Cashflow",virtualController:"AI Controller"},tabAlts:{reporting:"Smartbooks, Financial reports and dashboards",consolidation:"Smartbooks, Consolidated P&L across multiple entities",budgetterenCashflow:"Smartbooks, Budgeting, planning and cashflow forecast",virtualController:"Smartbooks, AI controller for finance teams"}},QZ={eyebrow:"The team",title:"Built by people who actually know finance",subtitle:"Smartbooks is built by a team with decades of experience in EPM, controlling and SaaS. No faceless tool, you work with people who know the craft.",cta:"Meet the full team"},JZ={clients:"Companies trust Smartbooks",daysBack:"Less time on reporting",live:"Live reports within a day",uptime:"For consolidation, reporting, planning & cashflow"},XZ={title:"Trusted by finance teams",titleCompact:"Trusted by finance teams"},eY={eyebrow:"The problem",title:"Finance still runs on",titleHighlight:"Excel and manual work",subtitle:"It works, until it doesn't. These 
13666challenges slow your team down and block further professionalization.",items:{spreadsheets:{title:"Fragmented Excel models",description:"Consolidation across multiple entities relies on complex, organically grown spreadsheets that no one else understands."},manualWork:{title:"Every ad-hoc question costs half a day",description:"A simple question from leadership means an export, a pivot table and half a day of work. Before you even get to the actual analysis."},errors:{title:"Errors discovered too late",description:"Manual entry and links between files lead to errors that only surface during board presentations."},knowledge:{title:"Knowledge lives in people's heads",description:"If one person is unavailable, the process stalls. The complexity is fragile and non-transferable."}}},nY={eyebrow:"The problem",title:"Do you recognize this as a",titleHighlight:"finance professional",items:["Manual Excel reports cost you hours every week","Formula errors lead to unreliable figures","Consolidation across multiple entities is a nightmare","No real-time insight into financial performance","Version control of spreadsheets is impossible","Budgeting and forecasting takes too much time","Management receives reports too late","Audit trails are completely missing"]},tY={eyebrow:"ALEX, YOUR AI CONTROLLER",title:"AI is only as reliable as the data underneath.",subtitle:"That’s why we built the foundation first: one controlled, consolidated version of your numbers across all entities. Alex works exclusively on top of that, with source attribution for every answer.",alexCardTitle:"Alex, AI controller",capabilities:[{title:"Checks",description:"IC mismatches and where they come from"},{title:"Analyses",description:"Variances down to transaction level"},{title:"Produces",description:"Board decks on request"},{title:"Plans",description:"Forecasts & scenarios to review"},{title:"Sparring partner",description:"Ad-hoc questions, instant sourced answers"}],contextLabel:"reliable context for AI",fundamentTitle:"Smartbooks: the foundation",fundamentPillars:[{title:"Consolidation",description:"Automated IC eliminations & currency"},{title:"Close",description:"Automated checklists & controls"},{title:"Reporting",description:"Automated standardized reporting structure"},{title:"Budget & cashflow",description:"Automated budget, forecast & cash"}],fundamentFootnote:"Everything automated in the foundation. Alex performs the analysis on top, with source attribution.",dataSources:{accounting:"ACCOUNTING & ERP",accountingDesc:"Exact · Twinfield · AFAS · Odoo · and many more",operational:"OPERATIONAL DATA",operationalDesc:"CRM · HR · projects · hours · and more available"},valueProps:{truth:{title:"One version of the truth",description:"No loose exports. All entities, consolidated, in one system."},auditable:{title:"Always auditable",description:"Every calculation and every answer is traceable to the source. Verifiable for accountant and auditor."},control:{title:"You stay in control",description:"AI is off until you turn it on, per tenant. You assess and decide."}},ctaPrimary:"See Alex work on your numbers",ctaSecondary:"Or read how the AI controller works"},iY={eyebrow:"How it works",title:"Live in days, value from day one.",subtitle:"Forget multi-month implementations. You're technically up and running within two days. From there, we work alongside your team, onboarding, refining the setup, and identifying where the biggest time savings lie in your close, reporting, and day-to-day workflows.",trialBadge:{label:"Free trial month",title:"Try Smartbooks free for a month, full implementation included.",description:"During your free trial month we fully configure Smartbooks on your bookkeeping, structure and reports. You don't just see a demo, you work in your own live environment from day one. No separate implementation project, no surprises later."}
13666,step1:{label:"Day 1–2",title:"Connection and setup",description:"Your bookkeeping is live in Smartbooks. Reporting, consolidation and planning structures are configured to your general ledger. We do the work, you see your own numbers in the system right away."},step2:{label:"Week 1–2",title:"Training",description:"Together with your team we go through the core workflows: close, consolidation, reporting. Everyone learns what's relevant for their role. No generic manual, training on your setup."},step3:{label:"Week 2 and beyond",title:"Fine-tuning",description:"Smartbooks works, your team works with it. Now we fine-tune together: sharpen standard reports, add extra dimensions, align checklists. Your rhythm sets the pace."},flexNote:"We align the exact timeline with your availability. Some clients prefer intensive training in one week, others spread it across a month.",trialCta:"Start a free trial month",trialCtaSub:"No commitments, no costs. Not satisfied? No invoice.",quotes:[{quote:"Don't turn the implementation into a big project, because it goes really fast. During the free trial month the entire setup is already complete and everything is ready to use.",author:"Karel van den Bos",role:"CFO, Intermax"},{quote:"In my 30+ years of experience I've worked with many tools, but Smartbooks is by far the easiest and fastest to implement.",author:"Marcel Steenbrink",role:"CFO, Primus Wafer Paper"}]},rY={eyebrow:"Features",title:"Everything finance needs",subtitle:"One platform for consolidation, planning, reporting, and AI analysis.",consolidation:{title:"Consolidation",description:"Automatic consolidation across all your entities. Intercompany eliminations, currency conversion, and multi-level structures."},planning:{title:"Planning & forecasting",description:"Budgeting and rolling forecasts that connect directly to your actuals. Scenario analyses in seconds."},reporting:{title:"Reporting",description:"Professional management reports and board decks. Always current, always consistent."},cashPlanning:{title:"Cash planning",description:"Real-time liquidity forecasts and cash flow analyses. Always have visibility into your financial position."},ai:{title:"AI Business Controller",description:"Ask questions to Alex, your AI assistant. From variance analysis to ad-hoc reports, in natural language."},viewAll:"View all features"},aY={eyebrow:"Ready to start?",title:"Ready to professionalize finance?",subtitle:"Experience in your own finance environment how Smartbooks professionalizes business control and lays the foundation for reliable AI.",cta:"Book a demo",ctaTrial:"Start a trial month",trialReassurance:"No credit card, no commitments. We fully set up Smartbooks for your accounting. If it doesn't fit, we stop — no invoice.",onboardingMeeting:{prefix:"Prefer to get acquainted first, with no obligation?",link:"Start your free pilot"},ctaWebinar:"Sign up for the webinar",noObligations:"No obligations",liveIn14Days:"Live in 1 day",personalGuidance:"Personal guidance"},oY={seoTitle:"Webinar: Smart reporting, consolidation & budgeting with AI",seoDescription:"Watch the Smartbooks webinar and learn in 25 minutes how to increase financial discipline and save time with smart reporting, consolidation and AI.",eyebrow:"On-demand webinar",title:"Webinar: Smart Reporting, Consolidation & Budgeting with AI",subtitle:"Learn how to increase the financial discipline in your business while saving significant time.",heroCta:"Yes, count me in",hostRole:"Co-Founder",bulletsHeading:"After this 25-minute webinar:",bullets:["You'll have new ideas on how to grow financial discipline","You'll know if Smartbooks is an interesting solution for you","You'll understand how to save 80% of time on reporting and consolidation"],benefitsHeading:"Get more peace of mind, overview and insight with better reporting, planning and consolidation",benefits:[{title:"Save time",description:"Up to 80% less work on reporting, consolidation and analysis."},{title:"More financial discipline",description:"Reliable numbers and consistent processes across your entire organization."},{title:"Faster insight",description:"Real-time numbers and clear dashboards exactly when you need them."}],form:{eyebrow:"Sign up for the webinar:",title:"AI in Finance: from Promise to Result",successTitle:"Thanks for signing up!",successBody:"You'll receive an email with the webinar link within a few minutes."}},sY={seoTitle:"Live webinar: Putting AI to work in finance",seoDescription:"Sign up for the live webinar and see how to effectively put AI to work for consolidation, analysis and reporting. Practical insights, no product pitch. Pick a date and time right away.",eyebrow:"Free · online",title:"Live webinar: Putting AI to work in finance",subtitle:"In this live webinar Jaap shows how to effectively put AI to work for consolidation, analysis and reporting. Pick a date and time below.",meta:{date:"Pick your own date and time",audience:"For controllers and CFOs"},host:{name:"Jaap van der Ende",role:"Co-Founder & Director Growth & Strategy",intro:"Host of this webinar",bio:"With years of experience in management and strategy consulting, as a serial entrepreneur and someone who works with AI hands-on every day, Jaap shares how finance teams actually put AI to work in practice. Not theory — approaches that work right away."},privacyPrefix:"Your data is processed in accordance with our",privacyLink:"privacy policy",privacySuffix:".",ondemand:{title:"Prefer to get started right away?",description:"Don't want to wait for a live session? Book a personal demo and see for yourself how AI makes your finance work smarter.",button:"Book a demo"}},lY={tagline:"Professional finance for growing organizations with multiple entities.",product:"Product",features:"Features",pricing:"Pricing",integrations:"Integrations",company:"Company",aboutUs:"About Us",knowledgeCenter:"Knowledge Center",contact:"Contact",copyright:"© 2026 Smartbooks B.V. All rights reserved.",privacy:"Privacy",terms:"Terms",privacyPolicy:"Privacy Policy",cookiePolicy:"Cookie Policy",termsConditions:"General Terms",isaeCertified:"ISAE 3402 Type II<br />certified",whatsNew:"What's new",allIntegrations:"All integrations",googleReviews:"Rated on Google"},dY={alt:"The founders of Smartbooks",eyebrow:"About us",title:"Built by people who truly know finance",body:"Smartbooks was founded by a team with decades of experience in EPM, controlling and SaaS. No faceless tool. You work with people who know the craft and have built proven products for groups like Akzo Nobel, Philips, KPN and KLM.",cta:"Meet the team"},cY={text:"🎓 Free webinar: Discover how AI transforms your reporting",cta:"Sign up"},uY={eyebrow:"Integrations",title:"Connect your systems",titleHighlight:"in minutes",subtitle:"Smartbooks plugs seamlessly into your existing accounting, ERP and BI stack. No IT project, no migration, just plug-and-play with the tools you already use.",footnote:"Missing an integration? Almost any connection is possible via our API and integration platforms.",badges:{plugAndPlay:"Plug-and-play setup",fastSetup:"Live in days, not months",secure:"Secure & GDPR-compliant"},groups:{accounting:"Accounting & ERP",dataBi:"Data & BI",automation:"Automation & API",systems:"Systems & automation",extra:"And 300+ other connections"},extra:{label:"Extra connections",description:"For BI tools and automation platforms we use open APIs and ready-made connectors."},compact:"Connects directly with Exact Online, Exact Globe, Twinfield, AFAS and Odoo.",moreComingSoon:"More integrations coming soon"},hY={valueProp:{title:"One system, not a six-month implementation project",body:"Smartbooks is built for finance teams with 2 to 20 entities that have outgrown Excel but don't want to start a heavy enterprise project. You connect your accounting system and get started over 2-3 weeks with 4-6 one-hour training sessions from a professional trainer.",stats:{connect:{value:"10 minutes",label:"until your accounting is connected"},live:{value:"4-6 sessions",label:"of one hour with a professional trainer"},effort:{value:"5-6 hours",label:"total effort from your team"}}},onboardingMeeting:{prefix:"Not sure which package fits, or how the connection works?",link:"Start your free pilot"}},gY={eyebrow:"Price indication",title:"Calculate your",titleHighlight:"price indication",titleEnd:"",subt
13666itle:"Enter your number of entities and instantly see an indication of what Smartbooks costs for your group. Final price after a short intake.",configuratorTitle:"Build your configuration",configuratorSubtitle:"Pick your plan and the number of entities.",holdings:"Holdings",perMonth:"/month each",subsidiaries:"Subsidiaries",platformFee:"Platform fee",platformFeeFixed:"fixed per month",monthlyTotal:"Indicative monthly price",monthlySuffix:"/month",breakdownTitle:"Monthly price breakdown",oneTimeBlockTitle:"One-time at start",annualCosts:"Annual cost (× 12)",oneTimeImplementation:"One-time onboarding",implementationTooltip:"Personal onboarding by someone from our team: setup, training and guidance until your team runs Smartbooks independently. No mandatory ongoing consulting.",totalFirstYear:"Indicative total year 1",moreThanEntities:"More than {{max}} entities?",contactForQuote:"Contact Smartbooks for a custom quote.",contactUs:"Contact us",startTrial:"Contact us or book a demo",users:"users",plans:{professional:{name:"Finance Professional",desc:"Comprehensive automated reporting for smaller organizations"},leader:{name:"Finance Leader",desc:"Advanced reporting, planning, and consolidation"}},planFeatures:{professional:["Financial results in P&L and Balance Sheet","Automatic Cash Flow","Dynamic reports","Period-over-period comparison","Month-end close workflow"],leader:["Everything in Professional, plus:","Consolidation & IC eliminations","Budgeting & Forecasting","Custom dashboards","AI-driven insights","Power BI synchronization"]}},mY={title:"Compare",titleHighlight:"all features",subtitle:"All features per package, with an explanation where it helps.",professional:"Professional",leader:"Leader",enterprise:"Enterprise",onRequest:"Price on request",annualBilling:"Prices are based on annual billing",aiOfferNote:"* AI features are free to use through {{date}} in every package. After that, different terms may apply and they are not automatically included in the package price.",implementationNote:"† See the implementation plan for details.",showDifferencesOnly:"Show differences only",groups:{costDetails:"Cost Details",ai:"AI",monthEndClose:"Month-End Close Acceleration",reportingConsolidation:"Automated Reporting & Consolidation",planning:"Business Model-Driven Planning"},rows:{baseFee:"Fixed base subscription fee per month",perSubsidiary:"Per subsidiary per month",perHolding:"Per holding per month",fixedImplementation:"Fixed one-time implementation fee†",variableImplementation:"Variable one-time implementation fee†",operationalData:"Extension with operational data",costCenters:"Cost centers/drivers and/or large data volumes",aiController:"AI Controller*",aiCommentary:"Automated management commentary*",aiBreakdowns:"AI number breakdowns*",mcpServer:"MCP server for your AI assistant*",monthCloseWorkflow:"Workflow for month-end close approval",textAnnotations:"Text annotations on financials",aiErrorDetection:"AI-powered booking error detection",drilldown:"Drill down to journal entries and invoices",plResults:"Financial results in P&L and Balance Sheet",autoCashflow:"Automatic Cash Flow",dynamicReports:"User-friendly dynamic reports",periodComparison:"Period-over-period comparison",customDashboards:"Custom dashboards with your own, including non-financial, KPIs",mgmtReportBook:"Management report book",powerBiSync:"Power BI synchronization",costCenterAnalysis:"Analysis by cost center, driver, or project",budgetForecast:"Modelling budget and forecast, including automatic year-end projection",businessModelTemplates:"Business model templates, custom dimensions and KPIs",varianceAnalysis:"Actuals versus budget and forecast, with automatic variance analysis",cashflowForecast13w:"13-week detailed cash flow forecast",multiYearPlanning:"Multi-year planning",subConsolidation:"Single-level consolidation and sub-consolidation across multiple levels",budgetConsolidation:"Budget 
13666consolidation",costCenterConsolidation:"Cost center consolidation",multiCurrency:"Multi-currency consolidation",uploadWithoutApi:"Upload administrations without API",oneTimeMonthly:"1 × monthly fee",twoTimeMonthly:"2 × monthly fee",notApplicable:"N/A",onRequest:"Price on request",upTo3Years:"Up to 3 years",upTo5Years:"Up to 5 years"}},pY={eyebrow:"Clients",title:"What our clients",titleHighlight:"say"},fY={title:"Our",titleHighlight:"team",subtitle:"Decades of experience in finance, technology, and strategy.",founderRoles:{katja:"HR, Legal & Finance"}},bY={tabs:{team:"Our team",contact:"Contact"}},vY={eyebrow:"About Smartbooks",title:"We're building the finance tool we always wished we had.",subtitle:"A team with decades of experience in EPM and controlling, on a mission to bring enterprise finance within reach of mid-market companies."},kY={seo:{title:"Contact",description:"Get in touch with Smartbooks. Call, email or send us a message through the contact form."},heroTitle:"Get in touch",heroSubtitle:"We'd love to hear from you. Send us a message or give us a call.",address:{title:"Address"},email:{title:"Email"},phone:{title:"Phone"},helpdesk:{title:"Email helpdesk",description:"Our Customer Success team is ready to support you during onboarding, to answer questions while you use the product and to share Best Practices whenever helpful."},form:{title:"Contact form",subtitle:"Fields marked with * are required."}},wY={title:"What we",titleHighlight:"stand for",mission:{title:"Our Mission",subtitle:"Enterprise-grade financial software, built for SMBs.",description:"We make enterprise-level financial reporting, planning, and consolidation accessible for SMBs. The same power that multinationals use, now available for companies with a smaller team and less budget, without complexity, without specialists, without weeks of implementation."},vision:{title:"Our Vision",subtitle:"The financial data infrastructure that AI and controllers trust.",description:"Smartbooks becomes the financial data infrastructure for the AI era. We believe the future of finance isn't about manually building reports, but about trusting reliable data. Smartbooks delivers the trust layer between your accounting and your decisions, today for controllers, tomorrow for AI."},whySmartbooks:{title:"Why Smartbooks",description:"Enterprise logic, built for SMBs. Our founders have 65+ years of combined experience in EPM, finance consulting, and tech scale-ups. Smartbooks is the third generation EPM, ready for the AI era."}},xY={sectionEyebrow:"Discover more",sectionTitle:"See Smartbooks in action",whitepaper:{eyebrow:"In-depth reading",title:"Free Whitepaper",description:"Discover in our whitepaper how AI is transforming the financial sector and how your organization can benefit.",button:"Download whitepaper"},webinar:{title:"See Smartbooks live in action",description:"In our live webinar we walk you step-by-step through consolidating, analysing and reporting with AI — with room for your questions.",recommended:"Recommended",duration:"Live session · pick your own time",bullets:["Demo in a real multi-entity environment","How to shorten your monthly close by days","Real-world examples from finance teams like yours"],button:"Watch the live webinar",microcopy:"Pick a date and time right away",hostedBy:"Presented by",hostRole:"Managing Director",posterLabel:"Smartbooks Webinar · With Michel van Wijngaarden"},dialog:{title:"Download Whitepaper",description:"Fill in your details to receive the whitepaper."}},yY={eyebrow:"Our capabilities",title:"Three core areas,",titleLine2:"one",titleHighlight:"platform",consolidation:{title:"Consolidation & reporting",description:"Multi-entity consolidation with automatic intercompany eliminations and currency conversion. Reports that adapt to your structure, drill down to the original transaction."},planning:{title:"Planning & variance analysis",description:"Budgets, forecasts and scenarios alongside your actuals. Spot deviations instantly, with the reasoning behind them, and steer before the MT asks."},close:{title:"Period close support",description:"A shared checklist, task ownership and real-time status of your monthly close. Everyone knows what needs to happen and where things are stuck."}},jY={eyebrow:"Features",title:"Everything",titleHighlight:"Smartbooks",titleEnd:"can do",subtitle:"From reporting to consolidation, from budgeting to cash flow forecasting. One platform for all your financial processes."},SY={eyebrow:"Roadmap",title:"Our",titleHighlight:"product roadmap",subtitle:"From smart AI features in the short term to a fully automated financial platform.",inDevelopment:"In development",planned:"Planned",tba:"To be announced",longTerm:"Long-term vision",comingSoon:"Coming soon, stay tuned!",items:{mcpServer:{title:"MCP Server",desc:"Talk to your numbers. Ask questions in natural language and get instant answers from your financial data."}
13666,odoo:{title:"Odoo Connection",desc:"Connect Odoo as a source system and automatically import your financial data into Smartbooks."},smartClose:{title:"Smart Close",desc:"Automatic variance analyses that flag deviations and accelerate your month-end close."},drilldown:{title:"Consolidated Drilldown",desc:"Drill down to individual transactions from consolidated reports for complete transparency."},visualUpgrade:{title:"Visual Upgrade",desc:"Redesigned charts, dashboards, and reporting visuals for even sharper financial insights."},multipleScenarios:{title:"Multiple Scenarios",desc:"Work with multiple budget and forecast scenarios and compare them side by side."},smartSlides:{title:"Smart Slides",desc:"Automatically generate presentations and slide decks from your Smartbooks reports."},aiAdvisor:{title:"AI Financial Advisor",desc:"Proactive AI-driven insights and recommendations based on your historical data and trends."},workflowAutomation:{title:"Workflow Automation",desc:"Automate repetitive financial processes with smart triggers and actions."}}},zY={title:"Knowledge Center",subtitle:"Practical articles, videos, and customer stories on consolidation, reporting, planning, and AI for finance professionals.",searchPlaceholder:"Search articles...",noResults:"No articles found.",readMore:"Read more",all:"All",tagsTitle:"Filter by topic",tagsClear:"Clear filters",tagsEmpty:"No tags available",activeTagsLabel:"Active tags:"},AY={seoTitle:"Customer Stories",seoDescription:"See how finance teams at Anove, ACE, Glomar, LifeWatcher, Primus, Risketeers and Tjojs work with Smartbooks.",eyebrow:"Customer stories",title:"What customers say about Smartbooks",subtitle:"Real experiences and detailed case studies from finance teams that have professionalized reporting, consolidation and planning with Smartbooks.",all:"All",noResults:"No stories available yet.",tabs:{caseStudies:"Case studies",customerStories:"Customer experiences"}},CY={articles:"Articles",videos:"Videos",caseStudies:"Case studies",customerStories:"Customer stories"},EY={title:"For",titleHighlight:"whom",subtitle:"Smartbooks is built for everyone involved in financial management and accountability.",whySmartbooks:"Why Smartbooks"},NY={eyebrow:"How it works",title:"Get started in",titleHighlight:"3 steps",titleEnd:"",step1:{title:"Sign-up",desc:"Create an account and choose the package that fits your organization."},step2:{title:"Set-up",desc:"Connect your accounting software and configure your reports in minutes."},step3:{title:"Speed-up",desc:"Start immediately with automated reports and AI-driven insights."}},IY={eyebrow:"Onboarding",title:"Technically live within two days",intro:"Forget multi-month implementations. Someone from our team guides you step by step: setting up integrations, configuring reports, and training your team until they run Smartbooks independently.",ctaPrimary:"Plan a demo",ctaSecondary:"Go to knowledge center",timelineTitle:"Realistic timeline",timelineDesc:"Day 1–2: technical integrations and first reports. Week 1–4: configuration of consolidation, budget, and cashflow. From week 5: optimization and training.",supportTitle:"Personal guidance",supportDesc:"No ticket system or ongoing consulting contract. One dedicated point of contact from our team until your team fully owns Smartbooks."},PY={eyebrow:"Our impact",title:"Numbers that speak for",titleHighlight:"themselves",companies:"Companies",timeSaved:"Time saved",fasterReporting:"Faster reporting",financeProfessionals:"Finance professionals"},TY={pillars:{reporting:"Reporting",consolidation:"Consolidation",budgetterenCashflow:"Planning & Cashflow",close:"Close",virtualController:"AI Controller"},pillarDescriptions:{reporting:"Fast, reliable reports with real-time updates. Custom data model, security model, and dashboards with visualizations, KPI tiles, and tables.",consolidation:"Full consolidation with sub-consolidations, IC eliminations, currency conversion, and reconciliation, always up to date.",budgetterenCashflow:"Budgets, forecasts, scenarios, loans, investments, and a 13-week direct cash planning in one system.",close:"Structured checklists for month-end, quarter-end, and year-end close with automations, dependencies, and audit trail.",virtualController:"Your AI controller for finance teams. Available 24/7 for ad-hoc questions, analyses, presentations, and specialized financial support."},pillarFeatures:{reporting:["Quickly create and lock reports","Real-time updates from your source systems","Custom data model tailored to your management needs","Security model, you decide who sees what","Report by cost center, project, or cost driver","Dashboards with visualizations, KPI tiles, and tables","Drill down from reports to transaction level with PDF invoices","Quick insights into transactions to/from specific customers","Aging analysis per entity and consolidated","Operational metrics via manual input, formulas, or API","Viewer, Contributor, and Admin roles with restrictions per cost center","Excel add-in: pull reports into Excel and refresh anytime"],consolidation:["Sub-consolidations and consolidated overviews","Currency conversion","Intercompany eliminations","Separate consolidation structure","Consolidated cost centers","IC reconciliation tool, see where differences originate","Always up-to-date reports","View transactions at consolidated level","Split accounts with both IC and 3rd party bookings"],budgetterenCashflow:["Create and manage budgets and forecasts","Multiple scenarios side by side","Budget at ledger account or subtotal level, configurable per branch","Hard input or formula-based","Business modules: product groups, salary, FTE, pension","Loans and investments flow through to your P&L","Balance sheet planning via P&L dependencies","Automatic cashflow forecast (indirect method)","13-week direct cash planning based on receivables/payables","Recurring payments on daily, weekly, or monthly basis","Adjust expected payment dates and see impact on cash planning","Plan new loans, credit facilities, and investments with depreciation"],close:["Checklists for month-end, quarter-end, and year-end close","Assign tasks to specific team members","Work descriptions and documents per task in the template","Link automations to tasks","Set up dependencies between tasks","Per-task chat to discu
13666ss with colleagues","Audit trail of what was done when and by whom","Close the period only when all tasks are completed","Available at entity level and consolidated level"],virtualController:["Support agent with access to documentation, available 24/7","Ask ad-hoc questions in natural language","Automatically generate PowerPoint presentations","Specialized agents that help with financial analyses","Available from every module: reporting, consolidation, planning, and close"]}},DY={smartbooksFor:"Smartbooks for",theChallenge:"The challenge",whySmartbooks:"Why Smartbooks",alsoSee:"Also see",roles:{cfo:{title:"CFO",subtitle:"Real-time financial insight for strategic decisions",description:"As CFO, you bear ultimate responsibility for your organization's financial health. Yet you often work with outdated data, fragmented Excel models, and reports that take days to compile. Smartbooks changes that.",benefits:["Real-time consolidation across all entities and subsidiaries","AI-driven scenario analyses and rolling forecasts","Generate board-ready reports in one click","Direct access to KPI dashboards without finance involvement","Automatic variance analyses between budget, forecast, and actuals"],painPoints:["No confidence in figures due to manual processes","Weeks-long reporting cycles that delay decision-making","Insufficient insight into cash flows and working capital"],seoTitle:"Smartbooks.ai for CFO",seoDescription:"Discover how Smartbooks helps CFOs with real-time consolidation, AI forecasting, and board-ready reports."},controller:{title:"Controller",subtitle:"From month-end close in days to hours",description:"As a controller, you're the backbone of financial reporting. But too often you spend your time manually merging data instead of analyzing it. Smartbooks automates the heavy lifting so you can do what you do best.",benefits:["Month-end close in hours instead of days","One source of truth for all financial data","Fully auditable with version control and audit trail","Automated intercompany eliminations and reconciliations","Seamless integration with your existing ERP and accounting system"],painPoints:["Endless copying and pasting between Excel files","Errors discovered too late in the process","No time left for analysis and business partnering"],seoTitle:"Smartbooks.ai for Controller",seoDescription:"Smartbooks helps controllers with automated consolidation, audit trails, and faster month-end closes."},aandeelhouders:{title:"Shareholders",subtitle:"Transparent reports that build trust",description:"As a shareholder, you want to know how your investment is performing, without waiting weeks for reports or relying on incomplete information. Smartbooks offers always current, reliable financial insights.",benefits:["Always current financial reports available at any time","Consistent formats that facilitate period-over-period comparison","Transparent data that strengthens trust in management","Clear KPI dashboards without financial background needed","Historical trend anal
13666yses for long-term decisions"],painPoints:["Reports arrive too late and in varying formats","Lack of transparency about financial reality","Difficult to compare performance across entities"],seoTitle:"Smartbooks.ai for Shareholders",seoDescription:"Smartbooks gives shareholders transparent, current financial reports and KPI dashboards."},accountants:{title:"Accountants",subtitle:"Audit-ready data without the back-and-forth",description:"As an accountant, you want to work efficiently with reliable data. In practice, you spend a lot of time requesting, checking, and correcting information. Smartbooks delivers structured, audit-ready output directly from the system.",benefits:["Audit-ready output without manual preparation work","Direct access to client data via a secure portal","Fewer errors and faster audits through standardized data","Complete audit trail for every financial transaction","Automated checks on consistency and completeness"],painPoints:["Endless back-and-forth emailing to get the right files","Data that is incorrect or incomplete upon delivery","Time lost to manual reconciliation"],seoTitle:"Smartbooks.ai for Accountants",seoDescription:"Smartbooks helps accountants with audit-ready output, direct data access, and automated checks."},stakeholders:{title:"Stakeholders",subtitle:"Complex financial data, presented simply",description:"From investors to board members, from department managers to external advisors, everyone involved in strategic decisions needs clear financial insight. Smartbooks makes that possible.",benefits:["Accessible dashboards without financial background needed","Strategic KPIs clearly displayed in one screen","Data-driven decision-making at every level of the organization","Personalized reports per stakeholder group","Real-time insights instead of monthly snapshots"],painPoints:["Financial reports are too complex to quickly understand","Decisions are made on gut feeling instead of data","No uniform view of organizational performance"],seoTitle:"Smartbooks.ai for Stakeholders",seoDescription:"Smartbooks offers stakeholders accessible dashboards and clear KPI reports for better decision-making."}}},BY={index:{title:"Smartbooks | Consolidation, FP&A & Close Management",description:"One professional system for consolidation, reporting and planning. Replace fragmented Excel models with reliable, automated processes."},functionaliteiten:{title:"Features",description:"Discover all Smartbooks features: financial planning, consolidation, reporting, budgeting, and more, powered by AI."},overOns:{title:"About Us",description:"Learn more about Smartbooks: our team, mission, and vision on AI-driven financial software for business control."},prijzen:{title:"Pricing",description:"Transparent pricing for consolidation, reporting, and planning software. Start with a free pilot — no commitment."},projecten:{title:"Projects | AI integration in financial workflows & custom finance apps",description:"From AI integration in financial workflows to custom financial applications. Our team helps you set up, build and maintain — so AI and custom work actually deliver."},productTour:{title:"Interactive product tour",description:"Click through Smartbooks in 90 seconds. No demo, no form — experience the Finance Operating System yourself."},onboarding:{title:"Onboarding",description:"How onboarding with Smartbooks works: from sign-up to live in production. Personal guidance from someone on our team."},onboardingMeeting:{title:"Start your free pilot | Smartbooks",description:"Start your free Smartbooks pilot. Connect your accounting system, work for a month in your fully configured environment and evaluate it using your own figures."},bedanktWebinar:{title:"Thank you for registering",description:"Your registration for the Smartbooks webinar has been received. You'll receive a link to the webinar by email."},whitepapers:{title:"Whitepapers",description:"Download our whitepapers and discover how Smartbooks strengthens the finance function."},lpConsolidatie:{title:"Consolidation software for Dutch corporate groups",description:"Consolidation software for multi-entity corporate groups. Automatic intercompany elimination, currency conversion, and group reporting. Directly connected to Exact, Twinfield, AFAS, and more."},lpVirtueleController:{title:"Your AI controller, working 24/7",description:"An AI agent for finance teams: ask questions in natural language, get analyses in seconds, and produce board-ready presentations in one click. Schedule a demo of the Smartbooks AI controller."},lpFinance:{title:"Your finance department deserves better than Excel",description:"Reporting, consolidation, planning, month-end close, and analysis in one professional platform. Live in days, not months. Schedule a demo."}},MY={quote:"Smartbooks transformed our month-end close. What used to take three days with Excel, we now do in half a day, with more reliability and insight.",name:"Mark Bakker",role:"Business Controller · Tiqets"},FY={rapporteren:{hero:{headline:"Management reports that are always right, without the Excel stress",subtext:"Build reports and dashboards tailored to your organization. With drill-down to transaction and invoice level, so every figure can be traced back to the source."},promises:{eyebrow:"What you get",title:"What's in it for you",subtitle:"Reports that calculate the way you set them up, and figures that are correct without you having to double-check anything.",items:[{title:"Reports that adapt to you",text:"Build reports with your own structure, dimensions, and formulas. Adjust them as fast as your business changes, no rigid templates, no consultants required."},{title:"From group report to original invoice",text:"Drill down from consolidated report to entity, ledger, transaction, and the PDF underneath. Every number is always traceable to its source."},{title:"One source for all reports",text:"Financial figures, operational metrics, and dimensions, all in one system. No more scraping numbers together from separate sources, but automatically combined in Smartbooks."}]},painPoints:["Manually rebuilding the same reports every month in Excel","A single #REF! error that cascades through 12 tabs","The board asks for a new insight, and it costs you half a day","A colleague leaves and no one understands the Excel model"],solutionBlocks:[{title:"Your reports, always up to date",text:"Build your own reports and adjust them whenever you need to.",bullets:["Define your own reporting structure and adjust it at any time","Report by cost center, project or cost driver","Real-time sync 
13666with your accounting system, no exports or manual updates","Quickly add new reports and KPIs whenever you need them"]},{title:"Dashboards with financial and operational figures",text:"One dashboard with both financial and operational figures, so the management team reads a single picture instead of a stack of PDFs.",bullets:["KPI tiles with comparison (budget, prior year, prior period) and trendline","Operational metrics alongside financial figures, via input, formula or API","Multiple dashboards per audience: board, MT, operations"]},{title:"From report line to PDF invoice. In three clicks.",text:"A deviation in your numbers? Click through from report to ledger to the original invoice. All analysis inside Smartbooks, no need to go back to your accounting system.",bullets:["Drill-down from report to ledger, transaction and PDF","Quick view of all transactions to or from a specific customer over a period","Works at entity and consolidated level"]},{title:"Excel doesn't have to go. Just not as the source anymore.",text:"Standard processes run in Smartbooks, your ad-hoc work in Excel, with live data and no copy-paste.",bullets:["Live Smartbooks data directly in Excel","Always refreshable, never doubt whether your figures are current"]}],subSections:[{title:"Security & Roles",text:"Decide who sees what. With the role model (Viewer, Contributor, Admin) and restrictions per cost center and report, you maintain control over who can view which information."}],painPointsEyebrow:"Sound familiar?",painPointsTitle:"What financial controllers struggle with daily"},consolideren:{hero:{headline:"Consolidation done in hours, not days",subtext:"Consolidation from sub-consolidations to IC eliminations, all in one system. Always up to date, no manual matching or Excel workarounds."},promises:{eyebrow:"What you get",title:"One source of truth for the entire group",items:[{title:"Consolidation in minutes",text:"No more manual gathering, Smartbooks aggregates every entity automatically, always up to date."},{title:"Intercompany under control",text:"Automatic IC eliminations and a reconciliation tool that instantly shows where differences sit."},{title:"Scales with the group",text:"New entity, different accounting system or currency? Plug & play, no Excel rebuild."}]},painPoints:["Fragmented data: figures from different ERP and accounting systems that don't line up one-to-one","Error-prone intercompany eliminations: one missed internal transaction between parent and subsidiary and the group numbers are off","Currency conversions: FX differences for foreign entities make every close unnecessarily complex","Manual work in spreadsheets: gathering and checking data takes days and increases the risk of errors"],solutionBlocks:[{title:"Group figures in one click",text:"See group-level results without manual aggregation. Smartbooks automatically rolls up every entity in your consolidation structure, P&L, balance sheet, cashflow, always up to date, always consistent.",bullets:["Consolidated P&L, balance sheet and cashflow in one environment","Group-level dashboards with the KPIs you steer on","Always current, no monthly manual refresh","Drill down from a consolidated figure to the underlying entity and transaction"]},{title:"A structure that fits your group",text:"Got a holding with an operating arm and a real-estate arm? Or an international structure with multiple subgroups? Configure your consolidation structure with drag & drop and define ownership percentages per entity. Report at any level, main group, sub-consolidation or individual entity.",bullets:["Drag & drop consolidation structure, modeled exactly the way your group works","Ownership percentages per entity, including minority interests","Report at any level: main consolidation, sub-consolidation or entity","Adjust the structure as the group changes, no need to start from scratch"]},{title:"Intercompany, fully under control",text:"One missed IC entry derails your entire consolidation. Smartbooks automatically identifies intercompany transactions and eliminates them. Spot differences instantly with the reconciliation tool. And even if your source system doesn't book IC on separate accounts, Smartbooks splits it for you, without touching your bookkeeping.",bullets:["Automatic IC eliminations, consolidated figures only show external activity","IC reconciliation tool, see instantly which items between entities don't match, down to the transaction","Intercompany Relation Mapping, define per entity pair which debtor or creditor maps to which group entity","IC reclassification, split accounts in Smartbooks if your bookkeeping doesn't post IC separately"]},{title:"Foreign entities without the headache",text:"Have entities abroad? Smartbooks converts automatically: P&L at the average period rate, balance sheet at the closing rate. FX differences are reported separately, so you immediately see what's operational and what's currency-driven.",bullets:["Automatic currency conversion per entity","P&L at average period rate, balance sheet at closing rate","FX differences reported separately for full transparency"]},{title:"Report at group level, down to cost center",text:"Consolidation doesn't stop at profit and loss. Report at consolidated level per cost center, project or dimension, so the management team gets the same depth at group level as at entity level.",bullets:["Consolidated reporting per cost center, project or dimension","Same dimensions work across every entity","Drill down from a consolidated dimension to the underlying entity"]}],subSections:[],accountingStrip:{title:"Works with every accounting system in y
13666our group",subtitle:"Even when your entities sit in different accounting systems. Smartbooks consolidates across systems, no need to standardize first.",footnote:"Entities in different systems? No problem, Smartbooks consolidates them anyway."},painPointsEyebrow:"Sound familiar?",painPointsTitle:"Consolidation challenges that cost time and trust"},budgetterenCashflow:{hero:{headline:"From budget to cashflow forecast, in one system",subtext:"Business model-driven budgeting, forecasting, balance sheet planning, and cashflow projections. No more scattered Excel models that nobody understands."},promises:{eyebrow:"What you get",title:"One system for the entire planning chain",items:[{title:"Plan at any level",text:"From ledger account to driver-based model, you choose the level of detail per business area."},{title:"Plan the full financial reality",text:"P&L, balance sheet, loans, investments, all connected in one fully calculated model."},{title:"Long-term and operational",text:"From annual budget to week-to-week cash, strategic planning and weekly cashflow in one system."}]},painPoints:["The budget round takes 3 months and the result is an Excel nobody dares to modify","Adjusting a forecast means manually updating 4 tabs","The board asks 'what if we make that investment?' and you have no answer","You have a P&L budget but no idea what it means for your cash"],solutionBlocks:[{title:"Budgets, forecasts & scenarios",text:"Build annual budgets and forecasts at the level that fits the branch, ledger account or subtotal, hard input or formula-based. Maintain base case, optimistic, and pessimistic scenarios side-by-side and compare them directly against actuals in the same report.",bullets:["Input at ledger account or subtotal level, configurable per branch","Hard input or formula-based, your choice per line","Multiple scenarios side-by-side: base, optimistic, pessimistic","Compare directly against actuals in the same report, no exports"]},{title:"Business modules (driver-based planning)",text:"Build driver-based planning models per business area. Plan revenue as quantity × price per product group. Plan personnel costs with FTE, gross salary, social charges, and pension per team. Results roll automatically into the P&L, change a driver, watch the budget update.",bullets:["Revenue planning: quantity × price per product group or segment","Personnel planning: FTE, gross salary, social charges, and pension per team","Custom modules for other cost drivers (locations, contracts, marketing)","Results flow automatically into the P&L, no manual consolidation"]},{title:"Balance sheet planning, loans & investments",text:"Plan balance sheet items based on metrics (DSO, DPO, inventory days) and direct dependencies with P&L lines. Enter existing loans with their repayment and interest schedules, and add new financing. Plan investments and divestments with their depreciation. Everything writes back to the P&L and balance sheet, and an indirect cashflow forecast generates automatically from the whole picture.",bullets:["Balance sheet planning driven by DSO, DPO, and inventory days","Existing and new loans with repayment and interest schedules","Investments and divestments including depreciation","Indirect cashflow forecast generates automatically from P&L + balance sheet"]},{title:"13-week cashflow & aging analysis",text:"For week-to-week cash management, run a direct 13-week forecast built from your actual outstanding receivables and payables. Drill into the consolidated aging analysis to see debtor and creditor exposure at group level. Adjust expected payment dates, add recurring payments, pull in loans and investments, and see liquidity move in real time.",bullets:["Direct 13-week forecast from actual receivables and payables","Consolidated aging analysis at group level","Adjust expected payment dates and add recurring payments","Loans and investments automatically included in the cash position"]}],subSections:[],founderQuote:{quote:"Building a budget in Excel isn't planning, it's a snapshot that's outdated the moment you save it. Controllers deserve a system where budget, balance sheet, and cashflow are connected, and where scenarios actually recalculate.",author:"Jaap",role:"Founder, Smartbooks"},painPointsEyebrow:"Sound familiar?",painPointsTitle:"Planning & cashflow: where things go wrong"},close:{hero:{headline:"Close your month faster, with less stress and more control",subtext:"Templates, automated analyses, and controlled publication. Everything that makes a close time-consuming, automated."},promises:{eyebrow:"What you get",title:"From close to publication in one chain",items:[{title:"Structure in every close cycle",text:"Month, quarter, or year, one template, the same way of working every time. No surprises, no missed steps."},{title:"Collaboration at task level",text:"Everyone knows what to do, where we stand, and what has already been decided. Discussion and audit trail in the same place as the work."},{title:"From close to analysis to publication",text:"Close checklist, automatic variance analysis, and period publication in one continuous chain, no exports, no hand-overs."}]},painPoints:["The month-end close depends on who happens to be around and whether everyone remembers everything","Halfway through the close you discover a colleague hasn't done their part yet","Numbers go out the door before the close is formally locked, no lock, no check, no certainty","The close is done, but you have no time left to analyze what stands out"],solutionBlocks:[{title:"The close process itself",text:"Define your month-end, quarter-end, and year-end close once as a template, with tasks, deadlines, dependencies, and automations, and reuse it every period. Automations only fire after the tasks they depen
13666d on are completed, so the order is enforced without anyone having to police it.",bullets:["Templates for month, quarter, and year, set up once, reused every period","Tasks with deadlines and owners, no emails or verbal agreements","Dependencies between tasks, automations wait for predecessors","Works at both entity and consolidated level"]},{title:"Collaboration and documentation",text:"Per task you add work descriptions and documents to the template, so nobody has to figure out from scratch how things were supposed to be done. Discussions happen in the chat per task, and everything that happens, who, when, why, is automatically captured in the audit trail.",bullets:["Work descriptions and documents attached to each task in the template","Per-task chat, discuss with colleagues without email or Slack","Audit trail: who did what, when","Knowledge stays in the system, not with one person"]},{title:"Smart Story, automatic variance analysis",badge:"Powered by Alex",text:"The moment the books are ready, Smartbooks runs the analyses automatically and surfaces what stands out, instead of you having to go looking. Standard analyses run in parallel: Transaction, Budget, Trend, and Ratio. Only variances above your own thresholds reach your desk, with severity scoring so you know what to look at first. Per variance you choose: booking error, explain, or ignore, and the explanation stays on file for audit and for next month.",bullets:["Four analyses automatically: Transaction, Budget, Trend, and Ratio","Thresholds you set, no noise from immaterial variances","Severity scoring per variance for prioritization","Decision per variance captured for the audit trail"],footerLink:{label:"Smart Story is part of Alex, more about Alex",to:"/en/functionalities/virtual-controller"}},{title:"Entity, consolidation, and publication",text:"The close checklist works at both entity and consolidated level. A period can only be published once all tasks are completed. With Reporting Perio
13666d Management you preview the period before it goes live, so consolidation and reporting only ever run on fully controlled data. Only admins can publish.",bullets:["Close at entity and consolidated level","Reporting Period Management: preview before you publish","Publishing reserved for admins, controlled process","Reports always run on published, controlled data"]}],subSections:[],founderQuote:{quote:"A month-end close shouldn't be a project that gets improvised every time. With a fixed process, automatic variance analysis, and controlled publication, close finally becomes what it always should have been: a reliable cycle, not a sprint.",author:"Jaap",role:"Founder, Smartbooks"},painPointsEyebrow:"Sound familiar?",painPointsTitle:"Month-end close: a recurring bottleneck"},virtueleController:{hero:{eyebrow:"Alex, your AI controller",headline:"AI that understands your numbers, because the system underneath is solid",subtext:"Alex analyzes your financial data, explains variances, and prepares management reports — under your control."},promises:{eyebrow:"What you get",title:"Alex, your AI colleague, under control, on data that's correct",items:[{title:"Alex does finance work",text:"From ad-hoc questions to automatic variance analysis, tasks that normally land on a controller's desk."},{title:"On a reliable foundation",text:"Alex works only on the structured data in Smartbooks. No hallucinations on loose Excel files, no invented numbers."},{title:"Under your control",text:"You decide per entity whether AI is used, with what context, and in what direction. You turn Alex on for what helps you."}]},painPoints:[],solutionBlocks:[{title:"Ask Me Anything, your data in plain language",badge:"AI feature",text:'Ask questions the way you would ask a colleague, and get an answer instantly, 24/7. "How are we tracking YTD against budget?" "Which entity has the biggest deviation this quarter?" Alex finds the answer in your Smartbooks data and answers in plain language, with source attribution so you see exactly where the number comes from.',bullets:["Natural language questions on actuals, budget, forecast and history","Access to all entities and dimensions in Smartbooks","Source attribution per answer, you see where the number comes from","Available outside office hours, without emailing a colleague"]},{title:"P&L Assistant, analysis, commentary and board deck",badge:"AI feature",text:"Have Alex analyze your income statement, write commentary and generate a board deck, in your house style. Alex writes it in language your board understands and exports the analysis directly into a presentation in your branding. Ready for the management meeting, you only fine-tune where needed.",bullets:["Automatic variance analysis against budget and prior year","Commentary in business language, not AI-speak","Export to a board deck with your house style and reporting structure","Editable, Alex delivers the first version, you decide the final"]},{title:"Smart Story, variances are found, you decide what happens",badge:"AI feature · Coming soon",text:"As soon as bookkeeping is done, Alex runs the analyses automatically and presents variances with severity scoring. Standard analyses run in parallel: Transaction, Budget, Trend and Ratio. Only variances above your thresholds land on your desk, with severity, so you know where to look first. Per variance you choose: booking error, explain, or ignore. You no longer go looking for what stands out, it stands out by itself.",bullets:["Four analyses automatically: Transaction, Budget, Trend, Ratio","Thresholds you set, no noise from irrelevant differences","Severity scoring per variance for prioritization","Decision per variance recorded for audit trail"],footerLink:{label:"Smart Story runs automatically during your close, more about Smart Close",to:"/en/functionalities/close"}},{title:"Under your control, you decide what Alex does",badge:"Controlled AI",text:"AI you can't explain to your board, you don't deploy. That's why Alex is in controlled mode by default. Per entity you decide whether Alex is active. You give context about your organization so analyses are relevant, sector, reporting structure, specific KPIs. And with custom prompts you steer Alex toward analyses that fit your way of working.",bullets:["Per-entity on/off, Alex works only where you want","Your own context: sector, reporting structure, specific KPIs","Custom prompts for recurring analyses","Full audit trail, you see where each anal
13666ysis came from"]}],subSections:[{title:"Why Alex works where other AI fails",text:"ChatGPT and Copilot can be smart about general knowledge, but they don't know your numbers. Alex is different. He works on the structured data foundation of Smartbooks: unambiguous definitions, controlled processes, validated consolidation. No hallucinations on loose Excel files, but analyses on numbers you already trust."}],founderQuote:{quote:"AI only has value in finance if you can explain the outcome to your board. That's why we built Alex so you can always see where a number comes from and what the analysis did, not despite the control, but thanks to the control.",author:"Jaap",role:"Founder, Smartbooks"},painPointsEyebrow:"Sound familiar?",painPointsTitle:"Without a controller you hit these walls"}},RY={eyebrow:"Overview",title:"What we'll cover"},OY={hero:{eyebrow:"Projects",title:"AI integration in financial workflows and custom financial applications",subtitle:"Beyond our standard platform, we integrate AI into your existing finance workflows and build custom financial applications. Set up together, maintained together.",cta:"Book an intro call",secondaryCta:"Send a message"},consulting:{tag:"Consulting hours",title:"AI integration in financial workflows",description:"Our consultants integrate AI into your existing finance environment and workflows. From process analysis to go-live, on transparent consulting hours, with results you feel in your daily work.",bullets:["AI integration tailored to your processes, data model and workflows","Existing systems and workflows stay leading, AI plugs in seamlessly","Consultants with a finance background, not generic IT staffing","Delivered on consulting hours: transparent and controllable","Hand-over and documentation so your team can run with it"],cta:"Discuss AI integration"},custom:{tag:"Custom financial applications",title:"Custom-built financial applications",description:"For challenges just outside the standard platform we build custom financial applications. Our people help set them up and stay involved for maintenance, so they keep pace with your organisation.",bullets:["Designed and built with our finance and tech experts","Full guidance during setup, from idea to production","Ongoing maintenance and evolution by the same team","Seamless integration with Smartbooks and your existing stack"],cta:"Get in touch"},why:{eyebrow:"Why Smartbooks",title:"Why finance teams pick us for AI projects",subtitle:"We don't just build automation for you, we run on it ourselves every day. That shows up in speed, choices and maintenance.",items:[{title:"Time saved where it hurts",text:"We start with the tasks that return every month: pulling data, reconciling, reporting. Automating those first means your team spends noticeably fewer hours on repetitive work."},{title:"We already run on automated flows",text:"Our own finance and data processes run on automated flows and AI agents. So we don't advise theory, we bring patterns we've already proven in our own practice."},{title:"Finance experts, not generic IT",text:"Our consultants know consolidation, close and reporting from the inside. Less explaining, and the conversation is about your process from day one."},{title:"From pilot to production in weeks",text:"We work in short iterations with a working result each step. You see impact fast and decide per phase whether to push on or adjust."},{title:"It keeps working after go-live",text:"The team that builds it stays involved in maintenance and further development. Documentation and hand-over are part of the deal, so you're never dependent on one person."},{title:"One platform, not scattered tooling",text:"What we build connects to Smartbooks and to your existing accounting and ERP systems. No extra island you have to integrate later."}]},bottom:{title:"Ready to integrate AI into your workflows?",subtitle:"Tell us where you're stuck. We'll think along on the approach and show what's realistic in weeks, not months.",cta:"Book an intro call"}},_Y={eyebrow:"Consulting hours",title:"AI integration in your financial workflows",subtitle:"Our consultants integrate AI into your existing finance environment. From process analysis to go-live, on transparent consulting hours, with results you feel in your daily work.",blockTitle:"What to expect from us",blockDescription:"We work on consulting hours: transparent and controllable. Together we identify where AI adds the most value in y
13666our workflows and set it up step by step.",bullets:["AI integration tailored to your processes, data model and workflows","Existing systems and workflows stay leading, AI plugs in seamlessly","Consultants with a finance background, not generic IT staffing","Delivered on consulting hours: transparent and controllable","Hand-over and documentation so your team can run with it"],formTitle:"Leave your details",formSubtitle:"Fill in the form and we'll reach out within one business day to discuss your question.",backToProjects:"Back to Projects"},LY={title:"We use cookies",body:"We place functional cookies to make the site work. With your consent we also use analytics and marketing cookies to improve the site and make our communication more relevant.",policyLink:"Read our cookie policy",acceptAll:"Accept all",reject:"Essential only",settings:"Settings",saveSelection:"Save selection",alwaysOn:"Always on",formBlocked:{title:"Marketing cookies are disabled",body:"This form is provided by HubSpot and sets marketing cookies. Accept marketing cookies to load it.",cta:"Adjust cookie preferences"},categories:{functional:{title:"Functional",description:"Required for the website to work and to remember your cookie preference."},analytics:{title:"Statistics",description:"Google Analytics via Google Tag Manager, to measure website usage."},marketing:{title:"Marketing",description:"HubSpot and advertising cookies for forms, lead recognition and conversion tracking."}}},WY={seo:{title:"AI connectors via MCP: ChatGPT, Claude and Copilot",description:"Connect Claude, ChatGPT, Copilot or your own AI agent to Smartbooks securely via MCP. Ask about your numbers in plain language, with your own rights."},eyebrow:"New · Smartbooks MCP server",title:"Your financial numbers, in every AI your team already uses",subtitle:"Ask Claude, ChatGPT, Copilot or any other MCP-capable AI about your P&L, budget or receivables and get instant answers from your live Smartbooks data. No exports, no copy-paste, no spreadsheet hassle.",ctaPrimary:"Start a free pilot",ctaDocs:"Read the guide",worksWith:"Works with",tools:["Claude","ChatGPT","Microsoft Copilot","Any AI with MCP"],chat:{user:"Why did our gross margin drop in Q3?",tool:"Smartbooks · P&L Q3 vs budget",answer:"Gross margin fell mainly because of higher purchasing costs at two entities. These are the largest variances against budget:",rows:[["Purchasing costs","+8.2%"],["Revenue","−1.4%"],["Gross margin","−3.1 pp"]],note:"Example view"},benefitsHeading:"Stop exporting. Start asking.",benefits:[{title:"Answers in seconds",body:"No report building or Excel exports. Ask your question and the AI pulls the numbers live."},{title:"In your own environment",body:"Work in the AI tool your team already knows, next to your mail, documents and other tools."},{title:"One source of truth",body:"Every AI works on the same controlled Smartbooks data. No more loose versions."}],hubHeading:"One connection, every AI",hubBody:"The Smartbooks MCP server is the secure bridge between your AI tools and all your companies, including consolidation, budgets and forecasts.",hubCenter:"Smartbooks MCP",hubData:["All companies","Consolidation","Budget & forecast","Receivables & payables"],examplesHeading:"Questions you'll ask tomorrow",examples:["Show me the P&L for September compared to budget.","Which customers have overdue receivables?","Explain the biggest variance in operating expenses this quarter.","Write a short commentary on the monthly figures for the board."],securityHeading:"Secure by design",securityBody:"Your numbers are sensitive. That's why the connection is built securely from the ground up.",security:[{title:"Read-only",body:"The AI reads data. It posts no journal entries and never changes your source administration."},{title:"Your rights",body:"The AI only sees the companies you have access to."},{title:"Own login",body:"Every user connects with their own Smartbooks account."},{title:"Permission per tool",body:"You decide when the AI may use a Smartbooks tool."}],setupHeading:"How fast you're live",setup:[{title:"Claude",badge:"In a few minutes",body:"Add Smartbooks as a custom connector, sign in with your Smartbooks account and ask your first question."},{title:"Any other AI with MCP",badge:"Via the standard MCP connection",body:"ChatGPT, Microsoft Copilot, your own agents or workflow automation: any AI tool that supports MCP can call Smartbooks. Our team helps you set it up."}],choiceHeading:"Our AI, your AI, or both",choice:[{title:"Smartbooks AI controller",body:"Built into Smartbooks: analyses, commentary and answers with the underlying entr
13666ies behind every figure.",link:"More about the AI controller"},{title:"Your own AI tool",body:"Does your team already use Claude, ChatGPT, Copilot or another MCP-capable AI? Connect Smartbooks and use your figures where you already work."}],faqHeading:"Frequently asked questions",faq:[{q:"Which AI tools work with Smartbooks?",a:"Any AI tool that supports MCP (Model Context Protocol), such as Claude, ChatGPT, Microsoft Copilot or your own agents. You connect Claude yourself in a few minutes; for other tools our team helps with the setup."},{q:"Can the AI post entries or change data?",a:"No. The connection is read-only: no journal entries are posted and your source administration is not changed."},{q:"Does the AI see every company?",a:"No. The AI uses your login and only sees the companies you can access in Smartbooks."},{q:"What do I need to start with Claude?",a:"A Smartbooks account with access to at least one company and a Claude plan that supports custom connectors. On Claude Team or Enterprise, an admin adds the connector."}],ctaHeading:"Ask your own numbers your first question",ctaBody:"In the free pilot we connect your accounting and set up the AI connection for you."},VY={virtualControllerChat:UZ,nav:GZ,planDemo:$Z,onboardingMeeting:ZZ,hero:YZ,founders:QZ,socialProof:JZ,trustedBy:XZ,painPoints:eY,painPointsAlt:nY,aiControllerBlock:tY,steps:iY,features:rY,ctaBottom:aY,webinar:oY,liveWebinar:sY,footer:lY,teamStrip:dY,announcement:cY,integrations:uY,pricingCards:hY,pricing:gY,featureComparison:mY,testimonials:pY,about:fY,overOns:bY,overOnsHero:vY,contact:kY,missionVision:wY,cta:xY,benefits:yY,featuresHero:jY,roadmap:SY,knowledgeCenter:zY,customerStories:AY,articleCategories:CY,forWhom:EY,onboarding:NY,onboardingPage:IY,animatedStats:PY,featureCategories:TY,voorWie:DY,seo:BY,testimonialSection:MY,pages:FY,featureNav:RY,projecten:OY,consulting:_Y,cookieConsent:LY,aiConnectors:WY},KY={assistantName:"Alex, KI-Controller",statusOnline:"Online · antwortet sofort",placeholder:"Stellen Sie Alex eine Finance-Frage…",typing:"Alex tippt",turns:[{question:"Wie liegen wir YTD gegenüber Budget?",answer:"YTD-Umsatz liegt bei 4,82 Mio. € (+6,3 % vs. Budget). EBITDA bei 612 T€ (-2,1 % vs. Budget), starke Q2-Monate wurden durch höhere Personalkosten kompensiert."},{question:"Was ist die größte Abweichung in diesem Quartal?",answer:"Marketing liegt 84 T€ über Budget (+18 %), hauptsächlich wegen einer einmaligen Kampagne im Juni. Soll ich das nach Entität aufschlüsseln?"},{question:"Erstelle ein Board-Deck für das nächste Meeting",answer:"Ich erstelle ein 8-Slide-Deck mit GuV-Überblick, Top-3-Abweichungen, Liquiditätslage und Forecast. Fertig in ca. 30 Sekunden, in Ihrer Markenvorlage?"}]},qY={product:"Produkt",pricing:"Preise",projects:"Projekte",knowledgeCenter:"Wissenszentrum",aboutUs:"Über uns",customerStories:"Kundenreferenzen",planDemo:"Demo buchen",account:"Konto",knowledge:{viewAll:"Alle Inhalte anzeigen",onboardingMeeting:"Starten Sie Ihren kostenlosen Pilot",categories:{articles:{title:"Artikel",subtitle:"Ausführliche Beiträge"},videos:{title:"Videos",subtitle:"Demos & Erklärungen"},experiences:{title:"Kundenerfahrungen",subtitle:"Was Kunden sagen"},cases:{title:"Fallstudien",subtitle:"Ausführliche Fallstudien"}}},about:"Über uns",aiConnectors:"KI-Konnektoren (MCP)"},HY={seoTitle:"Book a demo",seoDescription:"Book a personal demo with Jaap van der Ende and see how Smartbooks helps your finance team move forward.",eyebrow:"Demo",title:"Sehen Sie Smartbooks live",subtitle:"Planen Sie eine 30-minütige Demo mit unserem Team.",playVideo:"Play intro video",videoCaption:"Co-Founder",bulletsHeading:"Book a demo and discover how you:",bullets:["Speed up month-end close","Automate consolidation","Professionalize finance processes","Deploy AI reliably in finance","Automatically prepare reports","Analyze figures faster"],calendar:{title:"Meet with Jaap van der Ende",subtitle:"Pick a time that works for you"},hostRole:"Co-Founder"},UY={eyebrow:"Kostenloser Pilot",title:"Starten Sie Ihren kostenlosen Pilot",subtitle:"In einem ersten Gespräch lernen wir uns kennen, binden gemeinsam Ihre Buchhaltung an und vereinbaren, was wir im Pilot einrichten. Anschließend arbeiten Sie einen Monat lang in Ihrer eigenen, vollständig eingerichteten Umgebung. Völlig unverbindlich.",trust:["Sie zahlen nichts","Kein Abonnement, keine Kündigungsfrist","Jederzeit beendbar"],bulletsHeading:"So starten wir",bullets:["Kennenlernen — wer wir sind und wo Ihr Finanzbereich heute steht","Die Anbindung gemeinsam durchgehen — wie Ihre Buchhaltung mit Smartbooks verbunden wird","Ihre eigenen Zahlen sehen — was direkt in Smartbooks erscheint, sobald die Anbindung aktiv ist","Die nächsten Schritte besprechen — was für Reporting, Konsolidierung oder Planung erforderlich ist"],calendar:{title:"Wählen Sie einen Termin für das Kennenlernen",subtitle:"Mit Robin van den Born",role:"Smartbooks",iframeTitle:"Starten Sie Ihren kostenlosen Pilot mit Robin van den Born",portraitAlt:"Porträt von Robin van den Born, Smartbooks"},footnote:{prefix:"Möchten Sie zuerst mehr über Smartbooks erfahren?",link:"Vereinbaren Sie gerne ein Kennenlerngespräch",suffix:", dann besprechen wir gemeinsam die Möglichkeiten."},benefitsHeading:"Was Ihnen der Pilot bringt",benefits:["Ihre eigenen Zahlen sofort live in Smartbooks","Eine vollständig auf Ihre Struktur eingerichtete Umgebung: Reporting, Konsolidierung und Budgets","Mindestens einen echten Monatsabschluss in Smartbooks, damit Sie das Ergebnis anhand Ihrer eigenen Zahlen sehen","Ein funktionierendes System beurteilen statt einer Demo","Keine Kosten, kein Abonnement und keine Kündigungsfrist: Wenn es nicht passt, endet es dort"],cta:"Starten Sie Ihren kostenlosen Pilot"},GY={trustBadge:"Vertraut von Finance-Teams",title1:"Konsolidierung und Monatsabschluss.",title2:"Ohne Excel.",subtitle:"Das System für Financial und Business Controller. Professionalisieren Sie Finance mit dem kontrollierten Einsatz von KI.",featureList:["Reporting","Konsolidierung","Planung & Cashflow","Monatsabschluss","KI-Controller"],cta:"Demo buchen",ctaSecondary:"Zur Produkttour",ctaWebinar:"Für das Webinar anmelden",trialReassurance:"Kostenlos testen, keine Kreditkarte erforderlich",bookWithMichel:"Termin mit Michel buchen",tabs:{reporting:"Reporting",consolidation:"Konsolidierung",budgetterenCashflow:"Planung & Cashflow",virtualController:"KI-Controller"},tabAlts:{reporting:"Smartbooks, Finanzberichte und Dashboards",consolidation:"Smartbooks, konsolidierte GuV über mehrere Einheiten",budgetterenCashflow:"Smartbooks, Budgetierung, Planung und Cashflow-Prognose",virtualController:"Smartbooks, KI-Controller für Finanzteams"}},$Y={eyebrow:"Das Team",title:"Gebaut von Menschen, die Finance wirklich kennen",subtitle:"Smartbooks wird von einem Team mit jahrzehntelanger Erfahrung in EPM, Controlling und SaaS entwickelt. Kein gesichtsloses Tool – Sie arbeiten mit Menschen, die das Handwerk verstehe
13666n.",cta:"Das gesamte Team kennenlernen"},ZY={clients:"Unternehmen vertrauen Smartbooks",daysBack:"Weniger Zeit für das Reporting",live:"Live-Reports innerhalb eines Tages",uptime:"Für Konsolidierung, Reporting, Planung & Cashflow"},YY={title:"Vertraut von Finance-Teams",titleCompact:"Vertraut von Finance-Teams"},QY={eyebrow:"Das Problem",title:"Finance läuft immer noch auf",titleHighlight:"Excel und Handarbeit",subtitle:"Es funktioniert, bis es nicht mehr funktioniert. Diese Herausforderungen bremsen Ihr Team aus und blockieren die weitere Professionalisierung.",items:{spreadsheets:{title:"Fragmentierte Excel-Modelle",description:"Die Konsolidierung mehrerer Einheiten basiert auf komplexen, historisch gewachsenen Spreadsheets, die sonst niemand versteht."},manualWork:{title:"Jede Ad-hoc-Frage kostet einen halben Tag",description:"Eine einfache Frage aus dem Management bedeutet einen Export, eine Pivot-Tabelle und einen halben Tag Arbeit – bevor die eigentliche Analyse überhaupt beginnt."},errors:{title:"Fehler werden zu spät entdeckt",description:"Manuelle Eingaben und Verknüpfungen zwischen Dateien führen zu Fehlern, die erst in Board-Präsentationen auffallen."},knowledge:{title:"Wissen steckt in den Köpfen einzelner",description:"Fällt eine Person aus, steht der Prozess still. Die Komplexität ist fragil und nicht übertragbar."}}},JY={eyebrow:"Das Problem",title:"Kennen Sie das als",titleHighlight:"Finance-Professional",items:["Manuelle Excel-Reports kosten jede Woche Stunden","Formelfehler führen zu unzuverlässigen Zahlen","Die Konsolidierung mehrerer Einheiten ist ein Albtraum","Kein Echtzeit-Einblick in die finanzielle Performance","Versionskontrolle von Spreadsheets ist unmöglich","Budgetierung und Forecasting kosten zu viel Zeit","Das Management erhält Reports zu spät","Audit-Trails fehlen vollständig"]},XY={eyebrow:"ALEX, IHR KI-CONTROLLER",title:"KI ist nur so zuverlässig wie die Daten darunter.",subtitle:"Deshalb bauen wir zuerst das Fundament: eine kontrollierte, konsolidierte Version Ihrer Zahlen über alle Einheiten hinweg. Alex arbeitet ausschließlich darauf – mit Quellenangabe zu jeder Antwort.",alexCardTitle:"Alex, KI-Controller",capabilities:[{title:"Prüft",description:"IC-Differenzen und ihre Ursachen"},{title:"Analysiert",description:"Abweichungen bis auf Transaktionsebene"},{title:"Erstellt",description:"Board-Präsentationen auf Anfrage"},{title:"Plant",description:"Forecasts & Szenarien zur Freigabe"},{title:"Sparringspartner",description:"Ad-hoc-Fragen, sofortige belegte Antworten"}],contextLabel:"verlässlicher Kontext für KI",fundamentTitle:"Smartbooks: das Fundament",fundamentPillars:[{title:"Konsolidierung",description:"Automatisierte IC-Eliminierungen & Währungsumrechnung"},{title:"Monatsabschluss",description:"Automatisierte Checklisten & Kontrollen"},{title:"Reporting",description:"Automatisierte, standardisierte Reporting-Struktur"},{title:"Budget & Cashflow",description:"Automatisiertes Budget, Forecast & Cash"}],fundamentFootnote:"Alles im Fundament automatisiert. Alex führt darauf die Analyse durch – mit Quellenangabe.",dataSources:{accounting:"BUCHHALTUNG & ERP",accountingDesc:"Exact · Twinfield · AFAS · Odoo · und viele mehr",operational:"OPERATIVE DATEN",operationalDesc:"CRM · HR · Projekte · Stunden · und weitere verfügbar"},valueProps:{truth:{title:"Eine Version der Wahrheit",description:"Keine losen Exporte. Alle Einheiten konsolidiert in einem System."},auditable:{title:"Immer prüfbar",description:"Jede Berechnung und jede Antwort ist bis zur Quelle nachvollziehbar. Nachprüfbar für Buchhalter und Auditor."},control:{title:"Sie behalten die Kontrolle",description:"KI ist aus, bis Sie sie einschalten – pro Mandant. Sie beurteilen und entscheiden."}},ctaPrimary:"Sehen Sie Alex an Ihren Zahlen arbeiten",ctaSecondary:"Oder lesen Sie, wie der KI-Controller funktioniert"},eQ={eyebrow:"So funktioniert es",title:"In Tagen live, ab Tag eins Mehrwert.",subtitle:"Vergessen Sie monatelange Implementierungen. Technisch sind Sie innerhalb von zwei Tagen einsatzbereit. Danach arbeiten wir Seite an Seite mit Ihrem Team – Onboarding, Feintuning des Setups und Identifikation der größten Zeitersparnisse in Abschluss, Reporting und Tagesgeschäft.",trialBadge:{label:"Kostenloser Testmonat",title:"Testen Sie Smartbooks einen Monat kostenlos – inklusive vollständiger Implementierung.",description:"Während Ihres kostenlosen Testmonats konfigurieren wir Smartbooks vollständig auf Ihre Buchhaltung, Struktur und Reports. Sie sehen nicht nur eine Demo, sondern arbeiten ab Tag eins in Ihrer eigenen Live-Umgebung. Kein separates Implementierungsprojekt, keine Überraschungen später."},step1:{label:"Tag 1–2",title:"Anbindung und Einrichtung",description:"Ihre Buchhaltung ist live in Smartbooks. Reporting-, Konsolidierungs- und Planungsstrukturen werden auf Ihr Hauptbuch konfiguriert. Wir übernehmen die Arbeit, Sie sehen Ihre eigenen Zahlen sofort im System."},step2:{label:"Woche 1–2",title:"Schulung",description:"Gemeinsam mit Ihrem Team durchlaufen wir die Kernprozesse: Abschluss, Konsolidierung, Reporting. Jeder lernt, was für seine Rolle relevant ist. Kein generisches Handbuch, sondern Schulung an Ihrem Setup."},step3:{label:"Ab Woche 2",title:"Feintuning",description:"Smartbooks läuft, Ihr Team arbeitet damit. Jetzt tunen wir gemeinsam nach: Standard-Reports schärfen, zusätzliche Dimensionen ergänzen, Checklisten ausrichten. Ihr Rhythmus gibt das Tempo vor."},flexNote:"Den genauen Zeitplan stimmen wir auf Ihre Verfügbarkeit ab. Manche Kunden bevorzugen eine intensive Woche, andere verteilen die Schulung über einen Monat.",trialCta:"Kostenlosen Testmonat starten",trialCtaSub:"Keine Verpflichtungen, keine Kosten. Nicht zufrieden? Keine Rechnung.",quotes:[{quote:"Machen Sie aus der Implementierung kein großes Projekt, denn es geht wirklich schnell. Im kostenlosen Testmonat ist das gesamte Setup bereits vollständig und einsatzbereit.",author:"Karel van den Bos",role:"CFO, Intermax"},{quote:"In meinen über 30 Jahren Erfahrung habe ich mit vielen Tools gearbeitet, aber Smartbooks ist mit Abstand am einfachsten und schnellsten zu implementieren.",author:"Marcel Steenbrink",role:"CFO, Primus Wafer Paper"}]},nQ={eyebrow:"Funktionen",title:"Alles, was Finance braucht",subtitle:"Eine Plattform für Konsolidierung, Planung, Reporting und KI-Analyse.",consolidation:{title:"Konsolidierung",description:"Automatische Konsolidierung über alle Ihre Einheiten. Intercompany-Eliminierungen, Währungsumrechnung und mehrstufige Strukturen."},planning:{title:"Planung & Forecasting",description:"Budgetierung und rollierende Forecasts, direkt verknüpft mit Ihren Ist-Zahlen. Szenario-Analysen in Sekunden."},reporting:{title:"Reporting",description:"Professionelle Management-Reports und Board-Präsentationen. Immer aktuell, immer konsistent."},cashPlanning:{title:"Cash-Planung",description:"Echtzeit-Liquiditätsprognosen und Cashflow-Analysen. Behalten Sie Ihre finanzielle Position immer im Blick."},ai:{title:"KI Business Controller",description:"Stellen Sie Alex, Ihrem KI-Assistenten, Fragen. Von Abweichungsanalyse bis Ad-hoc-Report, in natürlicher Sprache."},viewAll:"Alle Funktionen ansehen"},tQ={eyebrow:"Bereit loszulegen?",title:"Bereit, Finance zu professionalisieren?",subtitle:"Erleben Sie in Ihrer eigenen Finance-Umgebung, wie Smartbooks die Bu
13666siness-Steuerung professionalisiert und das Fundament für verlässliche KI legt.",cta:"Demo buchen",ctaTrial:"Testmonat starten",trialReassurance:"Keine Kreditkarte, keine Verpflichtungen. Wir richten Smartbooks vollständig auf Ihre Buchhaltung ein. Passt es nicht, hören wir auf – keine Rechnung.",onboardingMeeting:{prefix:"Möchten Sie sich erst unverbindlich kennenlernen?",link:"Starten Sie Ihren kostenlosen Pilot"},ctaWebinar:"Für das Webinar anmelden",noObligations:"Ohne Verpflichtungen",liveIn14Days:"In 1 Tag live",personalGuidance:"Persönliche Begleitung"},iQ={seoTitle:"Webinar: Smart reporting, consolidation & budgeting with AI",seoDescription:"Watch the Smartbooks webinar and learn in 25 minutes how to increase financial discipline and save time with smart reporting, consolidation and AI.",eyebrow:"On-demand webinar",title:"Webinar: Smart Reporting, Consolidation & Budgeting with AI",subtitle:"Learn how to increase the financial discipline in your business while saving significant time.",heroCta:"Yes, count me in",hostRole:"Co-Founder",bulletsHeading:"After this 25-minute webinar:",bullets:["You'll have new ideas on how to grow financial discipline","You'll know if Smartbooks is an interesting solution for you","You'll understand how to save 80% of time on reporting and consolidation"],benefitsHeading:"Get more peace of mind, overview and insight with better reporting, planning and consolidation",benefits:[{title:"Save time",description:"Up to 80% less work on reporting, consolidation and analysis."},{title:"More financial discipline",description:"Reliable numbers and consistent processes across your entire organization."},{title:"Faster insight",description:"Real-time numbers and clear dashboards exactly when you need them."}],form:{eyebrow:"Sign up for the webinar:",title:"AI in Finance: from Promise to Result",successTitle:"Thanks for signing up!",successBody:"You'll receive an email with the webinar link within a few minutes."}},rQ={seoTitle:"Live-Webinar: KI im Finance wirksam einsetzen",seoDescription:"Melden Sie sich für das Live-Webinar an und sehen Sie, wie Sie KI beim Konsolidieren, Analysieren und Berichten wirklich wirksam einsetzen. Praktische Erkenntnisse, kein Produkt-Pitch. Wählen Sie direkt Datum und Uhrzeit.",eyebrow:"Kostenlos · online",title:"Live-Webinar: KI im Finance wirksam einsetzen",subtitle:"In diesem Live-Webinar zeigt Jaap, wie Sie KI beim Konsolidieren, Analysieren und Berichten wirklich wirksam einsetzen. Wählen Sie unten Datum und Uhrzeit.",meta:{date:"Datum und Uhrzeit selbst wählen",audience:"Für Controller und CFOs"},host:{name:"Jaap van der Ende",role:"Co-Founder & Director Growth & Strategy",intro:"Gastgeber dieses Webinars",bio:"Mit langjähriger Erfahrung in Management- und Strategieberatung, als Serienunternehmer und jemand, der selbst täglich mit KI arbeitet, zeigt Jaap, wie Finance-Teams KI in der Praxis wirklich wirksam einsetzen. Keine Theorie, sondern direkt anwendbare Ansätze."},privacyPrefix:"Ihre Daten werden gemäß unserer",privacyLink:"Datenschutzerklärung",privacySuffix:" verarbeitet.",ondemand:{title:"Lieber direkt loslegen?",description:"Sie möchten nicht auf eine Live-Session warten? Buchen Sie eine persönliche Demo und sehen Sie selbst, wie KI Ihre Finance-Arbeit smarter macht.",button:"Demo buchen"}},aQ={tagline:"Berichten, planen und konsolidieren mit KI.",product:"Produkt",features:"Funktionen",pricing:"Preise",integrations:"Integrationen",company:"Unternehmen",aboutUs:"Über uns",knowledgeCenter:"Wissenszentrum",contact:"Kontakt",copyright:"Alle Rechte vorbehalten.",privacy:"Datenschutz",terms:"AGB",privacyPolicy:"Datenschutzerklärung",cookiePolicy:"Cookie-Richtlinie",termsConditions:"AGB",isaeCertified:"ISAE 3402 Typ II<br />zertifiziert",whatsNew:"Neuigkeiten",allIntegrations:"Alle Integrationen",googleReviews:"Bewertet auf Google",resources:"Ressourcen",legal:"Rechtliches",address:"Haarlemmerweg 331A, 1051LH Amsterdam"},oQ={alt:"Die Gründer von Smartbooks",eyebrow:"Über uns",title:"Gebaut von Menschen, die Finance wirklich kennen",body:"Smartbooks wurde von einem Team mit jahrzehntelanger Erfahrung in EPM, Controlling und SaaS gegründet. Kein gesichtsloses Tool. Sie arbeiten mit Menschen, die das Handwerk beherrschen und bewährte Produkte für Konzerne wie A
13666kzo Nobel, Philips, KPN und KLM gebaut haben.",cta:"Team kennenlernen"},sQ={text:"Neu: KI-Controller für Ihr Finance-Team",cta:"Jetzt anmelden"},lQ={eyebrow:"Integrationen",title:"Verbinden Sie Ihre Systeme",titleHighlight:"in Minuten",subtitle:"Smartbooks integriert sich nahtlos in Ihren bestehenden Buchhaltungs-, ERP- und BI-Stack. Kein IT-Projekt, keine Migration – einfach Plug-and-play mit den Tools, die Sie bereits nutzen.",footnote:"Fehlt eine Integration? Fast jede Anbindung ist über unsere API und Integrationsplattformen möglich.",badges:{plugAndPlay:"Plug-and-play-Einrichtung",fastSetup:"Live in Tagen, nicht Monaten",secure:"Sicher & DSGVO-konform"},groups:{accounting:"Buchhaltung & ERP",dataBi:"Data & BI",automation:"Automatisierung & API",systems:"Systeme & Automatisierung",extra:"Und über 300 weitere Anbindungen"},extra:{label:"Weitere Anbindungen",description:"Für BI-Tools und Automatisierungsplattformen nutzen wir offene APIs und fertige Konnektoren."},compact:"Direkte Anbindung an Exact Online, Exact Globe, Twinfield, AFAS und Odoo.",moreComingSoon:"Weitere Integrationen folgen in Kürze"},dQ={valueProp:{title:"Ein System, kein sechsmonatiges Implementierungsprojekt",body:"Smartbooks ist für Finance-Teams mit 2 bis 20 Einheiten gebaut, die aus Excel herausgewachsen sind, aber kein schweres Enterprise-Projekt starten möchten. Sie verbinden Ihr Buchhaltungssystem und starten über 2-3 Wochen mit 4-6 einstündigen Trainingssessions durch einen professionellen Trainer.",stats:{connect:{value:"10 Minuten",label:"bis Ihre Buchhaltung angebunden ist"},live:{value:"4-6 Sessions",label:"à eine Stunde mit einem professionellen Trainer"},effort:{value:"5-6 Stunden",label:"Gesamtaufwand durch Ihr Team"}}},onboardingMeeting:{prefix:"Noch unsicher, welches Paket passt oder wie die Anbindung funktioniert?",link:"Starten Sie Ihren kostenlosen Pilot"}},cQ={eyebrow:"Price indication",title:"Calculate your",titleHighlight:"price indication",titleEnd:"",subtitle:"Enter your number of entities and instantly see an indication of what Smartbooks costs for your group. Final price after a short intake.",configuratorTitle:"Build your configuration",configuratorSubtitle:"Pick your plan and the number of entities.",holdings:"Holdings",perMonth:"/month each",subsidiaries:"Subsidiaries",platformFee:"Platform fee",platformFeeFixed:"fest pro Monat",monthlyTotal:"Indicative monthly price",monthlySuffix:"/month",breakdownTitle:"Monthly price breakdown",oneTimeBlockTitle:"One-time at start",annualCosts:"Annual cost (× 12)",oneTimeImplementation:"One-time onboarding",implementationTooltip:"Personal onboarding by someone from our team: setup, training and guidance until your team runs Smartbooks independently. No mandatory ongoing consulting.",totalFirstYear:"Indicative total year 1",moreThanEntities:"More than {{max}} entities?",contactForQuote:"Contact Smartbooks for a custom quote.",contactUs:"Contact us",startTrial:"Contact us or book a demo",users:"users",plans:{professional:{name:"Finance Professional",desc:"Comprehensive automated reporting for smaller organizations"},leader:{name:"Finance Leader",desc:"Advanced reporting, planning, and consolidation"}},planFeatures:{professional:["Financial results in P&L and Balance Sheet","Automatic Cash Flow","Dynamic reports","Period-over-period comparison","Month-end close workflow"],leader:["Everything in Professional, plus:","Consolidation & IC eliminations","Budgeting & Forecasting","Custom dashboards","AI-driven insights","Power BI synchronization"]}},uQ={title:"Compare",titleHighlight:"all features",subtitle:"Alle Funktionen pro Paket, mit Erläuterungen, wo sie hilfreich sind.",professional:"Professional",leader:"Leader",enterprise:"Enterprise",onRequest:"Price on request",annualBilling:"Prices are based on annual billing",aiOfferNote:"* KI-Funktionen sind bis {{date}} in jedem Paket kostenlos nutzbar. Danach können andere Bedingungen gelten; sie sind nicht automatisch im Paketpreis enthalten.",implementationNote:"† Weitere Informationen finden Sie im Implementierungsplan.",showDifferencesOnly:"Nur Unterschiede anzeigen",groups:{costDetails:"Cost Details",ai:"KI",monthEndClose
13666:"Month-End Close Acceleration",reportingConsolidation:"Automatisiertes Reporting & Konsolidierung",planning:"Business Model-Driven Planning"},rows:{baseFee:"Fixed base subscription fee per month",perSubsidiary:"Per subsidiary per month",perHolding:"Per holding per month",fixedImplementation:"Feste einmalige Implementierungsgebühr†",variableImplementation:"Variable einmalige Implementierungsgebühr†",operationalData:"Extension with operational data",costCenters:"Cost centers/drivers and/or large data volumes",aiController:"AI Controller*",aiCommentary:"Automatischer Management-Kommentar*",aiBreakdowns:"Zahlen mit KI aufschlüsseln*",mcpServer:"MCP-Server für Ihren KI-Assistenten*",monthCloseWorkflow:"Workflow for month-end close approval",textAnnotations:"Text annotations on financials",aiErrorDetection:"AI-powered booking error detection",drilldown:"Drill down to journal entries and invoices",plResults:"Financial results in P&L and Balance Sheet",autoCashflow:"Automatic Cash Flow",dynamicReports:"User-friendly dynamic reports",periodComparison:"Period-over-period comparison",customDashboards:"Individuelle Dashboards mit eigenen, auch nichtfinanziellen KPIs",mgmtReportBook:"Management report book",powerBiSync:"Power BI synchronization",costCenterAnalysis:"Analysis by cost center, driver, or project",budgetForecast:"Modellierung von Budget und Forecast einschließlich automatischer Jahresendprognose",businessModelTemplates:"Business model templates, custom dimensions and KPIs",varianceAnalysis:"Ist-Werte gegenüber Budget und Forecast mit automatischer Abweichungsanalyse",cashflowForecast13w:"13-week detailed cash flow forecast",multiYearPlanning:"Multi-year planning",subConsolidation:"Einstufige Konsolidierung und Teilkonsolidierung über mehrere Ebenen",budgetConsolidation:"Budget 
13666consolidation",costCenterConsolidation:"Cost center consolidation",multiCurrency:"Multi-currency consolidation",uploadWithoutApi:"Upload administrations without API",oneTimeMonthly:"1 × monthly fee",twoTimeMonthly:"2 × monthly fee",notApplicable:"N/A",onRequest:"Price on request",upTo3Years:"Up to 3 years",upTo5Years:"Up to 5 years"}},hQ={eyebrow:"Clients",title:"What our clients",titleHighlight:"say"},gQ={title:"Our",titleHighlight:"team",subtitle:"Decades of experience in finance, technology, and strategy.",founderRoles:{katja:"HR, Legal & Finance"}},mQ={tabs:{team:"Our team",contact:"Contact"}},pQ={eyebrow:"About Smartbooks",title:"We're building the finance tool we always wished we had.",subtitle:"A team with decades of experience in EPM and controlling, on a mission to bring enterprise finance within reach of mid-market companies."},fQ={seo:{title:"Contact",description:"Get in touch with Smartbooks. Call, email or send us a message through the contact form."},heroTitle:"Get in touch",heroSubtitle:"We'd love to hear from you. Send us a message or give us a call.",address:{title:"Address"},email:{title:"Email"},phone:{title:"Phone"},helpdesk:{title:"Email helpdesk",description:"Our Customer Success team is ready to support you during onboarding, to answer questions while you use the product and to share Best Practices whenever helpful."},form:{title:"Contact form",subtitle:"Fields marked with * are required."}},bQ={title:"What we",titleHighlight:"stand for",mission:{title:"Our Mission",subtitle:"Enterprise-grade financial software, built for SMBs.",description:"We make enterprise-level financial reporting, planning, and consolidation accessible for SMBs. The same power that multinationals use, now available for companies with a smaller team and less budget, without complexity, without specialists, without weeks of implementation."},vision:{title:"Our Vision",subtitle:"The financial data infrastructure that AI and controllers trust.",description:"Smartbooks becomes the financial data infrastructure for the AI era. We believe the future of finance isn't about manually building reports, but about trusting reliable data. Smartbooks delivers the trust layer between your accounting and your decisions, today for controllers, tomorrow for AI."},whySmartbooks:{title:"Why Smartbooks",description:"Enterprise logic, built for SMBs. Our founders have 65+ years of combined experience in EPM, finance consulting, and tech scale-ups. Smartbooks is the third generation EPM, ready for the AI era."}},vQ={sectionEyebrow:"Discover more",sectionTitle:"See Smartbooks in action",whitepaper:{eyebrow:"In-depth reading",title:"Free Whitepaper",description:"Discover in our whitepaper how AI is transforming the financial sector and how your organization can benefit.",button:"Download whitepaper"},webinar:{title:"See Smartbooks live in action",description:"In our live webinar we walk you step-by-step through consolidating, analysing and reporting with AI — with room for your questions.",recommended:"Recommended",duration:"Live session · pick your own time",bullets:["Demo in a real multi-entity environment","How to shorten your monthly close by days","Real-world examples from finance teams like yours"],button:"Watch the live webinar",microcopy:"Pick a date and time right away",hostedBy:"Presented by",hostRole:"Managing Director",posterLabel:"Smartbooks Webinar · With Michel van Wijngaarden"},dialog:{title:"Download Whitepaper",description:"Fill in your details to receive the whitepaper."},title:"Bereit für schnellere, klarere Finanzberichte?",subtitle:"Planen Sie eine Demo und sehen Sie Smartbooks live in Aktion.",primary:"Demo buchen",secondary:"Kontakt aufnehmen"},kQ={eyebrow:"Unsere Capabilities",title:"Drei Kernbereiche,",titleLine2:"eine",titleHighlight:"Plattform",consolidation:{title:"Konsolidierung & Reporting",description:"Multi-Entity-Konsolidierung mit automatischen Intercompany-Eliminierungen und Währungsumrechnung. Berichte, die sich Ihrer Struktur anpassen — mit Drill-down bis zur Originaltransaktion."},planning:{title:"Planung & Abweichungsanalyse",description:"Budgets, Forecasts und Szenarien direkt neben Ihren Ist-Zahlen. Sie erkennen Abweichungen sofort inklusive Begründung und steuern gegen, bevor das Management fragt."},close:{title:"Unterstützung beim Periodenabschluss",description:"Gemeinsame Checkliste, klare Verantwortlichkeiten und Echtzeit-Status Ihres Monatsabschlusses. Jeder weiß, was zu tun ist — und wo es klemmt."}},wQ={eyebrow:"Funktionen",title:"Alles, was",titleHighlight:"Smartbooks",titleEnd:"kann",subtitle:"Von Reporting über Konsolidierung bis Budgetierung und Cashflow-Forecasting. Eine Plattform für alle Ihre Finanzprozesse."},xQ={eyebrow:"Roadmap",title:"Our",titleHighlight:"product roadmap",subtitle:"From smart AI features in the short term to a fully automated financial platform.",inDevelopment:"In development",planned:"Planned",tba:"To be announced",longTerm:"Long-term vision",comingSoon:"Coming soon, stay tuned!",items:{mcpServer:{title:"MCP Server",desc:"Talk to your numbers. Ask questions in natural language and get instant answers from your financial data."}
13666,odoo:{title:"Odoo Connection",desc:"Connect Odoo as a source system and automatically import your financial data into Smartbooks."},smartClose:{title:"Smart Close",desc:"Automatic variance analyses that flag deviations and accelerate your month-end close."},drilldown:{title:"Consolidated Drilldown",desc:"Drill down to individual transactions from consolidated reports for complete transparency."},visualUpgrade:{title:"Visual Upgrade",desc:"Redesigned charts, dashboards, and reporting visuals for even sharper financial insights."},multipleScenarios:{title:"Multiple Scenarios",desc:"Work with multiple budget and forecast scenarios and compare them side by side."},smartSlides:{title:"Smart Slides",desc:"Automatically generate presentations and slide decks from your Smartbooks reports."},aiAdvisor:{title:"AI Financial Advisor",desc:"Proactive AI-driven insights and recommendations based on your historical data and trends."},workflowAutomation:{title:"Workflow Automation",desc:"Automate repetitive financial processes with smart triggers and actions."}}},yQ={title:"Wissenszentrum",subtitle:"Praxisnahe Artikel, Videos und Kundenreferenzen zu Konsolidierung, Reporting, Planung und KI für Finance-Profis.",searchPlaceholder:"Artikel suchen…",noResults:"Keine Artikel gefunden.",readMore:"Weiterlesen",all:"Alle",tagsTitle:"Nach Thema filtern",tagsClear:"Filter zurücksetzen",tagsEmpty:"Keine Tags verfügbar",activeTagsLabel:"Aktive Themen:",leadMagnet:{cta:"Whitepaper herunterladen"}},jQ={seoTitle:"Kundenreferenzen",seoDescription:"Erfahren Sie, wie Finance-Teams bei Anove, ACE, Glomar, LifeWatcher, Primus, Risketeers und Tjojs mit Smartbooks arbeiten.",eyebrow:"Kundenreferenzen",title:"Was Kunden über Smartbooks sagen",subtitle:"Echte Erfahrungsberichte und detaillierte Fallstudien von Finance-Teams, die Reporting, Konsolidierung und Planung mit Smartbooks professionalisiert haben.",all:"Alle",noResults:"Noch keine Referenzen verfügbar.",tabs:{caseStudies:"Fallstudien",customerStories:"Kundenberichte"}},SQ={articles:"Artikel",videos:"Videos",caseStudies:"Fallstudien",customerStories:"Kundenberichte"},zQ={title:"For",titleHighlight:"whom",subtitle:"Smartbooks is built for everyone involved in financial management and accountability.",whySmartbooks:"Why Smartbooks"},AQ={eyebrow:"How it works",title:"Get started in",titleHighlight:"3 steps",titleEnd:"",step1:{title:"Sign-up",desc:"Create an account and choose the package that fits your organization."},step2:{title:"Set-up",desc:"Connect your accounting software and configure your reports in minutes."},step3:{title:"Speed-up",desc:"Start immediately with automated reports and AI-driven insights."}},CQ={eyebrow:"Onboarding",title:"Technically live within two days",intro:"Forget multi-month implementations. Someone from our team guides you step by step: setting up integrations, configuring reports, and training your team until they run Smartbooks independently.",ctaPrimary:"Plan a demo",ctaSecondary:"Go to knowledge center",timelineTitle:"Realistic timeline",timelineDesc:"Day 1–2: technical integrations and first reports. Week 1–4: configuration of consolidation, budget, and cashflow. From week 5: optimization and training.",supportTitle:"Personal guidance",supportDesc:"No ticket system or ongoing consulting contract. One dedicated point of contact from our team until your team fully owns Smartbooks."},EQ={eyebrow:"Our impact",title:"Numbers that speak for",titleHighlight:"themselves",companies:"Companies",timeSaved:"Time saved",fasterReporting:"Faster reporting",financeProfessionals:"Finance professionals"},NQ={pillars:{reporting:"Reporting",consolidation:"Konsolidierung",budgetterenCashflow:"Planung & Cashflow",close:"Monatsabschluss",virtualController:"KI-Controller"},pillarDescriptions:{reporting:"Schnelle, verlässliche Reports mit Echtzeit-Updates. Individuelles Datenmodell, Rechteverwaltung und Dashboards mit Visualisierungen, KPI-Kacheln und Tabellen.",consolidation:"Vollständige Konsolidierung mit Teilkonsolidierungen, IC-Eliminierungen, Währungsumrechnung und Abstimmung – immer aktuell.",budgetterenCashflow:"Budgets, Forecasts, Szenarien, Darlehen, Investitionen und eine direkte 13-Wochen-Cashplanung in einem System.",close:"Strukturierte Checklisten für Monats-, Quartals- und Jahresabschluss mit Automatisierungen, Abhängigkeiten und Audit-Trail.",virtualController:"Ihr KI-Controller für Finanzteams. 24/7 verfügbar für Ad-hoc-Fragen, Analysen, Präsentationen und spezialisierten Finanz-Support."},pillarFeatures:{reporting:["Berichte schnell erstellen und sperren","Echtzeit-Updates aus Ihren Quellsystemen","Indiv
13666iduelles Datenmodell nach Ihren Management-Bedürfnissen","Rechteverwaltung – Sie entscheiden, wer was sieht","Reporting nach Kostenstelle, Projekt oder Kostenträger","Dashboards mit Visualisierungen, KPI-Kacheln und Tabellen","Drill-down vom Bericht bis zur Transaktion inkl. PDF-Rechnung","Schnelle Einblicke in Transaktionen zu bestimmten Kunden","Aging-Analyse pro Entität und konsolidiert","Operative Kennzahlen per manueller Eingabe, Formel oder API","Rollen Viewer, Contributor und Admin mit Einschränkungen pro Kostenstelle","Excel-Add-in: Berichte in Excel laden und jederzeit aktualisieren"],consolidation:["Teilkonsolidierungen und konsolidierte Übersichten","Währungsumrechnung","Intercompany-Eliminierungen","Separate Konsolidierungsstruktur","Konsolidierte Kostenstellen","IC-Abstimmungstool – sehen Sie, wo Differenzen entstehen","Immer aktuelle Berichte","Transaktionen auf konsolidierter Ebene einsehen","Konten mit IC- und Drittbuchungen aufsplitten"],budgetterenCashflow:["Budgets und Forecasts erstellen und verwalten","Mehrere Szenarien nebeneinander","Budget auf Kontenebene oder Zwischensumme, pro Bereich konfigurierbar","Feste Eingabe oder formelbasiert","Business-Module: Produktgruppen, Gehälter, FTE, Pension","Darlehen und Investitionen fließen in Ihre GuV","Bilanzplanung über P&L-Abhängigkeiten","Automatischer Cashflow-Forecast (indirekte Methode)","13-Wochen-Cashplanung direkt aus Debitoren/Kreditoren","Wiederkehrende Zahlungen auf Tages-, Wochen- oder Monatsbasis","Erwartete Zahlungstermine anpassen und Auswirkung auf Cash sehen","Neue Darlehen, Kreditlinien und Investitionen inkl. Abschreibungen planen"],close:["Checklisten für Monats-, Quartals- und Jahresabschluss","Aufgaben bestimmten Teammitgliedern zuweisen","Arbeitsbeschreibungen und Dokumente pro Aufgabe im Template","Automatisierungen mit Aufgaben verknüpfen","Abhängigkeiten zwischen Aufgaben einrichten","Chat pro Aufgabe zur Abstimmung mit Kollegen","Audit-Trail: was wurde wann und von wem erledigt","Periode erst schließen, wenn alle Aufgaben erledigt sind","Verfügbar auf Entitäts- und konsolidierter Ebene"],virtualController:["Support-Agent mit Zugriff auf die Dokumentation, 24/7 verfügbar","Ad-hoc-Fragen in natürlicher Sprache stellen","PowerPoint-Präsentationen automatisch generieren","Spezialisierte Agenten für Finanzanalysen","Verfügbar aus jedem Modul: Reporting, Konsolidierung, Planung und Abschluss"]}},IQ={smartbooksFor:"Smartbooks for",theChallenge:"The challenge",whySmartbooks:"Why Smartbooks",alsoSee:"Also see",roles:{cfo:{title:"CFO",subtitle:"Real-time financial insight for strategic decisions",description:"As CFO, you bear ultimate responsibility for your organization's financial health. Yet you often work with outdated data, fragmented Excel models, and reports that take days to compile. Smartbooks changes that.",benefits:["Real-time consolidation across all entities and subsidiaries","AI-driven scenario analyses and rolling forecasts","Generate board-ready reports in one click","Direct access to KPI dashboards without finance involvement","Automatic variance analyses between budget, forecast, and actuals"],painPoints:["No confidence in figures due to manual processes","Weeks-long reporting cycles that delay decision-making","Insufficient insight into cash flows and working capital"],seoTitle:"Smartbooks.ai for CFO",seoDescription:"Discover how Smartbooks helps CFOs with real-time consolidation, AI forecasting, and board-ready reports."},controller:{title:"Controller",subtitle:"From month-end close in days to hours",description:"As a controller, you're the backbone of financial reporting. But too often you spend your time manually merging data instead of analyzing it. Smartbooks automates the heavy lifting so you can do what you do best.",benefits:["Month-end close in hours instead of days","One source of truth for all financial data","Fully auditable with version control and audit trail","Automated intercompany eliminations and reconciliations","Seamless integration with your existing ERP and accounting system"],painPoints:["Endless copying and pasting between Excel files","Errors discovered too late in the process","No time left for analysis and business partnering"],seoTitle:"Smartbooks.ai for Controller",seoDescription:"Smartbooks helps controllers with automated consolidation, audit trails, and faster month-end closes."}
13666,aandeelhouders:{title:"Shareholders",subtitle:"Transparent reports that build trust",description:"As a shareholder, you want to know how your investment is performing, without waiting weeks for reports or relying on incomplete information. Smartbooks offers always current, reliable financial insights.",benefits:["Always current financial reports available at any time","Consistent formats that facilitate period-over-period comparison","Transparent data that strengthens trust in management","Clear KPI dashboards without financial background needed","Historical trend analyses for long-term decisions"],painPoints:["Reports arrive too late and in varying formats","Lack of transparency about financial reality","Difficult to compare performance across entities"],seoTitle:"Smartbooks.ai for Shareholders",seoDescription:"Smartbooks gives shareholders transparent, current financial reports and KPI dashboards."},accountants:{title:"Accountants",subtitle:"Audit-ready data without the back-and-forth",description:"As an accountant, you want to work efficiently with reliable data. In practice, you spend a lot of time requesting, checking, and correcting information. Smartbooks delivers structured, audit-ready output directly from the system.",benefits:["Audit-ready output without manual preparation work","Direct access to client data via a secure portal","Fewer errors and faster audits through standardized data","Complete audit trail for every financial transaction","Automated checks on consistency and completeness"],painPoints:["Endless back-and-forth emailing to get the right files","Data that is incorrect or incomplete upon delivery","Time lost to manual reconciliation"],seoTitle:"Smartbooks.ai for Accountants",seoDescription:"Smartbooks helps accountants with audit-ready output, direct data access, and automated checks."},stakeholders:{title:"Stakeholders",subtitle:"Complex financial data, presented simply",description:"From investors to board members, from department managers to external advisors, everyone involved in strategic decisions needs clear financial insight. Smartbooks makes that possible.",benefits:["Accessible dashboards without financial background needed","Strategic KPIs clearly displayed in one screen","Data-driven decision-making at every level of the organization","Personalized reports per stakeholder group","Real-time insights instead of monthly snapshots"],painPoints:["Financial reports are too complex to quickly understand","Decisions are made on gut feeling instead of data","No uniform view of organizational performance"],seoTitle:"Smartbooks.ai for Stakeholders",seoDescription:"Smartbooks offers stakeholders accessible dashboards and clear KPI reports for better decision-making."}}},PQ={index:{title:"Smartbooks | Consolidation, FP&A & Close Management",description:"One professional system for consolidation, reporting and planning. Replace fragmented Excel models with reliable, automated processes."},functionaliteiten:{title:"Funktionen — Smartbooks",description:"Alle Smartbooks-Funktionen: Reporting, Konsolidierung, Planung, Cashflow und KI-Controller."},overOns:{title:"About Us",description:"Learn more about Smartbooks: our team, mission, and vision on AI-driven financial software for business control."},prijzen:{title:"Preise — Smartbooks",description:"Transparente Preise für Finance-Teams."},projecten:{title:"Projekte — Smartbooks",description:"KI-Integration und Financial Applications für Finance-Teams."},productTour:{title:"Interactive product tour",description:"Click through Smartbooks in 90 seconds. No demo, no form — experience the Finance Operating System yourself."},onboarding:{title:"Onboarding",description:"How onboarding with Smartbooks works: from sign-up to live in production. Personal guidance from someone on our team."},onboardingMeeting:{title:"Kostenlosen Pilot starten | Smartbooks",description:"Starten Sie Ihren kostenlosen Smartbooks-Pilot. Binden Sie Ihre Buchhaltung an, arbeiten Sie einen Monat in Ihrer vollständig eingerichteten Umgebung und bewerten Sie das System mit Ihren eigenen Zahlen."}
13666,bedanktWebinar:{title:"Thank you for registering",description:"Your registration for the Smartbooks webinar has been received. You'll receive a link to the webinar by email."},whitepapers:{title:"Whitepapers",description:"Download our whitepapers and discover how Smartbooks strengthens the finance function."},lpConsolidatie:{title:"Consolidation software for Dutch corporate groups",description:"Consolidation software for multi-entity corporate groups. Automatic intercompany elimination, currency conversion, and group reporting. Directly connected to Exact, Twinfield, AFAS, and more."},lpVirtueleController:{title:"Your AI controller, working 24/7",description:"An AI agent for finance teams: ask questions in natural language, get analyses in seconds, and produce board-ready presentations in one click. Schedule a demo of the Smartbooks AI controller."},lpFinance:{title:"Your finance department deserves better than Excel",description:"Reporting, consolidation, planning, month-end close, and analysis in one professional platform. Live in days, not months. Schedule a demo."}
13666,home:{title:"Smartbooks — KI-Finanzberichte, Planung und Konsolidierung",description:"Automatisieren Sie Berichte, Planung, Cashflow und Konsolidierung mit KI. Von Finance-Teams gebaut."},consulting:{title:"KI-Consulting für Finance — Smartbooks",description:"KI-Integration in Ihre Finanzworkflows. Sprechen Sie mit unseren Experten."}},TQ={quote:"Smartbooks transformed our month-end close. What used to take three days with Excel, we now do in half a day, with more reliability and insight.",name:"Mark Bakker",role:"Business Controller · Tiqets"},DQ={rapporteren:{hero:{headline:"Management-Reports, die immer stimmen — ohne Excel-Stress",subtext:"Erstellen Sie Berichte und Dashboards, die zu Ihrer Organisation passen. Mit Drill-down bis auf Transaktion und Rechnung, sodass jede Zahl bis zur Quelle nachvollziehbar ist."},promises:{eyebrow:"Was das bringt",title:"Was Sie davon haben",subtitle:"Berichte, die so rechnen, wie Sie sie einrichten — und Zahlen, die stimmen, ohne dass Sie etwas prüfen müssen.",items:[{title:"Berichte, die sich Ihnen anpassen",text:"Bauen Sie Berichte mit eigener Struktur, Dimensionen und Formeln. Passen Sie sie so schnell an, wie sich Ihr Geschäft verändert — keine starren Templates, keine Berater nötig."},{title:"Vom Gruppenbericht bis zur Originalrechnung",text:"Drill-down vom konsolidierten Bericht auf Entität, Konto, Transaktion und die zugrunde liegende PDF. Jede Zahl ist bis zur Quelle nachvollziehbar."},{title:"Eine Quelle für alle Reports",text:"Finanzzahlen, operative Kennzahlen und Dimensionen — alles in einem System. Kein Zusammensuchen von Zahlen aus verschiedenen Quellen, sondern automatisch in Smartbooks zusammengeführt."}]},painPoints:["Jeden Monat dieselben Berichte manuell in Excel neu aufbauen","Ein #REF!-Fehler in einer Zelle, der sich durch 12 Tabellen zieht","Die Geschäftsleitung fragt nach einer neuen Auswertung — und Sie brauchen einen halben Tag","Ein Kollege verlässt das Unternehmen und niemand versteht das Excel-Modell"],solutionBlocks:[{title:"Ihre Berichte, immer aktuell",text:"Erstellen Sie eigene Berichte und passen Sie sie an, wann immer Sie wollen.",bullets:["Eigene Reporting-Struktur festlegen und jederzeit anpassen","Reporting pro Kostenstelle, Projekt oder Kostenträger","Echtzeit-Sync mit Ihrer Buchhaltung — ohne Exporte oder manuelle Updates","Neue Berichte und KPIs schnell hinzufügen, wann immer nötig"]},{title:"Dashboards mit finanziellen und operativen Kennzahlen",text:"Ein Dashboard mit finanziellen und operativen Kennzahlen, damit das MT ein einheitliches Bild sieht statt eines Stapels PDFs.",bullets:["KPI-Kacheln mit Vergleich (Budget, Vorjahr, Vorperiode) und Trendlinie","Operative Kennzahlen neben Finanzzahlen — via Eingabe, Formel oder API","Mehrere Dashboards pro Zielgruppe: Geschäftsleitung, MT, Operations"]},{title:"Von der Berichtszeile bis zur PDF-Rechnung. In drei Klicks.",text:"Eine Abweichung in Ihren Zahlen? Klicken Sie sich vom Bericht ins Hauptbuch bis zur Originalrechnung. Die gesamte Analyse in Smartbooks, ohne zurück ins Buchhaltungssystem zu müssen.",bullets:["Drill-down vom Bericht ins Hauptbuch, zur Transaktion und PDF","Schneller Blick auf alle Transaktionen zu oder von einem bestimmten Kunden über einen Zeitraum","Funktioniert auf Entitäts- und konsolidierter Ebene"]},{title:"Excel muss nicht weg. Nur nicht mehr als Quelle.",text:"Standardprozesse laufen in Smartbooks, Ihre Ad-hoc-Arbeit in Excel — mit Live-Daten und ohne Copy-Paste.",bullets:["Live-Smartbooks-Daten direkt in Excel","Immer aktualisierbar — nie mehr zweifeln, ob Ihre Zahlen aktuell sind"]}],subSections:[{title:"Security & Rollen",text:"Sie legen fest, wer was sieht. Mit dem Rollenmodell (Viewer, Contributor, Admin) und Einschränkungen pro Kostenstelle und Bericht behalten Sie die Kontrolle darüber, wer welche Informationen einsehen kann."}],painPointsEyebrow:"Kommt Ihnen das bekannt vor?",painPointsTitle:"Womit Financial Controller täglich kämpfen"},consolideren:{hero:{headline:"Konsolidierung in Minuten statt Tagen",subtext:"Konsolidierung von Teilkonsolidierungen bis IC-Eliminierungen — alles in einem System. Immer aktuell, ohne manuelles Puzzle oder Excel-Workarounds."},promises:{eyebrow:"Was das bringt",title:"Eine Quelle der Wahrheit für die gesamte Gruppe",items:[{title:"Konsolidierung in Minuten",text:"Kein manuelles Zusammensuchen mehr. Smartbooks aggregiert automatisch alle Entitäten — immer aktuell."},{title:"Intercompany unter Kontrolle",text:"Automatische IC-Eliminierungen und ein Abstimmungstool, das sofort zeigt, wo Differenzen liegen."},{title:"Skaliert mit der Gruppe",text:"Neue Entität, anderes Buchhaltungssystem oder Währung? Plug & Play — kein Excel-Neubau."}]},painPoints:["Fragmentierte Daten: Zahlen aus verschiedenen ERP- und Buchhaltungssystemen, die nicht 1:1 zusammenpassen","Fehleranfällige Intercompany-Eliminierungen: eine übersehene interne Transaktion zwischen Mutter und Tochter, und die Gruppenzahlen stimmen nicht","Währungsumrechnungen: Kursdifferenzen bei ausländischen Entitäten machen jeden Abschluss unnötig komplex","Handarbeit in Spreadsheets: Daten sammeln und prüfen kostet Tage und erhöht das Fehlerrisiko"],solutionBlocks:[{title:"Gruppenzahlen mit einem Klick",text:"Sehen Sie Ihre Ergebnisse auf Gruppenebene ohne manuelle Aggregation. Smartbooks addiert automatisch alle Entitäten in Ihrer Konsolidierungsstruktur — GuV, Bilanz, Cashflow und Dashboards, immer aktuell, immer konsistent.",bullets:["Konsolidierte GuV, Bilanz und Cashflow in einer Umgebung","Dashboards auf Gruppenebene mit den KPIs, mit denen Sie steuern","Immer aktuell, kein monatliches manuelles Update","Drill-down von der konsolidierten Zahl auf die zugrunde liegende Entität und Transaktion"]},{title:"Eine Struktur, die zu Ihrer Gruppe passt",text:"Eine Holding mit operativem Arm und Immobilien-Arm? Oder eine internationale Struktur mit mehreren Untergruppen? Richten Sie Ihre Konsolidierungsstruktur per Drag & Drop ein und definieren Sie Eigentumsanteile pro 
13666Entität. Reporting auf jeder Ebene: Hauptgruppe, Teilkonsolidierung oder einzelne Entität.",bullets:["Drag-&-Drop-Konsolidierungsstruktur — modelliert genau wie Ihre Gruppe arbeitet","Eigentumsanteile pro Entität, inklusive Minority Interests","Reporting auf jeder Ebene: Hauptkonsolidierung, Teilkonsolidierung oder Entität","Struktur anpassen, wenn sich die Gruppe verändert — ohne Neuaufsatz"]},{title:"Intercompany, vollständig unter Kontrolle",text:"Eine übersehene IC-Buchung bringt Ihre gesamte Konsolidierung durcheinander. Smartbooks identifiziert Intercompany-Transaktionen automatisch und eliminiert sie. Differenzen sehen Sie sofort im Abstimmungstool. Und selbst wenn Ihr Quellsystem IC nicht auf separaten Konten bucht, splittet Smartbooks es für Sie — ohne Eingriff in Ihre Buchhaltung.",bullets:["Automatische IC-Eliminierungen — konsolidierte Zahlen zeigen nur externe Aktivität","IC-Abstimmungstool — sofort sichtbar, welche Posten zwischen Entitäten nicht matchen, bis auf Transaktionsebene","Intercompany Relation Mapping — pro Entitätspaar definieren, welcher Debitor oder Kreditor zu welcher Gruppenentität gehört","IC-Reklassifizierung — Konten in Smartbooks aufsplitten, wenn Ihre Buchhaltung IC nicht separat bucht"]},{title:"Ausländische Entitäten ohne Kopfschmerzen",text:"Entitäten im Ausland? Smartbooks rechnet automatisch um: GuV zum Durchschnittskurs der Periode, Bilanz zum Stichtagskurs. Kursdifferenzen werden separat ausgewiesen, sodass Sie sofort sehen, was operativ ist und was durch Wechselkurse kommt.",bullets:["Automatische Währungsumrechnung pro Entität","GuV zum Durchschnittskurs, Bilanz zum Stichtagskurs","Kursdifferenzen separat ausgewiesen für volle Transparenz"]},{title:"Reporting auf Gruppenebene — bis auf Kostenstelle",text:"Konsolidierung endet nicht bei der GuV. Reporting auf konsolidierter Ebene pro Kostenstelle, Projekt oder Dimension, sodass das MT auf Gruppenebene dieselbe Detailtiefe erhält wie auf Entitätsebene.",bullets:["Konsolidiertes Reporting pro Kostenstelle, Projekt oder Dimension","Dieselben Dimensionen funktionieren über alle Entitäten hinweg","Drill-down von der konsolidierten Dimension zur zugrunde liegenden Entität"]}],subSections:[],accountingStrip:{title:"Funktioniert mit allen Buchhaltungssystemen Ihrer Gruppe",subtitle:"Auch wenn Ihre Entitäten in verschiedenen Buchhaltungssystemen liegen. Smartbooks konsolidiert systemübergreifend — kein Zwang, zuerst einen Standard durchzusetzen.",footnote:"Entitäten in verschiedenen Systemen? Kein Problem. Smartbooks konsolidiert sie trotzdem."},painPointsEyebrow:"Kommt Ihnen das bekannt vor?",painPointsTitle:"Konsolidierungs-Herausforderungen, die Zeit und Vertrauen kosten"},budgetterenCashflow:{hero:{headline:"Vom Budget bis zum Cashflow-Forecast — in einem System",subtext:"Geschäftsmodell-getriebenes Budgetieren, Forecasten, Bilanzplanung und Cashflow-Projektionen. Ohne fragmentierte Excel-Modelle, die keiner versteht."},promises:{eyebrow:"Was das bringt",title:"Ein System für die gesamte Planungskette",items:[{title:"Planen auf jedem Niveau",text:"Vom Kontobuch bis zum treiberbasierten Modell — Sie wählen den Detailgrad pro Business-Area."},{title:"Planen Sie die gesamte finanzielle Realität",text:"GuV, Bilanz, Darlehen, Investitionen — alles in einem durchgerechneten Modell verbunden."},{title:"Langfristig und operativ",text:"Vom Jahresbudget bis zur Woche-für-Woche-Liquidität — strategische Planung und Wochen-Cashflow in einem System."}]},painPoints:["Die Budgetrunde dauert 3 Monate und das Ergebnis ist ein Excel, das niemand mehr anzufassen wagt","Ein Forecast anpassen bedeutet, 4 Tabs manuell zu aktualisieren","Die Geschäftsleitung fragt: „Was, wenn wir diese Investition tätigen?“ — und Sie haben keine Antwort","Sie haben ein GuV-Budget, aber keine Ahnung, was es für Ihre Liquidität bedeutet"],solutionBlocks:[{title:"Budgets, Forecasts & Szenarien",text:"Erstellen Sie Jahresbudgets und Forecasts auf dem Detailgrad, der zu Ihrem Reporting passt: pro Konto, Kostenstelle oder Zwischensumme. Arbeiten Sie mit fester Eingabe oder Formeln und halten Sie Base-Case-, optimistische und pessimistische Szenarien nebeneinander — direkt vergleichbar mit den Ist-Zahlen im selben Bericht.",bullets:["Eingabe pro Konto, Kostenstelle oder Zwischensumme — Sie bestimmen den Detailgrad","Feste Eingabe oder formelbasiert — pro Zeile entscheidbar","Mehrere Szenarien nebeneinander: Base, optimistisch, pessimistisch","Direkt mit Ist-Zahlen im selben Bericht vergleichbar — ohne Exporte"]},{title:"Business-Module (treiberbasierte Planung)",text:"Bauen Sie treiberbasierte Planungsmodelle pro Business-Area. Planen Sie Umsatz als Menge × Preis pro Produktgruppe. Planen Sie Personalkosten mit FTE, Bruttolohn, Sozialabgaben und Pension pro Team. Die Ergebnisse fließen automatisch in Ihre GuV — ändern Sie einen Treiber, sehen Sie Ihr Budget reagieren.",bullets:["Umsatzplanung: Menge × Preis pro Produktgruppe oder Segment","Personalplanung: FTE, Bruttolohn, Sozialabgaben und Pension pro Team","Eigene Module für weitere Kostentreiber (Standorte, Verträge, Marketing)","Ergebnisse fließen automatisch in die GuV — ohne manuelle Konsolidierung"]},{title:"Bilanzplanung, Darlehen & Investitionen",text:"Planen Sie Bilanzposten auf Basis von Metriken (DSO, DPO, Lagertagen) und direkter Abhängigkeit zu GuV-Zeilen. Erfassen Sie bestehende Darlehen mit Tilgungs- und Zinsplan und fügen Sie neue Finanzierungen hinzu. Planen Sie Investitionen und Desinvestitionen inklusive Abschreibungen. Alles schreibt in GuV und Bilanz zurück — und ein indirekter Cashflow-Forecast entsteht automatisch aus dem Gesamtbild.",bullets:["Bilanzplanung auf Basis von DSO, DPO und Lagertagen","Bestehe
13666nde und neue Darlehen mit Tilgungs- und Zinsplänen","Investitionen und Desinvestitionen inklusive Abschreibungen","Indirekter Cashflow-Forecast entsteht automatisch aus GuV + Bilanz"]},{title:"13-Wochen-Cashflow & Aging-Analyse",text:"Für das Woche-für-Woche-Cashmanagement erstellen Sie einen direkten 13-Wochen-Forecast auf Basis Ihrer tatsächlich offenen Debitoren und Kreditoren. Drillen Sie in die konsolidierte Aging-Analyse, um Debitoren- und Kreditorenexposure auf Gruppenebene zu sehen. Passen Sie erwartete Zahlungstermine an, ergänzen Sie wiederkehrende Zahlungen, beziehen Sie Darlehen und Investitionen ein — und sehen Sie die Liquidität in Echtzeit reagieren.",bullets:["Direkter 13-Wochen-Forecast aus tatsächlichen Debitoren und Kreditoren","Konsolidierte Aging-Analyse auf Gruppenebene","Erwartete Zahlungstermine anpassen und wiederkehrende Zahlungen ergänzen","Darlehen und Investitionen fließen automatisch in die Cash-Position"]}],subSections:[],founderQuote:{quote:"Ein Budget in Excel zu erstellen, ist keine Planung — es ist eine Momentaufnahme, die sofort veraltet ist. Controller verdienen ein System, in dem Budget, Bilanz und Cashflow zusammenhängen und in dem Szenarien tatsächlich durchgerechnet werden.",author:"Jaap",role:"Founder, Smartbooks"},painPointsEyebrow:"Kommt Ihnen das bekannt vor?",painPointsTitle:"Planung & Cashflow: wo es oft schiefgeht"},close:{hero:{headline:"Schließen Sie den Monat schneller ab — mit weniger Stress und mehr Kontrolle",subtext:"Templates, automatische Analysen und kontrollierte Veröffentlichung. Alles, was einen Abschluss zeitraubend macht — automatisiert."},promises:{eyebrow:"Was das bringt",title:"Vom Abschluss bis zur Veröffentlichung in einer Kette",items:[{title:"Struktur in jedem Abschlussprozess",text:"Monat, Quartal oder Jahr — ein Template, immer dieselbe Arbeitsweise. Keine Überraschungen, keine übersehenen Schritte."},{title:"Zusammenarbeit auf Aufgabenebene",text:"Jeder weiß, was zu tun ist, wo wir stehen und was bereits entschieden ist. Abstimmung und Audit-Trail am selben Ort wie die Arbeit."},{title:"Vom Abschluss bis zur Analyse bis zur Veröffentlichung",text:"Close-Checkliste, automatische Abweichungsanalyse und Periodenveröffentlichung in einer durchgehenden Kette — ohne Export, ohne Übergaben."}]},painPoints:["Der Monatsabschluss hängt davon ab, wer gerade da ist und ob alle an alles denken","Mitten im Abschluss stellt sich heraus, dass ein Kollege seinen Teil noch nicht erledigt hat","Zahlen gehen raus, bevor der Abschluss formal geschlossen ist — kein Lock, kein Check, keine Sicherheit","Der Abschluss ist fertig, aber Sie haben keine Zeit mehr zu analysieren, was auffällt"],solutionBlocks:[{title:"Der Abschlussprozess selbst",text:"Definieren Sie Ihren Monats-, Quartals- und Jahresabschluss einmalig als Template — mit Aufgaben, Deadlines, Abhängigkeiten und Automatisierungen — und verwenden Sie ihn jede Periode erneut. Automatisierungen starten erst, wenn die Aufgaben, von denen sie abhängen, abgeschlossen sind — die Reihenfolge ist gesichert, ohne dass jemand sie überwachen muss.",bullets:["Templates für Monat, Quartal und Jahr — einmal einrichten, jede Periode wiederverwenden","Aufgaben mit Deadlines und Verantwortlichen — keine E-Mails oder mündlichen Absprachen","Abhängigkeiten zwischen Aufgaben — Automatisierungen warten, bis Vorgänger fertig sind","Funktioniert auf Entitäts- und konsolidierter Ebene"]},{title:"Zusammenarbeit und Dokumentation",text:"Pro Aufgabe fügen Sie Arbeitsbeschreibungen und Dokumente zum Template hinzu, damit niemand bei jedem Absc
13666hluss neu suchen muss, wie etwas geht. Diskussionen laufen im Chat pro Aufgabe, und alles, was passiert — wer, wann, warum — wird automatisch im Audit-Trail festgehalten.",bullets:["Arbeitsbeschreibungen und Dokumente pro Aufgabe im Template","Chat pro Aufgabe — Abstimmung mit Kollegen ohne E-Mail oder Slack","Audit-Trail: wer hat was wann getan","Wissen bleibt im System, nicht bei einer Person"]},{title:"Smart Story — automatische Abweichungsanalyse",badge:"Mit Alex",text:"Sobald die Buchhaltung fertig ist, führt Smartbooks automatisch die Analysen durch und weist Sie auf das hin, was auffällt — statt dass Sie selbst suchen müssen. Standardanalysen laufen parallel: Transaction, Budget, Trend und Ratio Analysis. Nur Abweichungen oberhalb Ihrer eigenen Schwellenwerte landen auf Ihrem Schreibtisch — mit Dringlichkeitsbewertung, damit Sie wissen, wo Sie zuerst hinschauen müssen. Pro Abweichung wählen Sie: Buchungsfehler, erklären oder ignorieren — und die Erklärung bleibt für den Audit und für den nächsten Monat gespeichert.",bullets:["Vier Analysen automatisch: Transaction, Budget, Trend und Ratio","Schwellenwerte, die Sie festlegen — kein Rauschen aus unwichtigen Differenzen","Dringlichkeitsbewertung pro Abweichung zur Priorisierung","Entscheidung pro Abweichung dokumentiert für den Audit-Trail"],footerLink:{label:"Smart Story ist Teil von Alex — mehr über Alex",to:"/de/funktionen/ai-controller"}},{title:"Entität, Konsolidierung und Veröffentlichung",text:"Die Close-Checkliste funktioniert sowohl auf Entitätsebene als auch konsolidiert. Erst wenn alle Aufgaben erledigt sind, kann eine Periode veröffentlicht werden. Mit Reporting Perio
13666d Management können Sie die Periode vor der Freigabe in einer Vorschau ansehen — so wissen Sie sicher, dass Konsolidierung und Reporting nur auf vollständig geprüften Daten laufen. Veröffentlichen nur Admins.",bullets:["Close auf Entitäts- und konsolidierter Ebene","Reporting Period Management: Vorschau vor der Veröffentlichung","Veröffentlichung nur durch Admins — abgesicherter Prozess","Reports laufen immer auf veröffentlichten, geprüften Daten"]}],subSections:[],founderQuote:{quote:"Ein Monatsabschluss sollte kein Projekt sein, das jedes Mal aufs Neue improvisiert wird. Mit einem festen Prozess, automatischer Abweichungsanalyse und kontrollierter Veröffentlichung wird der Abschluss endlich, was er immer hätte sein sollen: ein verlässlicher Zyklus statt eines Sprints.",author:"Jaap",role:"Founder, Smartbooks"},painPointsEyebrow:"Kommt Ihnen das bekannt vor?",painPointsTitle:"Monatsabschluss: ein wiederkehrender Engpass"},virtueleController:{hero:{eyebrow:"Alex, Ihr KI-Controller",headline:"KI, die Ihre Zahlen versteht, weil das System darunter stimmt",subtext:"Alex analysiert Ihre Finanzdaten, erklärt Abweichungen und erstellt Management-Reports — unter Ihrer Kontrolle."},promises:{eyebrow:"Was das bringt",title:"Alex, Ihr KI-Kollege, unter Kontrolle, auf Daten, die stimmen",items:[{title:"Alex erledigt Finance-Arbeit",text:"Von Ad-hoc-Fragen bis zur automatischen Abweichungsanalyse — Aufgaben, die normalerweise auf dem Schreibtisch eines Controllers landen."},{title:"Auf einem verlässlichen Fundament",text:"Alex arbeitet ausschließlich auf den strukturierten Daten in Smartbooks. Keine Halluzinationen auf losen Excel-Dateien, keine erfundenen Zahlen."},{title:"Unter Ihrer Kontrolle",text:"Sie entscheiden pro Entität, ob KI eingesetzt wird, mit welchem Kontext und in welche Richtung. Sie schalten Alex dort ein, wo es Ihnen hilft."}]},painPoints:[],solutionBlocks:[{title:"Ask Me Anything — Ihre Daten in verständlicher Sprache",badge:"KI-Funktion",text:'Stellen Sie Fragen, wie Sie sie einem Kollegen stellen würden, und erhalten Sie sofort eine Antwort, 24/7. "Wie liegen wir YTD gegenüber Budget?" "Welche Entität hat in diesem Quartal die größte Abweichung?" "Welche Debitoren sind am stärksten im Zahlungsverzug?" Alex sucht die Antwort in Ihren Smartbooks-Daten und antwortet in verständlicher Sprache — inklusive Quellenangabe, damit Sie genau sehen, woher die Zahl kommt.',bullets:["Fragen in natürlicher Sprache zu Ist, Budget, Forecast und Historie","Zugriff auf alle Entitäten und Dimensionen in Smartbooks","Quellenangabe pro Antwort — Sie sehen, woher die Zahl kommt","Auch außerhalb der Bürozeiten verfügbar, ohne einen Kollegen anzumailen"]},{title:"P&L Assistant — Analyse, Commentary und Board-Deck",badge:"KI-Funktion",text:"Lassen Sie Alex Ihre GuV analysieren, den Commentary schreiben und ein Board-Deck erstellen — in Ihrem Corporate Design. Was sind die wichtigsten Abweichungen? Wo liegt die Abweichung gegenüber Budget? Alex formuliert es in einer Sprache, die Ihre Geschäftsleitung versteht, und exportiert die Analyse direkt in eine Präsentation in Ihrem Corporate Design. Bereit für das MT-Meeting — Sie feilen nur noch dort nach, wo es nötig ist.",bullets:["Automatische Abweichungsanalyse gegenüber Budget und Vorjahr","Commentary in Business-Sprache, nicht in KI-Sprech","Export als Board-Deck in Ihrem Corporate Design und Reporting-Struktur","Bearbeitbar — Alex liefert die erste Version, Sie entscheiden die finale"]},{title:"Smart Story — Abweichungen werden gefunden, Sie entscheiden, was passiert",badge:"KI-Funktion · Bald verfügbar",text:"Sobald die Buchhaltung abgeschlossen ist, führt Alex automatisch die Analysen durch und legt Ihnen Abweichungen mit Dringlichkeitsbewertung vor. Standardanalysen laufen parallel: Transaction, Budget, Trend und Ratio. Nur Abweichungen oberhalb Ihrer eingestellten Schwellenwerte landen auf Ihrem Schreibtisch — mit Dringlichkeitsbewertung, damit Sie wissen, wo Sie zuerst hinschauen müssen. Pro Abweichung wählen Sie: Buchungsfehler, erklären oder ignorieren. Sie suchen nicht mehr nach dem, was auffällt — es fällt von selbst auf.",bullets:["Vier Analysen automatisch: Transaction, Budget, Trend, Ratio","Schwellenwerte, die Sie festlegen — kein Rauschen aus unwichtigen Differenzen","Dringlichkeitsbewertung pro Abweichung zur Priorisierung","Entscheidung pro Abweichung dokumentiert für den Audit Trail"],footerLink:{label:"Smart Story läuft automatisch während Ihres Abschlusses — mehr über Smart Close",to:"/de/funktionen/monatsabschluss"}},{title:"Unter Ihrer Kontrolle — Sie bestimmen, was Alex tut",badge:"Kontrollierte KI",text:"KI, die Sie Ihrer Geschäftsleitung nicht erklären können, setzen Sie nicht ein. Deshalb steht Alex standardmäßig im kontrollierten Modus. Pro Entität bestimmen Sie, ob Alex aktiv ist. Sie geben Kontext zu Ihrer Organisation, damit Analysen relevant sind — Branche, Reporting-Struktur, spezifische KPIs. Und mit Custom Prompts lenken Sie Alex in Richtung von Analysen, die zu Ihrer Arbeitsweise passen.",bullets:["Pro Entität an/aus — Alex arbeitet nur dort, wo Sie es wollen","Eigener Kontext: Branche, Reporting-Struktur, spezifische KPIs","Custom Prompts für wiederkehrende Analysen","Vollständiger Audit Trail — Sie sehen, woher jede Analyse stammt"]}],subSections:[{title:"Warum Alex funktioniert, wo andere KI scheitert",text:"ChatGPT und Copilot können schlau sein bei Allgemeinwissen, kennen aber Ihre Zahlen nicht. Alex ist anders. Er arbeitet auf dem strukturierten Datenfundament von Smartbooks: eindeutige Definitionen, kontrollierte Prozesse, validierte Konsolidierung. Keine Halluzinationen auf losen Excel-Dateien, sondern Analysen auf Basis von Zahlen, denen Sie bereits selbst vertrauen."}],founderQuote:{quote:"KI hat in Finance nur dann Wert, wenn Sie das Ergebnis Ihrer Geschäftsleitung erklären können. Deshalb haben wir Alex so gebaut, dass Sie immer sehen, woher eine Zahl kommt und was die Analyse getan hat — nicht trotz der Kontrolle, sondern dank der Kontrolle.",author:"Jaap",role:"Founder, Smartbooks"},painPointsEyebrow:"Kommt Ihnen das bekannt vor?",painPointsTitle:"Ohne Controller stoßen Sie an diese Wände"}},BQ={eyebrow:"Overview",title:"What we'll cover"},MQ={hero:{eyebrow:"Projekte",title:"KI-Integration in Finanzprozesse und maßgeschneiderte Finance-Anwendungen",subtitle:"Neben unserer Standardplattform integrieren wir KI in Ihre bestehenden Finance-Workflows und bauen maßgeschneiderte Finanzanwendungen. Gemeinsam aufgesetzt, gemeinsam gepflegt.",cta:"Kennenlerngespräch buchen",secondaryCta:"Nachricht senden"},consulting:{tag:"Beratungsstunden",title:"KI-Integration in Finanzprozesse",description:"Unsere Berater integrieren KI in Ihre bestehende Finance-Umgebung und Ihre Prozesse. Von der Prozessanalyse bis zum Go-live — auf transparenten Beratungsstunden, mit Ergebnissen, die Sie in der täglichen Arbeit spüren.",bullets:["KI-Integration abgestimmt auf Ihre Prozesse, Ihr Datenmodell und Ihre Workflows","Bestehe
13666nde Systeme und Workflows bleiben führend, KI dockt nahtlos an","Berater mit Finance-Hintergrund, keine generische IT-Besetzung","Abrechnung auf Basis von Beratungsstunden — transparent und steuerbar","Übergabe und Dokumentation, damit Ihr Team eigenständig weiterarbeiten kann"],cta:"KI-Integration besprechen"},custom:{tag:"Maßgeschneiderte Finance-Anwendungen",title:"Finanzanwendungen nach Maß",description:"Für Fragestellungen, die knapp außerhalb der Standardplattform liegen, bauen wir maßgeschneiderte Finance-Anwendungen. Unsere Leute unterstützen beim Aufbau und bleiben in der Wartung involviert, damit die Lösung mit Ihrer Organisation mitwächst.",bullets:["Entworfen und gebaut zusammen mit unseren Finance- und Tech-Experten","Vollständige Begleitung beim Aufbau, von der Idee bis zur Produktion","Laufende Wartung und Weiterentwicklung durch dasselbe Team","Nahtlose Integration mit Smartbooks und Ihren bestehenden Systemen"],cta:"Kontakt aufnehmen"},why:{eyebrow:"Warum Smartbooks",title:"Warum Finance-Teams uns für KI-Projekte wählen",subtitle:"Wir bauen Automatisierung nicht nur für Sie, wir arbeiten selbst täglich damit. Das merken Sie an Tempo, Entscheidungen und Wartung.",items:[{title:"Zeitgewinn dort, wo es weh tut",text:"Wir beginnen bei den Tätigkeiten, die jeden Monat wiederkehren: Daten holen, abstimmen, berichten. Diese Schritte automatisieren wir zuerst, damit Ihr Team spürbar weniger Stunden in Routinearbeit steckt."},{title:"Wir arbeiten selbst vollständig automatisiert",text:"Unsere eigenen Finance- und Datenprozesse laufen auf automatisierten Flows und KI-Agents. Wir beraten also keine Theorie, sondern Muster, die sich in unserer eigenen Praxis bewährt haben."},{title:"Finance-Experten, keine generische IT",text:"Unsere Berater kennen Konsolidierung, Abschluss und Reporting von innen. Weniger Erklären, das Gespräch dreht sich sofort um Ihren Prozess."},{title:"Vom Pilot zur Produktion in Wochen",text:"Wir arbeiten in kurzen Iterationen mit einem funktionierenden Ergebnis pro Schritt. So sehen Sie schnell Wirkung und entscheiden je Phase, ob wir weitergehen oder nachsteuern."},{title:"Es funktioniert auch nach dem Go-live",text:"Dasselbe Team, das baut, bleibt in Wartung und Weiterentwicklung involviert. Dokumentation und Übergabe gehören dazu, damit Sie nicht von einer Person abhängig sind."},{title:"Eine Plattform, kein Tooling-Flickenteppich",text:"Was wir bauen, dockt an Smartbooks und Ihre bestehenden Buchhaltungs- und ERP-Systeme an. Keine zusätzliche Insel, die Sie später integrieren müssen."}]},bottom:{title:"Bereit, KI in Ihre Prozesse zu integrieren?",subtitle:"Erzählen Sie uns, wo Sie feststecken. Wir denken mit über den Ansatz und zeigen, was in Wochen — nicht in Monaten — realistisch ist.",cta:"Kennenlerngespräch buchen"}},FQ={eyebrow:"Beratungsstunden",title:"KI-Integration in Ihre Finanzprozesse",subtitle:"Unsere Berater integrieren KI in Ihre bestehende Finance-Umgebung. Von der Prozessanalyse bis zum Go-live — auf transparenten Beratungsstunden, mit Ergebnissen, die Sie in der täglichen Arbeit spüren.",blockTitle:"Was Sie von uns erwarten können",blockDescription:"Wir arbeiten auf Basis von Beratungsstunden — transparent und steuerbar. Gemeinsam schauen wir, wo KI in Ihren Prozessen den größten Mehrwert liefert, und setzen es Schritt für Schritt um.",bullets:["KI-Integration abgestimmt auf Ihre Prozesse, Ihr Datenmodell und Ihre Workflows","Bestehende Systeme und Workflows bleiben führend, KI dockt nahtlos an","Berater mit Finance-Hintergrund, keine generische IT-Besetzung","Abrechnung auf Basis von Beratungsstunden — transparent und steuerbar","Übergabe und Dokumentation, damit Ihr Team eigenständig weiterarbeiten kann"],formTitle:"Hinterlassen Sie Ihre Daten",formSubtitle:"Füllen Sie das Formular aus und wir melden uns innerhalb eines Werktags, um Ihre Frage zu besprechen.",backToProjects:"Zurück zu Projekten"},RQ={title:"Wir verwenden Cookies",body:"Wir setzen funktionale Cookies ein, damit die Website funktioniert. Mit Ihrer Einwilligung nutzen wir zusätzlich Statistik- und Marketing-Cookie
13666s, um die Website zu verbessern und unsere Kommunikation relevanter zu machen.",policyLink:"Cookie-Richtlinie lesen",acceptAll:"Alle akzeptieren",reject:"Nur notwendige",settings:"Einstellungen",saveSelection:"Auswahl speichern",alwaysOn:"Immer aktiv",formBlocked:{title:"Marketing-Cookies sind deaktiviert",body:"Dieses Formular stammt von HubSpot und setzt Marketing-Cookies. Akzeptieren Sie Marketing-Cookies, um es zu laden.",cta:"Cookie-Einstellungen anpassen"},categories:{functional:{title:"Funktional",description:"Notwendig für den Betrieb der Website und zum Speichern Ihrer Cookie-Präferenz."},analytics:{title:"Statistik",description:"Google Analytics über den Google Tag Manager, zur Messung der Websitenutzung."},marketing:{title:"Marketing",description:"HubSpot- und Werbe-Cookies für Formulare, Lead-Erkennung und Conversion-Messung."}}},OQ={seo:{title:"KI-Konnektoren via MCP: ChatGPT, Claude und Copilot",description:"Verbinden Sie Claude, ChatGPT, Copilot oder Ihren eigenen KI-Agenten sicher per MCP mit Smartbooks. Fragen zu Ihren Zahlen, mit Ihren Rechten."},eyebrow:"Neu · Smartbooks-MCP-Server",title:"Ihre Finanzzahlen in jeder KI, die Ihr Team schon nutzt",subtitle:"Fragen Sie Claude, ChatGPT, Copilot oder jede andere KI mit MCP-Unterstützung nach Ihrer GuV, Ihrem Budget oder Ihren Forderungen und erhalten Sie sofort Antworten aus Ihren Live-Daten in Smartbooks. Keine Exporte, kein Copy-Paste, kein Tabellen-Chaos.",ctaPrimary:"Kostenlosen Pilot starten",ctaDocs:"Zur Anleitung",worksWith:"Funktioniert mit",tools:["Claude","ChatGPT","Microsoft Copilot","Jede KI mit MCP"],chat:{user:"Warum ist unsere Bruttomarge im Q3 gesunken?",tool:"Smartbooks · GuV Q3 vs. Budget",answer:"Die Bruttomarge sank vor allem wegen höherer Einkaufskosten bei zwei Gesellschaften. Die größten Abweichungen zum Budget:",rows:[["Einkaufskosten","+8,2 %"],["Umsatz","−1,4 %"],["Bruttomarge","−3,1 pp"]],note:"Beispielansicht"},benefitsHeading:"Schluss mit Exporten. Einfach fragen.",benefits:[{title:"Antworten in Sekunden",body:"Kein Bericht, kein Excel-Export. Stellen Sie Ihre Frage und die KI holt die Zahlen live."},{title:"In Ihrer eigenen Umgebung",body:"Arbeiten Sie in dem KI-Tool, das Ihr Team schon kennt, neben Mail, Dokumenten und anderen Tools."},{title:"Eine Quelle der Wahrheit",body:"Jede KI arbeitet mit denselben geprüften Smartbooks-Daten. Keine losen Versionen mehr."}],hubHeading:"Eine Verbindung, jede KI",hubBody:"Der Smartbooks-MCP-Server ist die sichere Brücke zwischen Ihren KI-Tools und allen Gesellschaften, inklusive Konsolidierung, Budgets und Forecasts.",hubCenter:"Smartbooks MCP",hubData:["Alle Gesellschaften","K
13666onsolidierung","Budget & Forecast","Forderungen & Verbindlichkeiten"],examplesHeading:"Fragen, die Sie morgen stellen",examples:["Zeig mir die GuV für September im Vergleich zum Budget.","Welche Kunden haben überfällige Forderungen?","Erkläre die größte Abweichung bei den Betriebskosten in diesem Quartal.","Schreib einen kurzen Kommentar zu den Monatszahlen für die Geschäftsführung."],securityHeading:"Sicher by Design",securityBody:"Ihre Zahlen sind sensibel. Deshalb ist die Verbindung von Grund auf sicher aufgebaut.",security:[{title:"Nur lesend",body:"Die KI liest Daten. Es werden keine Buchungen erstellt und Ihre Quellbuchhaltung bleibt unverändert."},{title:"Ihre Rechte",body:"Die KI sieht nur die Gesellschaften, auf die Sie Zugriff haben."},{title:"Eigener Login",body:"Jeder Nutzer verbindet sich mit seinem eigenen Smartbooks-Konto."},{title:"Freigabe pro Tool",body:"Sie entscheiden, wann die KI ein Smartbooks-Tool nutzen darf."}],setupHeading:"So schnell sind Sie live",setup:[{title:"Claude",badge:"In wenigen Minuten",body:"Fügen Sie Smartbooks als Custom Connector hinzu, melden Sie sich mit Ihrem Smartbooks-Konto an und stellen Sie Ihre erste Frage."},{title:"Jede andere KI mit MCP",badge:"Über die Standard-MCP-Verbindung",body:"ChatGPT, Microsoft Copilot, eigene Agents oder Workflow-Automatisierung: Jedes KI-Tool mit MCP-Unterstützung kann Smartbooks aufrufen. Unser Team unterstützt Sie bei der Einrichtung."}],choiceHeading:"Unsere KI, Ihre KI oder beides",choice:[{title:"Smartbooks KI-Controller",body:"In Smartbooks integriert: Analysen, Kommentare und Antworten mit den zugrunde liegenden Buchungen hinter jeder Zahl.",link:"Mehr zum KI-Controller"},{title:"Ihr eigenes KI-Tool",body:"Nutzt Ihr Team bereits Claude, ChatGPT, Copilot oder eine andere KI mit MCP? Verbinden Sie Smartbooks und nutzen Sie Ihre Zahlen dort, wo Sie ohnehin arbeiten."}],faqHeading:"Häufige Fragen",faq:[{q:"Welche KI-Tools funktionieren mit Smartbooks?",a:"Jedes KI-Tool, das MCP (Model Context Protocol) unterstützt, etwa Claude, ChatGPT, Microsoft Copilot oder eigene Agents. Claude verbinden Sie selbst in wenigen Minuten; bei anderen Tools hilft unser Team bei der Einrichtung."},{q:"Kann die KI buchen oder Daten ändern?",a:"Nein. Die Verbindung ist nur lesend: Es werden keine Buchungen erstellt und Ihre Quellbuchhaltung bleibt unverändert."},{q:"Sieht die KI alle Gesellschaften?",a:"Nein. Die KI nutzt Ihren Login und sieht nur die Gesellschaften, auf die Sie in Smartbooks Zugriff haben."},{q:"Was brauche ich für den Start mit Claude?",a:"Ein Smartbooks-Konto mit Zugriff auf mindestens eine Gesellschaft und einen Claude-Plan mit Custom Connectors. Bei Claude Team oder Enterprise fügt ein Admin den Connector hinzu."}],ctaHeading:"Stellen Sie Ihren Zahlen die erste Frage",ctaBody:"Im kostenlosen Pilot verbinden wir Ihre Buchhaltung und richten die KI-Verbindung für Sie ein."},_Q={virtualControllerChat:KY,nav:qY,planDemo:HY,onboardingMeeting:UY,hero:GY,founders:$Y,socialProof:ZY,trustedBy:YY,painPoints:QY,painPointsAlt:JY,aiControllerBlock:XY,steps:eQ,features:nQ,ctaBottom:tQ,webinar:iQ,liveWebinar:rQ,footer:aQ,teamStrip:oQ,announcement:sQ,integrations:lQ,pricingCards:dQ,pricing:cQ,featureComparison:uQ,testimonials:hQ,about:gQ,overOns:mQ,overOnsHero:pQ,contact:fQ,missionVision:bQ,cta:vQ,benefits:kQ,featuresHero:wQ,roadmap:xQ,knowledgeCenter:yQ,customerStories:jQ,articleCategories:SQ,forWhom:zQ,onboarding:AQ,onboardingPage:CQ,animatedStats:EQ,featureCategories:NQ,voorWie:IQ,seo:PQ,testimonialSection:TQ,pages:DQ,featureNav:BQ,projecten:MQ,consulting:FQ,cookieConsent:RQ,aiConnectors:OQ};function LQ(){if(typeof window>"u")return"nl";const e=window.location.pathname;return e==="/en"||e.startsWith("/en/")?"en":e==="/de"||e.startsWith("/de/")?"de":"nl"}Rn.use(kF).init({lng:LQ(),resources:{nl:{translation:HZ},en:{translation:VY},de:{translation:_Q}},fallbackLng:"nl",returnObjects:!0,interpolation:{escapeValue:!1}});const WQ=e=>{if(!e)return"nl";const n=e.startsWith("/")?e.slice(1):e;return n==="en"||n.startsWith("en/")?"en":n==="de"||n.startsWith("de/")?"de":"nl"},w0="__SMARTBOOKS_REACT_MOUNTED__";if(typeof window<"u"){if(window[w0])throw console.warn("[smartbooks] duplicate bundle load detected — skipping mount"),new Error("smartbooks: duplicate mount skipped");window[w0]=!0}ST({routes:$$},async({routePath:e})=>{const n=typeof e=="string"?e:typeof window<"u"?window.location.pathname:void 0;if(typeof n=="string"){const t=WQ(n);Rn.language!==t&&await Rn.changeLanguage(t)}});export{Cl as r};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.