Verificeret mod app@9d146f9 · , 16 skal genverificeres · , 0 brudt
Bilagsindgang
Verificeret mod app@e99eb6a (2026-10-01). Domænet hører til siden Kvitteringer (side.kvitteringer). Domænesider har ikke et anatomi-lag, og lag 4 er hovedsektionen.
Indbakke-adressekun PayFriendIndgående mail slås op på slug'en, så bilaget lander på det rigtige firma.
Email Bilagkun PayFriendMail-bilag kan tvinges fra for firmaet.
Paywall exemptkun PayFriendEt fritaget firma bliver ikke stoppet af gratis-planens loft på 25 bilag.
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.
ACCOUNTING_SUPPLIER_SYNC_ENABLEDkun PayFriendOm synkroniseringen henter leverandører fra regnskabet, og kun PayFriend kan ændre det.
ACCOUNTING_SYNC_ATTACHMENTSkun PayFriendOm bilagssynk også henter vedhæftninger fra regnskabet, og kun PayFriend kan ændre det.
ACCOUNTING_VOUCHER_PRUNE_ABORT_RATIOkun PayFriendAndel af bogførte bilag der må mangle i regnskabet, før oprydningen afbrydes, og kun PayFriend kan ændre den.
ACCOUNTING_VOUCHER_PRUNE_ENABLEDkun PayFriendOm synk må slette lokale bogførte bilag som regnskabet ikke længere har, og kun PayFriend kan ændre det.
DIGITALPOST_ENABLEDkun PayFriendOm indgående Digital Post er tændt, og kun PayFriend kan ændre det.
EMAIL_INITIAL_SYNC_MAX_MESSAGESkun PayFriendLoft for hvor mange mails den første indbakke-synk må hente, og kun PayFriend kan ændre det.
GMAIL_LOOKBACK_DAYSkun PayFriendHvor mange dage den første Gmail-synk går tilbage, når brugeren ikke selv har valgt et vindue, og kun PayFriend kan ændre det.
AiiaHenter konti og transaktioner for en samtykket bankforbindelse.
AnthropicOCR af bilag, filter-AI på indgående mail og kontoforslag på bilag og leverandørfakturaer.
BillyBogføring, spejling af posteringer og kortet over Billy-vedhæftninger.
Business CentralBogføring, spejling af finansposter, bilagskort og fornyelse af change-notification-abonnementer.
Digital PostPoller verificerede forbindelser, henter meddelelser og klassificerer dem.
DineroBogføring, spejling af poster og kortet fra bilagsnummer til fil.
Vis alle 15
e-BoksParser den XML, e-Boks skubber via videresendelse, og finder opsætninger der er gået i stå.
e-conomicBogføring af bilag, spejling af poster, kontoplan, kassekladde-kladder og dokumentkortet economic_documents.
GmailLæser indbakken og henter de vedhæftninger, der kan blive bilag.
IMAPLæser en IMAP-postkasse og henter de vedhæftninger, der kan blive bilag.
OutlookLæser indbakken og henter de vedhæftninger, der kan blive bilag.
OverførselsserviceAfsender leverancer og henter kvitteringsfiler over SFTP.
Postmark indgåendeTager imod den indgående mail og gør vedhæftningen eller brødteksten til et bilag.
RevolutHenter transaktioner og, for Revolut Business, udgiftsbilag.
YapilyHenter konti og transaktioner for en samtykket bankforbindelse.
0
På 30 sekunder
For alle
Et bilag er en kvittering eller en regning, som PayFriend skal bogføre. Der er ni veje ind:
Kundens postkasse (Gmail, Outlook eller IMAP): PayFriend kigger efter nye mails hvert kvarter.
Videresendt mail til kundens egen adresse (bilag+…, fakturaer+…) og mails uden vedhæftning.
Upload af kunden eller et teammedlem, også fra en banklinje eller en liste over manglende bilag, og dokumenter kunden henter hos leverandører, der ikke sender faktura.
Digital Post og e-Boks.
Overførselsservice-kvitteringer. De ligner bilag, men er det ikke. Det er bankens svar på betalinger.
Regnskabssystemet (e-conomic, Dinero, Billy, Business Central).
Løn.
Stripe-afregninger. De bogføres, men bliver ikke et bilag i PayFriend.
Rydning ved afstemningsstart: gamle mailbilag trækkes tilbage til Indbakken.
Den vigtigste regel at huske: en fil fra en mail er ikke et bilag, før den er promoveret. Indtil da ligger den som et forslag i Indbakken. Uden at nogen trykker på noget sker følgende: mails scannes, filer OCR'es, og hvis filen kan matches til en banklinje og alle sikkerhedstjek er opfyldt, promoverer PayFriend den selv. Bilaget er derefter Pending. Det er stadig ikke bogført.
2
Handlinger (menneskelige trin)
For alle
Handlingskortene for siden Kvitteringer skrives i et separat issue, og de bliver koblet på domænet der. Det her er de trin en kunde eller supporter kan se:
Hvad brugeren gør
Hvad der sker
Kan fortrydes
Uploader én eller flere filer (højst 50)
Bilag med status Pending oprettes og OCR'es. Samme fil to gange i bulk springes stille over.
Ja, indtil bogført
Uploader fra en banklinje eller en manglende post
Samme som upload, men bilaget kobles til linjen. Ved en manglende post sendes filen også til regnskabssystemet.
Ja, indtil bogført
Promoverer en vedhæftning i Indbakken
Bilag med status Pending oprettes ud fra vedhæftningen.
Ja (demote), indtil bogført
Afviser eller gendanner en vedhæftning
Status skifter mellem dismissed og ready.
Ja
Prøver OCR igen
Vedhæftningen går til pending_ocr og OCR'es igen.
Ikke relevant
Afleverer et dokument ved kilden
Bilag oprettes med leverandørens kilde og kobles til månedens hævninger.
Promoverer ikke selv. Finder match og sender id'erne videre til AutoPromote.
Dertil kommer to veje, der ikke går gennem Indbakken: Postmark skriver vedhæftningen som promoted fra start, og job.scan-email-attachment kan oprette en regning (ikke et bilag) med kilden inbox_auto, når der ikke er en bankmatch.
Målt 2026-10-01 (tabel.email-voucher-attachments): 35.906 vedhæftninger, 15.653 ready, 14.489 deferred_ocr, 3.193 promoted, 79 quota_blocked. 1.337 (3,72 %) er blevet til et bilag.
Herfra er det teknisk
4
Hvor kommer data fra
Teknisk
Pipeline fra udløser til den række der skrives. Noderne er klikbare.
Indgangskilde. Scannet stempler ingen. email sættes på bilaget ved promotion. inbox_auto sættes kun på en regning. Hvilken postkasse en mail kom fra står på kilden (provider), ikke i indgangskilden.
Dedup. Unik nøgle (selskab, message_id) på kilden og (selskab, file_hash) på vedhæftningen, også mod afviste rækker. Samme mail via to postkasser får to forskellige message_id og dedupes kun på fil.
Gates. Postkassen er enabled, selskabet er backgroundSyncEligible (ikke suspenderet, ikke i betalingsgæld), ingen requires_reauth, ikke midt i backfill. Modulet indstilling.company.module-email-bilag-enabled gater ikke scan eller OCR, men gater AutoPromote og regning. Gratis-loftet gælder (regel.plan.gratis-bilag).
fakturaer+ med fil: en regning (Draft) oprettes og OCR'es af job.scan-supplier-invoice. Ingen tekst-fallback.
godkend+: skriver en kommentar på en godkendelse. Godkender eller afviser aldrig. Opretter intet bilag.
bilag+ uden brugbar fil:job.process-inbound-body-email. Teksten skal være mindst 100 tegn, og OCR skal finde både beløb og leverandør. Der renderes en PDF af teksten.
Indgangskilde.email, sat ved oprettelsen og ikke ved en senere promotion.
Dedup. Hash mod regninger, bilag og vedhæftninger der ikke er afvist. Et dublet-hit springes stille over, og kun kilden skrives. Tekst-mails hashes på teksten.
Gates. Token, kendt selskab, ikke suspenderet og gratis-loftet. Kanalen er ikke gatet af modulet, af en postkasse eller af bankforbindelse. Det er derfor et bilag fra Postmark ikke kræver en bankmatch.
Udløser. Bruger, route vouchers.store, vouchers.bulk-store, bank.attach-voucher, vouchers.missing.upload, fetch-at-source.upload og to login-løse sider (signeret link og fast portal-token). Erstatningsbilag (lost receipt) har egne ruter.
Indgangskilde. Alle manuelle stier giver upload. Hent ved kilden (begreb.bilagsindgang.fetch-at-source) giver leverandørens kilde: google_ads, meta, brobizz, google_workspace eller google_cloud.
Dedup. Enkelt upload advarer på file_hash og returnerer ellers det eksisterende bilag. Bulk springer dubletter stille over. Hent ved kilden har ingen hash-forhåndstjek, så to ens filer giver to bilag, og dubletten fanges først efter OCR.
Gates. Tilladelsen vouchers.create, modulet Leverandører, gratis-loftet (ikke på hent ved kilden, kun bagstoppen), og for hent ved kilden at kanalen er slået til (indstilling.company.fetch-at-source-channels). Hent ved kilden auto-bogføres aldrig: ét dokument dækker en hel kontomåned, og totalen afviger forventeligt fra hævningerne.
Indgangskilde. e-Boks giver eboks. Serviceplatformen og NGDP giver digital_post.
Dedup. Unik nøgle (selskab, kilde, provider_message_id), kun belagt af en kodekommentar. Fil-hash bruges ved promotion for NGDP og pilot, og genbruger et eksisterende bilag.
Gates.DIGITALPOST_ENABLED (indstilling.env.digitalpost-enabled) for Serviceplatformen. NGDP kræver NGDP_ENABLED, udrulning og selskabets pilotflag. Gratis-loftet kontrolleres to gange: ved OCR (quota_blocked) og ved promotion. Live-værdierne af flagene er ikke målt.
Overførselsservice er den udgående betalingsrail til leverandørfakturaer. Kvitteringerne er bankens svar på en fil, PayFriend selv har sendt. De er derfor ikke dokumenter, der skal bogføres.
Udløser. Hverdage kl. 09:15, 12:15 og 15:15 (dansk tid). Indsendelse og guard-rail kører andre tidspunkter.
Tabeller. Leveringer og betalingsben (overforselsservice_deliveries, overforselsservice_lines) og betalinger på regninger. Ingen række i tabel.vouchers.
Indgangskilde. Ingen. Hverken ApplyReceipt, parserne eller jobbet nævner Voucher eller IngestionSource.
Indgangskilde.provider_pull (begreb.bilagsindgang.provider-pull) er ét bilag pr. bogført bilagsnummer i hovedbogen, inklusive bank-, løn- og momsposteringer og e-conomic-kladder. provider_sync er ét bilag pr. rigtigt dokument hos udbyderen, men kun for to udbydere i vouchers: Billys uejede bilag og Business Centrals e-dokumenter. For Dinero og e-conomic er provider_sync en regning i supplier_invoices.
Dedup. Nøglen er (udbyder, external_voucher_id), også mod slettede rækker. Billy-indbakken blød-sletter et ventende provider_sync-bilag, hvis et bogført provider_pull-bilag allerede er tvillingen. Et lokalt bilag med samme leverandør, dato og beløb kan blive absorberet og få kilden skiftet til provider_pull.
Indgangskilde.payroll. Spejl-sporet (job.recognize-mirror-payroll-journals) for selskaber uden lønforbindelse skriver kun kørsler og overførsler, ingen bilag og ingen indgangskilde.
Dedup. (selskab, salary_voucher_id). Et bilag der allerede findes, er en no-op.
Gates. Forbindelsen er Connected og selskabet backgroundSyncEligible. Lønbilag er skjult i Bilag, ude af bankmatch, ikke målt mod gratis-loftet og nægtes af auto-bogføring.
Tabeller.tabel.settlements, forbindelser og faktura-links. Kilde-PDF'en genereres og sendes til regnskabssystemet, men gemmes ikke lokalt.
Indgangskilde. Ingen.
Dedup. (forbindelse, provider_payout_id). Bogførte, bogførende og tilbageførte afregninger fryses mod synk.
Gates. Gyldig signatur, kendt aktiv forbindelse, ikke suspenderet og en cutover-dato. Afregninger før datoen får status ignored_before_cutover.
Når afregningen er bogført i regnskabssystemet, kan dets journal-bilag senere dukke op som provider_pull via kanal 6. Det er en følge af spejlet og ikke af Stripe-kanalen, og er ikke set i data.
Udløser. Bruger sætter eller flytter en afstemningsstart: POST /bank/{connection}/cutover (bank.cutover.store, tilladelsen bank.reconcile). Det kalder ReconciliationCutoverService::apply.
Job-kæde.job.demote-pre-cutover-email-vouchers (kø koe.default, ikke unik). For hver promoveret vedhæftning, hvis bilag er forankret før cutover og stadig er Pending, kalder den Demoter::demote uden bruger. Banklinjen frigives, bilaget blød-slettes, og vedhæftningen går tilbage til ready med sit forslag, klar til at blive hæftet på det allerede bogførte bilag.
api og recurring hører ikke til en af de ni kanaler. De står her, så alle værdier på main er forklaret. Rækken inbox_auto gælder regninger, og er derfor 0 i bilagstallene. Målingen gælder kun vouchers.
Der er ingen fælles dedup. Hver kanal har sin egen nøgle (faelde.bilagsindgang.samme-pdf-to-kanaler). Kort: hash-dubletter afvises stille på mail, Postmark og bulk-upload. En tvilling på tværs af kilder (samme selskab, valuta, beløb og dato) flagges med duplicate_of_id, og så blokeres bogføring. Og to rækker i to tabeller kan eksistere en kort tid.
regel.plan.gratis-bilag: gratisplanen stopper ved 25 bilag i alt. Måles på upload, email, eboks og digital_post. Kontrolleres ved OCR (quota_blocked) og ved promotion.
regel.bankmatch.samme-koeb: to filer for samme køb. Kun én promoveres, resten afvises som same_purchase_duplicate.
regel.bilag.regning-ocr: en regning oprettes automatisk kun med OCR 0,85, beløb, dato, leverandør og fakturanummer.
regel.sync.prune-abort: fjernelse af forældede bilag afbrydes for et år, hvis mere end en fjerdedel ville slettes.
AutoPromote kræver desuden: status ready, beløb over 0, leverandørnavn, en dato, banklinjen er efter afstemningsstart og uafstemt, intet afvist par, ikke en følgeseddel, samme hash findes ikke som bilag, én pr. banklinje og højst 200 pr. selskab pr. kørsel.
Er postkassen med? Tjek company_integrations for selskabet: enabled, om selskabet er suspenderet eller i betalingsgæld, og meta.requires_reauth (årsagen står i requires_reauth_reason). Kontrollér også last_sync_at og last_error.
Findes en kilde-række i tabel.email-voucher-sources? Hvis ikke, nåede mailen aldrig scannet. Hvis ja, så læs filter_result og skip_reason: skipped_pre_filter og skipped_blacklist (afsender eller emne ramte en støjregel), skipped_no_attachment, skipped_low_confidence, skipped_duplicate og skipped_too_large (kun IMAP).
Findes en vedhæftning? Læs status og dismissed_reason (tilstand.email-voucher-attachment.status). pending_ocr hængende: kig på køen koe.voucher-scan. deferred_ocr: start OCR. ocr_failed: prøv igen. quota_blocked: kunden har ramt gratis-loftet. dismissed: kunden eller en regel afviste den, og den kan gendannes.
Er den ready og ikke et bilag? Så mangler en promotion. Tjek mint-gates under Regler: bankforbindelse og afstemningsstart, om banklinjen er landet (kortbetalinger lander typisk dage senere), matchstrategi og confidence, OCR-niveau, leverandørnavn, og at indstilling.company.voucher-auto-promote-enabled ikke er slået fra. Et mislykket regningsforsøg står i ocr_raw.inbox_mint_veto.reason.
Hash-dublet? Samme fil findes måske allerede, også som afvist, fra en tidligere upload eller videresendelse.
Rigtig postkasse? Kunden kan have forbundet en anden konto end den, der modtog kvitteringen.
Tallet er i dag højere. Målt 2026-10-01 (tabel.vouchers): 214.225 ikke-slettede bilag, heraf 210.948 (98,5 %) med kilden provider_pull. Tallet 88.000 kom fra hukommelsen i recon og er afløst af målingen. Resten er omkring 3.100 bilag, som nogen har modtaget: email 1.401, upload 1.113, provider_sync 596, payroll 166 og eboks 1.
provider_pull er ét bilag pr. bogført bilagsnummer i kundens hovedbog (begreb.bilagsindgang.provider-pull). Hver bank-, løn- og momsbogføring bliver en række, og e-conomic-kladder tæller med. De fleste har ingen fil. Visningerne skjuler dem, de tæller ikke mod gratisloftet, og fjernelse af forældede rækker er slået fra. Se faelde.bilagsindgang.provider-pull-druknede-bilagstal.
Mail og mail, eller mail og Postmark: den anden afvises stille på file_hash. Der oprettes ingen række. Er alle filer i mailen dubletter, står kilden som skipped_duplicate.
Upload og derefter mail: mail-scannet tjekker kun vedhæftninger, så der oprettes en vedhæftning ved siden af bilaget. Auto-promote nægter, fordi hash allerede findes som bilag. Promoveres den manuelt, flagges den som tvilling (duplicate_of_id), og bogføring blokeres med DuplicateFlagged, indtil dubletten afvises.
Mail og derefter upload: upload advarer kun mod eksisterende bilag, ikke mod vedhæftninger.
Fetch-at-source: ingen hash-forhåndstjek. To ens filer giver to bilag, og dubletten fanges efter OCR.
Samme køb, andre bytes (faktura og kvittering): kun én promoveres, resten afvises som same_purchase_duplicate.
Herfra er det teknisk
11
Kilder og dækning
Teknisk
Verificeret mod app@e99eb6a9bae4c87c2fcf8a2d92d518ea70a5a156 (2026-10-01). Dækning og drift står på siden Dækning.
Åbne punkter, markeret uverificeret:
Unikke indeks (på vouchers, email_voucher_attachments, settlements, digital_post_messages): migrationer er ikke læst. Kun kodekommentarer og fangst af unik-fejl peger på dem.
At en opgradering frigiver quota_blocked: kun en kodekommentar, ingen kode fundet.
Live-værdier af DIGITALPOST_ENABLED, NGDP_ENABLED og NGDP_ROLLOUT.
Om ConfirmGmailForwardingJob ligger på standardkøen.
Alle udbyderpåstande om Gmail, Microsoft, IMAP, Postmark, Stripe og e-Boks. Siden beskriver hvad PayFriends egen kode gør, ikke hvad udbyderne understøtter.
Atlas har ikke job-poster for ProcessDigitalPostMessageJob, ConfirmGmailForwardingJob og HandleStripeSettlementsWebhookJob. De er nævnt som kode.