Matche transaksjoner¶
Etter at banktransaksjoner og hovedbokslinjer er importert kobler du dem sammen, par for par. Auto-match-motoren tar en del treff automatisk; resten håndterer du manuelt på arbeidsbenken. Når alle linjer er matchet (eller forklart med kommentar) er kontoen klar til å fullføres for perioden.
Matching skjer alltid mot uavhengig importerte data — du flytter aldri penger eller bilag, du dokumenterer hvilke som hører sammen.
Tilgang¶
| Hvem | Hva trengs |
|---|---|
| Rolle | Administrator eller regnskapskonsulent |
| Modul | Bankavstemming (moduleID 42) — registrert i bank-reconciliation-routing.module.ts:20 |
| Tilleggsrettighet | wv_BankAccountAccess.CanEdit = 1 for kontoen — uten dette er match-knappene skjult |
| Effekt | Avstemmingsstatus per periode for den valgte kontoen |
I konsernoppsett gjelder rettighetene per regnskapsklient — du må ha tilgang til den klienten kontoen ligger på.
Forutsetninger¶
- Banktransaksjoner og hovedbokslinjer er importert (se importere bankutdrag)
- Bank-saldo og hovedboks-saldo i toppen av arbeidsbenken stemmer mot kildesystemene
- Auto-match-regler er satt opp hvis kontoen har gjentakende mønstre (faste trekk, gjentakende kunder)
- Du har oversikt over hvilken periode du avstemmer — typisk forrige måned
Slik gjør du¶
1. Åpne arbeidsbenken for kontoen¶
Naviger til Bankavstemming → Kontoer og klikk på kontoen du skal avstemme. URL-en blir /bank-reconciliation/reconcile/:id (bank-reconciliation-routing.module.ts:21).
Arbeidsbenken viser banktransaksjoner i venstre panel og hovedbokslinjer i høyre panel. Topplinjen viser bank-saldo, hovedboks-saldo og differanse som skal forklares.
2. Filtrer og sorter¶
Hver liste har egne filtre:
- Periode —
dateFrom/dateTopå arbeidsbenken. Banksiden filtreres på transaksjonsdato, hovedboks-siden på bilagsdato - Status — vis "Alle", "Matchede" eller "Ikke matchede" (
bankMatchFilter/ledgerMatchFilter, defaultunmatched) - Søk — fritekst mot beløp, referanse, beskrivelse
- Sortering — dato eller beløp, stigende eller synkende
Det enkleste er ofte å sortere begge sider på beløp. Da ligger åpenbare 1:1-treff rett ved siden av hverandre.
Hver liste henter 200 rader om gangen (bank-reconciliation-workspace.component.ts:96). Finnes det flere, viser bunnlinjen «Viser X av Y» sammen med en Vis flere-knapp under listen som laster neste 200 uten å miste det du allerede ser. Totaler og antall i bunnlinjen dekker alltid hele utvalget, også rader som ikke er lastet ennå. Etter en match eller import beholdes det utvidede vinduet, mens bytte av filter, søk, sortering eller periode starter på de første 200 igjen.
3. Kjør auto-match¶
Klikk Auto-match øverst (bank-reconciliation-workspace.component.html:31). Motoren går gjennom alle ikke-matchede linjer i den valgte perioden og kjører strategiene i denne rekkefølgen (BankReconciliationService.cs:519-565):
| # | Strategi | Hva den gjør | Confidence |
|---|---|---|---|
| 1 | Motpart-mapping (CounterParty) |
Match basert på kjent motpart-mapping | 92 |
| 2 | Regelbasert (Rules) |
Brukerens egne regler (Equals, Contains, StartsWith, EndsWith, Regex m.fl.) |
90 som standard, justerbart per regel (0–100) |
| 3 | Eksakt (ExactMatch) |
Samme beløp + samme dato | 100 |
| 4 | Valuta-beløp (CurrencyAmount) |
Samme Currency + samme CurrencyAmount innenfor dato- og NOK-toleranse |
95 (god FX) eller 80 (avvik nær terskel) |
| 5 | Beløp + datotoleranse (AmountDateTolerance) |
Samme beløp, dato innenfor DateToleranceDays (default ±3) |
Synker med antall dagers avvik — 100 (0d), 90 (1d), 80 (2d), 70 (3d) |
| 6 | Beløp + referanse (AmountReference) |
Samme beløp + tekstlikhet (KID, fakturanr) over terskel | Tekstlikhet × 0,85 — typisk 60–80 |
| 7 | Sum N→1 (SumNToOne) |
Flere banklinjer summert til én hovedbokslinje | 70 |
| 8 | Sum 1→N (SumOneToN) |
Én banklinje fordelt på flere hovedbokslinjer | 70 |
| 8b | Sum N→N (SumNToN) |
Flere banklinjer mot flere hovedbokslinjer — kun hvis NtoNEnabled |
Konfigurerbar, minimum NtoNMinConfidence (default 80) |
| 9 | Same-side netting | Netto-utligning av hovedbokslinjer — kun hvis NettingEnabled |
Konfigurerbar |
| 10 | KAI-disambiguering | KAI velger riktig hovedbokspost for tvetydige treff (samme beløp + dato) — kun hvis KaiAnalysisEnabled. Forslaget legges i gjennomgangskøen for manuell godkjenning, det bokføres aldri automatisk |
Per forslag |
Allerede matchede linjer hoppes over. På en konto i annen valuta enn NOK er det bare poster som står i kontoens egen valuta som er kandidater — en valutakorrigering har ingen bankmotpart og skal ikke kunne pares med et likelydende beløp i kontovalutaen. Datoene som sammenlignes er valuteringsdatoene på begge sider (bankens bokføringsdato brukes når valuteringsdato mangler).
På en valutakonto teller også bankens bokføringsdato. Banken valuterer en valutabetaling på oppgjørsdatoen — typisk to virkedager etter at den ble bokført — mens regnskapssystemet valuterer den på bokføringsdagen. Sammenlignes bare valuteringsdato mot valuteringsdato, ligger de to beina på samme betaling systematisk noen dager fra hverandre, og motoren finner ingen par i det hele tatt. Derfor godtas en hovedbokspost også når den treffer bankradens bokføringsdato på nøyaktig samme kalenderdag.
Regelen er bevisst asymmetrisk: valuteringsdatoen beholder toleransevinduet (DateToleranceDays,
standard ±3), mens bokføringsdatoen kun teller på eksakt dag. Den modellerer det som faktisk skjer —
«regnskapet bokfører på bankens bokføringsdag» — og ikke «en eller annen dag i nærheten». Regelen gjelder
bare kontoer i annen valuta enn NOK: på en NOK-konto kan en valuteringsdato være satt med hensikt
(rentedatering), og der er oppførselen uendret. Har bankraden ingen egen valuteringsdato, eller er de to
datoene like, oppfører matchingen seg nøyaktig som før.
Datoregelen gjelder hvilke rader som kan matches, og siden denne versjonen gjelder den også hvilken periode en rad tilhører. Én dato bestemmer begge deler: valuteringsdato når den finnes, ellers bilagsdato. En rad som er valutert etter periodeslutt holdes derfor utenfor selv om den ble bokført innenfor — og en hovedbokspost uten valuteringsdato plasseres på bilagsdatoen sin i saldo, i periodelås og i periodeavslutning, akkurat slik den allerede ble matchet.
Konsekvensen som er verdt å merke seg: en hovedbokspost uten valuteringsdato med bilagsdato i en låst periode kan ikke lenger matches der. Før kunne den det, fordi låsen ikke klarte å plassere en rad uten valuteringsdato i det hele tatt. Gjenåpne perioden hvis raden faktisk skal matches inn i den.
Netting dekker to tilfeller. Går gruppen opp i null — en faktura mot sin egen kreditnota — avstemmes den direkte, uten bankpost; det finnes ingen betaling å lete etter. Dette krever at alle postene i gruppen deler samme bilagsnummer: at beløpene tilfeldigvis går opp i null er ikke bevis på at postene hører sammen, og to urelaterte poster med motsatt fortegn skal ikke avstemmes automatisk. En kreditnota ført på et annet bilag nettes derfor ikke automatisk — den nettes manuelt med «Nett ut»-knappen. Går gruppen ikke opp i null, søkes det etter en banktransaksjon på nettobeløpet, typisk «kunden betalte differansen». Finnes det flere måter å nette ut samme post på, gjør motoren ingenting og overlater valget til brukeren.
For netting mot bankpost gjelder i tillegg: står NettingRequireTextMatch på — som er standard — avvises
en nettinggruppe hvis tekstlikheten ikke når NettingTextThreshold. Kravet forutsetter at det finnes
tekst å sammenligne på begge sider; mangler teksten på bank- eller hovedbokssiden, regnes det som at
kravet ikke er oppfylt. Står flagget av, teller tekstlikhet bare som et pluss i konfidensen slik det
alltid har gjort. (Null-gruppene over bruker bilagsnummeret som bekreftelse i stedet — det finnes ingen
bankpost å tekst-sammenligne mot.)
Strategiene 8b (N→N), 9 (netting) og 10 (KAI) er av som standard og må slås på i kontoens match-config (wv_BankAccountMatchConfig) via henholdsvis NtoNEnabled, NettingEnabled og KaiAnalysisEnabled. Strategiene 1–8 kjører alltid.
Innenlandske valutanumre. Hvilke rader som regnes som innenlandske på en valutakonto styres av
valutanumrene fra økonomisystemet, og nummereringen er klientspesifikk — 0 og 47 er det vanlige i
Visma, men ikke garantert. Standarden er 0,47; avviker klientens nummerering, settes den under
Regler → Matchkonfigurasjon → «Innenlandske valutanumre (hele klienten)» (krever administrator, og
gjelder alle kontoer på klienten, ikke bare valgt konto). Feil verdi gir stille feil saldo på
valutakontoer — det er derfor feltet finnes.
På en valutakonto vurderes bare banklinjer som faktisk er i kontoens valuta. En linje i en annen valuta — typisk en revaluering — er ikke en kandidat for automatisk matching og blir liggende som utestående til den behandles manuelt. På en NOK-konto merkes ikke dette, siden alle linjene der uansett er i kontoens valuta.
Maks antall linjer i en sum-gruppe styres av MaxSumGroupSize på kontoens config — default 5 (BankReconciliationService.cs:432). Antall kandidater per kjøring kappes også av BankReconciliation.MaxSumCandidates i systemkonfigurasjonen (default 50).
Etter kjøringen får du en sammenstilling: antall matcher per strategi, hvor mange banklinjer og hovedbokslinjer som ble matchet, samt eventuelle advarsler (avkortet datasett, tvetydige kandidater).
Tvetydige kandidater som motoren ikke kunne avgjøre automatisk, samles i «Vis forslag»-panelet. Forslag med samme beløp og dato grupperes her i én sammenleggbar grupperad med antall (i stedet for én flat liste av tilsynelatende like rader) — slå ut gruppen for å se de enkelte forslagene, eller bruk «Ignorer alle» for å avvise hele gruppen i én handling (bank-reconciliation-workspace.component.ts). Enkeltstående forslag vises som før.
Panelet har begrenset høyde og scroller internt, med kolonneoverskriftene låst øverst, slik at bank- og hovedbokslistene under blir stående på skjermen uansett hvor mange forslag køen inneholder. Køen lastes på nytt hver gang du avstemmer et par, så forslag som peker på linjer du nettopp har brukt opp forsvinner umiddelbart i stedet for å bli stående som valgbare. Opphever du en match, kommer forslaget ikke tilbake av seg selv — forslag lages kun av en auto-match-kjøring, så kjør auto-match på nytt hvis du vil ha dem tilbake i køen.
Er KaiAnalysisEnabled slått på, går KAI gjennom nettopp disse tvetydige linjene (samme beløp + dato med flere hovedbokskandidater) i bunker — den leser referanse/KID, fakturanummer, bilagsnummer, beskrivelse og motpart på begge sider og velger den kandidaten som passer best. KAI-valget bokføres aldri automatisk: det legges i gjennomgangskøen som et KAI-merket forslag (øverst, framhevet), slik at du godkjenner det med ett klikk gjennom den vanlige valideringen. Kjøringen er kostnadsbegrenset til inntil 6 KAI-bunker à 50 linjer (≈ 300 linjer per kjøring, styrt av BankReconciliation.KaiMaxBatchesPerRun, standard 6); gjenstår det flere, viser oppsummeringen hvor mange og du kan kjøre auto-match på nytt. I resultat-panelet ser du «N forslag fra KAI, M til gjennomgang» og knappen «Til gjennomgang» som tar deg rett til køen (BankReconciliationService.cs).
«Dato» i «samme beløp og dato» er hovedbokslinjens effektive dato: verdidato når kilden har levert en, ellers bilagsdato. En hovedbokslinje uten verdidato er altså fullt matchbar — både i den vanlige matchingen og i KAI-disambigueringen over — den plasseres bare etter bilagsdatoen sin.
4. Verifiser automatiske treff¶
Filtrer på "Matchede" for å se hva motoren tok. For hver match ser du strategien (f.eks. ExactMatch, Rule:Faste trekk Nordea), confidence-score og match-beskrivelsen som forklarer hvilke kriterier som traff (beløp, dato, referanse).
Lav confidence (under 80) bør sjekkes manuelt — særlig regelbaserte treff første gang en ny regel kjører. Du kan oppheve en match med Unmatch (bank-reconciliation-workspace.component.html:355) og kjøre på nytt etter at regelen er korrigert.
5. Match resterende manuelt¶
For ikke-matchede linjer:
- 1:1 — kryss av én linje i hver side, klikk Avstem (bank-reconciliation-workspace.component.html:163). Backend krever at sum av valgte stemmer innenfor
AmountTolerancefor kontoen - N:1 eller 1:N — kryss av flere på den ene siden og én på den andre. Sum av valgte må stemme
- N:N — flere på begge sider. Praktisk når én bankutbetaling dekker flere fakturaer bokført med flere bilag
Avstem-knappen aktiveres så snart minst én hovedbokslinje er valgt (canMatch krever selectedLedgerIds.size > 0 — rene banklinje-grupper er ikke tillatt). Selve beløpskontrollen gjøres på backend ved lagring; hvis summen ikke går opp innenfor toleransen får du feilmelding. Match-gruppene lagres i wv_BankReconciliationMatch med en delt MatchGroupID (GUID).
6. Forklar resten med kommentar¶
Linjer som ikke kan matches (åpne poster, gebyrer som ikke er bokført, etc.) får en kommentar i stedet:
- Klikk kommentar-ikonet på linjen (bank-reconciliation-workspace.component.html:360)
- Velg kategori og skriv inn forklaring
Kommenterte linjer telles ikke som matchet, men markeres som "forklart" og blokkerer ikke periode-fullføring.
7. Fullfør perioden¶
Når alle linjer er matchet eller kommentert, klikk Fullfør øverst (bank-reconciliation-workspace.component.html:87). Modalen som åpnes har overskriften "Fullfør avstemming" — der bekrefter du:
- Bank-saldo ved periodeslutt
- Hovedboks-saldo ved periodeslutt
- Eventuell forventet differanse (ikke-matchede linjer)
Etter fullføring låses periode-raden i wv_BankReconciliationPeriod til status Completed, og auto-match filtrerer bort transaksjoner som faller innenfor låste perioder (BankReconciliationService.cs:488).
Resultat¶
Etter at perioden er avstemt:
- Alle banklinjer og hovedbokslinjer er enten matchet (via
MatchGroupID) eller forklart med kommentar - Periode-raden i
wv_BankReconciliationPerioder satt tilCompletedmed bank- og hovedbokssaldo - Avstemmingsrapport kan genereres for revisor
- Neste periode står klar med saldo-overføring fra denne
I konsernoppsett er kontoen klar til å inngå i konsernavstemming-rapporter på tvers av selskaper.
Vanlige problemer¶
"Auto-match ga få eller ingen treff"¶
Du forventet mange auto-treff, men motoren rapporterte lite.
Årsak: Vanligste årsaker:
- Datotoleransen er for stram — banken bokfører ofte 1–3 dager etter regnskapet (
DateToleranceDaysdefault 3) - Beløpstoleransen er 0 og banken trekker gebyr på utbetalingen (
AmountTolerance) - Referanse-tekst (KID, fakturanr) mangler eller står på et annet felt enn motoren ser på
- Tekstlikhets-terskelen er for høy (
TextSimilarityThresholddefault 0,3) eller motorens strenge vinnerkriterier (Jaccard ≥ 0,50, gap til neste ≥ 0,35, minst 1,5× neste) gjør at flertydige treff forkastes (BankReconciliationService.cs:776-780)
Løsning: Justér toleransene for kontoen i wv_BankAccountMatchConfig, og opprett regelbaserte treff for faste trekk eller bestemte motparter.
"Manuell match blokkeres av beløpstoleranse"¶
Du har valgt linjer som hører sammen, men match-knappen er deaktivert (canMatch blir false).
Årsak: Backend avviser lagringen fordi sum av valgte linjer på de to sidene ikke er lik innenfor AmountTolerance for kontoen. Selv 0,01 NOK avvik stopper matchen hvis toleransen er 0.
Løsning: Enten øk beløpstoleransen for kontoen, eller match med kommentar som forklarer differansen. For valuta-differanser er det vanlig å bokføre kursdifferansen som en egen hovedbokslinje først.
"Match-knappen mangler"¶
Du ser linjer men kan ikke matche dem.
Årsak: Du har lesetilgang (CanView) men ikke skrivetilgang (CanEdit) på kontoen, eller perioden er allerede fullført og låst (Completed i wv_BankReconciliationPeriod).
Løsning: Be administrator om CanEdit i wv_BankAccountAccess, eller åpne perioden på nytt hvis det er et reelt behov.
"Sum N→1 matchet feil linjer"¶
Motoren har koblet sammen flere banklinjer mot én bilagslinje, men kombinasjonen er feil.
Årsak: SumNToOne-strategien finner kombinasjoner av opptil MaxSumGroupSize linjer (default 5, konfigurerbart per bankkonto) som summerer til mål-beløpet. Hvis flere kombinasjoner gir samme sum, flagger motoren matchen som tvetydig (S5 ambiguøs) i stedet for å gjette (BankReconciliationService.cs:833-838).
Løsning: Klikk Unmatch på match-gruppen og match resten manuelt. Vurder å senke MaxSumGroupSize eller legge til en regel som ekskluderer linjene (f.eks. snevrere dato-intervall).
"Auto-match ble avbrutt — datasettet er for stort"¶
Resultatet inneholder advarselen autoMatchTruncated.
Årsak: Antall ikke-matchede linjer overskrider BankReconciliation.MaxAutoMatchTotal (default 100 000) (BankReconciliationService.cs:422). Auto-match avkorter datasettet og merker resultatet som ufullstendig — perioden kan ikke fullføres før en fullstendig kjøring lykkes.
Løsning: Snevre inn datoperioden (f.eks. én måned av gangen) og kjør auto-match på nytt.
"Differanse mellom bank og hovedbok som ikke forsvinner"¶
Selv etter at alle linjer er matchet vises en differanse i topplinjen.
Årsak: Vanligvis åpningssaldo-feil — saldoen ved periodestart stemmer ikke med faktisk balanse. Eller noen linjer er matchet med kommentert avvik som ikke bokføres i hovedboken.
Løsning: Sjekk åpningssaldoen mot forrige periodes sluttbalanse. Ved konsernoverføringer er åpningssaldo ofte glemt på datterselskap.
Relaterte sider¶
- Importere bankutdrag — forrige steg i prosessen
- Manuell matching — dypere gjennomgang av manuelle valg
- Konsernavstemming — etter at alle konti er avstemt
- Generere rapport — leveranse til revisor
- Bankavstemming-modulen — kontoadministrasjon, regler og oppsett
- Feilsøking — Bankavstemming

