Beslutninger og kilder
Vi begynner med beslutningene, ikke med dataene.
Tjeneste
Tallene finnes som regel allerede. De ligger bare i systemer som ikke snakker sammen, og i et regneark noen oppdaterer på fredager. Vi henter dem ut, rydder dem og skriver ned hva de betyr, slik at alle ser det samme tallet.

En oversikt er ikke et dashbord fullt av grafer. Det er de få tallene noen faktisk tar en beslutning på, oppdatert av seg selv, og regnet ut på samme måte fra uke til uke. Det siste er det vanskelige. «Omsetning» betyr gjerne én ting i regnskapet og noe annet i salgssystemet, og «aktiv kunde» har like mange definisjoner som det er avdelinger.
Vi henter fra systemene dere har, og fra offentlige norske registre når svaret ligger der og ikke hos dere. Så lager vi det som skal til for at dere ser tallene. Ser ledergruppa på dem mandag morgen, er det en e-post. Trenger selgerne tallet gjennom dagen, er det en side.
Av og til er ikke oversikten nok. Det som mangler, er systemet bak den: et sted der saker, dokumenter og kunder ligger i samme base i stedet for i hver sin innboks. Da bygger vi det, med tilgang for dem som trenger det og et API der andre systemer skal lese. Er oppgaven for uklar til det, sier vi det i stedet for å bygge.
Kilder og eiere. Hvilke systemer hvert tall skal hentes fra, og hvem hos dere som eier kilden og svarer når den endrer seg. Lista viser også hullene, der et tall ikke finnes noe sted ennå.
Henting og rydding. Vi kobler oss på systemene deres og API-ene som finnes, og rydder nok til at tallene kan sammenlignes. Samme kunde stavet på flere måter blir én, og datoer får samme format.
Offentlige registre. Enhetsregisteret, Regnskapsregisteret og SSB er åpne kilder som vi kobler på når tallet handler om andre enn dere selv. Typisk om en kunde har levert regnskap og hva det viser, hvor mange ansatte konkurrentene har, eller hva lønnsnivået i bransjen er.
Definisjonsliste. Et skriftlig dokument som sier hva «kunde», «omsetning» og «aktiv» betyr i oversikten, og hvilken kilde som gjelder når kildene er uenige.
Historikk. Tallene lagres i egen database etter hvert som de hentes, så dere kan se lenger bakover enn kildesystemet selv husker. Står databasen på en server vi drifter selv, tas det sikkerhetskopi hver natt, og gjenopprettingen er prøvd.
Oversikten. En side, en rapport på e-post eller et varsel når et tall krysser en terskel. Få tall, det samme tallet overalt, og tidspunktet det sist ble hentet, så ingen tar en beslutning på gamle tall uten å vite det.
API. Der andre systemer trenger dataene, henter de dem fra én adresse i stedet for fra hver sin eksport. Det kan være regnearket økonomi fortsatt vil ha, eller nettsiden som skal vise et tall fra oversikten.
Vi begynner med beslutningene, ikke med dataene.
Vi ser hvor mange ulike svar kildene gir på det samme spørsmålet.
Vi kobler oss på kildene og henter automatisk, ikke som et engangsuttrekk.
Vi blir enige om hva hvert tall betyr, og skriver det ned.
Vi bygger visningen sist, setter den i drift og lærer opp eieren.
Én database for alle tallene, der hver endring i strukturen er skrevet ned og kan kjøres på nytt.
Databasen kjører hos Neon, som drifter den for oss, eller på en server vi drifter selv, og hvilken det blir avgjør vi sammen i avgrensningen.
Åpne registre med navn, næringskode, ansatte, kommune og regnskapstall for norske virksomheter, som vi henter fra direkte.
Offisiell statistikk, som lønnsstatistikken i tabell 11419, når et anslag trenger tall dere ikke har selv.
Skript og andre systemer leser og skriver tallene med en nøkkel i stedet for brukernavn og passord.
Henting i steg som lagrer underveis, slik at et brudd hos kilden betyr å fortsette der den slapp, ikke å starte på nytt.
Uttrekk av tekst og bilder fra PDF-er når kilden er et dokument og ikke et system.
Koden, tallene i databasen, definisjonslista og historikken er deres. Vanlig Postgres, Python og TypeScript uten verktøy knyttet til oss, og hvert steg i hentingen er beskrevet, så en annen utvikler kan ta over.
Nøklene til kildesystemene lages på deres kontoer, så det er dere som trekker tilgangen vår, ikke omvendt. En kopi av databasen får dere når dere vil.
Vi hoster og har ansvaret for at flyten kjører, som løpende avtale ved siden av fastprisen. Vi sjekker at hentingene har kjørt, og tar det opp med eieren hos dere når et tall hopper uten at kilden forklarer det.
Driftsavtalen, og ingen lisens per bruker, siden oversikten er en side vi har bygget og ikke et rapportverktøy. Betalte API-er og kildesystemer som tar betalt for eksport kommer i tillegg og er deres avtale med leverandøren.
Bytter en kilde format eller slutter å svare, stopper hentingen og varsler den vi har avtalt, og rettelsen avtaler vi når det skjer. Bytter dere hele systemet, kobles det nye på som en ny avgrensning, og historikken fra det gamle blir stående.
Slår opp et selskap i offentlige registre, henter lønnsstatistikk og arbeidsgiveravgift, og regner ut et anslag for hvor mye av rutinearbeidet en maskin kan overta. Analysen lagres per organisasjonsnummer, slik at skanningen på forsiden og rapporten bak den viser det samme.
En kjede av steg i Python som går fra registeruttrekk til utsending, og som kan stoppes og startes igjen der den slapp. Den leverer mottakerne til kampanjemotoren vår gjennom et API, og leser derfra hvem som ikke skal kontaktes.
Et redaksjonssystem der utgaver, sider og korrekturrunder ligger i samme base, og der tidligere utgaver er hentet inn fra trykk-PDF-er med PyMuPDF. Resten av systemet leser fra et API, og databasen er Postgres 17 på egen server.
Antall kilder, og hvor rotete de er. En ren kilde med et API er rask å koble på, et regneark med mange års håndskrevne unntak tar tid å rydde. Prisen settes etter steg to, når vi har sett kildene.
Fortell hva dere skulle sett hver uke. Vi sier hvor det kan hentes fra og hva det krever.
Fortell oss hva dere trenger