Mindste bankmatch ved auto-bilagkun PayFriendEt bilag fra mail skal mindst nå dette pointtal i bankmatch, før det må oprettes uden klik, medmindre firmaet har sat en anden værdi.
RECONCILIATION_AUTO_APPLY_THRESHOLDkun PayFriendKonfidens et match skal nå, før afstemningen må linke uden et klik, og kun PayFriend kan ændre den.
RECONCILIATION_EXPENSE_DATE_DECAY_FLOORkun PayFriendHvor stor en del af strategi-konfidensen et udgiftsmatch beholder på kanten af datovinduet, og kun PayFriend kan ændre den.
RECONCILIATION_EXPENSE_DATE_WINDOW_BILL_DAYSkun PayFriendHvor langt en regning må ligge fra banklinjen, før datostyrede strategier ikke tilbydes, og kun PayFriend kan ændre det.
RECONCILIATION_EXPLANATION_WINDOW_DAYSkun PayFriendHvor mange dage match-forklaringer gemmes, målt på bilagets oprettelse, og kun PayFriend kan ændre det.
Et bilag er først færdigt, når det hører til en linje i banken. Bankmatch er det, der finder parret. Det sker på to måder.
Systemet foreslår. Hver time kigger systemet på nye bilag fra mail og scorer de banklinjer, der kunne passe. Et godt bud bliver et forslag (begreb.bankmatch.forslag). Et forslag binder ingenting.
Et menneske kobler. Fra Kvitteringer, Indbakken eller Bank kan en medarbejder bekræfte, vælge eller fortryde et par. Først når der er skrevet en række i bank_transaction_matches, er det et match (begreb.bankmatch.match).
Uden at nogen trykker på noget kan systemet i tre tilfælde koble selv: kvitteringer der kommer ind med en klar banklinje, indtægtslinjer med en tydelig faktura, og onboarding-sweepet, der parrer med regnskabets egne poster. Resten venter på et menneske.
Hvilken motor? Er bilaget et mailbilag, der kom via Indbakken, er det e-mail-armen. Er det en kvittering, der blev koblet fra Kvitteringer, Bank eller af et job, så skriver tabel.bank-transaction-matches hvem og hvordan: match_source (system eller human), match_strategy og match_confidence.
Hvilken strategi og hvilken score? På mailbilaget står bank_match_strategy (scored eller unique_amount) og bank_match_confidence (0 til 100). På match-rækken står match_strategy og match_confidence (0 til 1). Se faelde.bankmatch.to-skalaer.
Hvorfor den linje? Strategien siger hvilket signal der bar parret. tabel.match-explanations gemmer de rangerede kandidater og signalerne for udgiftsbilag, så man kan se hvad der ellers var i spil.
Er der et alias? Et lært alias i tabel.supplier-aliases giver op til 30 point og virker uden deploy. Afstemningsmotoren lærer et alias efter hvert match uden navnetjek, så ét forkert match kan avle det næste. Se faelde.bankmatch.alias-laerer-forkert.
Bogføringen rulles ikke tilbage. Et bogført bilag bliver stående, og et afregnet match (betalt faktura, leverandørafregning) afvises med CannotUnmatchSettledException. Se faelde.bankmatch.fortryd-roerer-ikke-bogfoering. Det natlige unwind (job.reconciliation-unwind-auto-matches) fortryder kun automatiske indtægtsmatches til fakturaer, der ikke længere består reglerne.
E-mail-armen (BankTransactionMatchingService) skriver ikke til bank_transaction_matches og ikke til match_status. Den gemmer et forslag på email_voucher_attachments. Rækken i matchtabellen opstår først, når bilaget oprettes med en banklinje (handling.bankmatch.promote-inbox-attachment) eller et menneske matcher i panelet (handling.bankmatch.panel-match).
Skalaforskellen. E-mail-armen scorer i point fra 0 til 100 og gater ved 70. Afstemningsmotoren scorer som andel fra 0 til 1 og gater ved 0,85 for auto-match. 70 og 0,70 er ikke det samme tal. Panelet omregner mailscoren til visning (min(0,99, score / 100)), og dér løftes et bekræftet par til mindst 0,86, kun som rangering. Se faelde.bankmatch.to-skalaer og faelde.bankmatch.86-gulv-er-visning.
E-mail-armen (point, 0 til 100). Porten corroboratesIdentity giver 0, medmindre datoen ligger højst 7 dage fra (regel.bankmatch.korroboration) eller beløbet er inden for 1 %.
Blandt kandidater over 70 vinder den nærmeste dato, så højeste score, så laveste id. Kun 50 kandidater inden for regel.bankmatch.kandidat-vindue-beloeb scores pr. bilag.
Hvad må ske uden et menneske, når forslaget findes:
Auto-promovering opretter bilaget uden banklinje. Linjen bliver i afstemningskøen. Bilaget når først regnskabet via auto-bogføringens egen vagt eller et menneske.
Afstemningsmotoren (andel, 0 til 1), udgiftssiden:
Vinduet for kvittering og regning bruges i panelets scoring (scoreExpenseCandidate), ikke af auto-stien, der ikke nedtrapper efter dato. En mailkandidat er først aktuel, så længe bilagsdatoen ikke er mere end 30 dage gammel (scopeMatchWindowOpen). Nøglen RECONCILIATION_AMOUNT_ONLY_CORROBORATION_DAYS (14) har ingen læser og er ikke bankmatchens 7 dage.
tabel.supplier-aliases husker, at et leverandørnavn og en bankmodpart er det samme. Aliaset læses af scoreCandidate ved hver scoring, så en ændring virker ved næste scoring uden deploy.
En faktura og dens kvittering er to filer om ét køb og må derfor dele banklinje. samePurchase slår dem sammen, hvis fakturanumrene er ens (uden datogrænse), eller hvis beløb, valuta og leverandørnavn er ens, den ene er en regning og den anden en kvittering, og datoerne ligger højst 21 dage fra hinanden (regel.bankmatch.samme-koeb). Søskendebilaget afvises med årsagen same_purchase_duplicate, så køb ikke tæller dobbelt.
Appens tidszone er UTC. Dansk tid er 2 timer senere om sommeren og 1 time senere om vinteren.
Hver fjerde time (:15) henter appen også nye banklinjer, og hver halve time fornys Revolut-tokens. Mandage kører replay-audit kl. 07.20 og onboarding-audit kl. 07.40.
human, strategi fra panelet, ellers manual. Uden bruger og strategi unknown
Voucher-indgangen og panelet er to veje ind i samme tabel, så et menneske kan koble samme kvittering fra begge steder. Tilladelsen er vouchers.edit på Kvitteringer, vouchers.edit eller vouchers.create i Indbakken og bank.reconcile på Bank.
job.sweep-accounting-reconciliation parrer en banklinje med en post i regnskabet, når bankforbindelsen er i gang. Den skriver en match-række med strategien accounting_sweep og match_sourcesystem, og linjens status bliver manual_matched. E-mail-armen læser kun linjer uden match-række, så en sweepet linje er usynlig for den. Derfor betyder rækkefølgen noget: kobles regnskabet før mailen, kan sweepet tage linjerne først, og mailbilagene ender som regninger. Se faelde.bankmatch.onboarding-sweep-beslaglaegger.
Match-auditen er det stående tilsyn med matchkvaliteten (job.match-audit-run). Den har to lag:
Invarianter, hver dag kl. 06:20 UTC (schedule.match-audit-invariants). 13 skrivebeskyttede detektorer, hver med en forventet værdi. Eksempel: sweep_claimed_before_mail forventer 0.
Fuld kørsel med replay, hver mandag kl. 07:20 UTC (schedule.match-audit-full). Den kører den rigtige MatchScorer mod bekræftede matches og klassificerer hver som enig, tavs eller uenig.
Matchet kræver kun fra banken: linjens dato, beløb og valuta, modpart, tekst og reference. Kilderne er integration.aiia (standard for nye firmaer), integration.yapily og integration.revolut (også Revolut Business). Hver bankforbindelse synkroniserer på sin egen udbyder, uanset firmaets standard. Aiia afleverer modpart og tekst fra betalers eller modtagers navn og linjens beskrivelse. job.sync-bank-transactions opretter linjerne som unmatched.