[{"data":1,"prerenderedAt":357},["ShallowReactive",2],{"case:\u002Faabenforms":3},{"id":4,"title":5,"body":6,"cta":335,"description":344,"extension":345,"facts":346,"footnote":347,"kicker":348,"lede":349,"meta":350,"navigation":351,"path":352,"product":353,"seo":354,"stem":355,"__hash__":356},"content_en\u002Faabenforms.md","Case workflows that run themselves",{"type":7,"value":8,"toc":321},"minimark",[9,14,19,26,37,46,55,63,66,70,75,115,118,122,160,163,167,170,173,176,185,205,208,212,215,220,226,259,262,266,293,296,300,303,314],[10,11],"margin-note",{"term":12,"tone":13},"The interface","ash",[15,16,18],"h2",{"id":17},"modern-for-the-citizen-transparent-for-the-administration","Modern for the citizen. Transparent for the administration.",[20,21,22],"lede",{},[23,24,25],"p",{},"Citizens meet a fast, accessible frontend. The administration can read, review and sign off on the workflow itself, because it is a diagram rather than code.",[27,28,34],"case-figure",{"alt":29,"height":30,"src":31,"src2x":32,"width":33},"Citizen flow with MitID login, a four-step progress indicator and an explanation of what happens behind the scenes.",667,"\u002Fmedia\u002Faabenforms\u002Fcitizen-flow.webp","\u002Fmedia\u002Faabenforms\u002Fcitizen-flow@2x.webp",960,[23,35,36],{},"Citizen flow. Danish and English built in. Demo mode is labelled clearly, not hidden.",[27,38,43],{"alt":39,"height":40,"src":41,"src2x":42,"width":33},"The visual workflow editor showing the school transfer flow as connected event, condition and action nodes.",600,"\u002Fmedia\u002Faabenforms\u002Feditor.webp","\u002Fmedia\u002Faabenforms\u002Feditor@2x.webp",[23,44,45],{},"The visual editor. Built by people who know both the case area and the infrastructure, but legible to everyone who has to approve it.",[27,47,52],{"alt":48,"height":49,"src":50,"src2x":51,"width":33},"Administration dashboard showing Digital Post, MitID, tenants and audit log status.",733,"\u002Fmedia\u002Faabenforms\u002Foperations.webp","\u002Fmedia\u002Faabenforms\u002Foperations@2x.webp",[23,53,54],{},"Operations overview: integrations, queues, tenants and audit log.",[27,56,60],{"alt":57,"height":49,"src":58,"src2x":59,"width":33},"Evidence traces: a table of submissions with case, result, MitID status and step count.","\u002Fmedia\u002Faabenforms\u002Ftraces.webp","\u002Fmedia\u002Faabenforms\u002Ftraces@2x.webp",[23,61,62],{},"Every submission leaves a trace through each Danish service contract it touched.",[10,64],{"term":65,"tone":13},"Built for Denmark",[15,67,69],{"id":68},"integrations-follow-the-kombit-standards-directly","Integrations follow the KOMBIT standards directly",[20,71,72],{},[23,73,74],{},"Not a generic form builder with Danish fields bolted on. The service contracts are part of the engine.",[76,77,78,85,91,97,103,109],"rows",{},[79,80,82],"row",{"term":81},"MitID and NemLog-in",[23,83,84],{},"OIDC with PKCE and nonce. NSIS assurance is enforced inside the flow, not only at login.",[79,86,88],{"term":87},"CPR and CVR lookups",[23,89,90],{},"Serviceplatformen SF1520 and SF1530. Family and custody lookups via SF6006.",[79,92,94],{"term":93},"Digital Post (SF1601)",[23,95,96],{},"MeMo format, delivery receipts via Beskedfordeler, remote print as fallback.",[79,98,100],{"term":99},"Case index and distribution",[23,101,102],{},"Journalising via SF1470 and distribution to line-of-business systems via Fordelingskomponenten (SF2900).",[79,104,106],{"term":105},"ESDH",[23,107,108],{},"GetOrganized, SBSYS, WorkZone and Acadre. ESDH is a swappable connector, not a dependency.",[79,110,112],{"term":111},"Administrative law is encoded",[23,113,114],{},"Partshøring and appeal guidance are mandatory steps. Deadline calculation skips public holidays.",[10,116],{"term":117,"tone":13},"Beyond forms",[15,119,121],{"id":120},"a-full-case-engine-not-a-form-collector","A full case engine, not a form collector",[76,123,124,130,136,142,148,154],{},[79,125,127],{"term":126},"The whole journey",[23,128,129],{},"From application through journalising and decision to appeal and handover to the line-of-business system.",[79,131,133],{"term":132},"Lawful state changes enforced in the database",[23,134,135],{},"No code path, not the admin form nor JSON:API, can move a case into an unlawful state.",[79,137,139],{"term":138},"Every transition is a revision",[23,140,141],{},"Who, when and why. A complete audit trail.",[79,143,145],{"term":144},"Deadlines computed correctly",[23,146,147],{},"Working days in Danish local time, public holidays skipped, per case area.",[79,149,151],{"term":150},"CPR is always encrypted",[23,152,153],{},"AES-256. The system refuses to store plaintext.",[79,155,157],{"term":156},"Multi-tenant",[23,158,159],{},"One installation can serve several municipalities or departments with isolated data.",[10,161],{"term":162,"tone":13},"Case study",[15,164,166],{"id":165},"school-transfer-the-chain-nobody-assembled","School transfer: the chain nobody assembled",[23,168,169],{},"Building permits and address changes are linear. Workflows about children are not. They involve several parties with distinct rights, and sending to the wrong one is a data breach.",[23,171,172],{},"A school transfer requires somebody with parental custody to apply. Under shared custody, school choice is a significant decision under the Danish Parental Responsibility Act, so both holders must agree. Where disagreement is known, the municipality cannot proceed at all. The decision must reach both custody holders in Digital Post separately. That has been law since 21 March 2022.",[23,174,175],{},"Every building block exists in Danish infrastructure. CPR holds custody. SF1601 sends Digital Post. borger.dk has run co-signature by link for years. Nobody has assembled the chain. In OS2Forms the request for parallel parties in a workflow has been open since January 2026, and there is not a single issue about custody lookup anywhere in the public OS2 trackers.",[27,177,182],{"alt":178,"height":179,"src":180,"src2x":181,"width":33},"Flow diagram generated from the active ECA model, branching to school leader review, co-signature or partshøring.",132,"\u002Fmedia\u002Faabenforms\u002Fdiagram.webp","\u002Fmedia\u002Faabenforms\u002Fdiagram@2x.webp",[23,183,184],{},"The diagram is generated from the active flow, not drawn by hand. Green is start, blue is action, red is denial.",[76,186,187,193,199],{},[79,188,190],{"term":189},"Sole custody",[23,191,192],{},"The registry confirms a single holder. The case goes straight to the school leader at the requested school.",[79,194,196],{"term":195},"Shared custody, agreed",[23,197,198],{},"The other holder receives a secure link in Digital Post, signs in with MitID and approves. A 14 day window.",[79,200,202],{"term":201},"Known disagreement",[23,203,204],{},"The flow refuses to decide. The case moves to manual handling with partshøring, per the Ombudsman ruling FOB 2025-9.",[10,206],{"term":207,"tone":13},"Verified",[15,209,211],{"id":210},"tested-against-the-engine-not-against-a-mock","Tested against the engine, not against a mock",[23,213,214],{},"The tests create a real MitID session, post to the live endpoint and read the step trace the engine returns. The workflow layer is not mocked.",[216,217,219],"h3",{"id":218},"applicant-without-custody","Applicant without custody",[10,221,223],{"term":222},"Three steps and out",[23,224,225],{},"No case, no journal number, no letter. The registry said no, and the expensive part of the machinery never started.",[227,228,230,242,251],"status-list",{":log":229},"true",[231,232,235],"status-item",{"label":233,"state":234},"completed","done",[23,236,237,241],{},[238,239,240],"strong",{},"aabenforms_mitid_validate"," Citizen identity verified via NemID\u002FMitID national eID",[231,243,245],{"label":244,"state":244},"failed",[23,246,247,250],{},[238,248,249],{},"aabenforms_custody_verify"," Adult is not a registered custody holder of the child",[231,252,253],{"label":244,"state":244},[23,254,255,258],{},[238,256,257],{},"aabenforms_workflow_deny"," Ansøgningen blev ikke behandlet, fordi CPR-registret ikke bekræfter, at du har forældremyndighed",[10,260],{"term":261},"Honest status",[15,263,265],{"id":264},"pre-pilot-poc-here-is-exactly-what-that-means","Pre-pilot POC. Here is exactly what that means.",[227,267,268,274,281,287],{},[231,269,271],{"label":270,"state":234},"Running",[23,272,273],{},"Live on aabenforms.dk and api.aabenforms.dk.",[231,275,278],{"label":276,"state":277},"Test rails","partial",[23,279,280],{},"Against test and mock integrations. No Serviceplatformen certificate has been issued, so CPR lookups run against test data and Digital Post writes to a local log instead of SF1601.",[231,282,284],{"label":283,"state":234},"Honest",[23,285,286],{},"A step that ran against test data writes \"demo\" in the trace. An audit trail that lies is worse than no audit trail.",[231,288,290],{"label":289,"state":234},"Real",[23,291,292],{},"The engine, the case model, the branching, deadline calculation, encryption and audit. What is missing is certificates and a pilot municipality.",[10,294],{"term":295,"tone":13},"Watch it run",[15,297,299],{"id":298},"the-case-engine-step-by-step","The case engine, step by step",[23,301,302],{},"Two real ECA workflows recorded as they run: MitID, registry lookups, a decision, Digital Post and a GDPR trace. Watch them below, or open the interactive demo to step through every node.",[304,305,311],"flow-video",{"alt":306,"demo":307,"height":308,"name":309,"width":310},"AabenForms disability-costs workflow executing step by step to decision and SF2900","\u002Faabenforms-demo-en.html",900,"aabenforms-merudgifter-en",1440,[23,312,313],{},"Disability costs (SEL §41).",[304,315,318],{"alt":316,"demo":307,"height":308,"name":317,"width":310},"AabenForms school-transfer workflow executing step by step with co-signature","aabenforms-skoleskift-en",[23,319,320],{},"School transfer (joint custody).",{"title":322,"searchDepth":323,"depth":323,"links":324},"",2,[325,326,327,328,329,333,334],{"id":17,"depth":323,"text":18},{"id":68,"depth":323,"text":69},{"id":120,"depth":323,"text":121},{"id":165,"depth":323,"text":166},{"id":210,"depth":323,"text":211,"children":330},[331],{"id":218,"depth":332,"text":219},3,{"id":264,"depth":323,"text":265},{"id":298,"depth":323,"text":299},{"heading":336,"lede":337,"primary":338,"secondary":341},"Ready for a POC with real integrations","The next step is a pilot municipality that provides certificates and one concrete case area. The platform is already there.",{"label":339,"href":340},"See the live demo","https:\u002F\u002Faabenforms.dk",{"label":342,"href":343},"Book a walkthrough","\u002F#contact","AabenForms: an open source platform (Drupal 11 and Nuxt) for municipal self-service and case workflows. MitID, Digital Post, ESDH and a full case engine.","md","Eighteen municipal flows ready, six KOMBIT integrations, four ESDH systems. GPL, so the municipality owns it.","AabenForms by Fenix Nordic Solutions. Screenshots and test results are from the running platform, July 2026.","Self-service and case workflows for municipalities","AabenForms is an open source platform (Drupal 11 and Nuxt) for municipal self-service and case handling. Workflows are built as configuration in a visual editor and execute automatically. The result is a readable artifact rather than bespoke code inside a vendor codebase.",{},true,"\u002Faabenforms","AabenForms",{"title":5,"description":344},"aabenforms","Ka4BOt1udNEol7XaWDS-isy0Q8ILc-zpMlIsR-BjR3M",1792178152516]