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¶
- Velg kilde i kortet til venstre på Import-fanen (Fjordkraft eller Altibox).
- Last opp fil(er).
- Fjordkraft: velg posteringsdato (standard: siste dag i forrige måned) og last opp én CSV.
- 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.
- 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.
- 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.
- 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.
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_AccVouchermedDataType=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.
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_importedetter 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¶
- Konti Connect-modulen
- Bilagskø og bilagsarkiv (ExtCache) — hva som skjer med bilaget etter det er lagt i køen
- Datamodell: Bilagsimport

