Överflygning

Vad som skiljer Amber

Genomgång av funktioner där Amber är konstruerat annorlunda än vad som är vanligt i ekonomisystem. Beskrivningarna avser vad som är byggt och i drift.

Uppdaterad 2026-08-30 23 punkter Byggs ut löpande

Datamodell

Nyritad datamodell utan dubbellagring

Schemat är konstruerat för Amber och innehåller inga strukturer som ärvts vidare från äldre system. Tabeller och entiteter följer genomgående samma modulprefix och samma namnkonventioner, och de dynamiska registren har samma primärnyckel oavsett register. En uppgift lagras på ett ställe, utan parallella register eller härledda kopior som behöver hållas i synk.

Attest och
leverantörsfakturor

Definitivbokning sker vid slutattest

När sista attestanten godkänner fakturan definitivbokas den i samma steg, och är därmed betalbar. Det finns ingen efterföljande bokföringskörning och inget mellanläge där fakturan är attesterad men inte bokförd.

E-fakturor läses in och konteras nattetid

En nattlig körning läser in, tolkar och konterar inkommande Svefaktura och Peppol BIS. Konteringen sätts genom matchning mot en tidigare faktura från samma leverantör, och när ingen match finns genom tolkning av fakturatexten. Ankomstbokningen körs på morgonen: fakturor med balanserad kontering går igenom, övriga och dubbletter ligger kvar för genomgång.

Riskbedömning före attest

Varje inkommande faktura får riskpoäng och nivå grön, gul eller röd. Gul ger varning i reskontran och i attestflödet. Röd ger dessutom en genererad motivering och mejl till utsedd mottagare. Signalerna som vägs samman:

  • Ovanligt högt belopp
  • Ny leverantör, färre än tre fakturor i historiken
  • Dubblett på fakturanummer, eller på belopp och datum
  • Innehållsmässig likhet med en tidigare faktura
  • Avvikelse från leverantörens tidigare fakturamönster
  • Avvikelse från leverantörens normala fakturaintervall
  • Tre eller fler fakturor från samma leverantör inom 30 dagar
  • Leverantören saknas eller är avregistrerad hos Bolagsverket

Attestanter tilldelas utifrån konteringen

Roller äger konton, projekt och koddelar via mönster, och matchas per konteringsrad. En faktura som rör tre fastigheter tilldelas därmed tre attestanter. Belopp över rollens gräns eskalerar uppåt i rollkedjan, sakgranskaren byts ut om den råkar vara utpekad, och varje tilldelning lagras med den regel som orsakade den. Roller, trösklar och firmatecknare konfigureras som data.

Vidarefakturering utgår från attestflödet

Attestanten markerar fakturan för vidaredebitering under attesten och väljer kund. Kundfakturan skapas när leverantörsfakturan definitivbokas, med beloppet hämtat ur den bokförda verifikationen, och leverantörens pdf bifogas som sida två. Samma operation kan köras i efterhand på en bokförd faktura, då även på del av beloppet.

Redovisning

Utfall och budget i samma transaktionsregister

Budget och utfall ligger som rader i samma register, åtskilda av en typmarkering, och saldon aggregeras ur raderna vid behov. Det finns ingen saldotabell och inget separat budgetregister, alltså inga härledda värden som kan hamna i otakt med huvudboken och ingen omräkning vid rättelser.

Avvikelsekontroll efter varje bokförd verifikation

Kontrollen körs per konteringsrad direkt efter commit och är aldrig blockerande. Tre av reglerna är statistiska och utgår från bolagets egen historik, fyra är regelbaserade. Träffarna samlas i en egen vy och kvitteras som granskade eller ignorerade.

  • Belopp som avviker kraftigt från kontots normala nivå
  • Kombination av konto och koddel som inte förekommit
  • Koddel saknas där kontot normalt har en
  • Kontot används för första gången
  • Runda tal på känsliga konton
  • Verifikationsdatum mer än 30 dagar bakåt
  • Skuld- eller fordringskonto bokat åt fel håll

Transaktionerna omfattar reskontra och bokföring

Databastransaktionerna är inte begränsade till huvudboken. Vid definitivbokning ligger både verifikationen och uppdateringen av reskontraposten i samma transaktion, och vid ankomstbokning skapas kontering och reskontrapost tillsammans. Ett fel någonstans i kedjan rullar tillbaka hela steget, så reskontra och bokföring kan inte glida isär. Godkännanden är dessutom idempotenta, vilket gör dubbel submit ofarlig.

AI i arbetet

Hjälpen är en kontextkänslig chatt

Hjälpen känner till vilket fönster användaren står i och slår upp systemets egen dokumentation innan den svarar. Den har också verktyg och kan utföra operationer i samtalet, till exempel hämta uppgifter från Bolagsverket på ett organisationsnummer och lägga upp leverantören.

Genererad analys till rapporter och register

Resultat- och balansrapporten levereras med en analys som eget dokument, anläggningsregistret har en motsvarande genomgång, och riskflaggade leverantörsfakturor får en skriven motivering. Underlaget är bolagets egna siffror.

Promptar konfigureras per bolag

Instruktionerna bakom analyserna är redigerbar text, inte kod. Ett bolag kan ändra vad resultatanalysen ska lyfta fram eller vad förbrukningsanalysen ska reagera på. Uppslagningen kaskaderar: bolagets egen version används när den finns, annars systemnivån. Namngivna instruktioner finns idag för resultatanalys, balansanalys, mediaanalys, tolkning av mediavyer, tilldelning av sakgranskare, statusmail och felförklaring.

Media och
förbrukning

Förbrukning läses ur e-fakturan

Vid import extraheras mätarnummer, period och förbrukning ur fakturans XML, per mätare även på samlingsfakturor med flera mätpunkter. Kilowattimmar och kubikmeter följer därmed med kronorna in i systemet utan separat avläsning eller insamling. Ovanpå det ligger pivotanalys per fastighet och energislag, CO₂ per fastighet för CSRD, och energital mot BBR-gränsvärden.

Anläggningar

Schemalagd avskrivningskörning

Körningsdagen anges som en regel i klartext, till exempel tredje vardagen i månaden, och tolkas till datum. Två arbetsdagar innan går en förvarning till ansvarig roll med möjlighet att skjuta upp just den månaden. På körningsdagen bokförs avskrivningarna, och anläggningar utan regel eller med fel rapporteras i stället för att hoppas över tyst. Körningen är idempotent.

Säkerhet och
efterlevnad

Organisationsinloggning och tvåfaktor parallellt

Inloggning sker med organisationskonto via Entra ID eller med lösenord och engångskod från en autentiseringsapp. Tvåfaktor aktiveras per användare, organisationsinloggning per kund, och de fungerar sida vid sida i samma installation. Upprepade felaktiga försök spärrar kontot tillfälligt.

Skanning efter personuppgifter i fritext

Fritextkolumner i system- och bolagsdatabaser skannas efter personnummer, e-post och telefonnummer, både löpande via krokar när text skrivs och som körning i efterhand. Fynden lagras maskerade med tabell, kolumn, postnyckel, risknivå och kontext, klartexten loggas aldrig. Granskade fynd anonymiseras på plats, och sökning på personnummer ger underlag för registerutdrag.

Incidenter skapas automatiskt

Driftstörningar och misslyckade säkerhetskopior skapar incidentposter med löpnummer, typ och allvarlighetsgrad, med spärr mot dubbletter samma dag. Vid sidan om incidentloggen finns register för återställningsövningar, leverantörsbedömning och säkerhetspolicy, samt en sammanställande rapport.

Bevakning och
utskick

Separat tjänst för utskick och nattkörningar

En fristående tjänst går igenom samtliga tenanter varje natt och skickar väntande attester per person, energiavvikelser, bokföringsanomalier, statusrapport och en sammanställning till ekonomi. Mottagare, frekvens och kanal, mejl eller chatt, konfigureras inne i Amber, inget är hårdkodat. Samma tjänst startar nattens körningar, alltså fakturaimport, avskrivningar, återredovisning och säkerhetskopiering, och pingar driften var femte minut.

Uppstart

Onboarding med mallar och statusuppföljning

Varje register som ska fyllas har ett eget moment med en excelmall, förifylld med befintlig data, och samtliga mallar kan hämtas samlat. Ifyllda register granskas rad för rad innan de skrivs skarpt, medan massdata som anläggningstransaktioner går in via bulkinsert och kontrolleras i efterhand. Startsidan visar antal avklarade moment per område, och en pre-flight-kontroll före driftstart letar upp konton, koddelar och transaktionstyper som inte hänger ihop.

Gränssnitt

Fönsterhantering i webbläsaren

Varje funktion är ett eget fönster på en gemensam yta med aktivitetsfält, alltså flera samtidigt öppna vyer utan att något arbete behöver avbrytas. En instans per fönstertyp, med återanvändning vid nytt öppnande och utbyte när fönstret öppnas med en kontext. Ingen klient installeras.

Bakgrundskörning av tunga jobb

En brytare i aktivitetsfältet lägger långa inläsningar på en bakgrundstråd, i dag SIE-importen. Användaren kan arbeta vidare och får ett meddelande när jobbet är klart. Ett programlås hindrar samtidiga körningar av samma jobb.

Teknik

Gränssnittet lever på servern, över en öppen WebSocket

Amber är byggt på Wisej, där fönster, kontroller och deras tillstånd finns i .NET på servern. Webbläsaren håller en persistent WebSocket-anslutning och tar emot enbart förändringarna, alltså vilka komponenter som ändrats och hur, inte en omritad sida och inte en bildström.

Följden är att det inte finns någon separat frontend att hålla i synk med backend. Händelsehantering, validering och databasåtkomst är samma kod i samma process, och det finns inget API-lager mellan skärmen och affärslogiken som kan komma i otakt vid en ändring.

Priset är att varje inloggad användare håller sitt tillstånd i serverminnet. Kapacitetsplaneringen blir därmed en minnesfråga snarare än en fråga om anrop per sekund, och en session hör hemma på en och samma servernod.

Datalagret är ett eget bibliotek i C#

Datamodellen ligger i ett separat klassbibliotek skrivet i C#, med en typad klass per tabell och repositoryklasser för läsning och skrivning. Åtkomsten sker med Dapper mot parametriserad SQL, utan ORM-lager emellan. Applikationen är fortsatt VB.NET och anropar biblioteket, vilket gör att språkbytet kan ske modul för modul i stället för som en samlad omskrivning.

Inga typade dataset används. För gridvyerna finns däremot en läsande EF Core-kontext, där sortering, filtrering, gruppering och sidbrytning översätts till SQL så att bara den efterfrågade sidan hämtas. Entiteterna där är nyckellösa och används enbart för läsning, all skrivning går via repositorna.