Gå til indhold

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.

Nordstjernen

domaene.bilagsindgang

Faste regler 22

Vis alle 22

Eksterne services 15

  • 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:

  1. Kundens postkasse (Gmail, Outlook eller IMAP): PayFriend kigger efter nye mails hvert kvarter.
  2. Videresendt mail til kundens egen adresse (bilag+…, fakturaer+…) og mails uden vedhæftning.
  3. 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.
  4. Digital Post og e-Boks.
  5. Overførselsservice-kvitteringer. De ligner bilag, men er det ikke. Det er bankens svar på betalinger.
  6. Regnskabssystemet (e-conomic, Dinero, Billy, Business Central).
  7. Løn.
  8. Stripe-afregninger. De bogføres, men bliver ikke et bilag i PayFriend.
  9. 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ørHvad der skerKan 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 postSamme 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 IndbakkenBilag med status Pending oprettes ud fra vedhæftningen.Ja (demote), indtil bogført
Afviser eller gendanner en vedhæftningStatus skifter mellem dismissed og ready.Ja
Prøver OCR igenVedhæftningen går til pending_ocr og OCR'es igen.Ikke relevant
Afleverer et dokument ved kildenBilag oprettes med leverandørens kilde og kobles til månedens hævninger.Ja, indtil bogført
Slår automatiske bilag fra mail til eller fraAutoPromote kører eller kører ikke for selskabet.Ja

Herfra er det teknisk

3

Livscyklus: mailvedhæftningens status

Teknisk

Tilstandsmaskinen er tilstand.email-voucher-attachment.status på tabel.email-voucher-attachments. Afvisningsårsagerne står i tilstand.email-voucher-attachment.dismissed-reason.

lav scorebruger: prøv OCR igenbruger: prøv igenbruger, AutoPromote ellerregningbruger eller jobbruger: gendandemotefødes promotedny vedhæftningpending_ocrdeferred_ocrreadyocr_failedquota_blockeddismissedpromotedPostmark bilag+ ogfakturaer+

Pointen for en junior: en mail-vedhæftning er ikke et bilag, før den er promoveret (begreb.bilagsindgang.vedhaeftning, begreb.bilagsindgang.promotion). Promotion kan ske på tre måder, og alle ender i et bilag med status Pending:

VejHvemHvad den kræver
ManuelBruger i IndbakkenStatus ready eller ocr_failed, plads under bilagsloftet, banklinjen er ikke taget
AutoPromote (job.auto-promote-matched-attachments)Job, hvert 43. minut og efter hver scanSe reglerne under Regler. Kræver en bankmatch. Opretter bilaget uden bank-link. Banklinjen afstemmes bagefter.
MatchUnmatched (job.match-unmatched-attachments)Job, hvert 33. minutPromoverer 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.

9 Cutover7 Løn6 Regnskabssystem4 Digital Post og e-Boks3 Manuel upload2 Postmark1 Mailbokseskrives som promotedpromotionbruger: Bogførdemote8 Stripewebhook payout.paidSyncSettlementssettlements5 Overførselsservicehverdage 09:15, 12:15,15:15FetchOverforselsserviceReceiptsingen bilagscan-emails, hvert kvarterScanEmailsJobScanCompanyEmailJobScanEmailAttachmentJobemail_voucher_attachmentsPOST webhookinbound-emailbilag+ og fakturaer+ med filbilag+ uden filProcessInboundBodyEmailJobScanVoucherJobbruger uploaderhent ved kildene-Boks webhook ellerNGDP-pollClassifyDigitalPostMessageJobdigital_post_attachmentsScanDigitalPostAttachmentJob, doven OCRSyncAccountingData, hvertimeSyncAccountingVouchersSyncPayrollJournals, hver6. timePOST bank cutoverDemotePreCutoverEmailVouchersJobvouchers, ingestion_source

Hver kanal herunder har samme opbygning: udløser, job-kæde, tabeller, indgangskilde (begreb.bilagsindgang.ingestion-source), dedup og gates.

kode: app/Jobs/ScanEmailsJob.php · ScanEmailsJobkode: app/Jobs/ScanEmailAttachmentJob.php · ScanEmailAttachmentJobkode: app/Integrations/Email/Concerns/EmailScanAttachmentPersistence.php · EmailScanAttachmentPersistence::persistDownloadedAttachment

Kanal 2: Postmark inbound og ren tekst-mail

Sektion kaldt “Kanal 2: Postmark inbound og ren tekst-mail”
  • Udløser. Webhook POST /webhook/inbound-email (integration.postmark-inbound), godkendt med indstilling.env.postmark-inbound-token. Adressen læses kun fra To: bilag+<slug>@, fakturaer+<slug>@ eller godkend+<token>@.
  • Job-kæde.
    • bilag+ med fil: bilag Pending oprettes direkte, og job.scan-voucher køres på koe.voucher-scan.
    • 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.
  • Tabeller. tabel.email-voucher-sources (provider = postmark), en vedhæftning skrevet som promoted fra start, og tabel.vouchers. Tekst-mails får ingen vedhæftning.
  • 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.
kode: app/Http/Controllers/Webhook/InboundEmailController.php · InboundEmailControllerkode: app/Services/Inbound/InboundVoucherProcessor.php · InboundVoucherProcessor::processkode: app/Jobs/ProcessInboundBodyEmailJob.php · ProcessInboundBodyEmailJobkode: app/Services/Ap/VoucherService.php · VoucherService::storeVoucherkode: app/Services/Vouchers/FetchAtSourceService.php · FetchAtSourceServicekode: app/Enums/IngestionSource.php · IngestionSource::isFetchAtSource

Kanal 4: Digital Post og e-Boks (doven OCR)

Sektion kaldt “Kanal 4: Digital Post og e-Boks (doven OCR)”
kode: app/Jobs/ScanDigitalPostAttachmentJob.php · ScanDigitalPostAttachmentJobkode: app/Services/SmartBoks/DigitalPostAttachmentLifecycleService.php · DigitalPostAttachmentLifecycleServicekode: app/Http/Controllers/Webhook/EboksWebhookController.php · EboksWebhookController

Kanal 5: Overførselsservice-kvitteringer er ikke bilag

Sektion kaldt “Kanal 5: Overførselsservice-kvitteringer er ikke bilag”

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.

Betalingen lukkes først, når bankhævningen ses (LinkQueuedOverforselsserviceDebits). Se faelde.bilagsindgang.overforselsservice-er-ikke-bilag.

kode: app/Jobs/FetchOverforselsserviceReceipts.php · FetchOverforselsserviceReceiptskode: app/Services/Overforselsservice/ApplyReceipt.php · ApplyReceiptkode: app/Services/VoucherUpsertService.php · VoucherUpsertService::upsertkode: app/Jobs/SyncAccountingVouchers.php · SyncAccountingVoucherskode: app/Services/Accounting/BillyBilagInboxSyncService.php · BillyBilagInboxSyncServicekode: app/Services/Payroll/PayrollVoucherIngestService.php · PayrollVoucherIngestServicekode: app/Jobs/SyncPayrollJournals.php · SyncPayrollJournals

Recons påstand "ingen lokal voucher" er bekræftet: ingen af afregningsklasserne nævner Voucher eller IngestionSource. Men der oprettes noget lokalt.

  • Udløser. Webhook POST /webhooks/stripe-settlements (typerne payout.paid, payout.failed, payout.canceled) og job.sync-settlements hver nat kl. 02:45.
  • Job-kæde. Webhook-controlleren, HandleStripeSettlementsWebhookJob, derefter job.sync-settlements. Automatisk bogføring: job.auto-book-settlement. Manuel: job.book-settlement.
  • 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.

kode: app/Http/Controllers/Webhook/StripeSettlementsWebhookController.php · StripeSettlementsWebhookControllerkode: app/Jobs/HandleStripeSettlementsWebhookJob.php · HandleStripeSettlementsWebhookJobkode: app/Services/Settlement/SettlementVoucherPdf.php · SettlementVoucherPdf
  • 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.
  • Tabeller. tabel.email-voucher-attachments og tabel.vouchers. Ingen ny række.
  • Indgangskilde. Ingen.
  • Dedup. Idempotent: afviste rækker forlader mængden. Auto-promoteren kræver, at banklinjen er efter cutover, så parret mintes ikke igen.
  • Gates. Forbindelsen har en afstemningsstart, og selskabet har en aktiv regnskabsintegration. Bogførte bilag røres ikke, men rapporteres.
kode: app/Jobs/DemotePreCutoverEmailVouchersJob.php · DemotePreCutoverEmailVouchersJobkode: app/Services/Reconciliation/ReconciliationCutoverService.php · ReconciliationCutoverService

15 værdier i IngestionSource. Prod-tal er målt 2026-10-01 (tabel.vouchers).

VærdiKanalHvad den betyderMålt antal
upload3Manuel upload, bulk, fra banklinje, mangler-bilag, erstatningsbilag, login-løse sider1.113
email1, 2Bilag oprettet ud fra en mail: ved promotion (kanal 1) eller direkte ved ankomst (kanal 2)1.401
inbox_auto1Regning oprettet automatisk ud fra en umatchet vedhæftning. Aldrig et bilag.0 bilag
eboks4Bilag fra e-Boks-post1
digital_post4Bilag fra Serviceplatformen eller NGDP0
provider_pull6Spejlet bogføringspost fra regnskabssystemet210.948
provider_sync6Rigtigt dokument fra Billy eller Business Central596
payroll7Lønjournal fra lønsystemet166
google_ads, meta, brobizz, google_workspace, google_cloud3Hent ved kilden. Auto-bogføres aldrig.0
apiuden for de ni kanalerBilag oprettet via API0
recurringuden for de ni kanalerFast regning, genereret internt0
kode: app/Enums/IngestionSource.php · IngestionSourceprod-data: 2026-10-01: scripts/prod-queries/01-vouchers-status.sql

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.

Herfra er det teknisk

5

Adgang

Teknisk
HvadHvem eller hvad der kræves
Upload, bulk, mangler-bilag, hent ved kildenTilladelsen vouchers.create, modulet Leverandører
Slå en hent-ved-kilden-kanal til eller frainbox.manage
Promover vedhæftningvouchers.create, status ready eller ocr_failed
Promover til regningpayables.create
Sæt afstemningsstart (kanal 9)bank.reconcile
IndbakkenModulet indstilling.company.module-email-bilag-enabled
Digital PostSelskabets smartboks-modul, og for NGDP pilotadgang
Gratis-planens loft på 25 bilagregel.plan.gratis-bilag. Undtaget med indstilling.company.paywall-exempt.

Den fulde rollematrix står i rolle.kvitteringer.

Herfra er det teknisk

6

Indstillinger

Teknisk
IndstillingNiveauGaterKanal
indstilling.company.module-email-bilag-enabledcompanyUI, AutoPromote, regning, MatchUnmatched. Ikke scan eller OCR.1
indstilling.company.voucher-auto-promote-enabledcompanyAutoPromote1
indstilling.company.voucher-auto-promote-min-confidencecompanyMatchtærskel i AutoPromote1
indstilling.company.inbox-auto-create-regning-enabledcompanyAutomatisk regning uden bankmatch1
indstilling.company.inbox-slugcompanyAdressen bilag+<slug>@2
indstilling.company.fetch-at-source-channelscompanyHvilke leverandører der giver et krav3
indstilling.company.payroll-auto-book-enabledcompanyAutomatisk bogføring af lønakkrual7
indstilling.company.paywall-exemptcompanyGratis-loftetalle
indstilling.env.gmail-lookback-daysenvHvor langt tilbage første sync går1
indstilling.env.email-initial-sync-max-messagesenvLoft på første sync1
indstilling.env.postmark-inbound-tokenenvWebhookens token2
indstilling.env.digitalpost-enabledenvServiceplatformen-webhook4
indstilling.env.accounting-voucher-sync-enabledenvVoucher-synk6
indstilling.env.accounting-voucher-prune-enabledenvFjernelse af forældede rækker6

Herfra er det teknisk

7

Regler

Teknisk
  1. 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.
  2. regel.bilag.auto-promote-ocr, regel.bilag.staerk-bank og regel.bilag.ocr-ved-staerk-bank: AutoPromote kræver OCR 0,85, eller en bankmatch på 85 og OCR 0,70.
  3. regel.bankmatch.min-confidence: bankmatchen skal være mindst 70, og strategien unique_amount afvises.
  4. regel.bankmatch.samme-koeb: to filer for samme køb. Kun én promoveres, resten afvises som same_purchase_duplicate.
  5. regel.bilag.regning-ocr: en regning oprettes automatisk kun med OCR 0,85, beløb, dato, leverandør og fakturanummer.
  6. 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.

kode: app/Services/Email/Concerns/SelectsBankMatchedPromoteCandidates.php · SelectsBankMatchedPromoteCandidates::eligible

Herfra er det teknisk

8

Teknisk flow: Gmail til bilag

Teknisk
vouchersAutoPromoteScanEmailAttachmentJobScanCompanyEmailJobscan-emailsvouchersAutoPromoteScanEmailAttachmentJobScanCompanyEmailJobscan-emailsBogført først ved en separat handlinghvert kvarter, pr. postkassekilde og vedhæftning, deferred_ocr eller pending_ocrpending_ocrOCR, ready, bankmatchmatchet vedhæftningPending, ingestion_source email, uden bank-link

Herfra er det teknisk

9

Data

Teknisk

Herfra er det teknisk

10

Kendte fælder

Teknisk
SymptomFælde
Kvitteringen er i Indbakken, men der er intet bilagfaelde.bilagsindgang.vedhaeftning-er-ikke-bilag
214.000 vouchers, få tusind rigtigefaelde.bilagsindgang.provider-pull-druknede-bilagstal
Mail afvist som dublet, men er det ikkefaelde.bilagsindgang.kvote-afvisning-ligner-dublet
Vedhæftninger står fast efter opgraderingfaelde.bilagsindgang.quota-blocked-uden-udgang
Fil uden beløb og leverandørfaelde.bilagsindgang.deferred-ocr-bunke
Postmark-mail uden sporfaelde.bilagsindgang.for-stor-fil-uden-spor
Bilag fra tekst-mail findes ikke i Indbakkenfaelde.bilagsindgang.tekst-mail-uden-vedhaeftning
Modulet slået fra, men mails scannesfaelde.bilagsindgang.modul-fra-stopper-ikke-scan
Gmail-mail i Spam eller Sendtfaelde.bilagsindgang.gmail-scan-daekker-ikke-alt
Samme PDF to gangefaelde.bilagsindgang.samme-pdf-to-kanaler
Overførselsservice-kvittering uden bilagfaelde.bilagsindgang.overforselsservice-er-ikke-bilag

"En kunde siger at deres kvittering fra Gmail ikke er dukket op. Hvor kigger jeg?"

Sektion kaldt “"En kunde siger at deres kvittering fra Gmail ikke er dukket op. Hvor kigger jeg?"”

Gå i denne rækkefølge.

  1. 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.
  2. Lå mailen et sted, der ikke scannes? Spam, Papirkurv, Kladder og Sendt udelukkes (faelde.bilagsindgang.gmail-scan-daekker-ikke-alt). Første sync går højst 30 dage tilbage.
  3. 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).
  4. 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.
  5. 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.
  6. Hash-dublet? Samme fil findes måske allerede, også som afvist, fra en tidligere upload eller videresendelse.
  7. Rigtig postkasse? Kunden kan have forbundet en anden konto end den, der modtog kvitteringen.
  8. Sundhedssignal. inbox_source_health (kører 06:50): aldrig_leveret, stoppet, tynd, sund (job.inbox-assess-source-health).

"Hvorfor har vi 88.000 vouchers, men kun et par tusind rigtige bilag?"

Sektion kaldt “"Hvorfor har vi 88.000 vouchers, men kun et par tusind rigtige bilag?"”

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.

prod-data: 2026-10-01: scripts/prod-queries/01-vouchers-status.sql

"Hvornår opretter en mail en voucher direkte, og hvornår kun en vedhæftning?"

Sektion kaldt “"Hvornår opretter en mail en voucher direkte, og hvornår kun en vedhæftning?"”
VejResultat
Postkasse (Gmail, Outlook, IMAP)Kun en vedhæftning. Aldrig et bilag direkte.
Postmark bilag+ med filBilag direkte (Pending, kilde email), og vedhæftningen skrives som promoted.
Postmark fakturaer+ med filRegning direkte (Draft), og vedhæftningen skrives som promoted.
Postmark bilag+ uden fil, tekst på mindst 100 tegn med beløb og leverandørBilag direkte, uden vedhæftning.
Postmark godkend+Hverken bilag eller vedhæftning. Kun en kommentar.

En vedhæftning bliver først til et bilag ved promotion (se Livscyklus).

"Hvad sker der hvis den samme PDF kommer ind to gange via to kanaler?"

Sektion kaldt “"Hvad sker der hvis den samme PDF kommer ind to gange via to kanaler?"”

Det afhænger af, hvem der ankommer først (faelde.bilagsindgang.samme-pdf-to-kanaler).

  • 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.