Gå til innhold

Bilagsimport (Fjordkraft/Altibox)

Bilagsimport lar deg importere avregningsfiler fra Fjordkraft og Altibox som bokføringsbilag, uten å gå via de to gamle frittstående skrivebordsprogrammene (Fjordkraft Voucher Converter / Altibox Voucher Converter). Siden ligger under Konti Connect → Bilagsimport (/konti-connect/voucher-import) og har tre faner: Import, Mapping og Historikk.

Tilgang

Hvem Hva trengs
Modul Konti Connect (moduleId: 27) — ActivateService + ModuleGuard
Datatilgang ObjectType KontiConnect.VoucherImport under Innstillinger → Datatilgang
Forhåndsvise (Import-fanen) / se Historikk / se Mapping CanView
Opprette bilag (kjøre import) CanCreate
Redigere mapping, lagre innstillinger, importere Excel-mapping CanEdit

Brukere med CanView, men uten CanCreate, kan fortsatt forhåndsvise og rette grunnlag, men knappen Opprett bilag er sperret. Brukere uten CanEdit kan lese mapping og innstillinger, men Mapping-fanen er skrivebeskyttet.

Kilder

Kilde Filer Format
Fjordkraft Én CSV ;-separert, windows-1252, kolonner «AL konto», «AL konto(T)», «Brutto avgk 3»
Altibox Billing- og/eller Payment-CSV ;-separert, UTF-8, én ekstra ledetekstlinje før header

De daglige Altibox-filene er ofte reelt tomme (header funnet, men ingen datarader — dager uten faktura-/betalingsaktivitet). Dette gir en tydelig varsel-melding («Filen inneholder ingen transaksjoner.») i forhåndsvisningen i stedet for stille 0 linjer, og blokkerer ikke importen av andre filer i samme opplasting.

Slik gjør du

  1. Velg kilde i kortet til venstre på Import-fanen (Fjordkraft eller Altibox).
  2. Last opp fil(er).
  3. Fjordkraft: velg posteringsdato (standard: siste dag i forrige måned) og last opp én CSV.
  4. Altibox: last opp Billing- og/eller Payment-fil (begge er valgfrie hver for seg). Rollen (Billing/Payment) gjenkjennes automatisk fra filnavnet; velg manuelt i nedtrekket som vises under filen hvis gjenkjenningen ikke lykkes.
  5. Klikk Forhåndsvis. Alle rader parses og mappes; hver fil vises med sum i fil, konvertert sum, ferdige bilagslinjer og eventuelle advarsler/feil. Forhåndsvisningen skriver ingenting — den kan kjøres så mange ganger du vil. For store filer viser linjetabellen bare de første 500 ferdige bilagslinjene, men total linjeantall, summer, validering og godkjenningssnapshot beregnes fortsatt på hele filen.
  6. Rett mapping-feil. Rader uten mapping vises i en egen tabell (rad, nøkkel, melding) med en snarvei («Gå til mapping») til Mapping-fanen. Importen er blokkert helt til alle rader har en mapping — det finnes bevisst ingen fallback-konto.
  7. Klikk Opprett bilag. Knappen aktiveres først når forhåndsvisningen ikke har blokkerende feil. Ett bilag opprettes per fil (en Altibox-opplasting med både Billing og Payment gir to bilag) og legges i bilagskøen; du sendes automatisk til Historikk-fanen.

Opprettelsen er atomisk for hele opplastingen: hvis én fil feiler under opprettelse, blir ingen av filene i opplastingen lagt i bilagskøen. Dette er særlig viktig for Altibox når Billing og Payment sendes sammen.

Forhåndsvisningen er en godkjenningssnapshot. Hvis mapping, bilagsserie, betalingskontoer, posteringsdato eller filinnhold endres etter forhåndsvisning, må du kjøre Forhåndsvis på nytt før bilag kan opprettes. Snapshotet utløper også etter kort tid for å hindre at gamle forhåndsvisninger importeres ved en feil.

Store filer lastes opp én gang til en kortlevd filsesjon før forhåndsvisning. Preview og Opprett bilag bruker deretter en filtoken i stedet for å sende hele filen på nytt. Tokenen er bundet til bruker/tenant og utløper automatisk; hvis den utløper må filen velges og forhåndsvises på nytt. Når Azure Storage er konfigurert, lagres midlertidige filtoken-opplastinger i en tenant-prefikset blob-container (voucher-import-uploads) slik at forhåndsvisning og oppretting kan fortsette på tvers av API-instanser og app-recycle. Hvis blob-lagring ikke er tilgjengelig, brukes fortsatt dedikert in-process cache som fallback.

Kapasitet og grenser

Bilagsimporten har bevisste grenser for å beskytte både nettleser, API og bilagskø:

Grense Verdi Hva skjer ved overskridelse
Maks filstørrelse per fil 20 MB Filen avvises før forhåndsvisning/import.
Maks linjer vist i forhåndsvisningen 500 per fil Hele filen valideres og summeres, men tabellen viser bare de første linjene.
Midlertidig upload-lagring Azure Blob Storage når konfigurert; ellers 512 MB per API-prosess Utløpt/manglende token krever ny opplasting. Ved in-process cache-eviction faller UI tilbake til base64-flyt; brukeren kan også velge filen på nytt.
Filtoken-levetid 30 minutter Utløpt token krever ny opplasting/forhåndsvisning.

Opprett bilag sletter blob-baserte upload-sesjoner etter at filen er lest. Forlatte forhåndsvisninger kan likevel etterlate midlertidige blobs, så produksjonsmiljøer som bruker blob-basert filtoken bør ha Azure lifecycle-regel som rydder voucher-import-uploads, for eksempel etter én dag.

Den praktiske linjegrensen avhenger av radlengde i kilden. Per nå er 20 MB filstørrelse den autoritative grensen, ikke et fast linjeantall. Fase 19 innfører en opt-in kapasitetsmåling som kan kjøres lokalt uten staging/prod-data for å måle hvor mange syntetiske Fjordkraft-/Altibox-rader som faktisk får plass innenfor grensen, samt tid og minnebruk i transformer/parsing. Parseren leser CSV-radene sekvensielt og bygger ikke lenger et eget mellomlager med alle rå CSV-rader før transformering. Selve forhåndsvisnings-/execute-grunnlaget må fortsatt materialisere de beregnede bilagslinjene for validering, snapshot-token og set-basert SQL-skriving.

Kjøring for utvikler/konsulent i lokalt miljø:

$env:KONTICONNECT_CAPACITY_TESTS = '1'
$env:KONTICONNECT_CAPACITY_ROWS = '100000'
dotnet test api/ePortal.API/ePortal.Base.Tests/ePortal.Base.Tests.csproj --no-restore --filter "FullyQualifiedName~VoucherImportCapacityTests"

Testen bruker deterministisk syntetisk data og skriver bare måletall til testoutput. Den bruker ikke backend, staging/prod eller ekte kundefiler. Dersom målingene viser uakseptabel tid/minne ved valgt radantall, skal driftsgrensen dokumenteres lavere enn testens radantall eller execute-insert deles i eksplisitte chunks i en senere fase.

Det finnes også en separat lokal SQL-måling for selve OPENJSON-formen som brukes når bilagslinjene skrives. Den kjører bare hvis du i tillegg setter KONTICONNECT_CAPACITY_SQL_CONNECTION. Bruk en lokal/kastbar database, for eksempel tempdb på LocalDB; testen oppretter bare midlertidige #temp-tabeller og ruller transaksjonen tilbake.

Lokal syntetisk baseline fra 2026-07-18 med KONTICONNECT_CAPACITY_ROWS=100000:

Kilde Filstørrelse Linjer Transformer/parsing Allokert minne Beholdt minne etter full GC
Fjordkraft 3,29 MB 100 000 293 ms 49,17 MB 17,04 MB
Altibox Billing 6,39 MB 100 000 1 384 ms 104,99 MB 16,27 MB
Altibox Payment 3,79 MB 100 000 640 ms 53,46 MB 16,48 MB

Dette måler bare lokal transformer/parsing i testprosessen. Tiden for faktisk Opprett bilag, SQL-transaksjonen og eventuell NXT-eksport må måles separat i et lokalt/kastbart databasemiljø før tallene brukes som produksjons-SLA.

Lokal SQL insert-shape-baseline fra samme maskin etter sqllocaldb start MSSQLLocalDB: 100 000 Altibox Billing-linjer ga en ANSI/Windows-1252 OPENJSON-payload på 22,69 MB og insert til midlertidige tabeller tok 5,99 sekunder. Målingen ble gjort lokalt med Intel Core i7-7700 CPU, 38,35 GB RAM og SQL LocalDB 17.0.4025.3. Dette er et signal om JSON/insert-kost, men ikke en full måling av ekte tenant-tabeller, indekser, transaksjonslogg eller låsing.

voucher import preview

Mapping

Fjordkraft-mapping (AL-konto → debet-/kredit-konto/avdeling/prosjekt) og Altibox-mapping (GL-kode + avgiftsstatus → resultat-/balansekonto/avdeling/prosjekt) vedlikeholdes hver for seg i et smart-grid med redigering direkte i cellen. «Ny mapping» åpner et skjema; «Importer fra Excel» leser første ark i en opplastet .xlsx-fil (samme kolonneoppsett som de gamle Mapping.xlsx/GLMapping.xlsx-filene fra skrivebordsprogrammene) og viser en forhåndsvisning (antall rader lest, antall feil, antall rader hoppet over) før du bekrefter — «Importer»-knappen skriver kun til databasen når forhåndsvisningen ikke har blokkerende feil. Rader som matcher en eksisterende AL-konto (Fjordkraft) eller GL-kode+avgiftsstatus (Altibox) oppdateres; nye rader settes inn.

Importen håndterer tre radtyper fra det virkelige regnearket uten å blokkere hele filen:

  • Tom nøkkelkolonne (AL-konto / GL-kode er blank) — regnes som en skille-/gruppelinje i arket og hoppes over uten varsel. Dette skjer typisk 5–10 ganger i et reelt Mapping.xlsx.
  • Nøkkel satt, men både debet og kredit (Fjordkraft) eller både resultat- og balansekonto (Altibox) er blanke — raden er markert «ikke i bruk» av kunden og har ingen posteringsmål. Hoppes over med en advarsel (ikke en feil) i forhåndsvisningen, slik at resten av filen fortsatt kan importeres.
  • Duplikate nøkler (samme AL-konto, eller samme GL-kode+avgiftsstatus etter normalisering) — første forekomst brukes, senere forekomster hoppes over med en advarsel som navngir både raden som ble beholdt og raden som ble hoppet over. Dette samsvarer med hvordan de gamle skrivebordsprogrammene alltid slo opp første treff — kundens regnskap er allerede bygget på at første forekomst vinner, så dette er ikke ny fleksibilitet, det er å matche etablert praksis.

Kun ugyldige celleverdier (f.eks. tekst i en tallkolonne, ukjent avgiftskode) gir en blokkerende feil som stopper hele importen.

For Altibox-mapping finner importen dataraden automatisk uansett hvor mange overskriftsrader regnearket har. Det ekte GLMapping.xlsx-arket fra kunden har tre rader før første datarad (forklarende fritekst, gruppeoverskrifter, kolonnenavn) — importen leter etter første rad der GL-kode-kolonnen er utfylt og avgiftsstatus-kolonnen tolkes som «MVA»/«NO-TAX», og hopper stille over alle rader før den. Filer med kun én vanlig kolonnenavn-rad (det vanlige oppsettet) fungerer som før.

Import-modus: "Legg til/oppdater" vs. "Erstatt alt"

Excel-importen har to modi, valgt med avkryssingsboksen «Erstatt alt» i importdialogen:

  • Standard (avkrysset av) — kun oppdatering/tillegg (upsert). Rader i filen oppretter eller oppdaterer mapping-rader; mapping-rader som IKKE finnes i filen står helt urørt. Dette er standardvalget og passer for løpende vedlikehold der Excel-filen kun inneholder de radene du vil endre.
  • «Erstatt alt» (avkrysset på) — filen blir fasit (speiling). Etter at rader i filen er opprettet/oppdatert, slettes enhver eksisterende mapping-rad hvis nøkkel (AL-konto for Fjordkraft, GL-kode+avgiftsstatus for Altibox) ikke finnes noe sted i filen. Bruk denne modusen når filen representerer hele mapping-settet, f.eks. ved en fullstendig re-eksport fra kilden.

Forhåndsvisningen viser alltid hvor mange rader som ville blitt slettet hvis du trykker «Importer» — dette oppdateres automatisk når du huker av/på «Erstatt alt» (ingen skriving skjer i forhåndsvisningen, uansett modus). Hvis slettingen er større enn null, vises et tydelig varsel («N eksisterende mappinger vil bli slettet») over feil-/advarselstabellene. Etter en vellykket import med «Erstatt alt» viser bekreftelsen også hvor mange rader som faktisk ble slettet. Selve importen committes atomisk: hvis en oppdatering, ny mapping eller sletting feiler, rulles hele mapping-importen tilbake.

Mappingmål valideres også mot lokal masterdata når portalen har en lokal fasit:

  • konto mot wv_ExtCache_AccVoucher med DataType=1
  • avdeling mot DataType=2
  • prosjekt mot DataType=3

Hvis cacheen for en type er tom, blokkerer ikke bilagsimporten på den typen, men Preview og Excel mapping-import viser en advarsel om at den aktuelle masterdata-valideringen er inaktiv. Hvis cacheen er fylt, må verdien finnes aktivt der. Det betyr at gamle mappinger med ugyldige mål kan måtte rettes før ny forhåndsvisning eller Excel-import kan fullføres.

voucher import mapping

Felt — Fjordkraft-mapping

Felt Påkrevd Beskrivelse
AL-konto Ja (unik nøkkel) Kontonummer slik det står i avregningsfilen
Kontonavn Nei Informativt — vises som tekst på bilagslinjen
Debetkonto Minst én av debet/kredit Brukes når beløpet på raden skal debiteres
Kreditkonto Minst én av debet/kredit Brukes når beløpet på raden skal krediteres
Avdeling Nei Overføres som avdeling (R1) på bilagslinjen
Prosjekt Nei Overføres som prosjekt (R2) på bilagslinjen

Felt — Altibox-mapping

Felt Påkrevd Beskrivelse
GL-kode Ja (del av unik nøkkel) GL_CODE fra posteringsfilen
Avgiftsstatus Ja, «MVA» eller «Uten avgift (NO-TAX)» (del av unik nøkkel) Avledet av avgiftskoden i filen — kode 3 gir «MVA», alt annet gir «NO-TAX»
Resultatkonto Nei Brukes når kontonummeret på raden er ≥ 3000
Balansekonto Nei Brukes når kontonummeret på raden er < 3000
Avdeling Nei Overføres som avdeling (R1)
Prosjekt Nei Overføres som prosjekt (R2)

Innstillinger

Nederst på Mapping-fanen kan du sette bilagsserie per kilde (Fjordkraft, Altibox billing, Altibox payment) og de faste kontiene som brukes for Altibox-betalinger (debet-/kreditkonto). Verdiene lagres i systemkonfigurasjonen (VoucherImport.*-nøkler) og gjelder umiddelbart for neste forhåndsvisning/import.

Systemet avviser ugyldige innstillinger både når de lagres og når en import forhåndsvises:

  • bilagsserier må være større enn 0
  • Altibox debet- og kreditkonto for betalinger må være større enn 0
  • Altibox debet- og kreditkonto for betalinger må være ulike

Hvis en gammel installasjon allerede har ugyldige verdier i systemkonfigurasjonen, blokkeres forhåndsvisning/import til verdiene er rettet.

Historikk

Historikk-fanen viser alle importerte filer: kilde, filnavn, rolle, antall linjer, sum, status, sist statusdato, NXT batch-/bilagsnummer når eksportadapteren har bekreftet dem, recovery-vurdering, hvem som importerte og når.

Status beregnes fra den vanlige bilagskøen og arkivet:

  • Lagt i bilagskø — bilaget ligger fortsatt i aktiv wv_ExtCache_Voucher-kø.
  • Eksportert fra kø — bilaget er flyttet til wv_ExtCache_Voucher_imported etter eksport fra køen.
  • Uavklart — bilaget finnes ikke i aktiv kø eller arkiv. Kontroller NXT/bilagseksportloggen før du forsøker manuell korrigering.

Status «Eksportert fra kø» betyr fortsatt ikke alene at bilaget er endelig bokført i Visma. For ERP-resultat, kontroller bilagseksportloggen på integrasjonen «Visma Business NXT - Bilag». Når eksportadapteren har bekreftet opprettede linjer via read-back, viser historikken også NXT batchnummer og bilagsnummer. Hvis read-back bare delvis eller ikke bekrefter linjene, vises siste eksportfeil på historikkraden.

Recovery-vurderingen viser hva systemet faktisk kan gjøre trygt:

  • Retry via kø — aktiv køpost finnes fortsatt; neste NXT-bilagseksport kan forsøke igjen.
  • Eksportert — køposten er arkivert som eksportert.
  • NXT-referanse kjent — batch-/bilagsreferanse finnes; kontroller NXT før reversering eller replacement.
  • Krever manuell recovery — historikken har ikke nok grunnlag til å rekonstruere bilaget automatisk. Bruk originalfil/ny forhåndsvisning og kontroller ERP før ny import eller manuell korrigering.

Vanlige problemer

"Rad mangler mapping"

En eller flere rader i filen har en konto (Fjordkraft) eller en GL-kode+avgiftsstatus-kombinasjon (Altibox) som ikke finnes i mapping-tabellen. Bruk snarveien «Gå til mapping» fra forhåndsvisningens feilliste, legg til raden, og kjør Forhåndsvis på nytt. Importen er bevisst blokkert til alle rader har mapping — det finnes ingen fallback-/samlekonto.

"Filen er allerede importert"

Filen har samme SHA-256-hash som en tidligere importert fil for samme kilde og rolle. Se Historikk-fanen for den opprinnelige importen. En identisk fil kan ikke importeres to ganger for samme kilde/rolle, men samme filinnhold sendt inn under en annen kilde eller rolle (f.eks. Billing vs. Payment) blokkeres ikke.

Hvis meldingen sier at filen er samme fil som en annen fil i samme opplasting, fjern duplikatet og kjør Forhåndsvis på nytt. Dette stoppes før noe legges i bilagskøen.

"Bilagsserie/betalingskonto må være større enn 0" eller "debet- og kreditkonto må være ulike"

Innstillingene under Mapping-fanen er ugyldige. Rett bilagsserie eller Altibox betalingskontoer og lagre før du forhåndsviser/importerer på nytt.

"Kjør forhåndsvisning før du oppretter bilag" eller "Forhåndsvisningen er utløpt"

Bilagsimporten krever at opprettelsen bruker samme grunnlag som du nettopp forhåndsviste. Kjør Forhåndsvis på nytt og opprett bilag fra den nye forhåndsvisningen.

"En av filene er allerede importert"

En annen bruker eller prosess rakk å importere en av filene etter forhåndsvisningen. Ingen filer i denne opplastingen ble lagt i bilagskøen. Kjør Forhåndsvis på nytt og kontroller Historikk før du prøver igjen.

"Ugyldig beløp/dato"

En rad i filen har et beløp eller en dato som ikke kan tolkes (f.eks. feil datoformat, tekst i et tallfelt). Raden vises som en blokkerende feil i forhåndsvisningen. Rett filen hos kilden, eller kontakt den som leverer avregningsfilen, og last opp på nytt.

"Posteringsdato må velges for Fjordkraft-import"

Fjordkraft krever at du velger en posteringsdato før du kan forhåndsvise eller importere. Standardverdien er siste dag i forrige måned; du kan endre den før du kjører Forhåndsvis.

"Kan ikke avgjøre om filen er Billing eller Payment"

Altibox-filnavnet inneholder verken «Billings» eller «Payment», så automatisk rollegjenkjenning feiler. Velg rolle manuelt i nedtrekkslisten som vises under filen etter opplasting.

Relaterte sider