Data-byggeklodser
Data-kategorien samler de byggeklodser, der henter, indlæser, omformer og sammenstiller data — fra danske offentlige registre (CVR, Datafordeler, Plandata, Retsinformation, Overenskomstdatabasen) over eksterne API'er og databaser til lokale værktøjer, der parser, kombinerer, opdeler og konverterer data undervejs i et flow. Brug dem til at skaffe fakta udefra og få dem på den rette form, før de sendes videre til fx en Sprogmodel, en løkke i Logik eller ud i en rapport via Output.
Hver byggeklods herunder er beskrevet med sine inputs, outputs, typiske brugsscenarier og en kort Brug når / Undlad når-vejledning, så du hurtigt kan vurdere, om den passer til dit flow. Bemærk, at de fleste opslags-byggeklodser (registre, API'er, databaser) ikke caches — de laver et live-opslag ved hver kørsel — mens de rent lokale omformere (Kombiner, Opdeler, Konverter Datatype, Sammenlign tekster, Excel til JSON) caches som andre byggeklodser.
Danske registre og ejendomsdata
CVR Opslag
Slår en virksomhed op i CVR-registret (Virk.dk's distributions-API) ud fra et 8-cifret CVR-nummer og returnerer stamdata, kontaktoplysninger, historik samt struktureret ejer- og datterselskabsinformation. Findes der ingen virksomhed for nummeret, standser byggeklodsen ikke flowet — udgangen Fundet bliver false, Status bærer beskeden Ingen virksomhed med CVR-nummer <cvr> findes på cvr.virk, og alle øvrige udgange er tomme.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| CVR-nummer | int | 8-cifret CVR-nummer (10000000–99999999). Kan tilsluttes fra en anden byggeklods. |
| Hent regnskabstal | bool | Standard false. Henter nøgletal (omsætning, bruttofortjeneste, resultat, balance, egenkapital) fra seneste maskinlæsbare årsrapport (XBRL/iXBRL). Koster et ekstra API-kald pr. opslag. |
Outputs
Standard (tekst): Virksomhedsnavn, Adresse (beliggenhedsadresse), Hovedbranche (kode - tekst), Virksomhedsform (fx Anpartsselskab (ApS)), Status (sammensat status, fx Aktiv) og Data (hele CVR-objektet som JSON-tekst; {} ved ikke-fundet).
Avanceret (tekst): Telefon, Email, Hjemmeside (kun aktuelle, ikke-hemmelige oplysninger), Stiftelsesdato, Antal ansatte, Kvartalsansatte, Årsansatte, Reklamebeskyttet (Ja/Nej), Bibranche 1–3, Postadresse, Binavne, Navnehistorik, Statushistorik, Livsforløb, Deltagere (personer og virksomheder grupperet efter rolle, fx [Direktion]), Produktionsenheder (P-numre med adresse og branche), Attributter, Regnskaber (regnskabsperioder), Fusioner og Spaltninger. Flerlinjede udgange adskiller poster med linjeskift.
Avanceret (struktureret):
- Ejere (
list[dict]) — juridiske ejere opstrøms fra virksomhedens ejerregister:{cvr, navn, type: "person"|"virksomhed", ejerandel_procent, stemmeret_procent}. Kun ejere med en aktuel ejerandel eller stemmeret medtages; andele konverteres fra CVR's decimalbrøker til procent (0.6667→66.67). - Datterselskaber (
list[dict]) — virksomheder denne virksomhed ejer, fundet via en omvendt søgning:{cvr, navn, ejerandel_procent, stemmeret_procent}. Højst 50 resultater; fejler søgningen, returneres en tom liste uden at standse flowet. - Antal ansatte (tal) (
intellernull) — seneste månedlige antal ansatte som heltal. - Regnskab (nøgletal) (
dict) —{valuta, omsaetning, bruttofortjeneste, resultat, balance, egenkapital, omsaetning_eur, balance_eur, egenkapital_eur, periode_slut}. Tomt objekt hvis Hent regnskabstal er slået fra, eller ingen maskinlæsbar årsrapport findes.omsaetningmangler ofte for regnskabsklasse B. - Fundet (
bool) —truenår en virksomhed blev fundet, ellersfalse.
Typiske brugsscenarier
- Berige en sagsliste med CVR-numre med navn, adresse, branche og status i en løkke, hvor et enkelt ugyldigt nummer ikke må stoppe hele kørslen (forgren på Fundet med Hvis/Ellers).
- Kortlægge ejerstruktur — hvem ejer virksomheden, og hvad ejer den selv — til kontrol af tilknyttede virksomheder.
- SMV-vurdering eller kreditcheck med Hent regnskabstal slået til, så antal ansatte, balance og omsætning kan holdes op mod tærskler (EUR-beløb er omregnet fra DKK).
- Validere en indtastet leverandør eller ansøger: er virksomheden aktiv, og stemmer navn og adresse?
Brug når / Undlad når
- Brug Hent regnskabstal når du skal bruge økonomiske nøgletal, fx til SMV-vurdering eller kreditcheck.
- Undlad Hent regnskabstal når du kun skal bruge stamdata (navn, adresse, branche) — det sparer tid og kald.
- Undlad når du kun har et virksomhedsnavn: byggeklodsen slår udelukkende op på CVR-nummer, ikke på navn.
- Undlad at bruge byggeklodsen som fejlgreb for API-problemer: manglende legitimationsoplysninger, timeout, netværksfejl, ikke-200-svar og ugyldigt svar standser stadig flowet; kun "gyldigt nummer, nul resultater" håndteres blødt.
Resultatet caches ikke, da det er et live-opslag mod CVR. Byggeklodsen kræver, at platformen er konfigureret med CVR API-legitimationsoplysninger (CVR_API_USERNAME/CVR_API_PASSWORD); ellers fejler den med en forklarende besked.
Relaterede byggeklodser: Øvrige opslagsbyggeklodser i Data (fx SMV-status, som bygger oven på CVR-data); forgrening på Fundet med Hvis/Ellers og løkker i Logik; se også oversigten.
SMV-status
Afgør, om en virksomhed er en SMV efter EU's definition (Kommissionens henstilling 2003/361/EF) ud fra ét CVR-nummer. Byggeklodsen går virksomhedens ejerskabsgraf (tilknyttede virksomheder med >50 % tælles 100 % og transitivt; partnere med 25–50 % tælles forholdsmæssigt), henter antal ansatte og seneste regnskabstal for hver virksomhed i gruppen, omregner DKK til EUR og anvender tærsklerne for ansatte, omsætning og balance.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| CVR-nummer | int | 8-cifret CVR-nummer på den virksomhed, der vurderes. Påkrævet. |
| Ansatte-loft | int | Øvre grænse for samlede ansatte (årsarbejdsenheder). Standard 250. Avanceret. |
| Omsætningsloft (EUR) | int | Øvre grænse for samlet omsætning. Standard 50.000.000. Avanceret. |
| Balanceloft (EUR) | int | Øvre grænse for samlet balance. Standard 43.000.000. Avanceret. |
| Mikro: ansatte-loft | int | Underkategori-grænse for mikrovirksomhed. Standard 10. Avanceret. |
| Mikro: finansielt loft (EUR) | int | Finansiel grænse for mikrovirksomhed. Standard 2.000.000. Avanceret. |
| Lille: ansatte-loft | int | Underkategori-grænse for lille virksomhed. Standard 50. Avanceret. |
| Lille: finansielt loft (EUR) | int | Finansiel grænse for lille virksomhed. Standard 10.000.000. Avanceret. |
| EUR/DKK-kurs | float | Kurs til omregning af DKK-beløb. 0 (standard) bruger systemets standardkurs. Avanceret. |
| Maks. virksomheder i gruppen | int | Loft for hvor mange forbundne virksomheder der hentes (1–500). Standard 100. Avanceret. |
Alle felter ud over CVR-nummeret er avancerede tærskel-justeringer med EU-standardværdier; behold dem, medmindre lovgivningen har ændret tærsklerne, eller du bevidst vil bruge en fast kurs.
Outputs
- Er SMV (bool) —
truehvis gruppen samlet holder sig under tærsklerne. - Kategori (str) — én af
Mikrovirksomhed,Lille virksomhed,Mellemstor virksomhedellerStor virksomhed (ikke SMV). - Samlede ansatte (float) — vægtet sum af ansatte i gruppen (partnere med deres andel).
- Samlet omsætning (EUR) og Samlet balance (EUR) (float) — vægtede summer; tomme (
null), hvis tallet mangler for blot én virksomhed i gruppen. - Gruppe (liste af dict, avanceret) — hver fundet virksomhed med
cvr,navn,relation(self/affiliated/partner), branchekode,effektiv_procent, ansatte, regnskabstal i lokal valuta og EUR samtrelationer(direkte ejer-kanter til andre virksomheder i gruppen). Målvirksomheden og tilknyttede virksomheder har desudenpersonerogreelle_ejere. - Forklaring (str) — læsbar begrundelse for afgørelsen, inkl. hvilket kriterium der var afgørende.
- Advarsler (liste af str, avanceret) — fx manglende ansattetal, manglende regnskabstal, afkortet gruppe eller virksomheder der ikke kunne hentes.
- Reelle ejere (liste af dict) — de ultimative reelle ejere på tværs af målvirksomheden og dens tilknyttede virksomheder, hver med
via_cvr/via_navnfor det selskab personen ejer direkte. - Relationsgraf (liste af dict, avanceret) — hele koncernens ejerstruktur som rettede kanter
{ejer_cvr, ejer_navn, ejet_cvr, ejet_navn, ejerandel_procent, stemmeret_procent}.
Sådan afgøres status
- Ansatte-loftet er hårdt: når de samlede ansatte når eller overstiger loftet, er virksomheden aldrig en SMV.
- Under loftet er det nok, at enten omsætning eller balance ligger under sin tærskel (ELLER-reglen i art. 2). Omsætning mangler ofte i regnskabsklasse B, så afgørelsen hviler tit på balancen.
- Mangler begge finansielle tal, afgøres status alene på ansatte, og det fremgår af Forklaring og Advarsler.
- En virksomhed uden registreret ansattetal tælles som 0 — det samlede tal er derfor en nedre grænse, og SMV-status kan være for mild. Advarsler nævner de berørte CVR-numre.
- Investor-undtagelserne (art. 3 §2 a-d), reglen om offentlige organer (art. 3 §4) og to-års-reglen (art. 4 §2) anvendes ikke automatisk og skal vurderes manuelt; Advarsler minder om det på hver kørsel.
- Slår opslaget på selve start-CVR-nummeret fejl, fejler byggeklodsen. Kan en forbundet virksomhed ikke hentes, udelades den med en advarsel.
Byggeklodsen kræver, at CVR API-adgang er konfigureret på platformen (CVR_API_USERNAME/CVR_API_PASSWORD); ellers fejler den med en tydelig besked. Resultatet caches ikke, da det er et live-opslag i CVR.
Typiske brugsscenarier
- Tjek af SMV-status før tildeling af tilskud, puljer eller SMV-rabatter, hvor EU-definitionen er et krav.
- Automatisk screening af ansøgere i en sagsbehandlingsflow, hvor Er SMV styrer en efterfølgende Hvis/ellers-gren.
- Kortlægning af en kundes koncernstruktur og reelle ejere til KYC- eller onboardingformål via Gruppe, Reelle ejere og Relationsgraf.
- Udarbejdelse af en dokumenteret vurdering, hvor Forklaring og Advarsler indsættes i en rapport til manuel efterkontrol.
Brug når / Undlad når
- Brug når du har et CVR-nummer og skal have hele koncernvurderingen i ét opslag, inkl. begrundelse og forbehold.
- Brug når du kan lade tærsklerne stå på standardværdierne — de følger EU's officielle definition og skal kun ændres, hvis reglerne ændrer sig.
- Undlad når afgørelsen afhænger af investor-undtagelser, offentligt ejerskab eller to-års-reglen — dem vurderer byggeklodsen ikke.
- Undlad at sætte Maks. virksomheder højt på store koncerner uden grund; et lavt loft giver hurtigere opslag, men Advarsler fortæller, hvis gruppen blev afkortet.
Relaterede byggeklodser: Data-byggeklodser (bl.a. CVR Opslag, som leverer de bagvedliggende virksomheds- og regnskabsdata), Logik til at forgrene på Er SMV, Output til at samle Forklaring og Advarsler i et dokument.
Ejendomsoverblik
Slår én fast ejendom op i tre af Datafordelers registre på én gang — Matriklen (MAT), Ejendomsbeliggenhed (EBR) og Bygninger (BBR) — ud fra en adresse eller et BFE-nummer, og returnerer resultaterne både enkeltvis og samlet. En adresse oversættes først til BFE-nummer og adgangsadresse via DAWA; derefter hentes de tre kilder parallelt, og hver kilde fejler uafhængigt af de andre.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Adresse | str | Dansk adresse, fx Rentemestervej 82, 2400 København NV. Oversættes automatisk til ejendommens BFE-nummer og adgangsadresse. |
| BFE-nummer | int | Avanceret. Ejendommens BFE-nummer (0 = ikke angivet). Har forrang over adressen, hvis begge er udfyldt. |
Mindst ét af felterne skal være udfyldt — ellers fejler byggeklodsen med "Angiv en adresse eller et BFE-nummer". Kan adressen ikke slås op, eller findes der intet BFE-nummer for den, fejler byggeklodsen ligeledes.
Outputs
- Matrikel (str): Rækker fra
MAT_SamletFastEjendomfor BFE-nummeret som JSON-liste (id_lokalId,BFEnummer), højst 50. - Bygninger (str): Rækker fra
BBR_Bygningpå adgangsadressen som JSON-liste (id_lokalId, bygningsnummer, anvendelse, opførelsesår, samlet bygningsareal), højst 50. Kræver en adresse — gives kun et BFE-nummer, er listen tom. - Beliggenhed (str, avanceret): Rækker fra
EBR_Ejendomsbeliggenhedsom JSON-liste (id_lokalId,husnummerLokalId,bestemtFastEjendomBFENr), højst 50. - Data (str): Alle tre kilder samlet i ét JSON-objekt med nøglerne
matrikel,bygninger,beliggenhedogbfe_nummer. - Resumé (str, avanceret): Én tekstlinje med BFE-nummeret og antal rækker pr. kilde, fx
BFE-nummer: 12345 · Matrikel: 1 · Bygninger: 2 · Beliggenhed: 1. En kilde, der fejlede, står somingen adgang.
En kilde, der fejler (fx manglende adgang til registret), giver en tom liste i sit eget output og markeres i Resumé — de øvrige kilder leveres stadig. Kun hvis selve adresseopslaget fejler, stopper byggeklodsen.
Typiske brugsscenarier
- Hurtigt ejendomsopslag i et sagsbehandlingsflow: adressen fra en henvendelse giver BFE-nummer, matrikel og bygningsliste, som sendes videre til en Sprogmodel eller en Skabelon.
- Kontrol af, hvilke bygninger (anvendelse, opførelsesår, areal) der er registreret på en adresse, fx som led i byggesags- eller tilsynsflows.
- Berigelse af en liste af adresser i en Løkke, hvor
Data-outputtet gemmes pr. ejendom til videre behandling. - Konvertering fra adresse til BFE-nummer som første trin, før mere specifikke opslag i Datafordeler-byggeklodsen.
Brug når / Undlad når
- Brug når: du har brug for et standardoverblik (matrikel, beliggenhed, bygninger) uden selv at skrive GraphQL-forespørgsler.
- Brug når: du kender BFE-nummeret på forhånd og kun har brug for matrikel og beliggenhed — udfyld BFE-nummer og lad Adresse stå tom.
- Undlad når: du skal bruge ejendomsvurdering (VUR), ejerforhold eller andre felter end de faste, der hentes her — brug Datafordeler-byggeklodsen med forespørgselsdesigneren i stedet.
- Undlad når: du kun har et BFE-nummer og har brug for bygningsdata — BBR slås op via adgangsadressen, så uden adresse er
Bygningeraltid tom.
Resultatet caches ikke: opslaget går gennem organisationens (eller teamets) Datafordeler-legitimation, og de åbne registre (MAT, EBR, BBR) kræver som minimum platformens Datafordeler API-nøgle. Er den Datafordeler-nøgle, en kilde kræver, ikke sat op, står kilden som ingen adgang i Resumé. Byggeklodsen kan kaldes som værktøj fra chatten.
Relaterede byggeklodser: Data-byggeklodser (herunder Datafordeler), Logik-byggeklodser (Løkke Start/Slut til flere adresser), AI-byggeklodser, Oversigt
Datafordeler
Kører en GraphQL-forespørgsel mod et af Danmarks offentlige registre via Datafordeler (BBR, MAT, DAR, VUR, EBR, DAGI, EJF m.fl.). Forespørgslen designes i et vindue, og de variabler den erklærer bliver til inputs på byggeklodsen — og et erklæret $polygon lader dig slå op i et geografisk område med en valgfri afstand i meter.
Forespørgslens variabler bliver byggeklodsens inputs. Erklærer du fx query($cpr: String!), får byggeklodsen et cpr-input. Værdien sendes som en rigtig GraphQL-variabel — den skrives aldrig ind i forespørgselsteksten.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Forespørgsel | str | Konfigurationen fra forespørgsels-designeren (datakilde, evt. registerversion, GraphQL-tekst, erklærede variabler og deres standardværdier). Er den tom, stopper trinnet med en fejl. |
| Én pr. variabel | efter typen | Hver variabel, forespørgslen erklærer, bliver et input. Int/Long læses som heltal, Float som decimaltal, Boolean som ja/nej, String/ID/DateTime som tekst; en listevariabel må modtage en JSON-liste som tekst. En variabel med ! er påkrævet — mangler den, stopper trinnet, før Datafordeler kaldes. |
| Adresse | str | Vises, når forespørgslen erklærer $bfe eller $husnummerid — byggeklodsen slår adressen op via det offentlige adresse-API (DAWA) og udfylder dem, hvis inputtet står tomt. |
| Område | str | Vises, når forespørgslen erklærer $polygon. Området der søges i: WKT, GeoJSON, en koordinatliste eller minx,miny,maxx,maxy — altid EPSG:25832; længde/bredde afvises. Huller og flere flader sendes med, når området kommer som MULTIPOLYGON, GeoJSON-MultiPolygon eller en FeatureCollection med én flade pr. Feature; naboflader, der deler kant (fx matrikler), lægges sammen til ét omrids; en koordinatliste er altid én flade uden huller. |
| Afstand (meter) | float | Vises sammen med Område. Udvider området, før der søges. 0 søger kun i selve området. |
Indbyggede variabler
Tre navne udfylder byggeklodsen selv, hvis inputtet står tomt: $bfe (ejendommens BFE-nummer) og $husnummerid (adgangsadressens id) slås op ud fra det automatiske Adresse-input, og $adresse er adresseteksten. De hører til ejendoms- og adresseregistrene; DAGI slås op på sine egne koder, så dér erklærer du en almindelig variabel, fx $kommunekode. Erklærer du $polygon, udfyldes $bbox som rammen om det udvidede område.
{{now}} er den eneste pladsholder, der findes: den erstattes med platformens aktuelle tidsstempel. Registrenes registreringstid/virkningstid accepterer ikke en variabel, så tidspunktet skrives ind i teksten.
Slå op i et område
Erklær $polygon og filtrér på entitetens geometri-felt:
query($polygon: String!) {
BBR_Bygning(
first: 1000
registreringstid: "{{now}}"
virkningstid: "{{now}}"
where: { byg404Koordinat: { intersects: { wkt: $polygon, crs: 25832 } } }
) {
nodes { id_lokalId byg021BygningensAnvendelse byg404Koordinat { wkt } }
}
}
Alle koordinater er EPSG:25832 (meter) — det er den eneste ramme registrene slår op i, og crs skal skrives som tallet 25832 uden anførselstegn. Længde/bredde-koordinater (EPSG:4326) bliver afvist med en besked i stedet for bare at finde ingenting.
Hver række med geometri får et ekstra felt afstand_m: afstanden i meter fra rækkens egen geometri til det oprindelige område, altså før afstanden blev lagt til. Ét opslag med 750 meter kan derfor også svare på 150 og 300 meter bagefter. Det kræver, at forespørgslen henter geometrien med (byg404Koordinat { wkt } ovenfor).
Datafordeler afviser et område, der ikke er en gyldig geometri — og et omrids tegnet i et GIS-program er det tit (fx en spids ud og tilbage eller en kant, der krydser sig selv). Byggeklodsen retter derfor området, før det sendes. Afviser Datafordeler forespørgslen, fordi den fylder for meget, forenkles området med højst 0,5 m — eller 1 eller 2 m — og forespørgslen sendes igen; er der sat en afstand, udvides søgeområdet med det samme stykke, så intet inden for afstanden falder udenfor. Bliver den afvist også ved 2 m, stopper trinnet med en besked om at dele området op. Er området ændret, står det i Data under omraade_tilpasset (rettet, forenklet_m og en dansk besked).
first højt nok — ellers tæller opslaget for lavtRegistret returnerer én side ad gangen, og first er sidens størrelse. Maksimum er 1000; et højere tal afvises. Et 750-meter-område om en by har flere bygninger end det, og resten kommer ikke med i svaret uden at noget siger fra.
Vælg én af tre: sæt first: 1000, hent næste side med after: "<endCursor>" fra pageInfo { hasNextPage endCursor }, eller indsnævr på forhånd — fx byg021BygningensAnvendelse: { in: ["120","130","140"] } for kun at få beboelse — så én side rækker.
Outputs
- Data (str) — det komplette GraphQL-svar som JSON, plus
omraade_tilpasset, når området er rettet eller forenklet. - Resultater (str) — de fundne rækker (
nodes-listen) som JSON-liste. Ved områdeopslag får hver række med geometri det ekstra feltafstand_m. - Antal (int) — antal fundne rækker. Bemærk at registret returnerer én side ad gangen (
first, højst 1000), så tallet er sidens størrelse, ikke nødvendigvis det samlede antal.
Typiske brugsscenarier
- Hent bygningsoplysninger (BBR) for en ejendom ud fra en adresse, som et Sprogmodel-trin derefter sammenfatter.
- Slå ejendomsvurdering (VUR) eller matrikeldata (MAT) op på en liste af BFE-numre fra et tidligere trin.
- Find alle beboelsesbygninger inden for fx 750 meter fra et lokalplanområde (
$polygon+ Afstand) og filtrér bagefter påafstand_m. - Hent ejeroplysninger (EJF) i et sagsbehandlingsflow, når organisationen har sat Datafordeler op under Integrationer.
Brug når / Undlad når
- Brug når du har brug for autoritative registerdata om ejendomme, adresser, bygninger eller administrative områder, og kan formulere opslaget som én GraphQL-forespørgsel mod ét register.
- Brug når opslaget skal ske i et område — byggeklodsen omregner og udvider området og beregner afstand pr. række.
- Undlad når du skal joine data på tværs af flere registre i ét kald — Datafordeler tillader kun ét rodfelt pr. forespørgsel; brug flere Datafordeler-trin i stedet.
- Undlad når resultatmængden kan overstige én side (1000 rækker), medmindre du indsnævrer forespørgslen eller håndterer
after/endCursorselv — overskydende rækker udelades uden fejl.
Resultatet caches ikke: byggeklodsen autentificerer via organisationens (eller teamets) Datafordeler-integration, og et cachet svar ville ellers kunne deles på tværs af organisationer. Åbne registre (BBR, MAT, DAR, VUR, EBR, DAGI) virker med platformens standardadgang; adgangsbegrænsede registre (EJF, CPR, SVR) kræver, at organisationen har sat Datafordeler op under Integrationer med registret slået til — ellers afvises kaldet, før det sendes. En forespørgsel, som registret afviser (GraphQL-fejl, ukendt datakilde eller version), rapporteres som en inputfejl, du selv retter i designeren; netværks- og legitimationsfejl som en kørselsfejl.
Ældre versioner
datafordeler@1 og @2 er udfasede, men kører fortsat uændret i de gemte flows, der bruger dem. v1 satte faste pladsholdere ({{bfe}}, {{adresse}}) ind i forespørgselsteksten og havde faste Adresse- og BFE-felter; v2 indførte variabler som inputs, men kan ikke slå op i et område.
Relaterede byggeklodser: Data (fx CVR Opslag, Ejendomsoverblik og Plandata), AI (Sprogmodel til at sammenfatte svaret), Logik (Løkke Start/Slut til opslag på en liste af ejendomme), Oversigt.
Plandata
Slår lokalplaner, kommuneplanrammer og zonestatus op i Plandata.dk (det landsdækkende planregister) for et sted, du angiver som adresse, som EPSG:25832-koordinat eller som et område. Kræver ingen API-nøgle — både Plandata.dk's WFS og DAWA (adresseopslag) er offentlige.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Adresse | str | Dansk adresse, fx Arne Jacobsens Allé 7, 2300 København S. Slås op i DAWA og omregnes til en koordinat. |
| Medtag forslag | bool | Tag også endnu ikke vedtagne lokalplan- og kommuneplanforslag med (standard: til). Forslagene lander under nøglen forslag i Data, ikke i de to hovedlister. |
| Område | str | Valgfri. WKT (POLYGON, MULTIPOLYGON, POINT), GeoJSON (geometri, Feature eller FeatureCollection), en koordinatliste [[x, y], ...] eller en ramme minx,miny,maxx,maxy — alt i EPSG:25832. Har forrang over både X/Y og Adresse. Huller og flere flader tæller med (MULTIPOLYGON, GeoJSON-MultiPolygon eller én Feature pr. flade): planer, der kun ligger i et hul, kommer ikke med, areal_ha regner hullerne fra, og naboflader, der deler kant, lægges sammen til ét omrids. |
| Afstand (meter) | float | Udvider Område med så mange meter, før der søges (0–50.000; standard 0 = kun selve området). Ignoreres ved adresse- og koordinatopslag. |
| X (østlig, EPSG:25832) | float | Avanceret. Koordinat i stedet for adressen; har forrang over Adresse. Skal udfyldes sammen med Y. |
| Y (nordlig, EPSG:25832) | float | Avanceret. Nordlig koordinat; skal udfyldes sammen med X. |
Prioritering: Område > X/Y > Adresse. Udfyldes kun én af X og Y, fejler byggeklodsen frem for at falde tilbage på adressen; er alle tre tomme, fejler den også. Længde/bredde-koordinater (EPSG:4326) afvises med en fejlbesked.
Outputs
- Opsummering (str) — læsbar tekst om planforholdene, klar til visning eller til en sprogmodel.
- Zonestatus (str) — byzone, landzone eller sommerhusområde; et bedste bud (fald tilbage på en kommuneplanrammes fremtidige zone markeres "(planlagt)", og uregistreret byzone kan stå som "Ukendt"). Et område kan dække flere zoner, som så adskilles med semikolon.
- Lokalplaner (str) — JSON-liste over vedtagne lokalplaner (plannr, plannavn, dokument-link m.m.).
- Kommuneplanrammer (str) — JSON-liste over vedtagne kommuneplanrammer.
- Data (str, avanceret) — det komplette svar som JSON. Ved punktopslag med
koordinat; ved områdeopslag i stedetomraade(areal_ha,bbox,afstand_mfor området som givet, før afstanden),afskaaretogmaks_pr_lag. - Antal planer (int) — antal vedtagne planer, dvs. summen af de to lister (forslag tælles ikke med).
Et områdeopslag henter højst 500 planer pr. lag. Rammes loftet, står det i Opsummering ("listen er afkortet for …") og i afskaaret i Data — indsnævr da området. Planernes egen geometri returneres ikke. Resultatet caches ikke (live-opslag).
Typiske brugsscenarier
- Slå planforhold op for en adresse fra en sagsansøgning og lad en sprogmodel vurdere, om et byggeønske strider mod lokalplanen.
- Finde alle lokalplaner og kommuneplanrammer inden for fx 750 meter af et projektområde (polygon + afstand) til en høringsliste.
- Tjekke zonestatus (byzone/landzone) for en liste af ejendomme i en løkke.
- Kæde et koordinat fra et andet trin (fx et matrikelopslag) direkte ind via X/Y.
Brug når / Undlad når
- Brug når du har brug for lokalplaner, kommuneplanrammer eller zonestatus for ét sted eller ét område i Danmark.
- Brug Område + Afstand, når spørgsmålet er "hvilke planer ligger tæt på" — et punktopslag finder kun planer, der dækker selve punktet.
- Undlad når du har brug for planernes omrids eller afstande til dem — svaret indeholder ingen geometri.
- Undlad hvis du har brug for en juridisk endelig zoneafgørelse; Zonestatus er et bedste bud.
- Undlad at give koordinater i længde/bredde (WGS84); byggeklodsen arbejder kun i EPSG:25832.
Relaterede byggeklodser: Data (Datafordeler til BBR/matrikel-opslag på samme adresse eller område), AI (Sprogmodel til at tolke opsummeringen), Logik (Løkke til mange adresser), Oversigt.
Eksterne API'er og databaser
Hent fra API
Sender ét HTTP-kald (GET, POST, PUT, PATCH eller DELETE) til en ekstern URL og returnerer statuskode, svar-body og svar-headers. Er svaret en fil (PDF, Word, Excel eller et billede), leveres den i stedet som fil-output, klar til fx Indlæs dokument.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| URL | str | Fuld adresse inkl. protokol (http:// eller https://). Påkrævet. Adresser på localhost og private IP-områder afvises (SSRF-beskyttelse). |
| Metode | str | HTTP-metode: GET (standard), POST, PUT, PATCH eller DELETE. |
| Headers | str | Request-headers som JSON-objekt, fx {"Authorization": "Bearer …", "Content-Type": "application/json"}. Alle nøgler og værdier skal være strenge. Standard: {}. |
| Body | str | Indhold der sendes med ved POST/PUT/PATCH; ignoreres ved GET/DELETE. Er Content-Type sat til application/json, valideres body som gyldig JSON før kaldet sendes. |
| Timeout | int | Sekunder der ventes på svar, før kaldet opgives (1–120). Standard: 30. |
| Maks. genforsøg | int | Antal automatiske genforsøg ved HTTP 429 og 5xx (0–10). Standard: 3. 0 slår genforsøg fra. |
| Forsinkelse ved genforsøg (sek.) | float | Ventetid før første genforsøg (0,5–30); fordobles for hvert forsøg. Standard: 2,0 → 2 s, 4 s, 8 s. |
Outputs
- Statuskode (
int) — HTTP-svarets statuskode. Bemærk: et 4xx/5xx-svar stopper ikke flowet; koden returneres, og det er op til de efterfølgende byggeklodser at reagere på den. - Svar-body (
str) — svarets indhold som tekst, afkodet med tegnsættet fraContent-Type(ellers UTF-8). Tom, når svaret er en fil. - Svar-headers (
str) — svarets headers som JSON-objekt. - Fil (
filejson) — udfyldes, når svaret har en binærContent-Type(application/pdf, Word/Excel-formater ellerimage/*). Filnavnet tages fraContent-Disposition-headeren, ellers fra sidste led i URL'en. Tom ved tekstsvar.
En API-nøgle lægges bedst i en organisationsvariabel og skrives som {database.NØGLE} i URL eller headers. Står der stadig en {database.…}-henvisning i URL eller headers, når kaldet skal sendes — typisk fordi variablen ikke er sat på organisationen — sendes kaldet ikke. Trinnet stopper med en besked, der navngiver variablen, frem for at sende henvisningen videre som nøgle og få et 401 retur fra tjenesten. Body tjekkes ikke: den kan med vilje indeholde tekst, der bare ligner en henvisning.
Svar over 10 MB afvises med en fejl. Et binært svar med tom body giver ligeledes en fejl, da der ikke er nogen fil at levere. Byggeklodsen henter kun det rå svar og kan ikke udføre JavaScript — brug tjenestens API (typisk JSON) frem for at hente HTML-sider. Resultatet caches ikke, da hvert kald er et live-opslag.
Typiske brugsscenarier
- Slå data op i et eksternt REST-API (fx vejrdata eller et fagsystem) og sende JSON-svaret videre til Python Kode eller en sprogmodel.
- Sende resultatet af et flow tilbage til et andet system med
POST/PUT, fx oprette en sag eller opdatere en post, og tjekke Statuskode bagefter. - Hente en PDF fra en download-URL og forbinde Fil til Indlæs dokument for at OCR-behandle indholdet.
- Kalde en webhook eller et internt API i organisationen, der er tilgængeligt på en offentlig adresse.
Brug når / Undlad når
- Brug når: tjenesten udstiller et struktureret API, og et enkelt kald pr. kørsel er tilstrækkeligt.
- Brug når: du skal hente en fil (PDF, billede, regneark) fra en URL og behandle den videre i flowet.
- Undlad når: kaldet ikke er idempotent (fx en betaling) — sæt i så fald Maks. genforsøg til
0, ellers kan et genforsøg dublere handlingen. - Undlad når: du har brug for OAuth-flows, GraphQL-subscriptions, WebSockets eller anden kompleks integration — brug Python Kode.
- Undlad når: målet er localhost eller en privat IP-adresse; kaldet afvises.
Relaterede byggeklodser: Input (Indlæs dokument til OCR af hentede filer), Logik (Python Kode til at parse svaret og reagere på statuskoden), de øvrige Data-byggeklodser (Udtræk data-felter, Opdeler), Oversigt over byggeklodser.
Databaseforespørgsel
Kører én parametriseret SQL-forespørgsel mod en ekstern PostgreSQL- eller MySQL-database og returnerer resultatet som JSON. Databasetypen genkendes ud fra forbindelsesstrengens skema, og skrivende sætninger (INSERT/UPDATE/DELETE) committes automatisk.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Forbindelsesstreng | str | Database-URL: postgresql://bruger:adgangskode@host:5432/database (også postgres://) eller mysql://bruger:adgangskode@host:3306/database. Skal indeholde et hostnavn. Forbindelser til localhost og private IP-intervaller afvises (SSRF-beskyttelse), og hostnavne der løser til private adresser blokeres ligeledes. Påkrævet. |
| Forespørgsel | str | SQL-forespørgslen. Brug %s som pladsholder for parametre — for både PostgreSQL og MySQL. Påkrævet. |
| Parametre | str | JSON-array med værdierne til pladsholderne i rækkefølge, fx ["active", 42, true]. Tom streng eller [] betyder ingen parametre. Andet end et JSON-array afvises. Standard: []. Avanceret. |
| Timeout | int | Sekunder (1–300), standard 30. Forbindelsestimeouten er altid højst 30 s uanset værdien. På PostgreSQL sættes desuden statement_timeout til værdien, så selve forespørgslen afbrydes; på MySQL gælder timeouten kun forbindelsen — en langsom forespørgsel afbrydes ikke. Avanceret. |
| Max rækker | int | Maks antal rækker der hentes (1–10.000), standard 1000. Overskydende rækker droppes stille (kun logget) — "Antal rækker" afspejler det hentede antal, ikke det samlede. Avanceret. |
Byggeklodsen har ingen dynamiske inputs.
Outputs
- Rækker (str) — JSON-array af resultatrækker som objekter (
{kolonne: værdi}); værdier der ikke er JSON-native (datoer, decimaler, UUID) serialiseres som tekst.[]for sætninger uden resultatsæt. - Antal rækker (int, avanceret) — antal hentede rækker for SELECT, eller antal påvirkede rækker for INSERT/UPDATE/DELETE.
- Kolonner (str, avanceret) — JSON-array af kolonnenavne;
[]for sætninger uden resultatsæt.
Et resultatsæt over 10 MB (serialiseret JSON) afvises med fejl — reducér "Max rækker" eller filtrér forespørgslen. Resultatet caches ikke, da hver kørsel er et live-opslag mod databasen og kan have sideeffekter.
Typiske brugsscenarier
- Slå stamdata op (kunde, sag, produkt) ud fra et id eller en værdi udtrukket tidligere i flowet, og lade et Sprogmodel-trin bruge dem som kontekst.
- Hente en afgrænset liste (fx sager ændret siden en dato) som input til en løkke, der behandler hver række.
- Skrive resultatet af en analyse tilbage til et system via INSERT/UPDATE og læse "Antal rækker" som kvittering.
- Berige et dokument med opslag i en rapporteringsdatabase før det sendes til Skabelon eller Tekst til dokument.
Brug når / Undlad når
- Brug når: forespørgslen bruger værdier udefra — send dem som parametre i JSON-arrayet, aldrig sammenkædet ind i SQL-teksten.
- Brug når: en tung forespørgsel på PostgreSQL har brug for mere end 30 sekunder — hæv Timeout (op til 300 s).
- Undlad når: databasen kun kan nås via localhost eller et privat netværk — den slags forbindelser afvises, og byggeklodsen kan ikke tilgå AgentBase's egen database.
- Undlad når: du har brug for alle rækker i en stor tabel — grænsen er 10.000 rækker og 10 MB; filtrér i stedet i forespørgslen.
Bemærk: forbindelsesoplysningerne (inkl. adgangskode) sendes til databasen ved hver kørsel. Læg dem i en organisationsvariabel og referér til den med {database.NØGLE} frem for at skrive dem direkte i feltet.
Relaterede byggeklodser: Data, Logik (løkker over rækkerne), AI, Output, Byggeklodser i sammenhæng
Lov og overenskomst
Søg lovgivning
Søger i dansk lovgivning via det offentlige Retsinformation API (retsinformation-api.dk) med fri tekst og returnerer de matchende love som JSON — titel, kort navn, dokumenttype, år, nummer, datoer, historisk-flag og ELI-URI. Byggeklodsen henter kun metadata om lovene, ikke selve lovteksten.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Søgetekst | str | Påkrævet. Fri tekst-søgning på tværs af titel, kort navn, populært navn og lovens brødtekst. Understøtter "frase" (anførselstegn for præcis frase) og -ord (negation). Tom eller kun-mellemrum søgetekst giver fejl. |
| Max resultater | int | Maksimalt antal love, der returneres. 1–50, standard 10. |
Outputs
- Resultater (
str) — en JSON-streng med to nøgler:count(det samlede antal matches på serveren, som kan være større end antallet af returnerede love) ogresults(liste begrænset af Max resultater). Hvert element har felternetitle,short_name,document_type(fxLOV,BEK,LBK),year,number,signature_date,publication_date,effective_date,historicalogeli_uri. Felter, API'et ikke leverer, ernull. Ingen match giver{"count": 0, "results": []}.
Kald, der fejler (statuskode ≠ 200, timeout efter 30 sekunder, manglende forbindelse eller ugyldigt svar), stopper noden med en dansk fejlbesked. Resultatet caches ikke, da det er et live-opslag mod Retsinformation. Byggeklodsen er også tilgængelig som værktøj for chat-assistenten.
Typiske brugsscenarier
- Slå op, hvilken lovbekendtgørelse der aktuelt gælder for et emne (fx
færdselsloven), og give ELI-URI'en videre til en Sprogmodel-node som kilde. - Finde år og nummer på en bekendtgørelse ud fra dens populærnavn, før en sagsbehandlingstekst genereres.
- Lade chat-assistenten eller en flow-assistent finde relevante love som første trin i en juridisk research, hvor en efterfølgende node henter og læser den fulde tekst.
- Tjekke om en lov er markeret som historisk (
historical), inden den citeres.
Brug når / Undlad når
- Brug når du har brug for at identificere love (titel, nummer, år, ELI-URI) ud fra en fri søgning.
- Brug når
countskal bruges til at afgøre, om et søgeord er specifikt nok — sæt Max resultater lavt og læscount. - Undlad når du skal bruge selve lovteksten eller enkelte paragraffer; byggeklodsen returnerer kun metadata.
- Undlad når du blot skal søge i vilkårlig webtekst — byggeklodsen rammer kun Retsinformation, ikke generel web.
- Undlad når resultatet skal være deterministisk over tid — svaret afhænger af Retsinformations aktuelle indhold og caches ikke.
Relaterede byggeklodser: Data-byggeklodser, AI-byggeklodser (Sprogmodel til at læse og opsummere fundne love), Logik-byggeklodser (til at behandle JSON-listen), Oversigt over byggeklodser.
Søg overenskomst
Slår en dansk overenskomst op via det offentlige /resolve-endpoint på overenskomstdatabasen.dk og returnerer det bedste match plus rangerede alternativer med agreement_id. Byggeklodsen er søge-halvdelen af et par: agreement_id fra resultatet gives videre til Hent overenskomst, som henter selve teksten.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Navn | str | Påkrævet. Overenskomstens navn som citeret i kontrakten, fx Industriens Overenskomst. Et tomt/blankt navn stopper kørslen med fejlen "Navn er påkrævet". |
| Område | str | Valgfrit (avanceret). Afgrænser søgningen til en sektor: stat, kommune, region, privat eller andet. Standard er alle, som betyder ingen afgrænsning (der sendes intet område-filter til API'et). |
| Parter | list[str] | Valgfrit (avanceret). Underskrivende parter, fx DI og CO-industri, der præciserer matchet ved tvetydige navne. Tomme poster ignoreres; hver part sendes som sit eget parties-parameter. |
Outputs
-
Resultater (str): en JSON-streng med to nøgler:
match— det bedste match som objekt, ellernullhvis intet blev fundet.alternatives— liste af øvrige kandidater i rangeret rækkefølge.
Hvert resultat indeholder felterne
agreement_id,display_title,area,status,category,covered_groups,parties,relevance,text_urloghas_text.
Byggeklodsen omrangerer selv API'ets svar (match + alternativer samlet) uden ekstra opslag: overenskomster med status = "current" kommer først, derefter sorteres på højeste relevance; ved lighed bevares API'ets egen rækkefølge. Dermed er det øverste match som regel det, Hent overenskomst kan hente tekst for. has_text tages direkte fra API'et og er den autoritative markør for, om der findes tekst — en aktuel overenskomst kan godt have has_text = false (databasen har ingen dokumenter), og så vil Hent overenskomst fejle på den. Kun hvis API'et udelader feltet, afledes has_text af status == "current".
Opslaget sker live med 30 sekunders timeout. Svar med anden statuskode end 200, timeout, forbindelsesfejl eller ugyldigt JSON stopper kørslen med en dansk fejlbesked. Resultatet caches ikke, og byggeklodsen er markeret som tilgængelig for chat, så en sprogmodel kan kalde den som værktøj.
Typiske brugsscenarier
- En sagsbehandler spørger en sprogmodel om opsigelsesvarslet i "Industriens Overenskomst"; modellen kalder Søg overenskomst med navnet, tager
agreement_idframatchog læser teksten med Hent overenskomst. - Et kommunalt ansat HK-medlem spørger om sin overenskomst: Navn =
HK Kommunal, Område =kommune, så private HK-overenskomster ikke matches ved en fejl. - Der findes flere "Funktionæroverenskomster": Navn =
Funktionæroverenskomstenog Parter =DI,CO-industrifra kontraktens forside, så den rette rangeres øverst. - Et flow, der udtrækker overenskomstens navn fra en uploadet ansættelseskontrakt (fx via Sprogmodel eller Struktureret output) og slår den op automatisk før videre analyse.
Brug når / Undlad når
- Brug Område, når du kender sektoren — det giver færre og mere præcise træf. Undlad det (vælg
alle), hvis du er usikker, og søg bredt. - Brug Parter, når du kender de underskrivende parter og vil ramme den rigtige overenskomst blandt flere med samme navn. Undlad det, hvis du ikke kender parterne — så indsnævrer det unødigt.
- Undlad at bruge
matchblindt: tjekhas_text(og evt.alternatives), før du senderagreement_idvidere til Hent overenskomst.
Relaterede byggeklodser: Hent overenskomst (henter teksten ud fra agreement_id), Søg lovgivning (samme mønster for lovtekster), Sprogmodel (kalder byggeklodsen som værktøj eller fortolker resultatet). Se også oversigten over byggeklodser.
Saml, opdel og omform data
Kombiner & Analysér
Sammenfletter, beriger, matcher, aggregerer eller transformerer data fra en eller flere forbundne noder. Transformationen konfigureres i et struktureret vindue, hvor AI genererer Python-kode én gang; ved kørsel afvikles kun den gemte kode i AgentBase's sandbox — der sker ingen AI-kald under selve kørslen.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Datakilder | dict | Forbindelsesliste — træk én eller flere upstream-noder hertil. Hver kilde bliver en navngiven variabel i koden (navnet frosses ved konfiguration som en binding til kilden; uden bindinger afledes navnet af kildens node-id, fx structured-output). JSON-strenge parses automatisk til dict/list. Mindst én kilde er påkrævet. |
| Konfigurer | knap | Åbner konfigurationsvinduet: vælg operation (Sammenflet, Berig, Match, Aggregér, Transformér), udfyld felterne, kør, og justér med ekstra instruktioner. Den genererede kode gemmes i noden. |
| Konfiguration | str (JSON) | Skjult felt med den gemte konfiguration. Ved programmatisk brug (API/MCP) kan koden angives direkte som code (kroppen af en def run(<kilder>):, skal bruge return) sammen med source_bindings ([{"connection_key": "<nodeId>:<handle>", "name": "<variabel>"}]). |
Outputs
- Resultat (
any) — et dict med arknavn som nøgle og en liste af rækker (dicts) som værdi, dvs.dict[str, list[dict]]. Returnerer koden enlist[dict], pakkes den som{"Resultat": [...]}; et fladt dict bliver én række.None, tomme lister/dicts og skalarer giver en fejl.
Typiske brugsscenarier
- Berig en liste af sager fra en struktureret udtrækning med kolonner fra et opslag (left-merge på fx CPR/CVR eller sagsnummer).
- Match fakturalinjer mod ordrelinjer med fuzzy-navnematch og fremhæv afvigelser i et separat ark.
- Aggregér timeregistreringer pr. medarbejder og måned (sum, antal, gennemsnit) før eksport til Excel.
- Filtrér og udled nye kolonner (fx beløb inkl. moms, datoafstand) fra et datasæt, inden det sendes til JSON til Excel.
Brug når / Undlad når
- Brug når du skal kombinere eller omforme strukturerede data (lister af rækker) fra flere noder uden selv at skrive kode fra bunden.
- Brug når resultatet skal videre som Excel-ark — output-formatet er designet til JSON til Excel.
- Undlad når kilderne ændrer sig ofte i form; koden er frosset ved konfiguration og skal genereres på ny, når du tilføjer eller fjerner datakilder (nye kilder ignoreres, og en fjernet kilde, koden refererer til, stopper kørslen med en fejl).
- Undlad når du blot skal prompte en sprogmodel om ustruktureret tekst — brug da en AI-byggeklods i stedet.
Resultatet caches ikke, så noden køres hver gang flowet kører. Koden afvikles i RestrictedPython med 30 sekunders timeout: ingen navne med foranstillet underscore, ingen æ/ø/å i variabelnavne, ingen import/open/netværk, ingen str.format(), og d["k"] += 1 skal skrives som d["k"] = d.get("k", 0) + 1. Hjælpefunktioner som as_records, safe_float, safe_int, parse_date, normalize_name, fuzzy_score og find_best_match er altid tilgængelige — kør hver datakilde gennem as_records(...) først, da kildernes form ikke er garanteret.
Relaterede byggeklodser: Data-byggeklodser (JSON til Excel, Python Kode), AI-byggeklodser (Struktureret output som typisk datakilde), Oversigt.
Kombiner
Samler flere inputs til ét objekt (dict) med navngivne nøgler. Du erklærer feltnavnene som {feltnavn} i feltet Felter, hvorefter byggeklodsen opretter ét input-handle pr. felt og returnerer et objekt, hvor hver nøgle er det tilsluttede felts værdi.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Felter | str | Liste over feltnavne i formatet {felt1} {felt2} … (standard: {field1} {field2}). Redigeres i en modal; feltet kan ikke selv tilsluttes en edge. Hvert {felt} bliver et dynamisk input-handle på byggeklodsen. |
Byggeklodsen tager derudover dynamiske {felt}-inputs: for hvert navn i Felter oprettes et input-handle med samme navn, som du forbinder fra andre byggeklodser (eller udfylder statisk). Feltnavne må kun bestå af bogstaver, tal og _ (mønstret \{(\w+)\}; danske bogstaver som æ/ø/å er tilladt), og de bliver nøglerne i output-objektet.
Outputs
- Resultat (
dict[str, any]): ét objekt med én nøgle pr. erklæret felt, i den rækkefølge felterne står i Felter. Et erklæret felt uden tilsluttet værdi fårnull— objektet har altid den fulde struktur, også når byggeklodsen køres alene. Værdier, der sendes ind på et handle, som ikke står i Felter, medtages ikke. Et feltnavn, der optræder flere gange, giver kun én nøgle.
Typiske brugsscenarier
- Samle filnavn, udtrukket tekst og et LLM-svar til ét objekt, der sendes videre til Tekst til dokument eller Hent fra API.
- Bygge et JSON-objekt fra flere kilder (fx Datafordeler-opslag + brugerinput) som ét samlet output-felt i en app.
- Give én struktureret payload til Python Kode i stedet for mange enkeltinputs.
- Samle delresultater fra flere grene i et flow til ét resultat, der kan læses samlet i kvalitetskontrollen.
Brug når / Undlad når
- Brug når du skal samle flere værdier til et objekt med kendte nøgler, som en efterfølgende byggeklods eller et API forventer.
- Brug når du vil have et forudsigeligt output-skema, hvor manglende værdier eksplicit er
nullfrem for at forsvinde. - Undlad når du skal bygge læsbar tekst med indsatte værdier (e-mail, besked, rapport) — brug Skabelon i stedet; Kombiner returnerer et objekt, ikke formateret tekst.
- Undlad når du kun sender én værdi videre — forbind outputtet direkte til næste byggeklods.
- Undlad når du skal udtrække felter fra eksisterende JSON (brug Udtræk data-felter) eller lave filtrering/transformation (brug Python Kode).
Resultatet caches som andre byggeklodser: samme Felter og samme inputværdier giver et cache-hit.
Relaterede byggeklodser: Data-byggeklodser (Opdeler, Udtræk data-felter), Input-byggeklodser (Skabelon), Logik-byggeklodser (Python Kode), Output-byggeklodser (Tekst til dokument), Oversigt over byggeklodser.
Opdeler
Tager et JSON-objekt og udtrækker navngivne felter fra første niveau til hver sit output-håndtag, altid som tekst. Den er modstykket til Kombiner: Kombiner samler flere inputs til ét objekt, Opdeler splitter ét objekt til flere outputs.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Felter | str | Hvilke nøgler der skal udtrækkes, skrevet med {feltnavn}-syntaks, fx {id} {navn} {email}. Standard: {id} {navn}. Feltnavne er case-sensitive og må kun bestå af bogstaver, tal og underscore (ingen punktum, så {bruger.email} virker ikke). |
| Input | dict | Et eller flere forbundne JSON-objekter. Flere forbindelser flettes til ét objekt; ved samme nøgle vinder den senest forbundne. Accepterer også en JSON-tekst (parses) og en liste af objekter (kun første element bruges). |
Outputs
Ét output-håndtag pr. felt angivet i Felter, hver af typen str (samlet som result: dict[str, str]). Konvertering: null/manglende felt → tom streng, true/false → "true"/"false", tal → deres tekstform, objekter og lister → JSON-tekst. Nøgler i inputtet som ikke er nævnt i Felter, udelades. Uden forbundet input, eller hvis alle inputs er ugyldig JSON/ikke-objekter, returneres tomme strenge for alle felter — noden fejler ikke.
Bemærk den automatiske udpakning: Hvis det flettede objekt kun har én nøgle, hvis værdi er en ikke-tom liste af objekter (fx {"documents": [{"document_id": "..."}]}), og ingen af de ønskede felter findes på øverste niveau, bruges listens første element i stedet. Øvrige elementer i listen ignoreres.
Typiske brugsscenarier
- Trække
statuseller en kategori ud af et Struktureret output og sende den direkte videre til Hvis/Ellers uden Python-kode. - Hente
document_idogdocument_nameud af et søgeresultat, der pakker ét dokument ind i en liste. - Flette to kilder (fx stamdata og kontaktoplysninger) og plukke de felter en Skabelon skal bruge som tekst.
- Konvertere enkelte JSON-værdier til tekstfelter, der skal indgå i en e-mail eller et dokument.
Brug når / Undlad når
- Brug når du kun skal have et par kendte felter fra første niveau af et objekt, og en tekstværdi er nok.
- Brug når du forbereder data til betingede byggeklodser (Hvis/Ellers) eller til Skabelon.
- Undlad når feltet ligger dybere i strukturen (
bruger.profil.email) — brug Udtræk data-felter. - Undlad når du skal behandle alle elementer i en liste — brug Løkke Start/Slut omkring Opdeler, ellers ses kun det første.
- Undlad når du har brug for værdien som tal, boolean eller objekt fremfor tekst — brug Python Kode.
Relaterede byggeklodser: Data (Kombiner, Udtræk data-felter, Konverter Datatype), Logik (Hvis/Ellers, Løkke Start/Slut, Python Kode), Byggeklodsoversigt
Udtræk data-felter
Parser en JSON-tekst og henter enkelte værdier ud af den med sti-notation (kunde.navn, linjer[0].beloeb, linjer[*]). Hver navngiven udtrækning bliver til et felt i resultatet – og til sit eget output-handle på byggeklodsen.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| JSON Input | str | Den JSON-tekst der skal læses. Skal være gyldig JSON – ellers stopper byggeklodsen med en fejl, der angiver linje og kolonne. |
| Udtræk | str | Liste af udtrækninger, hver med name (feltets navn i resultatet) og path (stien i dataene). Standard er en tom liste. Redigeres i editoren som en liste af navn/sti-par. |
Sti-syntaks: key (simpel nøgle), key.nested (indlejret objekt), items[0] (array-element, 0-baseret indeks), items[*] (hele listen), og kombinationer som ordre.linjer[1].pris.
Outputs
- Resultat (
result, object) – et objekt med de udtrukne værdier under deresname, fx{"bruger_navn": "Alice", "email": "alice@example.com"}. - Derudover får hver udtrækning sit eget output-handle med samme navn, så du kan trække
bruger_navndirekte videre til næste byggeklods uden at gå gennemresult. - Er listen af udtrækninger tom, returneres hele den parsede JSON uændret som
result(nyttigt til blot at konvertere en JSON-streng til et objekt).
Manglende data giver ikke en fejl: findes en sti ikke (manglende nøgle, indeks uden for listen, forkert datatype undervejs), bliver feltet null, og resten af flowet fortsætter. Kun ugyldig JSON eller en forkert formateret sti (fx et ikke-numerisk indeks) stopper byggeklodsen.
Typiske brugsscenarier
- Plukke enkelte felter (fx
data.cvr,data.adresse.postnr) ud af svaret fra Hent fra API før de sendes videre til en skabelon eller et dokument. - Hente ét eller flere felter ud af det JSON-objekt, en Struktureret Output-byggeklods har produceret, så hvert felt kan bruges som separat input.
- Udtrække det første element eller en hel liste (
poster[*]) fra et API-svar, som derefter gennemløbes i en løkke. - Gøre valgfrie felter sikre at arbejde med: et felt der mangler i nogle svar bliver
nulli stedet for at stoppe flowet.
Brug når / Undlad når
- Brug når du har gyldig JSON og blot skal hente bestemte værdier ud af den.
- Brug når du vil have felterne som separate output-handles frem for ét samlet objekt.
- Undlad når du skal bygge nye JSON-objekter fra flere inputs – brug Kombiner.
- Undlad når kilden er fritekst frem for JSON – brug Struktureret Output (AI) til at udtrække data fra ustruktureret tekst.
- Undlad når du skal filtrere, beregne eller transformere dataene – byggeklodsen henter kun værdier; brug Python Kode.
Relaterede byggeklodser: Data-byggeklodser (Kombiner, Opdeler), AI-byggeklodser (Struktureret Output), Logik-byggeklodser (løkker over udtrukne lister, Python Kode), Sådan hænger byggeklodser sammen
Konverter Datatype
Konverterer én værdi til en af fire datatyper — tekst, heltal, decimaltal eller dictionary — så en byggeklods, der forventer en bestemt type, kan modtage den. Fejler med en dansk fejlbesked, hvis konverteringen ikke er mulig, i stedet for at sende en forkert værdi videre.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Input | any | Værdien der skal konverteres. Tager alle typer (tekst, tal, boolean, dictionary, liste). |
| Måltype | str | Den datatype værdien skal konverteres til. Valg: Tekst (str) (standard), Heltal (int), Decimaltal (float), Dictionary (dict). |
Outputs
Ét output, Konverteret værdi, hvis type følger den valgte måltype: str, int, float eller dict.
Sådan konverterer byggeklodsen i praksis:
- Tekst (str) — tekst sendes uændret videre. Dictionaries og lister formateres som læsbar JSON (indrykket, danske tegn bevares). Alt andet bliver
str()af værdien, såTruebliver"True"ogNonebliver"None". - Heltal (int) — decimaltal afkortes (ikke afrundes):
3.99→3. Booleans bliver1/0. Tekst trimmes, komma accepteres som decimalseparator ("1,5"→1). Tom tekst, tekst der ikke er et tal, dictionaries og lister giver fejl. - Decimaltal (float) — heltal og booleans konverteres (
42→42.0). Tekst trimmes, komma accepteres som decimalseparator ("1,5"→1.5), og videnskabelig notation virker ("1.5e2"→150.0). Tom tekst og ikke-numerisk tekst giver fejl. - Dictionary (dict) — en dictionary sendes uændret videre. Tekst skal være gyldig JSON, og JSON'en skal være et objekt (
{...}); et JSON-array ([...]) afvises. Andre typer, herunder lister, giver fejl.
Bemærk: komma erstattes blot med punktum, så tusindtalsseparatorer virker ikke — "1.234,56" bliver "1.234.56" og fejler. Fjern tusindtalsseparatoren først (fx med Python Kode).
Resultatet caches som andre byggeklodser (samme input og måltype giver samme svar uden genberegning).
Typiske brugsscenarier
- Et dictionary fra Kombiner eller Udtræk data-felter skal ind i en Sprogmodel, der forventer tekst: konverter til
Tekst (str), så modellen modtager læsbar JSON. - Et tal, som Sprogmodel eller Udtræk data-felter leverer som tekst (fx
"42"eller"12,5"), skal bruges i en beregning eller sammenligning i Hvis-Ellers: konverter tilHeltal (int)ellerDecimaltal (float). - En API-respons eller et gemt felt ligger som JSON-tekst og skal læses som struktur i Udtræk data-felter eller Python Kode: konverter til
Dictionary (dict). - Et tal skal med i en Skabelon eller et dokument som tekst: konverter til
Tekst (str).
Brug når / Undlad når
Brug når
- Typerne mellem to byggeklodser ikke matcher, og hele værdien skal skifte type.
- Tal kommer som tekst i dansk format med komma som decimalseparator.
Undlad når
- Du kun skal have ét felt ud af et dictionary — brug Udtræk data-felter.
- Du skal formatere tekst med variabler — brug Skabelon.
- Du skal transformere data (fx fjerne tusindtalsseparatorer, afrunde eller konvertere en liste) — brug Python Kode.
- Typerne allerede matcher; unødvendig konvertering tilføjer kun et trin.
Relaterede byggeklodser: Udtræk data-felter og Kombiner, Hvis-Ellers og Python Kode, Sprogmodel, Skabelon
Filer og regneark
Indlæs CSV-data
Indlæser CSV- eller TSV-data fra en uploadet fil eller fra tekst og omdanner hver datarække til et objekt med kolonnenavne som nøgler. Alle værdier leveres som tekst (ingen typekonvertering af tal eller datoer), og rækker med for få eller for mange celler tilpasses antallet af kolonner.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Fil | filejson | CSV-/TSV-fil (.csv, .tsv). Har forrang: er der en fil, ignoreres Tekstindhold. En tom fil giver tomme outputs uden fejl. |
| Tekstindhold | str | Alternativ til filen: rå CSV-tekst, fx modtaget fra Hent fra API eller et andet trin. Er hverken fil eller tekst angivet, fejler byggeklodsen. |
| Separator | str | Tegnet der adskiller kolonner: Komma (,) (standard), Semikolon (;), Tab, Pipe (|) eller Brugerdefineret. |
| Brugerdefineret separator | str | Bruges kun når Separator er Brugerdefineret; skal være ét tegn. Er feltet tomt, fejler byggeklodsen med en fejlbesked. |
| Har overskriftsrække | bool | Standard: sand. Første række bruges som kolonnenavne (mellemrum i kanterne fjernes). Slået fra navngives kolonnerne kolonne_1, kolonne_2, … efter antallet af celler i første række, og alle rækker behandles som data. |
| Tegnsæt | str | Filens tegnkodning: UTF-8 (standard), Latin-1 (ISO-8859-1) eller Windows-1252. Gælder kun for Fil, ikke for Tekstindhold. Kan filen ikke afkodes med det valgte tegnsæt, forsøges UTF-8 og derefter Latin-1. Et UTF-8 BOM-tegn fjernes automatisk. |
| Spring tomme rækker over | bool | Standard: sand. Rækker hvor alle celler er tomme eller kun indeholder mellemrum, udelades — også en tom overskriftsrække. Slået fra bliver de til datarækker med tomme værdier. |
Outputs
- Rækker (
list[dict[str, str]]) — én dict pr. datarække med kolonnenavn → celleværdi. Rækker med for få celler fyldes op med tomme strenge; overskydende celler ud over antallet af kolonner kasseres. - Overskrifter (
list[str]) — kolonnenavnene i den rækkefølge de optræder. - Antal rækker (
int) — antal datarækker, ekskl. overskriftsrækken (avanceret). - Antal kolonner (
int) — antal kolonner, bestemt af overskriftsrækken (avanceret).
Tom fil eller tekst uden rækker giver [], [], 0, 0.
Typiske brugsscenarier
- Upload en kundeliste som CSV og send Rækker ind i Løkke Start for at behandle hver kunde for sig (fx generere et brev pr. række med Skabelon).
- Hent CSV-tekst fra et eksternt system via Hent fra API og parse den, før data sendes videre til en sprogmodel eller Python Kode.
- Læs et eksport-udtræk fra ældre dansk fagsoftware (semikolon-separeret, Windows-1252) og få korrekte æøå i outputtet.
- Tælle rækker i et datasæt (Antal rækker) og bruge tallet i en betingelse, fx for at stoppe et flow ved tomme udtræk.
Brug når / Undlad når
- Brug når: filen har en overskriftsrække med kolonnenavne — så bliver Rækker umiddelbart læsbare for efterfølgende trin.
- Brug når: æøå vises forkert — prøv
Latin-1ellerWindows-1252; filer fra ældre dansk software er ofte Windows-1252. Moderne filer er næsten altid UTF-8, så behold standarden ellers. - Undlad når: filen starter direkte med data — slå da "Har overskriftsrække" fra, ellers bruges første datarække som kolonnenavne.
- Undlad når: tomme rækker har betydning i dine data (fx som markører) — slå da "Spring tomme rækker over" fra.
- Undlad når: du har brug for talværdier eller datoer som typer — alle celler kommer som tekst og skal konverteres i fx Python Kode eller Konverter Datatype.
- Undlad når: input er en Excel-fil (brug Excel til JSON) eller JSON (brug Udtræk data-felter).
Relaterede byggeklodser: Løkke Start / Løkke Slut til at behandle hver række, Filliste som kilde til CSV-filer, og de øvrige data-byggeklodser (Hent fra API, Excel til JSON, Udtræk data-felter) til kilder og videre bearbejdning.
Excel til JSON
Læser ét ark i en Excel-fil (.xlsx/.xlsm) og returnerer rækkerne som en liste af JSON-objekter, hvor kolonneoverskrifterne bliver nøgler. Konverteringen er deterministisk og bruger ingen AI eller OCR, så den er hurtig og præcis også for ark med tusindvis af rækker.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Excel-fil | Fil | Påkrævet. En .xlsx- eller .xlsm-fil (maks. 50 MB), uploadet eller modtaget fra en anden byggeklods. Gamle .xls-filer afvises med en fejl og skal gemmes som .xlsx først. |
| Headerrække | Heltal | Avanceret. Nummeret på rækken med kolonneoverskrifter (1 = første række). Standard er 1; værdier under 1 giver en fejl. Rækker før headerrækken springes over. |
| Ark | Tekst | Avanceret. Navnet på det ark der skal læses. Tomt = første ark i filen. Et navn der ikke findes giver en fejl, som nævner de tilgængelige ark. |
Outputs
- JSON (
list[dict]): en liste med ét objekt pr. datarække under headerrækken. Hver nøgle er en kolonneoverskrift, og alle nøgler er altid med i hvert objekt (tomme celler blivernull).
Sådan behandles indholdet:
- Overskrifter: Tomme celler i slutningen af headerrækken definerer ingen kolonne og droppes. Tomme celler midt i headerrækken får navnet
Kolonne N(N = kolonnens position). Ens overskrifter gøres unikke med suffiks_2,_3osv. - Rækker: Rækker hvor alle celler under overskrifterne er tomme, udelades helt (uanset hvor i arket de står). Celler til højre for den sidste overskrift ignoreres.
- Værdier: Tal forbliver tal, ja/nej forbliver boolean, datoer og klokkeslæt bliver ISO 8601-tekst (f.eks.
2026-01-07eller2026-01-07T09:30:00). Uendelige/ugyldige tal (NaN,inf) blivernull. - Formler: Filen læses med cellernes senest beregnede værdi, ikke selve formlen. Hvis filen er genereret uden at Excel har beregnet formlerne, kan formelceller komme ud som
null. - Er headerrækken tom eller ligger den efter arkets sidste række, returneres en tom liste (ingen fejl).
Typiske brugsscenarier
- Indlæs en medarbejder-, kunde- eller sagsliste fra Excel og send hver række gennem Løkke Start for at behandle dem én ad gangen (f.eks. et opslag eller en Sprogmodel-vurdering pr. række).
- Slå værdier op i et regneark med satser eller referencedata og brug dem i Python Kode eller en skabelon senere i flowet.
- Modtag et Excel-udtræk fra et fagsystem via en app eller webhook og omdan det til strukturerede data, der kan valideres og skrives tilbage til et andet system.
- Den omvendte vej til JSON til Excel: læs et ark, beregn eller berig data, og skriv et nyt ark.
Brug når / Undlad når
- Brug når: data allerede ligger struktureret i et regneark med én overskriftsrække, og du vil undgå AI-udtræk.
- Brug når: arket har en titel eller tomme rækker over overskrifterne (sæt Headerrække), eller filen har flere ark og du skal bruge et bestemt (sæt Ark).
- Undlad når: filen er CSV/TSV (brug Indlæs CSV-data), en scannet PDF eller et billede af en tabel (brug Indlæs dokument med OCR), eller en gammel
.xls-fil (gem den som.xlsxførst). - Undlad når: arket har flere overskriftsrækker, sammenflettede celler eller flere tabeller i samme ark. Byggeklodsen læser kun én overskriftsrække og kender ikke til layout.
Resultatet caches (samme fil og samme indstillinger giver samme output uden ny indlæsning).
Relaterede byggeklodser: Data-byggeklodser (JSON til Excel, Indlæs CSV-data), Logik-byggeklodser (Løkke Start / Løkke Slut, Python Kode), Input-byggeklodser (Indlæs dokument), Oversigt.
JSON til Excel
Samler JSON-data fra én eller flere forbundne byggeklodser i én Excel-fil (.xlsx) med formaterede kolonneoverskrifter, zebrastribede rækker og automatisk kolonnebredde. Uden konfiguration bliver hver datakilde til sit eget ark; med Arkdefinitioner styrer du selv, hvordan data fordeles på ark.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Datakilder | dict | Forbind én eller flere JSON-kilder (fx Løkke Slut, Struktureret Output, Python Kode). Hver forbindelse er en datakilde. Accepterer et objekt, en liste af objekter, en liste af værdier (bliver en enkelt kolonne værdi) eller en tekststreng med JSON. Mindst én kilde skal være forbundet. |
| Filnavn | str | Filnavnet uden .xlsx. Standard er data. Tegn ud over bogstaver, tal, mellemrum, - og . fjernes; ender navnet tomt, bruges data. |
| Arkdefinitioner | str | Valgfri konfiguration fra Ark-byggeren. Hvert ark peger på en datakilde og er enten et oversigtsark (valgte felter + aggregeringer count/unique_join over indlejrede lister) eller et udpakket ark (én række pr. element i en indlejret liste, med forældrefelter og aggregeringer taget med). |
Uden arkdefinitioner gælder: et fladt objekt bliver ét ark med én række; en liste af objekter bliver ét ark med én række pr. objekt; et objekt hvor alle værdier er objekter/lister bliver ét ark pr. nøgle. Med flere datakilder får arkene præfiks med kildens node-id (<kilde> - <ark>). Arknavne renses for [ ] : * ? / \, afkortes til 31 tegn og gøres unikke med _2, _3 … ved sammenfald. Celler: None → tom, booleans → Ja/Nej, tal skrives som tal, indlejrede objekter/lister skrives som JSON-tekst. En kilde, der er tom eller ikke kan tolkes, udelades med en advarsel (uden arkdefinitioner); kan ingen kilde bruges, fejler byggeklodsen. Med arkdefinitioner fejler den derimod, hvis et ark peger på en kilde, der ikke er forbundet, eller hvis flere kilder af samme nodetype matcher tvetydigt.
Outputs
- Excel-fil (
filejson) — den færdige .xlsx-fil, klar til download. - Tabeldata (
dict, avanceret) —{"sheets": {arknavn: [rækker]}}som forhåndsvisning af arkindholdet; indeholder desudenskippedmed kilde og årsag for hver udeladt datakilde.
Typiske brugsscenarier
- Hent fra API eller Datafordeler → JSON til Excel: eksportér API-svar direkte til et regneark.
- Løkke Slut → JSON til Excel med arkdefinitioner: ét oversigtsark (én række pr. dokument med antal fund) og ét detaljeark (én række pr. fund) fra samme løkkeresultat.
- Struktureret Output + Løkke Slut → JSON til Excel: metadata og udtrukne data fra to forskellige byggeklodser samlet i én fil med hvert sit ark.
- Python Kode → JSON til Excel: aflevér en beregnet liste af rækker som Excel-fil til brugeren af en app.
Brug når / Undlad når
- Brug når: du har tabellignende JSON (liste af objekter) og vil have en fil, en bruger kan åbne i Excel uden videre.
- Brug når: du vil kombinere data fra flere byggeklodser i én fil, eller opdele indlejrede lister i flere ark uden at skrive kode.
- Undlad når: du har brug for Excel-formler eller avanceret cellestyling — brug Python Kode i stedet.
- Undlad når: dine data allerede er CSV eller en Markdown-tabel — brug henholdsvis Indlæs CSV-data eller Tekst til dokument med XLSX-format.
- Undlad at sætte Filnavn, medmindre brugeren skal kunne genkende filen på navnet; standardnavnet er fint.
Relaterede byggeklodser: Data (Udtræk data-felter, Kombiner & Analysér, Excel til JSON), Logik (Løkke Start/Slut, Python Kode), AI (Struktureret Output), Output (Tekst til dokument). Se også oversigten over byggeklodser.
Sammenligning, tid og version
Sammenlign tekster
Sammenligner to versioner af den samme tekst ord for ord og returnerer én samlet tekst, hvor fjernede ord er gennemstreget og tilføjede ord er fede (markdown). Sammenligningen sker på token-niveau (ord, tegnsætning og mellemrum hver for sig), så ændringer vises præcist inde i sætningerne — ikke linje for linje.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Tekst A | str | Den oprindelige version. Tom som standard. |
| Tekst B | str | Den ændrede version. Tom som standard. |
Ingen af felterne er påkrævede; er begge tomme, er resultatet en tom tekst med 0 ændringer.
Outputs
- Diff (
str) — den flettede tekst med~~fjernet~~og**tilføjet**markeret inline. Mellemrum og linjeskift bevares uændret. - Antal ændringer (
int, avanceret) — antal ændrede ord/tegn. En ren sletning eller tilføjelse tæller ét pr. ord/tegn; en erstatning (fx "januar" → "februar") tæller som én ændring uanset længde. - Har ændringer (
bool, avanceret) —truenår Antal ændringer er større end 0.
Eksempel: Tekst A "Aftalen løber i 12 måneder." og Tekst B "Aftalen løber i 24 måneder." giver Diff Aftalen løber i ~~12~~ **24** måneder., Antal ændringer 1 og Har ændringer true.
Typiske brugsscenarier
- Vise hvad der er ændret mellem to versioner af en kontrakt, aftale eller paragraf.
- Kontrollere en sprogmodels redigering: send originalteksten og den omskrevne tekst ind og se præcis, hvad modellen ændrede.
- Bruge Har ændringer i en Hvis / ellers-node til kun at sende dokumenter videre, når der faktisk er rettelser.
- Lægge diff-teksten ind i et dokument eller en rapport som et før/efter-spor for en menneskelig gennemgang.
Brug når / Undlad når
Brug når:
- De to tekster er versioner af det samme dokument, så størstedelen af ordene er ens.
- Du har brug for ordniveau-præcision (et ændret tal, en dato, et enkelt ord) frem for et overordnet resumé.
Undlad når:
- Teksterne er to uafhængige dokumenter — så bliver næsten alt markeret som ændret. Brug i stedet Sprogmodel til at analysere ligheder og forskelle.
- Du sammenligner struktureret data (JSON, CSV) eller kun vil vide, om to tekster er identiske — det er billigere med Python Kode (
return a == b). - Du skal have en linje-for-linje- eller side-om-side-diff; noden laver kun inline ord-diff.
Resultatet caches som andre byggeklodser, da noden er deterministisk og kalder ingen eksterne tjenester.
Relaterede byggeklodser: Sprogmodel til semantisk sammenligning af forskellige tekster, Hvis / ellers og Python Kode til at forgrene på Har ændringer eller lave egne sammenligninger, og de øvrige Data-byggeklodser.
Dato og tid
Henter den aktuelle dato og tid på udførelsestidspunktet i en valgt tidszone og returnerer den som formateret tekst. Byggeklodsen har ingen data-inputs at forbinde — den læser bare uret, hver gang flowet kører.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Format | valg | Et af de faste formater: Dato (DD-MM-ÅÅÅÅ), Dato og tid (DD-MM-ÅÅÅÅ TT:MM) (standard), Dato og tid (DD-MM-ÅÅÅÅ TT:MM:SS), Klokkeslæt (TT:MM), Klokkeslæt (TT:MM:SS), ISO 8601, Unix timestamp eller Brugerdefineret. |
| Brugerdefineret format | tekst | Et strftime-mønster, standard %Y-%m-%d %H:%M:%S. Vises kun når Format er Brugerdefineret og bruges kun der. Et tomt mønster giver en fejl. |
| Tidszone | tekst | IANA-tidszone, standard Europe/Copenhagen (f.eks. UTC, America/New_York). Et tomt felt falder tilbage til standarden; et ukendt navn stopper noden med en fejl. |
Outputs
- Dato og tid (
str) — den formaterede dato/tid.ISO 8601giver f.eks.2026-06-30T14:05:09+02:00(med tidszone-offset);Unix timestampgiver sekunder siden 1970 som tekst, f.eks.1782568909. Navne på ugedage og måneder i et brugerdefineret mønster (%A,%B) kommer på engelsk.
Resultatet caches ikke — byggeklodsen giver et nyt tidspunkt ved hver kørsel.
Typiske brugsscenarier
- Sætte dagens dato ind i en skabelon eller et genereret dokument (brev, rapport, e-mail).
- Tidsstemple rækker der skrives til et regneark eller sendes videre via HTTP-kald.
- Lave et unikt filnavn eller reference med et Unix timestamp eller et brugerdefineret mønster som
%Y%m%d_%H%M. - Give en sprogmodel "dags dato" som kontekst, når den skal beregne frister eller vurdere om noget er aktuelt.
Brug når / Undlad når
- Brug når: flowet har brug for "lige nu" i et bestemt format eller en bestemt tidszone.
- Undlad når: datoen er fast og kendt på forhånd — brug et tekstinput i stedet.
- Undlad når: du skal regne på datoer (lægge dage til, finde forskelle) eller udtrække en dato fra et dokument — brug Python Kode henholdsvis Struktureret output / Udtræk data-felter.
Relaterede byggeklodser: Data-byggeklodser, Input-byggeklodser, Logik-byggeklodser, AI-byggeklodser
App-version
Henter versionen af den App eller Agent, der kører flowet lige nu, og sender den videre som tekst (f.eks. v1.5). Versionen læses fra kørselskonteksten på udførelsestidspunktet, så den følger automatisk med, når flowet versioneres op.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| (ingen) | – | Byggeklodsen tager ingen inputs. |
Outputs
- Version (
str) — versionen som tekst. Tom tekst ("") når flowet køres uden en gemt version, f.eks. en ad hoc-kørsel på lærredet.
Formatet afhænger af, hvad der kører flowet:
- En gemt Agent rapporterer
v{major}.{minor}(f.eks.v1.5). Mindre ændringer hæver minor-tallet; godkendelse hæver major-tallet og nulstiller minor. - En udgivet App kører et fastfrosset øjebliksbillede og rapporterer kun major-versionen (f.eks.
v1,v2). Det gælder også, når Appen kaldes som chat-værktøj. - Når en App kalder en anden App som byggeklods, rapporterer noden den kaldte Apps egen version — ikke det yderste flows.
Resultatet caches ikke: værdien er et live-opslag i kørselskonteksten, og et cachet svar ville ellers hænge fast på den version, der først kørte.
Typiske brugsscenarier
- Stemple versionsnummeret på et genereret dokument (kolofon, sidefod eller forside), så modtageren kan se hvilken udgave af flowet der producerede det.
- Skrive versionen ind i en e-mail eller notifikation, der sendes fra flowet.
- Sende versionen med som felt i et webhook-kald eller JSON-output, så eksterne systemer kan spore hvilken flow-version der leverede data.
- Logge versionen sammen med resultatet, så fejl senere kan afgrænses til en bestemt udgave.
Brug når / Undlad når
- Brug når flowet skal kende sin egen version dynamisk, og du vil undgå at rette et tal manuelt ved hver udgivelse.
- Undlad når du skal angive en fast tekst eller et versionsnummer manuelt — brug Tekstinput i stedet.
- Undlad når du har brug for dato eller klokkeslæt for kørslen — brug Dato og tid i stedet.
Relaterede byggeklodser: Input-byggeklodser (Tekstinput), Output-byggeklodser (dokumenter og e-mails der skal stemples), Apps (hvordan en udgivet App og dens version hænger sammen), Oversigt over byggeklodser.
Appens hukommelse
En publiceret App er kørselsformet: input ind, resultat ud, og intet overlever mellem to kørsler. De tre byggeklodser herunder giver appen sin egen hukommelse, så en kladde, en sag eller en halvfærdig besvarelse kan hentes frem igen næste gang.
Hukommelsen tilhører den app, flowet er udgivet som, og appen bestemmes af kørslen — ikke af et felt på byggeklodsen. Et flow kan derfor aldrig læse eller skrive i en anden apps hukommelse. Det afgørende er, at appen er udgivet, ikke om den vises i Galleriet: en app udgivet som byggeklods og brugt gennem en indlejring rammer sin egen hukommelse på samme måde. Kører du flowet fra lærredet, bruges en midlertidig hukommelse, der kastes væk efter kørslen — en prøvekørsel kan altså ikke overskrive det, en bruger af appen har gemt. Vil du teste mod appens rigtige hukommelse, skal du slå det til på kørslen, og det virker kun, hvis flowet er udgivet som præcis én app; er det ikke udgivet, eller er det udgivet som flere apps, stopper byggeklodsen med en besked. Accepttest og gentest kører altid mod en midlertidig hukommelse.
Ejer adskiller slutbrugerne inde i appen — men Ejer er tillid ved første brug set fra flowets side; det er IKKE en autentificeringsmekanisme. Den, der kan få flowet til at sende en ejer-værdi, kan læse den ejers data. Sender flowet slet ingen Ejer ved hentningen, er Nøgle det eneste, der adskiller to slutbrugeres data.
Grænser: maks. 256 KB pr. nøgle og 1.000 nøgler pr. gruppe. Gem store filer som dokumenter, og gem kun deres id i hukommelsen. De to grænser afgør, hvordan data bør skæres: et dokument, der redigeres over tid, vokser mod loftet, så del det i flere poster fra starten — fx én til metadata, én pr. del og én til geometrien — i stedet for at gemme det hele under én nøgle (en lokalplan med tekst, forslag og områdets flader fylder let 100–220 KB allerede efter første udkast). Skal et dokument versioneres, så gem hver version under sin egen nøgle i stedet for at lægge dem i en liste samme sted, og læg opdelingen mellem mange brugere eller kommuner i navnet på gruppen (planer_aarhus) — 1.000-loftet gælder hele gruppen, alle brugere tilsammen, og Ejer begrænser kun, hvad der læses. Nøgle og Ejer må hver være op til 200 tegn; en længere værdi afvises med en besked og bliver ikke forkortet — en forkortet ejer-værdi ville gemme noget ét sted og lede efter det et andet.
Der er endnu ingen brugerflade til at se, hvad en app har gemt. Appens ejer kan liste, læse og slette gennem AgentBase' API (/apps/{app_id}/records); en selvbetjeningsside er en opfølgning.
Hent fra appens hukommelse
Henter noget, "Gem i appens hukommelse" har gemt. En nøgle, der ikke findes, er ikke en fejl: byggeklodsen svarer Fundet = falsk og et tomt objekt, fordi "første gang denne bruger kører appen" er det normale tilfælde. Brug Fundet i en Hvis/Ellers til at vælge mellem "fortsæt kladden" og "start forfra".
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Gruppe | str | Samme navn som ved gemningen. |
| Nøgle | str | Nøglen, det blev gemt under. |
| Ejer | str | Avanceret. Hent kun, hvis det tilhører denne ejer. Tom = uanset ejer — bemærk, at det ikke er det samme som ved gemningen, hvor tom betyder den indloggede bruger. Faldt hentningen tilbage til den indloggede bruger, ville noget, en anonym kørsel har gemt, svare "ikke fundet". |
Outputs
- Data (
dict): Indholdet, eller et tomt objekt. - Fundet (
bool): Sandt eller falsk. - Version (
int): Versionsnummeret, eller 0 hvis nøglen ikke findes.
Typiske brugsscenarier
- Hente brugerens kladde ved appens start og fortsætte, hvor hun slap.
- Slå en sag op på et sagsnummer, brugeren indtaster.
- Afgøre med
Fundet, om guiden skal vise "fortsæt" eller "start forfra".
Brug når / Undlad når
- Brug når appen skal fortsætte fra noget, en tidligere kørsel gemte.
- Undlad når du skal finde flere ad gangen → brug Søg i appens hukommelse.
- Undlad når det aldrig er gemt af "Gem i appens hukommelse" — byggeklodsen læser kun appens egen hukommelse.
Resultatet caches ikke — det skal læses, som det er nu, og cachen er ikke app-adskilt.
Relaterede byggeklodser: Data-byggeklodser, Oversigt over byggeklodser
Søg i appens hukommelse
Lister det, appen har gemt i én gruppe — f.eks. "alle kladder, denne bruger har liggende". Nyest ændret først.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Gruppe | str | Gruppen der skal søges i. |
| Ejer | str | Avanceret. Begræns til én ejer. Tom = alle ejere. |
| Filter | str | Avanceret. JSON-objekt med felt/værdi-par, der alle skal passe, f.eks. {"status": "kladde"}. Kun tekstværdier understøttes — både i filteret og i det gemte: {"antal": 5} findes ikke af filteret {"antal": "5"}. Et filter med et tal eller sandt/falsk afvises med en besked frem for at returnere ingenting. |
| Antal | int | Avanceret. Sidestørrelse, 1-200. Kan kobles fra en anden byggeklods. |
| Spring over | int | Avanceret. Hvor mange der springes over — det, en løkke driver, når den bladrer gennem en gruppe. |
Outputs
- Fundet (
list[dict]): En liste medrecord_key,data,version,ownerogupdated_atpr. nøgle. - Antal (
int): Hvor mange listen indeholder. Er der færre i listen, end detAntaldu bad om, er der ikke flere at hente.
Typiske brugsscenarier
- Vise en oversigt over brugerens egne kladder.
- Finde alle sager med en bestemt status.
- Bladre gennem en hel gruppe i en løkke ved at drive
Spring over.
Brug når / Undlad når
- Brug når du kender gruppen, men ikke den enkelte nøgle.
- Undlad når du kender nøglen → brug Hent fra appens hukommelse, som er både hurtigere og entydig.
- Undlad når du har brug for at søge på andet end lighed på et tekstfelt — filteret kan kun sammenligne tekst.
Resultatet caches ikke — en søgning skal ramme lageret, som det er nu, og cachen er ikke app-adskilt.
Relaterede byggeklodser: Data-byggeklodser, Oversigt over byggeklodser
Udfaset
Følgende byggeklods er udfaset. Den virker stadig i eksisterende flows, men brug den ikke i nye.
Fildetaljer
Udtrækker metadata fra én uploadet fil — filnavn, MIME-type, filendelse og størrelse — og sender selve filen videre uændret. Byggeklodsen læser ikke filens indhold; den fejler, hvis filen er tom eller ikke kan afkodes.
Fildetaljer er udfaset og vises under kategorien "Udfaset" i byggeklods-vælgeren. Eksisterende flows kører stadig, men der er ingen udpeget afløser — brug Python Kode til nye flows, hvis du har brug for fil-metadata.
Inputs
| Felt | Type | Beskrivelse |
|---|---|---|
| Fil | filejson | Filen der skal analyseres. Én fil ad gangen; accepterer både AgentBase's filformat og det ældre `filnavn |
Outputs
- Filnavn (
str) — det originale filnavn, f.eks.dokument.pdf(tom streng hvis filen ikke har noget navn) - MIME Type (
str, avanceret) — filens MIME-type, f.eks.application/pdf - Filendelse (
str, avanceret) — endelsen uden punktum og i små bogstaver, f.eks.pdf; tom streng hvis filnavnet ingen endelse har - Størrelse (bytes) (
int, avanceret) — antal bytes i filens indhold - Data URL (
filejson) — den samme fil videresendt som fil-værdi, så den kan sendes videre til andre byggeklodser
Resultatet caches ikke, da outputtet indeholder hele filen.
Typiske brugsscenarier
- Genbrug det originale filnavn i navngivningen af et output-dokument
- Kontrollér filendelse eller MIME-type med Hvis/Ellers, før filen sendes til fx Indlæs dokument
- Afvis for store filer ved at sammenligne størrelsen i bytes mod en grænse
- Behandl flere filer én ad gangen ved at kombinere med Løkke Start
Brug når / Undlad når
- Brug når du kun har brug for filens metadata (navn, type, størrelse) — ikke indholdet.
- Undlad når du skal læse eller validere filens indhold — brug Indlæs dokument eller Python Kode i stedet.
- Undlad når du allerede har filnavnet som input; så er der ingen grund til at parse filen igen.
Relaterede byggeklodser: Data-byggeklodser, Logik-byggeklodser, Input-byggeklodser, Oversigt over byggeklodser
Typiske kæder
Data-byggeklodserne sættes typisk sammen sådan:
- Register-opslag → analyse: CVR Opslag / Ejendomsoverblik / Datafordeler / Plandata → Udtræk data-felter → Sprogmodel.
- Import → batch → eksport: Indlæs CSV-data / Excel til JSON → Løkke Start → behandling → JSON til Excel.
- Flere kilder → samlet rapport: flere kilder → Kombiner & Analysér → JSON til Excel → Send Email.
- Forbered til betingelse: Hent fra API → Opdeler → Hvis / ellers.
- Opslag i par: Søg overenskomst → Hent overenskomst → Sprogmodel — eller CVR Opslag → SMV-status, når afgørelsen skal bygge på koncernen.
Relaterede sider
- Oversigt over alle byggeklodser — hele paletten på tværs af kategorier.
- AI-byggeklodser — sprogmodeller og struktureret udtræk, som data-byggeklodserne typisk fodrer.
- Input-byggeklodser — tekst, filer, dokumentindlæsning (OCR) og skabeloner, der starter et flow.
- Logik-byggeklodser — løkker, forgreninger og Python Kode til at styre databehandlingen.
- Output-byggeklodser — send resultatet videre som dokument, e-mail eller download.
- Relationer mellem byggeklodser — hvordan handles og typer forbindes.
- Apps — hvordan et flow udgives, og hvad App-version rapporterer.