Gå til indhold

Verificeret mod app@9d146f9, 16 skal genverificeres, 0 brudt

Kvitteringer

Nordstjernen

side.kvitteringer

Faste regler 170

Vis alle 170

Indstillinger kunden kan ændre 14

Vis alle 14

Eksterne services 8

  • 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.
  • DineroBogføring, spejling af poster og kortet fra bilagsnummer til fil.
  • 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.
Vis alle 8
  • 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.
0

På 30 sekunder

For alle

Kvitteringer er stedet, hvor alle bilag samles, før de bliver til bogføring. Siden bruges af bogholdere og ejere, som uploader bilag eller sender dem til virksomhedens egen indbakke.

Uden at nogen trykker på noget sker der meget i baggrunden. Nye mails scannes for bilag. Hver kvittering læses af en computer, så leverandør, dato og beløb står klar. Systemet leder efter den banktransaktion, bilaget hører til. Har PayFriend slået det til for virksomheden, og passer alt, bogføres bilaget af sig selv i regnskabsprogrammet. Resten venter på et menneske.

1

Sidens anatomi

For alle

Billederne er taget af PayFriend-appen på den låste SHA med opdigtede data. Hvert nummer er et link til den handling, indstilling eller tilstand, tallet peger på. Billederne tages igen efter beskrivelsen i scripts/screenshots/README.md, når SHA'en rykkes.

Listen med linsen Skal behandles. Rækkerne har forskellige statusser, to rækker er valgt, så bulk-bjælken vises. Appen husker den sidst valgte linse. Linsen Klar til bogføring og Alle vises ved siden af. Tre genveje hører til listen: Esc lukker øverste lag, / hopper til søgefeltet, og f åbner filtrene.

Åbn billedet i fuld størrelse

  1. Fanen Kvitteringer
  2. Fanen Mangler bilag
  3. Linsen Skal behandles
  4. Linsen Klar til bogføring
  5. Linsen Alle
  6. Søgefeltet
  7. Filter
  8. Gemte visninger
  9. Automatch
  10. Visning komfortabel eller kompakt
  11. Upload bilag
  12. Send på e-mail
  13. Overflow-menuen
  14. Vælg alle
  15. Kolonnen Leverandør
  16. Kolonnen Konto
  17. Kolonnen Transaktion
  18. Kolonnen Dato
  19. Kolonnen Beløb
  20. Kolonnen Status
  21. Bogfør fra rækken
  22. Rækkemenuen
  23. Bulk-bjælken
  24. Slet valgte
  25. Kontocellen
  26. Transaktionscellen med foreslået match
  27. Automatch i bulk-bjælken
  28. Bogfør i bulk-bjælken

Filter åbner en liste over de felter, listen kan indsnævres på. Valget bliver til en filterlinje over listen.

Åbn billedet i fuld størrelse

  1. Leverandør
  2. Bilagsdato
  3. Beløb
  4. Konto
  5. Bankmatch

Menuen øverst til højre har tre punkter, som ikke hører til en enkelt række.

Åbn billedet i fuld størrelse

  1. Scan email igen
  2. Opret erstatningsbilag
  3. Eksportér CSV

Menuen på en række, der endnu ikke er bogført.

Åbn billedet i fuld størrelse

  1. Vis
  2. Se kvittering
  3. Åbn i nyt faneblad
  4. Scan igen
  5. Flyt til Regninger
  6. Slet

Et bogført bilag kan hverken scannes igen, flyttes eller slettes. Her er det eneste ekstra punkt Tilbagefør.

Åbn billedet i fuld størrelse

  1. Tilbagefør bogføring

c. Drawer på et bilag, der ikke er bogført

Sektion kaldt “c. Drawer på et bilag, der ikke er bogført”

Drawer åbner, når man trykker på en række. Sektionen Kontering er åben fra start.

Åbn billedet i fuld størrelse

  1. Dokumentvisningen
  2. Historik
  3. Drawer-menuen
  4. Luk
  5. Statuslinjen Modtaget, Konteret, Bogført
  6. Sektionen Kontering
  7. Leverandør
  8. Bilagsdato
  9. Modkonto
  10. Konto
  11. Beskrivelse
  12. Posteringsforhåndsvisningen
  13. Sektionen Bank
  14. Sektionen Mere
  15. Godkend og bogfør

Her ses den banktransaktion bilaget er koblet til.

Åbn billedet i fuld størrelse

  1. Den afstemte banktransaktion
  2. Fjern koblingen til transaktionen

Periodisering fordeler beløbet over flere regnskabsperioder.

Åbn billedet i fuld størrelse

  1. Periodisering

Menuen med de tre prikker i drawer.

Åbn billedet i fuld størrelse

  1. Bogfør
  2. Scan igen
  3. Slet

Når to bilag ligner hinanden, viser drawer en advarsel og låser bogføringen, til en har afklaret den.

Åbn billedet i fuld størrelse

  1. Advarslen Mulig dublet
  2. Behold det ene bilag og kasser det andet
  3. Ikke en dublet
  4. Knappen er låst, til dubletten er afklaret

Når bilaget er bogført, er knappen i bunden ikke længere Godkend og bogfør, men Fortryd og modpostér. Statuslinjen står på Bogført, og posteringen vises som den er bogført.

Åbn billedet i fuld størrelse

  1. Statusmærket Bogført
  2. Statuslinjen med Bogført som sidste trin
  3. Konteringen, nu kun til læsning
  4. Posteringen som den er bogført
  5. Fortryd og modpostér

Posteringer i regnskabet, som mangler et bilag. En række er valgt, så bulk-bjælken vises.

Åbn billedet i fuld størrelse

  1. Fanen Mangler bilag
  2. Søgefeltet
  3. Filter
  4. Gemte visninger
  5. Visning komfortabel eller kompakt
  6. Vælg alle
  7. Kolonnen Dato
  8. Kolonnen Modtager
  9. Kolonnen Konto
  10. Kolonnen Beløb
  11. Upload bilag på rækken
  12. Rækkemenuen
  13. Bulk-bjælken

Menuen på en post under Mangler bilag.

Åbn billedet i fuld størrelse

  1. Upload bilag
  2. Findes andetsteds

e3. Mangler bilag, før afstemningen er sat i gang

Sektion kaldt “e3. Mangler bilag, før afstemningen er sat i gang”

Hvis banken er koblet på, men afstemningen ikke har en startdato, viser fanen kun en besked og ingen tal.

Åbn billedet i fuld størrelse

  1. Beskeden Afstemningsstart mangler
  2. Åbn indstillinger

En virksomhed uden bilag. Linserne viser 0, og listen peger på upload og e-mail.

Åbn billedet i fuld størrelse

  1. Fanen Mangler bilag
  2. Linserne er tomme
  3. Teksten Ingen bilag endnu
  4. Upload bilag i den tomme tilstand
  5. Send på e-mail i den tomme tilstand

Lag 2 er kortene for alt, man kan gøre på siden. De er grupperet som anatomien i lag 1, og markørnummeret viser, hvor handlingen sidder på billederne (bogstavet er billedet, tallet er markøren). Kortene er skrevet til kundeservice: Sådan gør man følger knapteksterne i appen. Teknisk flow, sideeffekter og kodeankre står på handlingens egen side. Ruter og UI-filer fra inventaret er dækket af mindst ét kort, og et kort uden kalder på siden siger, hvor ruten kaldes fra, eller at den er dead.

Upload ét bilag

handling.kvitteringer.upload · Markør a.11, f.3, f.4

Knappen Upload bilag og træk og slip lægger ét bilag ind, og AI scanner det bagefter.

Hvem
tilladelse: vouchers.createrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter)plan: Gratis stopper ved 25 behandlede bilag i altmodul: suppliers
Sådan gør man
  1. Tryk på Upload bilag øverst til højre på Kvitteringer, eller træk filen ind over listen. Dropfeltet hedder Slip bilag her og siger PDF eller billeder.
  2. Vælg én PDF eller ét billede. Vælger du flere filer på én gang, er det en anden handling (Upload flere bilag).
  3. Mens filen sendes, står der Uploader bilag... og Vent venligst, AI scanner automatisk, når filerne er uploadet.
  4. Ligner filen et bilag, der allerede er uploadet, åbner Muligt dublet med teksten Det ligner noget, der allerede findes: samme fil. Tryk Opret alligevel for at beholde begge, eller Annullér for at droppe uploaden.
  5. Går det godt, kommer beskeden Bilag uploadet. AI scanner nu... og bilaget dukker op i listen, hvor AI læser det.
Fejl brugeren kan se
  • Du har brugt din Gratis-plan. Gratis-planen dækker 25 behandlede bilag i alt, kvitteringer og regninger tilsammen. Du har brugt alle 25. Opgradér for at behandle flere.voucherLimit
  • Muligt dublet. Det ligner noget, der allerede findes: samme fil.duplicateWarning
  • Filen kunne ikke gemmes. Prøv igen.errors.file
  • Upload mislykkedes. Prøv igen.
  • Uploaden blev afbrudt. Prøv igen.
  • Du har ikke rettighed til at oprette bilag. Upload-knappen er deaktiveret.
Kan fortrydes
Indtil, bilaget er bogført. Et bilag, der ikke er bogført, kan slettes med [[handling.kvitteringer.slet]]. Et bogført bilag rulles tilbage med [[handling.kvitteringer.tilbagefoer]].

Teknisk flow, sideeffekter og ankre

Upload flere bilag på én gang

handling.kvitteringer.upload-flere

Vælger man flere filer, eller trækker man flere ind, sendes de som en samlet upload, og dubletter springes over uden spørgsmål.

Hvem
tilladelse: vouchers.createrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter)plan: Gratis stopper ved 25 behandlede bilag i altmodul: suppliers
Sådan gør man
  1. Tryk på Upload bilag og markér flere filer, eller træk flere filer ind over listen (Slip bilag her).
  2. Der står Uploader N bilag... mens filerne sendes. Browseren deler store mængder op og sender dem efter hinanden.
  3. Bagefter kommer beskeden N bilag uploadet. AI scanner nu... Er alle filer allerede uploadet før, står der Alle bilag var allerede uploadet (dubletter).
  4. Ligger firmaet på Gratis og er der ikke plads til alle filer, bliver ingen af dem uploadet. Dialogen siger Du har N bilag tilbage på Gratis-planen og knappen Opgradér.
Fejl brugeren kan se
  • Du har N bilag tilbage på Gratis-planen (N af 25 brugt). Du forsøgte at behandle N. Opgradér for at behandle flere.voucherLimit
  • Alle bilag var allerede uploadet (dubletter).
  • Upload mislykkedes. Prøv igen.
Kan fortrydes
Indtil, bilaget er bogført. Hvert bilag slettes for sig med [[handling.kvitteringer.slet]], eller flere ad gangen med [[handling.kvitteringer.slet-valgte]].

Teknisk flow, sideeffekter og ankre

Match bilag med banktransaktioner automatisk

handling.kvitteringer.automatch · Markør a.9, a.27

Automatch bekræfter på én gang alle de bankmatches, listen viser som Foreslået match, uden at bogføre noget.

Hvem
tilladelse: vouchers.edit
Sådan gør man
  1. Se efter knappen Automatch med et tal i værktøjslinjen. Den vises kun, når mindst ét bilag har et foreslået match. Tallet er antallet af foreslåede matches.
  2. Tryk på Automatch. Hjælpeteksten er Bekræft alle foreslåede bankmatches på én gang.
  3. Vil du kun bekræfte nogle af dem, så markér rækkerne først og tryk på Automatch i bulk-bjælken. Bjælkeknappen vises, når mindst ét af de markerede bilag har et foreslået match.
  4. En grøn besked fortæller, hvor mange bilag der blev afstemt, og hvor mange der ikke kunne. Er der ingen forslag at bekræfte, står der Automatch: ingen foreslåede matches at bekræfte.
Fejl brugeren kan se
  • Automatch: ingen foreslåede matches at bekræfte.
  • Automatch: efterfulgt af antal bilag afstemt og, når nogle fejlede, hvor mange der ikke kunne afstemmes.
  • Kunne ikke forbinde transaktionenap.vouchers.link_failed_toast
Kan fortrydes
Ja. Hvert match fortrydes enkeltvis med [[handling.kvitteringer.fjern-transaktion]]. Der findes ingen samlet fortryd.

Teknisk flow, sideeffekter og ankre

Lad AI foreslå konti på alle bilag uden konto

handling.kvitteringer.ai-foreslaa-konti

AI foreslå konti sætter et kontoforslag i gang på op til 200 bilag, der mangler en konto, uden at bogføre noget.

Hvem
tilladelse: vouchers.edit
Sådan gør man
  1. Se efter knappen AI foreslå konti med et tal i værktøjslinjen. Den vises kun, når mindst ét bilag mangler en konto. Tallet er antallet af bilag uden konto.
  2. Tryk på knappen. Hjælpeteksten er Foreslå en konto for alle bilag, der mangler én, ud fra tidligere bogføring og leverandørnavn.
  3. Der kommer en besked om, hvor mange bilag AI nu arbejder på. Arbejdet kører i baggrunden, og listen opdaterer sig selv, mens knappen viser en roterende markør.
  4. Når ingen bilag mangler konto eller forslag, står der Alle bilag har nu en konto eller et forslag.
  5. Er forslaget ikke sikkert nok til at blive brugt, står det som et gult forslag i kontocellen, og du godkender det selv, se [[handling.kvitteringer.vaelg-konto]].
Fejl brugeren kan se
  • Alle bilag har allerede en konto.
  • AI-budgettet for denne måned er brugt op. Prøv igen næste måned, eller vælg kontoen manuelt.
  • Kontoforslag kunne ikke startesap.vouchers.suggest_accounts_failed
Kan fortrydes
Ja. Der er ingen fortryd-knap. Man vælger bare en anden konto i kontocellen, så længe bilaget ikke er bogført.

Teknisk flow, sideeffekter og ankre

Scan e-mail igen

handling.kvitteringer.scan-mail · Markør a.13, a3.1

Menupunktet Scan email igen sætter en ny gennemgang af firmaets tilsluttede postkasser i gang.

Hvem
tilladelse: vouchers.editrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter), og brugeren må se postkassens indhold
Sådan gør man
  1. Tryk på menuen med de tre prikker øverst til højre på Kvitteringer og vælg Scan email igen.
  2. Beskeden Synkronisering startet kommer med det samme.
  3. Efter et øjeblik står der E-mail scanning startet. Nye bilag vises snart. Nye bilag dukker op i listen og i Indbakken.
  4. Punktet er slukket, mens en scanning kører, og for en Betragter.
Fejl brugeren kan se
  • En scanning er allerede i gang.email_bilag.flash.scan_already_running
  • Ingen e-mail udbydere tilsluttet. Forbind Gmail eller Outlook først.email_integrations.flash.no_providers
  • Alle e-mail-integrationer skal genforbindes. Afbryd og tilslut dem igen, før du scanner.email_integrations.flash.all_require_reauth
  • Du har ikke rettighed til at ændre eller bogføre bilag. Menupunktet er deaktiveret.
Kan fortrydes
Nej. En igangsat scanning kan ikke stoppes fra appen. Den oprettede bilag og mailkilder kan behandles som alle andre.
Låser
Menupunktet er slukket, mens en scanning kører. (når scanningen er i gang)

Teknisk flow, sideeffekter og ankre

Opret et erstatningsbilag

handling.kvitteringer.tabt-kvittering · Markør a3.2

Menupunktet Opret erstatningsbilag laver et nyt bilag med en genereret PDF, når den originale kvittering er væk.

Hvem
tilladelse: vouchers.createrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter)plan: Gratis stopper ved 25 behandlede bilag i altmodul: suppliers
Sådan gør man
  1. Tryk på menuen med de tre prikker øverst til højre på Kvitteringer og vælg Opret erstatningsbilag.
  2. Skuffen Erstatningsbilag åbner med Opret et erstatningsbilag når du mangler det originale.
  3. Udfyld Beskrivelse og eventuelt Leverandør. Skriv beløb ekskl. moms, Moms og Total inkl. moms, Bilagsdato og Valuta.
  4. Skriv under Begrundelse for mistet bilag, hvorfor bilaget mangler. Begrundelsen er påkrævet.
  5. Tryk Opret erstatningsbilag. Beskeden siger Erstatningsbilag oprettet, og det nye bilag åbner i skuffen.
Fejl brugeren kan se
  • Kunne ikke oprette erstatningsbilagap.vouchers.lost_receipt_failed
  • Du har brugt din Gratis-plan. Gratis-planen dækker 25 behandlede bilag i alt, kvitteringer og regninger tilsammen. Du har brugt alle 25. Opgradér for at behandle flere.voucherLimit
  • Du har ikke rettighed til at oprette bilag. Menupunktet er deaktiveret.
Kan fortrydes
Indtil, bilaget er bogført. Slet bilaget med [[handling.kvitteringer.slet]], så længe det ikke er bogført. Et bogført erstatningsbilag rulles tilbage med [[handling.kvitteringer.tilbagefoer]].
Låser
Et erstatningsbilag kan ikke scannes igen og kan ikke få en ny fil vedhæftet. (altid, når bilaget er et erstatningsbilag)

Teknisk flow, sideeffekter og ankre

Eksportér bilag som CSV

handling.kvitteringer.eksporter · Markør a3.3

Menupunktet Eksportér CSV henter en CSV-fil med firmaets bilag, og kun ejer og admin må bruge det.

Hvem
tilladelse: vouchers.exportrolle: Kun Ejer og Adminmodul: suppliers
Sådan gør man
  1. Tryk på menuen med de tre prikker øverst til højre på Kvitteringer og vælg Eksportér CSV.
  2. Browseren henter filen bilag-export-ÅÅÅÅ-MM-DD-TTMMSS.csv.
  3. Filen har kolonnerne Beskrivelse, Leverandør, Beløb ekskl. moms, Moms, Total inkl. moms, Valuta, Udgiftskonto, Bilagsdato, Status, Filnavn og Oprettet.
Fejl brugeren kan se
  • Du har ikke rettighed til at eksportere bilag. Menupunktet er deaktiveret.
Kan fortrydes
Nej. Eksporten ændrer intet, så der er intet at fortryde. Filen er allerede hos brugeren.

Teknisk flow, sideeffekter og ankre

Vælg bilag til en samlet handling

handling.kvitteringer.vaelg-bilag · Markør a.14, a.23, e.6

Afkrydsningsfelterne vælger ét eller alle bilag og viser bulk-bjælken.

Hvem
tilladelse: vouchers.view
Sådan gør man
  1. Sæt kryds i rækken, eller i feltet Vælg alle ved kolonneoverskrifterne, for at vælge alle bilag, der er hentet ind på siden.
  2. Bulk-bjælken kommer frem i bunden. Den viser, hvor mange bilag der er valgt, og hvor mange af dem der kan bogføres.
  3. Bjælken viser kun de knapper, der passer til valget: AI Bogfør, Automatch og Slet, se [[handling.kvitteringer.bogfoer-valgte]], [[handling.kvitteringer.automatch]] og [[handling.kvitteringer.slet-valgte]].
  4. Tryk på krydset i bjælken for at fjerne hele markeringen.
  5. En række kan ikke markeres, mens den bogfører, eller mens den kun viser, at AI læser en ukendt fil.
Kan fortrydes
Ja. Fjern krydset igen, eller tryk på krydset i bulk-bjælken.

Teknisk flow, sideeffekter og ankre

Bogfør flere bilag

handling.kvitteringer.bogfoer-valgte · Markør a.28

AI Bogfør i bulk-bjælken sender alle de markerede bilag, der er klar, til bogføring i ét tryk.

Hvem
tilladelse: vouchers.edit
Sådan gør man
  1. Markér to eller flere bilag med afkrydsningsfeltet i rækken, se [[handling.kvitteringer.vaelg-bilag]]. Bulk-bjælken kommer frem i bunden og viser, hvor mange der kan bogføres.
  2. Tryk på AI Bogfør i bulk-bjælken. Knappen vises kun, når mindst ét af de markerede bilag er klar til bogføring. Et bilag er klar, når det har en bekræftet konto, et beløb, en koblet banktransaktion (eller er betalt med annoncekredit) og ingen dublet-, moms- eller reservationsmærke.
  3. En dialog med titlen Bogfør N bilag åbner. Den siger, at bilagene sendes til bogføring i regnskabssystemet, og at en bogføring kun kan fortrydes med en modpostering. Er nogle af de markerede bilag ikke klar, står der en gul advarsel om, hvor mange der springes over.
  4. Bruger virksomheden e-conomic, viser dialogen feltet e-conomic kassekladde. Vælg kassekladden, bilagene skal i, eller lad feltet stå på standard-kladden. Andre regnskabssystemer viser ikke feltet.
  5. Tryk på Bogfør i dialogen. Rækkerne viser Bogfører og opdaterer sig selv. En besked siger, hvor mange bilag der er sendt i gang, og hvilke der blev sprunget over og hvorfor.
Fejl brugeren kan se
  • Din konto er sat på pause. Kontakt support for at genoptage synkronisering.
  • AI Bogføring: ingen af de valgte bilag kunne sendes til bogføring. Efterfulgt af Sprunget over og en liste med årsager.
  • AI Bogføring: N bilag sendt til bogføring i baggrunden. Efterfulgt af Sprunget over og en liste, hvis nogle blev sprunget over.
  • N af de markerede bilag bogføres ikke, de er markeret som dublet eller har ubekræftet moms. Åbn dem enkeltvis.
  • N af de markerede bilag bogføres ikke, de mangler matchet banktransaktion. Åbn dem enkeltvis og bekræft advarslen.
  • Bogføring fejledeap.vouchers.booking_failed
  • Kunne ikke hente kladder fra e-conomic.accounting.journal_picker.error
  • e-conomic er optaget lige nu (synkronisering i gang). Prøv igen om et øjeblik.rate_budget_busy
Kan fortrydes
Indtil, bilaget er bogført hos udbyderen. Et bilag, der er bogført, fortrydes enkeltvis med [[handling.kvitteringer.tilbagefoer]]. Lige efter bogføringen viser en besked en Fortryd-knap i nogle sekunder, som gør det samme. Der er ingen samlet fortryd for en hel bulk, men toasten ved flere bilag har en Fortryd-knap, der tilbagefører hvert af dem.
Låser
Bilaget kan ikke slettes, redigeres eller scannes igen, og rækken kan ikke markeres, mens den bogfører. (når status er Bogfører eller Bogført)

Teknisk flow, sideeffekter og ankre

Slet flere bilag

handling.kvitteringer.slet-valgte · Markør a.24

Slet i bulk-bjælken fjerner alle markerede bilag, der ikke er bogført, i ét tryk.

Hvem
tilladelse: vouchers.delete
Sådan gør man
  1. Markér to eller flere bilag, se [[handling.kvitteringer.vaelg-bilag]].
  2. Tryk på den røde Slet-knap i bulk-bjælken. Knappen viser, hvor mange bilag der kan slettes, og vises kun, hvis mindst ét af de markerede ikke er bogført, bogførende eller tilbageført.
  3. En dialog med titlen Slet bilag spørger, om du er sikker på at slette N bilag, og siger, at handlingen ikke kan fortrydes. Tryk på Slet.
  4. En besked siger N bilag slettet. Har du ikke ret til at slette, er knappen grået ud med teksten Du har ikke rettighed til at slette bilag.
Fejl brugeren kan se
  • Kunne ikke slette bilagap.vouchers.delete_failed
  • Du har ikke rettighed til at slette bilag.ap.vouchers.access.no_delete
Kan fortrydes
Indtil, ikke fortrydelig fra siden. Dialogen siger, at handlingen ikke kan fortrydes. Serveren skriver, at bilagene kan gendannes fra papirkurven, men siden har ingen Fortryd-knap.
Låser
Et bogført bilag slettes ikke af bulk-sletningen. (når status er Bogført)

Teknisk flow, sideeffekter og ankre

Bogfør et bilag

handling.kvitteringer.bogfoer · Markør a.21, c.3, c.15, c4.1, c5.4

Bogfør sender ét bilag til regnskabet som et menneskeligt valg, der går forbi de bløde blokeringer.

Hvem
tilladelse: vouchers.edit
Sådan gør man
  1. Hurtigt fra listen: står der en grøn Bogfør-knap yderst på rækken, er bilaget klar. Det kræver en bekræftet konto, et beløb og en koblet banktransaktion (eller betaling med annoncekredit). Tryk på knappen, og rækken viser Bogfører.
  2. Fra bilaget: åbn rækken, kontrollér konto, moms og beløb, og tryk på Godkend & bogfør nederst til højre. Er regnskabsforbindelsen sat til kun at oprette kladder, hedder knappen Bekræft & opret kladde.
  3. Er bilaget ikke koblet til en banktransaktion, åbner dialogen Bogfør uden banktransaktion?. Den advarer om, at bogføring uden match gør afstemning sværere og øger risikoen for dobbeltposteringer. Tryk på Bogfør alligevel for at fortsætte, eller afbryd og kobl bilaget først.
  4. Er posteringen lig en postering eller kladde, regnskabet allerede har, åbner dialogen Lignende postering i regnskabet med begge sider. Tryk på Bogfør alligevel, kun hvis det er to forskellige betalinger.
  5. Bilaget står som Bogfører og opdateres selv. Lige efter en lykket bogføring viser en besked Bogført med en Fortryd-knap i nogle sekunder, se [[handling.kvitteringer.tilbagefoer]]. Fejler bogføringen, hedder knappen på rækken Genbogfør.
Fejl brugeren kan se
  • Kan ikke bogføre uden matchet banktransaktion. Match bilaget til en banktransaktion, eller bekræft advarslen om at bogføre uden match.book_blocked_no_bank_match
  • Bilaget er allerede bogført.
  • Bilaget kan ikke bogføres endnu: efterfulgt af blokeringens tekst.
  • Bogføring fejlede: efterfulgt af udbyderens årsag, som også står i booking_error.
Kan fortrydes
Indtil, bilaget er bogført hos udbyderen. Efter bogføring bruges Tilbagefør, som poster en modpostering. En ubogført kladde hos Dinero eller Billy slettes af tilbageføringen, og bilaget kan bogføres igen.
Låser
Bilaget kan hverken slettes, redigeres, få ny fil eller scannes igen. (når status er Bogført)

Teknisk flow, sideeffekter og ankre

Vælg konto på et bilag

handling.kvitteringer.vaelg-konto · Markør a.25, c.10

Kontocellen i listen lader en vælge eller godkende en konto på et bilag uden at åbne det.

Hvem
tilladelse: vouchers.edit
Sådan gør man
  1. Find kolonnen Konto. Et bilag med én konto viser kontonummer og navn. Et gult forslag betyder, at AI foreslår en konto, men ikke er sikker nok til at bruge den selv.
  2. Tryk på kontoen og vælg en anden i listen. Mens kontoplanen hentes, er feltet låst med teksten Henter kontoplan. Valget gemmes med det samme, og en besked siger Konto opdateret.
  3. Er forslaget gult og rigtigt, så tryk på det lille hakkemærke ved siden af (Godkend forslaget). Så gemmes forslaget som kontoen.
  4. Har bilaget flere linjer med hver sin konto, står der Flere konti eller Konteret pr. linje. Tryk på cellen for at åbne bilaget og ændre fordelingen, se [[handling.kvitteringer.opdater-bilag]].
  5. Har bilaget andre ubogførte bilag fra samme leverandør, spørger en dialog bagefter, om samme konto skal bruges på dem, se [[handling.kvitteringer.soeskende-kontoforslag]].
  6. På et bogført, bogførende eller tilbageført bilag er cellen kun til læsning.
Fejl brugeren kan se
  • Kunne ikke gemme kontoenap.vouchers.account_cell.save_failed
  • Kan ikke redigere et bogført eller tilbageført bilag.
  • Du har ikke rettighed til at ændre eller bogføre bilag.ap.vouchers.access.no_edit
  • En eller flere linjer mangler en konto. Kontér dem, før bilaget bogføres.ap.vouchers.account_cell.book_blocked_missing_line_account
Kan fortrydes
Ja. Vælg en anden konto, så længe bilaget ikke er bogført. Efter bogføring bruges [[handling.kvitteringer.tilbagefoer]].
Låser
Kontoen kan ikke ændres. (når status er Bogført, Bogfører eller Tilbageført)

Teknisk flow, sideeffekter og ankre

Brug den nye konto på andre bilag fra samme leverandør

handling.kvitteringer.soeskende-kontoforslag

Efter en kontoændring tilbyder siden at bruge den samme konto på andre ubogførte bilag fra samme leverandør.

Hvem
tilladelse: vouchers.edit
Sådan gør man
  1. Skift konto på et bilag i kontocellen eller i drawer. Er den nye konto en anden end før, og findes der andre ubogførte bilag fra samme leverandør, åbner dialogen Opdater andre bilag fra samme leverandør?.
  2. Dialogen siger Du ændrede konteringen til X. N andre ubogførte bilag har samme leverandør, vil du anvende den samme konto på dem? Under står bilagene med deres nuværende konto (Nu) og en afkrydsning. Alle er valgt fra start.
  3. Fravælg dem, der ikke skal ændres, eller brug Vælg alle og Fravælg alle. Tryk på Opdater N bilag, eller på Spring over, hvis ingen skal ændres.
  4. Dialogen minder om, at kun konteringen opdateres, og at bilagene ikke bogføres automatisk. En besked siger bagefter Konto opdateret på N bilag.
  5. Findes der ingen lignende bilag, eller blev kontoen ikke ændret, vises dialogen slet ikke.
Fejl brugeren kan se
  • Kunne ikke opdatere bilageneap.vouchers.sibling_proposal.apply_failed
Kan fortrydes
Ja. Der er ingen samlet fortryd. Vælg en anden konto på hvert bilag, se [[handling.kvitteringer.vaelg-konto]].

Teknisk flow, sideeffekter og ankre

Fjern koblingen til banktransaktionen

handling.kvitteringer.fjern-transaktion · Markør c2.2

Knappen Fjern i drawer og Fjern transaktion i cellens panel opløser koblingen mellem bilag og banklinje.

Hvem
tilladelse: vouchers.editmodul: suppliers
Sådan gør man
  1. Åbn bilaget. I sektionen Bank står den afstemte post med knappen Fjern.
  2. Har bilaget flere bankposter, står der Afstemt og antal bankposter, og hver post har sin egen Fjern.
  3. Fra listen kan du trykke på cellen med Afstemt og vælge Fjern transaktion.
  4. Beskeden Banktransaktion fjernet fra bilaget kommer, og cellen er tom igen.
Fejl brugeren kan se
  • Kunne ikke forbinde transaktionen
  • Du har ikke rettighed til at ændre eller bogføre bilag.
Kan fortrydes
Ja. Kobl igen med [[handling.kvitteringer.link-transaktion]].

Teknisk flow, sideeffekter og ankre

Se selve kvitteringen

handling.kvitteringer.se-kvittering · Markør b.2, b.3, c.1

Se kvittering åbner bilagets fil, så man kan læse den originale PDF eller det originale billede.

Hvem
tilladelse: vouchers.view
Sådan gør man
  1. Åbn rækkemenuen og vælg Se kvittering for at se filen i et lag oven på listen. Vælg Åbn i nyt faneblad for at åbne filen i en ny fane.
  2. I bilagets drawer vises filen i dokumentvisningen i venstre side. Der findes ikke noget Se kvittering-punkt for et bilag uden fil.
  3. Esc lukker kvitteringslaget igen.
Fejl brugeren kan se
  • Filen kan ikke visesap.vouchers.file_cannot_display
Kan fortrydes
Nej. Handlingen ændrer ingenting og behøver ikke at kunne fortrydes.

Teknisk flow, sideeffekter og ankre

Scan et bilag igen

handling.kvitteringer.scan-igen · Markør b.4, c4.2

Scan igen lader AI læse bilagets fil forfra, så leverandør, dato og beløb kan blive læst på ny.

Hvem
tilladelse: vouchers.edit
Sådan gør man
  1. Åbn rækkemenuen yderst på rækken og vælg Scan igen. Samme punkt findes i menuen med de tre prikker i bilagets drawer.
  2. En besked siger AI scanner bilaget igen. Rækken viser Scanning, mens computeren læser filen, og listen opdaterer sig selv.
  3. Punktet findes ikke på bogførte, tilbageførte, bogførende eller flyttede bilag, ikke på erstatningsbilag og ikke på bilag uden fil. Har du ikke ret til at rette bilag, er punktet grået ud.
Fejl brugeren kan se
  • Kan ikke scanne et bogført eller tilbageført bilag.
  • Bilaget er konverteret til en regning og kan ikke scannes igen.
  • Kan ikke scanne et erstatningsbilag.
  • Bilaget har ingen fil at scanne.
  • Kunne ikke starte scanningap.vouchers.rescan_failed
Kan fortrydes
Nej. Der er ingen fortryd. Er det nye læseresultat forkert, retter man felterne i drawer, se [[handling.kvitteringer.opdater-bilag]].
Låser
Scan igen er ikke tilgængelig. (når bilaget er bogført, tilbageført, flyttet til Regninger, er et erstatningsbilag eller mangler fil)

Teknisk flow, sideeffekter og ankre

Flyt et bilag til Regninger

handling.kvitteringer.flyt-til-regninger · Markør b.5

Flyt til Regninger gør en kvittering til en regning, der skal betales, når bilaget i virkeligheden er en faktura.

Hvem
tilladelse: vouchers.editplan: Gratis-planens loft på 25 bilag i alt gælder, fordi en regning tæller som et nyt bilag.
Sådan gør man
  1. Hvis AI tror, at bilaget er en regning, står der et mærke Regning? på rækken, og bilagets drawer viser boksen Ligner det en regning? med to knapper: Flyt til Regninger og Behold som kvittering.
  2. For alle andre bilag kan du selv vælge Flyt til Regninger i rækkemenuen eller i drawer. Punktet vises ikke, før bilaget er læst færdigt.
  3. Tryk på Flyt til Regninger. Du sendes til Regninger, hvor den nye regning åbner, og en besked siger, at AI'en genkendte bilaget som en regning, og at den nu ligger der.
  4. Punktet findes kun for bilag fra upload, e-mail, e-Boks, digital post eller indbakkens automatik, som endnu ikke er bogført, ikke er koblet til eller foreslået en banktransaktion, ikke er erstatningsbilag og har en fil.
  5. Vil du beholde bilaget som kvittering, trykker du på Behold som kvittering i boksen.
Fejl brugeren kan se
  • Bilaget kan ikke flyttes til Regninger.
  • Bilaget kunne ikke flyttes til Regninger. Prøv igen, eller opret regningen manuelt.
  • Du har brugt din Gratis-plan. Gratis-planen dækker 25 behandlede bilag i alt, kvitteringer og regninger tilsammen. Opgradér for at behandle flere.voucherLimit
Kan fortrydes
Indtil, regningen er bogført, godkendt, afregnet eller sat til betaling. På Regninger findes Flyt til Kvitteringer, som sender dokumentet tilbage. Knappen afvises, når regningen er gået videre.
Låser
Bilaget bogføres ikke længere som kvittering, og Scan igen virker ikke. (når status er Flyttet)

Teknisk flow, sideeffekter og ankre

Tilbagefør et bogført bilag

handling.kvitteringer.tilbagefoer · Markør b2.1, d.5

Tilbagefør nulstiller et bogført bilag med en modpostering og beholder bilaget som dokumentation.

Hvem
tilladelse: vouchers.edit
Sådan gør man
  1. Åbn det bogførte bilag og tryk på Fortryd & modpostér nederst til højre. Fra listen kan du i rækkemenuen vælge Tilbagefør bogføring, som åbner bilaget, så du trykker på knappen dér.
  2. En dialog med titlen Tilbagefør bogføring? forklarer, at der oprettes en modpostering i regnskabssystemet, og at bilaget ikke slettes, men bevares som dokumentation og markeres som tilbageført. Tryk på Tilbagefør bogføring for at bekræfte.
  3. Lige efter en bogføring viser en besked Bogført med en Fortryd-knap i nogle sekunder. Den gør det samme uden at åbne bilaget.
  4. Bilaget får status Tilbageført og et link til modposteringens bilagsnummer. Det oprindelige bilag står stadig i regnskabet. Skal udgiften bogføres korrekt, opretter du et nyt bilag.
  5. Knappen mangler, når bilaget kun er en kladde i regnskabet (journal_state kladde) eller kun er vedhæftet en eksisterende postering, og den er grået ud, hvis du ikke må rette bilag.
Fejl brugeren kan se
  • Kun bogførte bilag kan tilbageføres.
  • Bilaget er allerede tilbageført.
  • Kunne ikke tilbageføre bilagap.vouchers.reverse_failed
  • Bilaget er ved at blive tilbageført. Vent, til handlingen er færdig.
  • Tilbageførsel fejlede: efterfulgt af årsagen.
  • Modposteringen er oprettet, men PayFriend kunne ikke gemme tilbageførslen. Tilbagefør ikke igen.voucher.reversal_strand
Kan fortrydes
Nej. En tilbageført række kan ikke bogføres igen og kan ikke tilbageføres to gange. Bogfør-vejen afviser et tilbageført bilag.
Låser
Bilaget kan ikke bogføres igen, redigeres eller scannes igen. (når status er Tilbageført)

Teknisk flow, sideeffekter og ankre

Slet et bilag

handling.kvitteringer.slet · Markør b.6, c4.3, c5.2

Slet fjerner et bilag, der ikke er bogført, fra listen, og kan kun bruges af dem, der må slette bilag.

Hvem
tilladelse: vouchers.delete
Sådan gør man
  1. Åbn rækkemenuen og vælg Slet, eller åbn bilaget og vælg Slet i menuen med de tre prikker.
  2. En dialog med titlen Slet bilag spørger, om du er sikker, og siger, at handlingen ikke kan fortrydes. Tryk på Slet.
  3. En besked siger Bilag slettet. Drawer lukker, og rækken forsvinder.
  4. Er bilaget bogført, findes Slet ikke. Der står Tilbagefør bogføring i stedet, se [[handling.kvitteringer.tilbagefoer]].
  5. Ejer og Admin må slette. Medlem, Betragter og Bogholder må ikke, og knappen er grået ud med teksten Du har ikke rettighed til at slette bilag. Se [[rolle.kvitteringer]].
Fejl brugeren kan se
  • Bilaget er bogført i regnskabssystemet og kan ikke slettes. Brug Tilbagefør bogføring for at lave en modpostering, der nulstiller bilaget.
  • Kunne ikke slette bilagap.vouchers.delete_failed
  • Du har ikke rettighed til at slette bilag.ap.vouchers.access.no_delete
Kan fortrydes
Indtil, ikke fortrydelig fra siden. Dialogen siger, at handlingen ikke kan fortrydes. Serveren skriver, at bilaget kan gendannes fra papirkurven, men der er ingen Fortryd-knap på siden.
Låser
Bilaget kan ikke slettes. (når status er Bogført eller Tilbageført, eller det er ved at blive bogført)

Teknisk flow, sideeffekter og ankre

Åbn et bilag i drawer

handling.kvitteringer.aabn-bilag · Markør a.22, b.1, c.2, c.4

Et tryk på en række åbner bilaget i en drawer, hvor man ser og retter alle oplysninger.

Hvem
tilladelse: vouchers.view
Sådan gør man
  1. Tryk på en række i listen, eller vælg Vis i rækkemenuen. Drawer åbner i højre side.
  2. Drawer viser først det, listen allerede ved, og henter derefter resten: konti, bankforslag, posteringsforhåndsvisning og blokeringer.
  3. Adressen i browseren får bilagets id med, så et link kan deles. Luk drawer med krydset, eller tryk på Esc.
  4. Er bilaget en lønkørsel, åbner i stedet lønbogføringens drawer (PayrollBookingDrawer), som har sin egen bogfør-knap.
Kan fortrydes
Nej. Handlingen ændrer ikke noget, der behøver fortrydes.

Teknisk flow, sideeffekter og ankre

Ret et bilags felter

handling.kvitteringer.opdater-bilag · Markør c.6, c.7, c.8, c.9, c.11, d.3

Felterne i drawer gemmer sig selv, når man retter leverandør, dato, beløb, konti, linjer eller beskrivelse på et bilag, der ikke er bogført.

Hvem
tilladelse: vouchers.editmodul: suppliers
Sådan gør man
  1. Tryk på rækken for at åbne bilaget. Sektionen Kontering er åben fra start.
  2. Ret Leverandør, Bilagsdato, Modkonto, Konto eller Beskrivelse. Har bilaget flere linjer, kan hver linjes konto, momskode, afdeling og projekt rettes.
  3. Der er ingen Gem-knap. Efter et halvt sekund uden flere ændringer gemmer drawer selv. Teksten viser Gemmer ændringer og derefter Ændringer gemt.
  4. Fejler det, står der Kunne ikke gemme bilag med knappen Prøv at gemme igen.
  5. Tryk Godkend og bogfør, Scan igen eller Slet, gemmer drawer først de ventende ændringer.
Fejl brugeren kan se
  • Kan ikke redigere et bogført eller tilbageført bilag.
  • Kunne ikke gemme bilagap.vouchers.save_failed
  • Periodisering understøttes kun for e-conomic og Business Central.periodization_enabled
  • Du har ikke rettighed til at ændre eller bogføre bilag.ap.vouchers.access.no_edit
Kan fortrydes
Indtil, bilaget er bogført. Der er ingen fortryd-knap på en rettelse. Man retter feltet tilbage. Efter bogføring er bilaget låst og rettes via [[handling.kvitteringer.tilbagefoer]].
Låser
Alle felter er skrivebeskyttede, og ruten afviser rettelsen. (når bilaget er bogført eller tilbageført)

Teknisk flow, sideeffekter og ankre

Periodisér et bilag

handling.kvitteringer.periodiser · Markør c.14, c3.1

Sektionen Mere fordeler bilagets beløb over flere regnskabsperioder, og en allerede sendt periodisering kan rettes eller fjernes i e-conomic.

Hvem
tilladelse: vouchers.editmodul: suppliers
Sådan gør man
  1. Åbn bilaget og sektionen Mere. Sektionen Periodisering vises kun, hvis virksomhedens regnskabsprogram kan periodisere.
  2. Slå Periodisér omkostningen til. Vælg Fra (startdato), Antal måneder og Periodiseringskonto (balance).
  3. Beløbet fordeles lineært mellem perioderne ved bogføring. Periodiseringen sendes først, når du bogfører.
  4. Er bilaget bogført som kladde i e-conomic, viser kortet i stedet månederne og startdatoen med Redigér og Fjern. Redigér giver Gem periodisering. Fjern spørger Fjern periodisering?.
Fejl brugeren kan se
  • Periodisering understøttes kun for e-conomic og Business Central.periodization_enabled
  • Periodisering skal være mellem 2 og 60 måneder.
  • Periodiseringskontoen skal være en balancekonto (statuskonto).
  • Periodiseringskontoen findes ikke eller er inaktiv.
  • Periodiseringen blev ændret i e-conomic imens. Genindlæs bilaget og prøv igen.periodization
  • Periodiseringen kunne ikke opdateres i e-conomic. Prøv igen, eller ret den direkte i e-conomic.periodization
  • Periodiseringen er opdateret i e-conomic.
  • Periodiseringen er fjernet i e-conomic.
Kan fortrydes
Indtil, bilaget er bogført hos udbyderen og kladden ikke længere kan rettes. Før bogføring slås til/fra frit. Efter sendelsen kan den rettes eller fjernes, så længe kladden findes. En fjernet periodisering kan ikke tilføjes igen, før bilaget bogføres på ny.
Låser
Periodiseringen kan ikke rettes fra Kvitteringer, og selve bilaget er låst. (når posteringen ikke længere er en kladde hos udbyderen)

Teknisk flow, sideeffekter og ankre

Se hvordan bilaget bogføres

handling.kvitteringer.se-posteringsforhaandsvisning · Markør c.12, d.4

Boksen Sådan bogføres det regner posteringslinjerne ud på serveren, mens man retter, uden at gemme eller sende noget.

Hvem
tilladelse: vouchers.viewmodul: suppliers
Sådan gør man
  1. Åbn bilaget. Boksen Sådan bogføres det står under konteringen.
  2. Ret konto, momskode eller bogføringsmåde. Efter et øjeblik opdateres linjerne.
  3. Står der I balance, går det op. Står der Tjek beløb, Mangler momskode eller Bekræft moms, skal du rette det, før bilaget kan bogføres rigtigt.
  4. Tryk Vælg konto, Skift konto eller Skift moms på en linje for at rette direkte i boksen.
  5. På et bogført bilag viser boksen posteringen, som den blev bogført, og kan ikke ændres.
Fejl brugeren kan se
  • Kunne ikke opdatere forhåndsvisningen. Prøv igen.ap.vouchers.workbench.preview_retry
  • Bilaget er på :document, men linjerne giver :derived (forskel: :difference).ap.vouchers.v3.posting.amount_mismatch
Kan fortrydes
Ja. Intet at fortryde. Forhåndsvisningen ændrer ingen data.

Teknisk flow, sideeffekter og ankre

Afvis en dubletadvarsel

handling.kvitteringer.afvis-dublet · Markør c5.1, c5.3

Knappen Ikke en dublet i drawer fjerner advarslen om, at bilaget ligner et andet, så bilaget igen kan bogføres.

Hvem
tilladelse: vouchers.editmodul: suppliers
Sådan gør man
  1. Åbn bilaget med advarslen Mulig dublet. Teksten siger: Samme køb ser ud til at være hentet ind to gange. Sammenlign bilagene, før du fortsætter.
  2. Tryk på de to kort, Eksisterende bilag og det nye, for at se hvert dokument i dokumentruden.
  3. Er det samme køb, så tryk Behold og kasser, med bilagsnumrene i knappen. Den knap findes kun, hvis du må slette bilag. Bilaget kasseres som ved Slet.
  4. Er det to forskellige køb, så tryk Ikke en dublet. Beskeden Markeret som ikke en dublet kommer, og advarslen forsvinder.
  5. Knappen Godkend og bogfør er låst, så længe advarslen står.
Fejl brugeren kan se
  • Muligt dublet. Risiko for dobbeltbetaling. Gennemgå bilaget og afvis dubletmarkeringen, før det kan bogføres.ap.vouchers.duplicate_hint
Kan fortrydes
Nej. Der er ingen knap, der sætter markeringen tilbage. Overstyringen ligger i voucher_duplicate_overrides. Opdager man en fejl, kasseres det ene bilag med Slet.
Låser
Bogføring er blokeret med blokeringen duplicate_flagged, og auto-bogføring springer bilaget over. (så længe bilaget har duplicate_of_id og ikke er afvist)

Teknisk flow, sideeffekter og ankre

Behold som kvittering

handling.kvitteringer.afvis-regningsforslag

Når scanningen tror, at bilaget er en regning, spørger drawer, om det skal flyttes til Regninger eller blive en kvittering.

Hvem
tilladelse: vouchers.editmodul: suppliers
Sådan gør man
  1. Åbn et bilag med mærket Regning? i listen. Drawer spørger Ligner det en regning? og siger: AI'en vurderer, at dette bilag er en regning, der skal betales.
  2. Tryk Behold som kvittering, hvis det er en kvittering. Spørgsmålet forsvinder, og bilaget bliver ved med at være en kvittering.
  3. Tryk Flyt til Regninger, hvis det er en regning. Det er en anden handling, se Flyt til Regninger.
Kan fortrydes
Nej. Der er ingen knap, der gør spørgsmålet synligt igen. Bilaget kan stadig flyttes til Regninger med menupunktet Flyt til Regninger.

Teknisk flow, sideeffekter og ankre

Opret en leverandør fra bilaget

handling.kvitteringer.opret-leverandoer

Under leverandørvælgeren i drawer kan man oprette en ny leverandør med bare et navn, uden at forlade bilaget.

Hvem
tilladelse: payables.createmodul: suppliers
Sådan gør man
  1. Åbn et bilag og find Leverandør i sektionen Kontering. Fandt scanningen ingen leverandør, er rækken tom.
  2. Tryk Opret ny leverandør under vælgeren.
  3. Skriv navnet i feltet Navn (Leverandørnavn) og tryk Opret. Findes navnet allerede på vælgeren, bliver den valgt i stedet.
  4. Beskeden Leverandør oprettet kommer, og den nye leverandør står på bilaget.
  5. Tryk Annuller for at lukke feltet uden at oprette noget.
Fejl brugeren kan se
  • Det ligner noget, der allerede findes:dedup.subtitle
  • Kunne ikke oprette leverandørap.vouchers.supplier_create_failed
  • «:name» findes allerede, vælg den i stedet for at oprette en ny.ap.vouchers.supplier_already_exists
Kan fortrydes
Nej. Leverandøren kan ikke fjernes fra drawer. Den skiftes ud på bilaget, og selve leverandøren håndteres under Leverandører.

Teknisk flow, sideeffekter og ankre

Godkend og bogfør et lønbilag

handling.kvitteringer.loenbogfoering

Et lønbilag åbner i sin egen drawer, hvor man ser posteringen, vælger manglende lønkonti og godkender bogføringen.

Hvem
tilladelse: payroll.manage
Sådan gør man
  1. Tryk på et lønbilag i listen. Drawer hedder Lønbogføring og viser Postering (kassekladde) med kolonnerne Konto, Debet og Kredit.
  2. Mangler lønsystemets konti i kontoplanen, står der Vælg de manglende konti. Vælg en konto til hver linje og tryk Gem kontovalg. Indtil alle er valgt, står der Godkendelse er blokeret, indtil alle konti er valgt.
  3. Står der Dit lønsystem bogfører allerede selv, står lønnen allerede i regnskabet. Godkend kun, hvis du ved, at posteringen er noget andet.
  4. Tryk Godkend & bogfør. Beskeden Lønbilaget bogføres nu kommer, og bilaget står som Bogfører.
  5. Når det er gået godt, står der Bogført med bilagsnummer og regnskabsår og knappen Se bilag. Har udbyderen lagt posteringen som kladde, står der, at den skal bogføres i regnskabssystemet.
  6. Betalingerne, A-skat, AM-bidrag, ATP, feriepenge og nettoløn, afregnes senere automatisk, når de rammer banken.
Fejl brugeren kan se
  • Lønbilaget er allerede ved at blive bogført.payroll.already_booking
  • Lønjournalen mangler posteringslinjer. Synkronisér lønnen igen.payroll.no_journal
  • Konto :account findes ikke i din kontoplan.payroll.map_target_missing
  • Kunne ikke hente posteringen. Prøv igen.payroll.preview.load_failed
  • Ingen regnskabsintegration (e-conomic eller Dinero) er forbundet. Posteringen kan ikke bogføres endnu.payroll.preview.no_integration
Kan fortrydes
Indtil, bilaget er bogført hos udbyderen. Før bogføring kan man lukke drawer uden at gøre noget. Efter bogføring tilbageføres lønbilaget som andre bilag, se [[handling.kvitteringer.tilbagefoer]].
Låser
Godkend & bogfør er slået fra, og ruten afviser. (når bilaget allerede bogføres eller er bogført, eller når der mangler kontovalg)

Teknisk flow, sideeffekter og ankre

Se Mangler bilag

handling.kvitteringer.vis-mangler-bilag · Markør a.2, e.1, e3.1, e3.2, f.1

Fanen Mangler bilag viser posteringer i regnskabet som mangler et bilag.

Hvem
tilladelse: vouchers.viewmodul: suppliers
Sådan gør man
  1. Tryk på fanen Mangler bilag ved siden af Kvitteringer. Har virksomheden poster der mangler, står tallet på fanen.
  2. Er regnskabet ikke forbundet, står der Regnskab er ikke forbundet og en knap Gå til regnskab, som fører til Indstillinger, Regnskab.
  3. Er banken koblet på, men afstemningen mangler en startdato, står der Afstemningsstart mangler og ingen tal. Tryk på Åbn indstillinger for at sætte datoen. Uden en startdato ville gamle posteringer se ud som om de mangler bilag.
  4. Ellers vises posteringerne med dato, modtager, konto og beløb. Som standard er det kun de aktuelle, altså poster efter virksomhedens indflytning. Skiftet Vis migreret historik viser også poster importeret fra det gamle system.
  5. Åbn en række for at se, hvorfor posteringen mangler et bilag. Rækken har knappen Upload bilag og i rækkemenuen punktet Findes andetsteds.
Fejl brugeren kan se
  • Regnskab er ikke forbundet. Manglende bilag kommer fra dit regnskabssystem. Forbind det under Indstillinger → Regnskab.ap.vouchers.access.not_connected_body
  • Afstemningsstart mangler. Vi tæller først manglende bilag, når vi ved hvor afstemningen begynder. Uden en startdato ser gamle posteringer ud som om de mangler bilag. Datoen står i Indstillinger.ap.vouchers.missing_needs_cutover_description
  • Ingen manglende bilag. Alle dine bogførte transaktioner har en kvittering tilknyttet, eller er undtaget.ap.vouchers.missing_empty_description
Kan fortrydes
Ja. Handlingen læser kun. Der skrives intet, så der er intet at fortryde.

Teknisk flow, sideeffekter og ankre

Upload bilag til en postering, der mangler bilag

handling.kvitteringer.upload-manglende · Markør e.11, e2.1

Under Mangler bilag kan man lægge den manglende fil ind på en postering, og PayFriend kobler den til posteringen i regnskabet.

Hvem
tilladelse: vouchers.createrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter)plan: Gratis stopper ved 25 behandlede bilag i altmodul: suppliers
Sådan gør man
  1. Åbn fanen Mangler bilag.
  2. Find posteringen i listen. Teksten Konto N (navn) forventer et bilag fortæller, hvad den mangler.
  3. Tryk på knappen Upload bilag på rækken, eller åbn rækkemenuen og vælg Upload bilag.
  4. Vælg en PDF, JPG eller PNG på højst 20 MB.
  5. Går det godt, står der Bilag uploadet og koblet til bogføringen., og posteringen forsvinder fra listen.
Fejl brugeren kan se
  • Kunne ikke uploade bilag.
  • Filen kunne ikke gemmes. Prøv igen.errors.file
  • Du har brugt din Gratis-plan. Gratis-planen dækker 25 behandlede bilag i alt, kvitteringer og regninger tilsammen. Du har brugt alle 25. Opgradér for at behandle flere.voucherLimit
  • Du har ikke rettighed til at oprette bilag. Upload-knappen er deaktiveret.
Kan fortrydes
Nej. Der er ingen knap, der fjerner koblingen. Bilaget kan slettes som andre ubogførte bilag, men flowet indeholder ingen sletning af dokumentet hos regnskabssystemet.

Teknisk flow, sideeffekter og ankre

Marker, at bilaget findes andetsteds

handling.kvitteringer.afvis-manglende · Markør e.12, e2.2

Menupunktet Findes andetsteds fjerner en postering fra Mangler bilag, når bilaget ikke skal uploades.

Hvem
tilladelse: vouchers.createrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter)
Sådan gør man
  1. Åbn fanen Mangler bilag.
  2. Åbn rækkemenuen på posteringen og vælg Findes andetsteds.
  3. Dialogen spørger Markér som håndteret andetsteds? og forklarer: Brug denne hvis bilaget findes som lønseddel, kontoudtog eller indberetning og ikke skal uploades.
  4. Tryk Findes andetsteds for at bekræfte. Posteringen forsvinder fra listen.
Fejl brugeren kan se
  • Du har ikke rettighed til at oprette bilag. Menupunktet er deaktiveret.
Kan fortrydes
Nej. Appen har ingen knap eller route, der sletter markeringen. Den kan kun fjernes ved at slette rækken i accounting_entry_receipt_dismissals.

Teknisk flow, sideeffekter og ankre

Marker flere poster som havende bilag andetsteds

handling.kvitteringer.afvis-manglende-valgte · Markør e.13

Bulk-bjælken under Mangler bilag markerer alle valgte poster som håndteret andetsteds i ét tryk.

Hvem
tilladelse: vouchers.createrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter)
Sådan gør man
  1. Åbn fanen Mangler bilag og sæt hak ved posteringerne, eller brug Vælg alle.
  2. I bulk-bjælken nederst står antallet valgte og knappen Findes andetsteds.
  3. Dialogen spørger Markér N bilag som håndteret andetsteds? Tryk Findes andetsteds.
  4. Toasten siger N bilag markeret som håndteret andetsteds.
Fejl brugeren kan se
  • Kunne ikke uploade bilag.
  • Du har ikke rettighed til at oprette bilag. Knappen er deaktiveret.
Kan fortrydes
Nej. Samme som [[handling.kvitteringer.afvis-manglende]]: ingen knap sletter markeringerne.

Teknisk flow, sideeffekter og ankre

Læg et hentet bilag ind for en periode, PayFriend efterspørger

handling.kvitteringer.hent-ved-kilden-upload

Når en leverandør kun giver fakturaen i sin egen portal, kan man hente den der og lægge den ind i Indbakken, så perioden regnes som løst.

Hvem
tilladelse: vouchers.createrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter)modul: suppliers
Sådan gør man
  1. Åbn Indbakken og vælg den periode, PayFriend efterspørger et bilag for. Kortet viser leverandør og måned, beløbet, antal betalinger og eventuelt kontoen.
  2. Teksten over kortet siger, hvor bilaget hentes. Tryk Hent for at åbne leverandørens side i et nyt faneblad.
  3. Træk filen ind i feltet Slip fakturaen her, eller tryk Upload og vælg den. Kræver perioden flere bilag, står der Slip bilagene eller zip'en her, og flere filer eller en zip kan lægges ind på én gang.
  4. Beskeden siger, at bilaget er modtaget, og at AI scanner det nu. Perioden forsvinder fra køen over det, der skal handles på.
Fejl brugeren kan se
  • Bilaget kunne ikke modtages. Prøv igen.
  • Filnavn er større end 20 MB.errors.file
  • Højst 200 bilag pr. upload.errors.files
  • Filen er for stor (maks. 20 MB).
  • Kun PDF, JPG eller PNG
Kan fortrydes
Nej. Der er ingen kundeknap, der genåbner en periode. Historikken ligger under Filtreret i Indbakken, og en genåbning kræver, at resolution-rækken slettes i databasen (controllerens egen kommentar).

Teknisk flow, sideeffekter og ankre

Marker en periode som bogført andetsteds

handling.kvitteringer.hent-ved-kilden-afvis

Knappen Marker som bogført andetsteds tager en periode ud af Indbakkens kø, uden at der lægges et bilag ind.

Hvem
tilladelse: vouchers.createrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter)modul: suppliers
Sådan gør man
  1. Åbn den periode i Indbakken, som PayFriend efterspørger et bilag for.
  2. Tryk på Marker som bogført andetsteds under kortet, eller åbn menuen på kortet.
  3. Dialogen spørger Marker som bogført andetsteds? og forklarer: Brug dette når bilaget allerede er bogført i regnskabet. Perioden forlader handlingskøen og dukker ikke op igen. Historik ligger under Filtreret. Skal den genåbnes, så kontakt support.
  4. Tryk Marker som bogført andetsteds. Beskeden siger, at perioden er markeret, og at den ikke efterspørges igen.
Fejl brugeren kan se
  • Siden viser en 404-fejl, hvis perioden ikke længere skyldes af firmaet.404
Kan fortrydes
Nej. Dialogen siger selv, at man skal kontakte support. Genåbning kræver, at resolution-rækken slettes i databasen.

Teknisk flow, sideeffekter og ankre

Se listen over kvitteringer

handling.kvitteringer.vis-liste · Markør a.1

Fanen Kvitteringer viser alle bilag med de nyeste først.

Hvem
tilladelse: vouchers.viewmodul: suppliers
Sådan gør man
  1. Åbn menupunktet Kvitteringer. Fanen Kvitteringer er den, der er valgt, når siden åbner.
  2. Listen viser ét bilag pr. række: leverandør, konto, banktransaktion, dato, beløb og status.
  3. Over listen står tre linser med et tal hver: Skal behandles, Klar til bogføring og Alle. Tallene er alle virksomhedens bilag, også dem filtre skjuler.
  4. Uden andre valg står de nyeste bilag øverst, og bilag der endnu ikke er bogført ligger over de bogførte. Et bilag der netop er bogført, bliver et kort stykke tid oppe blandt de åbne, så det ikke forsvinder.
  5. Tryk på en række for at åbne bilaget i en drawer. Adressen får så ?voucher= med bilagets nummer, så et link til siden åbner samme drawer.
  6. Er bilaget flyttet til Regninger, sender PayFriend dig dertil i stedet.
Fejl brugeren kan se
  • Du har ikke rettighed til at oprette bilag.ap.vouchers.access.no_create
  • Du har ikke rettighed til at ændre eller bogføre bilag.ap.vouchers.access.no_edit
  • Du har ikke rettighed til at slette bilag.ap.vouchers.access.no_delete
  • Du har ikke rettighed til at eksportere bilag.ap.vouchers.access.no_export
Kan fortrydes
Ja. Handlingen læser kun. Der skrives intet, så der er intet at fortryde.

Teknisk flow, sideeffekter og ankre

Skift linse

handling.kvitteringer.skift-linse · Markør a.3, a.4, a.5, f.2

Linserne Skal behandles, Klar til bogføring og Alle skærer listen på bilagets status.

Hvem
tilladelse: vouchers.viewmodul: suppliers
Sådan gør man
  1. Tryk på en af de tre linser over listen: Skal behandles, Klar til bogføring eller Alle. Hver har et tal.
  2. Skal behandles viser bilag der stadig kræver en beslutning, altså ikke bogførte bilag der mangler bankmatch eller en afslutning i regnskabet. Klar til bogføring viser ventende bilag med banktransaktion og konto, så de kun mangler dit tryk. Alle viser alle bilag.
  3. Listen genindlæses, og bilag du havde valgt til en samlet handling bliver fravalgt.
  4. Næste gang du kommer ind på Kvitteringer, åbner siden på den linse du sidst brugte, medmindre du er kommet fra et link med en anden visning.
Kan fortrydes
Ja. Tryk på en anden linse. Linsen Alle er standardvisningen uden begrænsning.

Teknisk flow, sideeffekter og ankre

Skift mellem komfortabel og kompakt visning

handling.kvitteringer.skift-taethed · Markør a.10, e.5

De to ikoner ved siden af Gemte skifter rækkehøjden i listen.

Hvem
tilladelse: vouchers.viewmodul: suppliers
Sådan gør man
  1. Tryk på et af de to ikoner yderst til højre i værktøjslinjen over listen. De hedder Komfortabel og Kompakt.
  2. Komfortabel giver mere luft mellem rækkerne. Kompakt viser flere rækker på skærmen.
  3. Valget huskes i den browser, du bruger, og gælder næste gang du åbner Kvitteringer.
Kan fortrydes
Ja. Tryk på det andet ikon. Standarden er Komfortabel.

Teknisk flow, sideeffekter og ankre

Søg i kvitteringer

handling.kvitteringer.soeg · Markør a.6, e.2

Søgefeltet finder bilag på beskrivelse, leverandør eller konto.

Hvem
tilladelse: vouchers.viewmodul: suppliers
Sådan gør man
  1. Tryk på søgefeltet over listen, eller tryk / på tastaturet, mens markøren ikke står i et felt.
  2. Skriv en del af en beskrivelse, et leverandørnavn, et kontonavn eller et kontonummer. Feltet hedder Søg på tekst eller konto.
  3. Listen opdaterer sig af sig selv, kort efter du holder pause i skrivningen. Der er ingen søgeknap.
  4. Står du under Mangler bilag, søger feltet i posteringernes tekst og konto i stedet.
  5. Finder søgningen ingenting, står der Ingen træffere, med knapperne Ryd søgning og Søg i alle bilag.
Fejl brugeren kan se
  • Ingen træffere. Ingen bilag matcher søgeteksten.ap.vouchers.v3.empty.no_hits_title
  • Ingen bilag matcher søgeteksten med de aktive filtre.ap.vouchers.v3.empty.no_hits_body_with_filters
Kan fortrydes
Ja. Ryd feltet, eller tryk Ryd søgning. Søgningen ændrer ingen bilag.

Teknisk flow, sideeffekter og ankre

Filtrér kvitteringer

handling.kvitteringer.filtrer · Markør a.7, a2.1, a2.2, a2.3, a2.4, a2.5, e.3

Filter-knappen indsnævrer listen på projekt, leverandør, dato, beløb, konto og bankmatch.

Hvem
tilladelse: vouchers.viewmodul: suppliers
Sådan gør man
  1. Tryk på Filter, eller tryk f på tastaturet, mens markøren ikke står i et felt.
  2. Vælg et felt: Leverandør, Bilagsdato, Beløb, Konto eller Bankmatch. Projekt vises kun, hvis virksomheden har projekter.
  3. Vælg en eller flere leverandører (du kan også søge efter navn), en datointerval, et beløbsinterval, en konto eller Afstemt eller Ikke afstemt under Bankmatch.
  4. Valget bliver til en filterbrik over listen. Tryk på brikken for at ændre den, eller på Ryd alle for at fjerne dem alle.
  5. Listen opdaterer sig med det samme. Tallene ved linserne ændrer sig ikke.
Fejl brugeren kan se
  • Ingen bilag i dette udsnit. 1 filter er aktivt. Ryd det for at se hele arkivet.ap.vouchers.v3.empty.filters_empty_body_one
  • Ingen bilag i dette udsnit. :count filtre er aktive. Ryd dem for at se hele arkivet.ap.vouchers.v3.empty.filters_empty_body_other
Kan fortrydes
Ja. Fjern brikken, eller tryk Ryd alle. Filtre ændrer ingen bilag.

Teknisk flow, sideeffekter og ankre

Find en leverandør i filteret

handling.kvitteringer.find-leverandoer

Filteret Leverandør slår leverandører op på serveren, mens man skriver, så også leverandører uden for de første i listen kan vælges.

Hvem
tilladelse: vouchers.viewmodul: suppliers
Sådan gør man
  1. Tryk Filter over listen og vælg Leverandør.
  2. Skriv en del af navnet eller CVR-nummeret. Listen med forslag hentes, mens du skriver.
  3. Vælg leverandøren. Valget bliver til en filterlinje, og listen viser kun den leverandørs bilag.
Kan fortrydes
Ja. Fjern filterlinjen igen. Opslaget ændrer ingen data.

Teknisk flow, sideeffekter og ankre

Sortér kolonnerne

handling.kvitteringer.sorter · Markør a.15, a.16, a.17, a.18, a.19, e.7, e.8, e.9, e.10

Et tryk på en kolonneoverskrift sorterer listen efter den kolonne.

Hvem
tilladelse: vouchers.viewmodul: suppliers
Sådan gør man
  1. Tryk på overskriften Leverandør, Konto, Transaktion, Dato, Beløb eller Status. På en smal skærm er der i stedet en menu Sortér.
  2. Et tryk sorterer den ene vej, et nyt tryk den anden vej, og et tredje tryk fjerner sorteringen igen.
  3. Uden sortering står de nyeste bilag øverst efter bilagsdato, og ikke bogførte bilag ligger over de bogførte.
  4. Vælger du selv en sortering, gælder den rene sortering, uden at ubogførte bilag samles øverst.
  5. Under Mangler bilag er kolonnerne Dato, Modtager, Konto og Beløb.
Kan fortrydes
Ja. Tryk på overskriften igen, indtil pilen er væk, eller åbn Kvitteringer uden parametre.

Teknisk flow, sideeffekter og ankre

Brug gemte visninger

handling.kvitteringer.gemte-visninger · Markør a.8, e.4

Gemte visninger lader brugeren genbruge en kombination af søgning og filtre, og deler den med virksomheden.

Hvem
tilladelse: vouchers.viewmodul: suppliers
Sådan gør man
  1. Sæt de filtre og den søgning op, du vil gemme.
  2. Tryk på Gemte i værktøjslinjen og vælg Gem visning. Skriv et navn og gem. Visningen deles med alle i virksomheden.
  3. Senere: tryk på Gemte og vælg visningen. Listen får de gemte filtre igen.
  4. For at fjerne en visning: tryk på Slet visning ud for den og bekræft. Det kan ikke fortrydes.
Fejl brugeren kan se
  • Der findes allerede en visning med det navn.filters.saved_views_name_taken
  • Kunne ikke gemme visningen.filters.saved_views_save_error
  • Kunne ikke hente gemte visninger.filters.saved_views_load_error
  • Kunne ikke slette visningen.filters.saved_views_delete_error
Kan fortrydes
Nej. En slettet visning kan ikke fortrydes. Sæt filtrene op igen og gem den på ny. At vælge en visning ændrer intet på serveren og kan altid skiftes væk fra.

Teknisk flow, sideeffekter og ankre

Erstat filen på et bilag

handling.kvitteringer.erstat-bilagsfil

Knappen Erstat fil i cockpittets bilagsvisning skifter filen på et bilag, der ikke er bogført, og lader AI læse den igen.

Hvem
tilladelse: vouchers.editrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter)modul: suppliers
Sådan gør man
  1. Åbn et matchet bilag i cockpittets bilagsvisning på forsiden.
  2. Tryk Erstat fil og vælg eller træk en PDF, JPG eller PNG på højst 20 MB.
  3. Beskeden siger Filen er skiftet. AI scanner bilaget igen., og visningen lukker.
Fejl brugeren kan se
  • Filen kunne ikke skiftes. Prøv igen.dashboard.cockpit.posting.replace_file_failed
  • Kan ikke ændre filen på et bilag, der bogføres, er bogført eller er tilbageført.422
  • Kan ikke vedhæfte en fil til et erstatningsbilag.422
  • Filen er for stor (maks. 20 MB).
  • Kun PDF, JPG eller PNG
Kan fortrydes
Nej. Den gamle fil slettes, og der er ingen route, der gendanner den. Man kan kun lægge en ny fil ind igen.
Låser
Filen kan ikke skiftes, og en erstatningsbilag-fil kan ikke få en fil vedhæftet. (når status er Bogfører, Bogført eller Tilbageført, og altid for erstatningsbilag)

Teknisk flow, sideeffekter og ankre

Godkend AI-konteringen på et bilag

handling.kvitteringer.godkend-ai-kontering

Knappen Godkend AI-kontering skriver AI's kontoforslag ind på de linjer, der endnu ikke har en konto, uden at bogføre noget.

Hvem
tilladelse: vouchers.editrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter)modul: suppliers
Sådan gør man
  1. Åbn et bilag med flere linjer i cockpittets opmærksomhedsliste på forsiden.
  2. Står der Bilaget har flere linjer og konteres linje for linje, og AI har et forslag til nogle linjer, vises knappen Godkend AI-kontering.
  3. Tryk på den. Toasten siger Konto opdateret, og siden hentes igen.
  4. Bilaget er nu konteret, ikke bogført. Man bogfører det som næste skridt.
Fejl brugeren kan se
  • Bilaget kan ikke konteres i sin nuværende tilstand.422
  • Der var ingen linjer at kontere.
  • Kunne ikke gemme bilagap.vouchers.save_failed
Kan fortrydes
Ja. Kontoen på hver linje kan rettes bagefter med [[handling.kvitteringer.opdater-bilag]], så længe bilaget ikke er bogført.
Låser
Ruten afviser et bilag, der ikke kan bogføres. (når bilagets status ikke er bogførbar)

Teknisk flow, sideeffekter og ankre

Auto bogfør alle kvitteringer, der opfylder kravene

handling.kvitteringer.auto-bogfoer

Knappen Auto bogfør i cockpittet sender alle afventende kvitteringer, der har konto, høj sikkerhed og bekræftet bankmatch, til bogføring.

Hvem
tilladelse: vouchers.editrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter)modul: suppliers
Sådan gør man
  1. Åbn kvitteringsbunken i cockpittet på forsiden. Knappen Auto bogfør vises, når der er kvitteringer i bunken.
  2. Dialogen spørger Auto bogfør kvitteringer? og forklarer: Payfriend bogfører alle kvitteringer, der har en konto sat, er læst med høj sikkerhed og er matchet med en banktransaktion. Resten bliver liggende til gennemgang.
  3. Tryk Bogfør dem.
  4. Beskeden siger, hvor mange kvitteringer der er sendt til bogføring i baggrunden, og hvor mange der blev sprunget over.
Fejl brugeren kan se
  • Din konto er sat på pause. Kontakt support for at genoptage synkronisering.
  • Auto bogfør: ingen kvitteringer opfylder kravene (konto sat, høj sikkerhed og bekræftet bankmatch).
  • Bogføring fejlede.ap.vouchers.booking_failed
Kan fortrydes
Indtil, bilaget er bogført hos udbyderen. Efter bogføring bruges [[handling.kvitteringer.tilbagefoer]] pr. bilag. Der er ingen samlet fortryd.

Teknisk flow, sideeffekter og ankre

Læg et bilag på en banktransaktion

handling.kvitteringer.bank-upload-bilag

Fra Bank kan man slippe en fil på en transaktion, og PayFriend opretter et bilag, der er koblet til den med det samme.

Hvem
tilladelse: bank.reconcilerolle: Ejer, Admin og de roller, der har bank.reconcilemodul: suppliers
Sådan gør man
  1. Åbn Bank og find transaktionen uden bilag.
  2. Slip filen på transaktionen, eller vælg den, fra rækken eller fra afstemningspanelet.
  3. Siden viser, at filen læses, og spørger bagefter, om bilaget er matchet. Er det, kan rækken opdateres uden genindlæsning.
  4. Bilaget dukker også op i Kvitteringer med transaktionen koblet på.
Fejl brugeren kan se
  • Filen kunne ikke gemmes. Prøv igen.bank.flash.file_save_failed
  • Upload fejledereconciliation.match_panel.upload_failed
Kan fortrydes
Indtil, bilaget er bogført. Koblingen fjernes med [[handling.bankmatch.unlink-transaction]], og bilaget slettes med [[handling.kvitteringer.slet]].

Teknisk flow, sideeffekter og ankre

Bogfør et matchet bilag fra bankens afstemning

handling.kvitteringer.bank-bogfoer-bilag

Knappen Bogfør til regnskab i afstemningspanelet bogfører et bilag, der er matchet til en banktransaktion, uden at man forlader Bank.

Hvem
tilladelse: bank.reconcilerolle: Ejer, Admin og de roller, der har bank.reconcilemodul: suppliers
Sådan gør man
  1. Åbn Bank og afstemningen for en transaktion, der er matchet til et bilag.
  2. Kontrollér konto og eventuelt kladdenummer på bilagskortet.
  3. Tryk Bogfør til regnskab.
  4. Er posteringen lig en eksisterende postering i regnskabet, bliver man bedt om at bekræfte, før noget sendes.
  5. Beskeden siger, at bogføringen er startet, og at bilaget opdateres automatisk. Bagefter står der Bogført, eller Bogføring fejlet.
Fejl brugeren kan se
  • Bilaget er tilbageført og kan ikke bogføres igen.
  • Bilaget er konverteret til en regning og bogføres derfra.
  • Bilaget er allerede ved at blive bogført.
  • Lønbilag bogføres som en opdelt kassekladde og kan ikke bogføres som et almindeligt bilag. Godkend lønbilaget under Løn.
  • Banktransaktionen er stadig reserveret og ikke afregnet. Bilaget er gemt på transaktionen og bogføres automatisk, når banken frigiver beløbet.
  • Bogføring fejletreconciliation.match_panel.voucher_booking_failed
Kan fortrydes
Indtil, bilaget er bogført hos udbyderen. Efter bogføring bruges [[handling.kvitteringer.tilbagefoer]] fra Kvitteringer.
Låser
Bilaget kan ikke bogføres igen, mens det bogføres eller når det er tilbageført eller konverteret. (når status ikke er bogførbar)

Teknisk flow, sideeffekter og ankre

Opret et erstatningsbilag til en banktransaktion

handling.kvitteringer.bank-erstatningsbilag

I afstemningen kan man oprette et erstatningsbilag til en banktransaktion uden kvittering, og det kobles til transaktionen med det samme.

Hvem
tilladelse: bank.reconcilerolle: Ejer, Admin og de roller, der har bank.reconcilemodul: suppliers
Sådan gør man
  1. Åbn Bank og afstemningen for en transaktion uden kvittering.
  2. Vælg Erstatningsbilag. Panelet siger: Erstatningsbilag accepteres af SKAT når original kvittering ikke kan fremskaffes.
  3. Udfyld beskrivelse, begrundelse og eventuelt dato, beløb, moms og leverandør. Man kan oprette en ny leverandør direkte i formularen.
  4. Tryk Opret erstatningsbilag. Beskeden siger Erstatningsbilag oprettet og knyttet til transaktionen.
Fejl brugeren kan se
  • Kunne ikke oprette erstatningsbilag.reconciliation.lost_receipt.error
  • Bogføring kunne ikke startesdashboard.cockpit.book_failed
Kan fortrydes
Indtil, bilaget er bogført. Koblingen fjernes med [[handling.bankmatch.unlink-transaction]], og bilaget slettes med [[handling.kvitteringer.slet]].

Teknisk flow, sideeffekter og ankre

Erstat et eksisterende bilags fil med et erstatningsbilagdead

handling.kvitteringer.lav-erstatningsbilag-paa-bilag

Ruten kan lave et erstatningsbilag oven på et bilag, der allerede findes, men ingen skærm i appen kalder den.

Hvem
tilladelse: vouchers.editrolle: Ejer, Admin, Medlem og Bogholder (ikke Betragter)modul: suppliers
Sådan gør man
  1. Der er ingen knap i appen. Handlingen kan kun udløses ved at kalde ruten direkte.
Fejl brugeren kan se
  • Kan ikke ændre et bogført eller tilbageført bilag.422
  • Erstatningsbilag genereret.
Kan fortrydes
Nej. Den gamle fil slettes, og der er ingen route, der gendanner den.
Låser
Ruten afviser et bilag, der bogføres, er bogført eller er tilbageført. (når status er Bogfører, Bogført eller Tilbageført)

Teknisk flow, sideeffekter og ankre

Foreslå konto for ét bilag eller dets linjerdead

handling.kvitteringer.foreslaa-konti-paa-bilag

To ruter foreslår konto for ét bilag eller for hver linje, men ingen skærm i appen kalder dem.

Hvem
tilladelse: vouchers.editmodul: suppliers
Sådan gør man
  1. Ingen. Der er ingen knap eller menu, der sender forespørgslen. Kontoforslag på et enkelt bilag kommer i stedet fra scanningen og fra knappen AI foreslå konti i værktøjslinjen.
Fejl brugeren kan se
  • Bilag er allerede bogført.
Kan fortrydes
Nej. Ruterne kaldes ikke fra appen. Kaldes suggest-line-accounts alligevel med linjer, er de tidligere linjer slettet og oprettet igen, så ændringen kan kun rettes ved at skrive linjerne tilbage.

Teknisk flow, sideeffekter og ankre

Herfra er det teknisk

3

Livscyklus

Teknisk

Et bilags liv står i vouchers.status (tilstand.voucher.status). Hver pil er mærket med det handling- eller job-ID, der flytter bilaget. Vagterne, der kan stoppe en pil, står som links i tabellen under diagrammet.

handling.kvitteringer.bogfoerhandling.kvitteringer.bogfoerhandling.kvitteringer.bogfoerjob.book-voucherjob.book-voucherjob.book-voucherjob.book-voucherjob.vouchers-recover-stuck-bookingjob.book-voucherhandling.kvitteringer.tilbagefoerhandling.kvitteringer.tilbagefoerjob.scan-voucherpendingAfventerbookingBogførerbookedBogførtreversedTilbageførtfailedFejletscan_failedScanning fejletconvertedKonverteret til regning
FraTilUdløserVagter
pending Afventerbooking Bogfører...handling.kvitteringer.bogfoer
failed Fejletbooking Bogfører...handling.kvitteringer.bogfoer
scan_failed Scanning fejletbooking Bogfører...handling.kvitteringer.bogfoer
pending Afventerbooked Bogførtjob.book-voucher
booking Bogfører...booked Bogførtjob.book-voucher
booking Bogfører...pending Afventerjob.book-voucher
booking Bogfører...failed Fejletjob.book-voucher
booking Bogfører...failed Fejletjob.vouchers-recover-stuck-booking
booking Bogfører...converted Konverteret til regningjob.book-voucher
booked Bogførtreversed Tilbageførthandling.kvitteringer.tilbagefoer
booked Bogførtpending Afventerhandling.kvitteringer.tilbagefoer
pending Afventerscan_failed Scanning fejletjob.scan-voucherIngen vagter
kode: app/Enums/VoucherStatus.php · VoucherStatus::isBookablekode: app/Services/Ap/Booking/VoucherBookingFinisher.php · VoucherBookingFinisher::commit

Fra booked til pending sker kun, når udbyderen holdt en ubogført kladde, som vi slettede i stedet for at modpostere. Se tilstand.voucher.status for hele forklaringen. Et bilag, der står i booking i over 60 minutter, er hængt (faelde.kvitteringer.bilag-haenger-i-booking).

Journal-tilstand: bogført er ikke altid bogført

Sektion kaldt “Journal-tilstand: bogført er ikke altid bogført”

journal_state (tilstand.voucher.journal-state) står ved siden af status og svarer på et andet spørgsmål: nåede posteringen regnskabet, eller ligger den som kladde? Status forbliver booked for alle værdier, fordi der findes en postering hos udbyderen. Kolonnen er null ("ukendt"), indtil et bogføringsjob har svaret, og den nulstilles igen ved tilbageføring.

FraTilUdløserVagter
ukendt Ikke besvaretbooked Bogførtjob.book-voucher
ukendt Ikke besvaretdraft Kladdejob.book-voucher
ukendt Ikke besvaretfailed Fejletjob.book-voucher
ukendt Ikke besvaretunconfirmed Ubekræftetjob.book-voucher
unconfirmed Ubekræftetbooked Bogførtjob.book-voucher
unconfirmed Ubekræftetdraft Kladdejob.book-voucher
booked Bogførtukendt Ikke besvarethandling.kvitteringer.tilbagefoer
draft Kladdeukendt Ikke besvarethandling.kvitteringer.tilbagefoer
failed Fejletukendt Ikke besvarethandling.kvitteringer.tilbagefoer
unconfirmed Ubekræftetukendt Ikke besvarethandling.kvitteringer.tilbagefoer
kode: app/Enums/JournalState.php · JournalState::fromBookOutcome

Linsen er et filter oven på status. Chippen på siden og listen under den bruger samme vilkår for de to arbejdslinser, så tallet på chippen er det, listen viser.

LinseSvarer tilHvad et bilag skal opfylde
Skal behandlesscope=needsStatus er pending, booking, failed eller scan_failed, og mindst ét af: journal_state er sat, regnskabsår mangler, bilagsnummer i regnskabet mangler, eller banklinje mangler. Et provider_sync-bilag uden linjer er udeladt.
Klar til bogføringscope=readyStatus er pending, bilaget har en banklinje, mindst ét af journal_state sat, regnskabsår mangler eller bilagsnummer mangler, og kontoen er på plads (udgiftskonto, enkeltlinjekonto, eller ingen linje uden konto).
Alleintet scopeIngen linsevilkår. Listens egen synlighed gælder stadig.
Fejletstatus=failedLinsen vælges af statusfilteret, ikke af et scope. Klienten viser den, når status er failed.
kode: app/Services/Ap/Concerns/VoucherWorkLenses.php · VoucherWorkLenses::applyNeedsLenskode: app/Services/Ap/Concerns/VoucherWorkLenses.php · VoucherWorkLenses::applyReadyLenskode: app/Services/Ap/Concerns/BuildsVoucherFilteredListQuery.php · BuildsVoucherFilteredListQuery::applyScopeFilterkode: resources/js/Pages/Dashboard/Vouchers/hooks/useVoucherListState.tsx · useVoucherListState

De gamle scope-værdier attention og handled oversættes af serveren til en query. attention er statusserne pending, booking, failed og scan_failed uden provider_sync-bilag uden linjer og uden bilag, der dokumenterer en eksisterende postering. handled er booked og reversed samt bilag, der dokumenterer en eksisterende postering. Klienten lader attention tænde linsen Skal behandles og handled linsen Klar til bogføring, men de to sæt er ikke de samme som linsernes. Se faelde.kvitteringer.gammel-scope-viser-forkert-linse.

Hvorfor et bilag ikke kan bogføres endnu

Sektion kaldt “Hvorfor et bilag ikke kan bogføres endnu”

Blokeringerne (tilstand.voucher.book-blocker) er ikke en gemt tilstand. De beregnes af bogføringstjekket og skrives som tekst i booking_error, når en vagt sender bilaget tilbage til Afventer.

CaseHvad brugeren serHvad brugeren gørKan Bogfør tvinge den?
no_active_integrationIngen aktiv bogføringsintegrationFå en aktiv bogføringsintegration på plads, og bogfør igen. Kan ikke afhjælpes i bilaget.Ja, med force
provider_unsupportedBogføring understøttes ikke for udbyderenUdbyderen understøttes ikke for bogføring herfra. Bogfør i regnskabssystemet, eller spørg PayFriend.Ja, med force
no_linesBilaget har ingen linjerTilføj mindst én linje på bilaget, eller scan bilaget igen.Ja, med force
missing_amountBilaget mangler beløb. Udfyld beløbet, eller scan bilaget igen.Udfyld beløbet, eller scan bilaget igen.Nej, stopper altid
line_missing_accountEn eller flere linjer mangler kontoVælg konto på hver linje.Ja, med force
vat_account_missingKontoen mangler momskodeVælg en konto, der har en momskode, eller sæt momskoden på kontoen.Ja, med force
vat_codes_unavailableRegnskabssystemet oplyser ingen momskoder på kontoplanen. Bogfør manuelt, hvis momsen er håndteret.Regnskabssystemet oplyser ingen momskoder. Bogfør manuelt, hvis momsen er håndteret.Ja, med force
missing_contra_accountIngen modkonto/udgiftskonto valgtVælg modkonto eller udgiftskonto.Ja, med force
bank_connection_unmappedVælg bogføringskonto på bankforbindelsenVælg bogføringskonto på bankforbindelsen.Ja, med force
low_confidenceOCR-sikkerhed under 90%Gennemse bilagets felter og bekræft dem. Et menneske kan bogføre med force.Ja, med force
vat_unconfirmedMomssats ikke bekræftet – gennemse og gem bilagetGennemse momssatsen og gem bilaget.Ja, med force
duplicate_flaggedMuligt dublet – risiko for dobbeltbetaling. Afvis dubletmarkeringen for at bogføre.Afvis dubletmarkeringen, hvis bilaget ikke er en dublet. Ellers lad det blive.Nej, stopper altid
already_booked_pre_cutoverAllerede bogført i regnskabet – transaktionen ligger før skæringsdatoen, så bogføring ville dobbeltbogføre udgiften.Lad bilaget stå. Udgiften er bogført i regnskabet før skæringsdatoen.Nej, stopper altid
documents_existing_entryAllerede bogført i regnskabet – bilaget er uploadet til en eksisterende postering, så bogføring ville oprette en ny.Lad bilaget dokumentere den eksisterende postering. Det skal ikke bogføres igen.Nej, stopper altid
pending_settlementBanktransaktionen er stadig reserveret og ikke afregnet. Bilaget er gemt på transaktionen og bogføres automatisk, når banken frigiver beløbet.Vent. Bilaget bogføres automatisk, når banken frigiver beløbet.Nej, stopper altid
bank_ledger_already_postedBanklinjen er allerede bogført i regnskabet på bankkontoen, så bogføring ville poste den samme betaling to gange. Fjern posteringen i regnskabet, eller lad bilaget blive hvor det er.Fjern posteringen i regnskabet, eller lad bilaget blive hvor det er.Nej, stopper altid
awaiting_bill_decisionBilaget ligner en regning, og du har ikke valgt endnu. Vælg "Flyt til Regninger" eller "Behold som kvittering", før det bogføres automatisk. Du kan stadig bogføre det manuelt.Vælg Flyt til Regninger eller Behold som kvittering. Manuel bogføring er stadig mulig.Ja, med force
department_missingVælg afdeling – påkrævet for bogføring i e-conomic.Vælg afdeling. Kræves for bogføring i e-conomic.Ja, med force
project_missingVælg projekt – påkrævet for bogføring.Vælg projekt. Kræves for bogføring.Ja, med force

Kilden er Bogførings-blokeringer. Blokeringen er ikke en gemt tilstand: den beregnes, og teksten skrives i booking_error.

Herfra er det teknisk

4

Hvor kommer data fra

Teknisk

Et bilag kommer ind ad ni kanaler. Hver boks er en kanal og linker til dens afsnit på domænesiden domaene.bilagsindgang. Job, tidsplaner, tabeller og indgangskilder står dér og gentages ikke her.

ingen bilagafregning, ikke bilagnedgraderer bilag1 Gmail, Outlook og IMAP2 Postmark og rentekst-mail3 Manuel upload og hentved kilden4 Digital Post og e-Boks5 Overførselsservice, ikkebilag6 provider_pull ogprovider_sync7 Løn8 Stripe-afregninger9 Rydning vedafstemningsstartKvitteringer

Den stiplede pil er en kanal, der ikke giver et nyt bilag på siden. Hele kanalbeskrivelsen og målingerne pr. indgangskilde står på domaene.bilagsindgang.

Herfra er det teknisk

5

Adgang

Teknisk

Hvem der må hvad på Kvitteringer afgøres i fire led: rutegruppens porte, modulet, planen og rollens tilladelser. Alle fire skal være åbne, før en handling virker.

Matricen er rolle.kvitteringer, læst fra GrantPreservationMap og PermissionRegistry. En rute kræver én tilladelse via permission:-middleware i routes/dashboard/vouchers.php.

Rollevouchers.viewvouchers.createvouchers.editvouchers.deletevouchers.export
EjerJaJaJaJaJa
AdminJaJaJaJaJa
MedlemJaJaJaNejNej
BetragterJaNejNejNejNej
BogholderJaJaJaNejNej
BilagsansvarligNejNejNejNejNej
  • Medlem, vouchers.export: E3: export er kun ejer og admin.
  • Betragter, vouchers.export: E3: export er kun ejer og admin.
  • Bogholder, vouchers.export: E3: export er kun ejer og admin. Bogholder har ikke vouchers.export.
  • Bilagsansvarlig, vouchers.view: Tom skabelon. Rollen logger ikke ind.
TilladelseRutegruppeHvad den åbner
vouchers.viewSeListen, bilaget, filen, drawer-detaljer og posteringsforhåndsvisningen
vouchers.createOpretUpload (enkelt og flere), erstatningsbilag, Mangler bilag (upload og afvis) og Hent ved kilden
vouchers.editRetBogfør (enkelt og flere), Auto bogfør, Automatch, AI foreslå konti, ret felter, periodisering, bankmatch (kobl og fjern), scan igen, flyt til Regninger og tilbagefør
vouchers.deleteSletSlet og slet flere. Tilbagefør hører under vouchers.edit, så en bogholder kan rette uden at kunne slette
vouchers.exportEksportEksportér CSV. Kun ejer og admin

To handlinger kræver en tilladelse uden for vouchers.*: lønbogføring kræver payroll.manage (handling.kvitteringer.loenbogfoering), og opret leverandør kræver payables.create (handling.kvitteringer.opret-leverandoer).

Rutegruppen i routes/dashboard.php kræver, før nogen tilladelse spørges: auth, verified, two-factor, company, company.not-suspended, master.to.enterprise, enterprise.sub_active, onboarding.complete, subscription.active og permission.team. I klartekst: man skal være logget ind med bekræftet e-mail og 2FA, have et aktivt firma, der ikke er suspenderet (et suspenderet firma kan stadig læse), være igennem onboarding og have et gyldigt abonnement. Bureaupersonale sendes hjem af master.to.enterprise.

Alle ruter med navn vouchers.* er gatet af modulet suppliers i EnforceModuleAccess (samme modul som Regninger og Leverandører). Er modulet slået fra for firmaet, svarer ruten 403. Er det skjult af launch-mekanismen, sendes brugeren tilbage til dashboardet med beskeden "Dette modul er ikke tilgængeligt i denne version." suppliers er ikke i launch-skjulets default.

Andre moduler gater de ruter, der kaldes fra Kvitteringer, men ligger andre steder: bank.* kræver modulet bank, email-bilag.* kræver email_bilag, og payroll.* kræver payroll.

Planen stopper kun gratis-planen: efter 25 behandlede bilag i alt (BilagIntakeGuard) afvises nye bilag, og brugeren får opgraderingsdialogen. Start og Pro har månedlige lofter, men de er ikke et hårdt stop. Firmaer med paywall_exempt har ingen grænse. Upload, flere filer, erstatningsbilag, Mangler bilag-upload og Hent ved kilden spørger vagten, og tællingen er ens for alle indgange (se faelde.bilagsindgang.quota-blocked-uden-udgang og faelde.bilagsindgang.kvote-afvisning-ligner-dublet).

Disse felter skrives kun i admin-appen (CompaniesController::update), aldrig af kunden:

Herfra er det teknisk

6

Indstillinger

Teknisk

Alle indstillinger, der påvirker siden, genereret fra katalogen. Kolonnen Ændres viser stien i appen, når en kunde selv kan ændre den, ellers at kun PayFriend kan. Rækker med status drift eller inert er fremhævet.

IndstillingNiveauÆndresDefaultEffektStatus
Pause for bogføring
accounting_writes_paused_at
companyAutomatisering · AutomatiseringingenEt tidspunkt i kolonnen får AccountingWriteGate til at afvise automatiske skrivninger, indtil kunden starter igen.live
AI Monthly Token Budget
ai_monthly_token_budget
companyKun PayFriend adminingenNår månedens tokens når loftet, afviser AI foreslå konti og de andre tjekkende funktioner nye kørsler.live
Differencekonto
difference_account_code
companyIndstillinger, BankingenUden en konto bogføres differencen ikke automatisk, heller ikke når den ligger inden for tolerancen.live
Difference-tolerance i kroner
difference_tolerance_amount
companyIndstillinger, Bank50En difference inden for båndet kan bogføres på differencekontoen. En større difference bogføres ikke automatisk.live
Difference-tolerance i procent
difference_tolerance_percent
companyIndstillinger, Bank0.005isDifferenceWithinTolerance bruger den mindste af kronegrænsen og procentgrænsen.live
Hent bilag hos kilden
fetch_at_source_channels
companyIndstillinger, Indbakke · Indstillinger, IndbakkeingenEn kanal på listen vises som aktiv i indbakken og hentes hos kilden.live
Automatiske regninger fra mail
inbox_auto_create_regning_enabled
companyIndstillinger, IndbakketrueEn mail bliver kun til en regning, når både dette flueben og modulet email-bilag er tændt.live
Forslagsbånd i kroner
match_tolerance_amount
companyIndstillinger, Bank50Båndet styrer forslag. Det bogfører ikke en difference af sig selv.live
Forslagsbånd i procent
match_tolerance_percent
companyIndstillinger, Bank0.02Det smalleste af kronegrænsen og procentgrænsen gælder, når begge er sat.live
Modul-overrides
module_overrides
companyKun PayFriend adminingenEt eksplicit false skjuler slug'en, og et eksplicit true viser den, også når launch-skjulet siger noget andet.live
Suppliers & AP
module_suppliers_enabled
companyKun PayFriend admintrueLeverandør- og bilagsmodulet kan tvinges fra for firmaet.live
Bogfør lønbilag automatisk
payroll_auto_book_enabled
companyLøn, IndstillingerfalseNår fluebenet er tændt, må en godkendt lønkørsel bogføres uden et ekstra klik, hvis lønkontiene er mappet.live
Paywall exempt
paywall_exempt
companyKun PayFriend adminfalseEt fritaget firma bliver ikke stoppet af gratis-planens loft på 25 bilag.live
Automatisk godkendelse af afstemning
reconciliation_auto_approve_enabled
companyIndstillinger, BanktrueNår fluebenet er slået fra, bliver matches kun vist til manuel gennemgang.live
Minimumssikkerhed for auto-godkendelse
reconciliation_auto_approve_min_confidence
companyIndstillinger, Bank0.9Et udgiftsmatch under tallet bliver ikke auto-godkendt, selvom automatisk godkendelse er tændt.live
Godkendelsesgrænse
reconciliation_auto_approve_threshold
companyIndstillinger, Bank5SupplierProfileMatcher kræver mindst så mange bekræftelser, før en profil må auto-anvendes.live
Auto-bogfør OCR-bilag
voucher_auto_book_enabled
companyKun PayFriend adminfalseNår fluebenet og det globale kill switch begge er tændt, bogfører politikken bilag over konfidens-tærsklen uden et klik.drift
Konfidens for auto-bogføring
voucher_auto_book_min_confidence
companyKun PayFriend admin0.95Politikken bogfører ikke, når bilagets OCR-konfidens ligger under tallet.live
Automatisk bankmatch
voucher_auto_match_enabled
companyIndstillinger, IndbakketrueNår fluebenet er slået fra, forsøger VoucherAutoMatcher ikke at knytte bilaget til en banklinje.live
Automatiske bilag fra mail
voucher_auto_promote_enabled
companyIndstillinger, IndbakketruePromoveringen opretter kun bilag, når både dette flueben og modulet email-bilag er tændt.live
Mindste bankmatch ved auto-bilag
voucher_auto_promote_min_confidence
companyKun PayFriend70Et 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.live
ACCOUNT_HISTORY_MIN_MATCHES
ACCOUNT_HISTORY_MIN_MATCHES
envKun PayFriend2Mindste antal historiske posteringer før et kontoforslag må bruges, og kun PayFriend kan ændre det.live
ACCOUNT_HISTORY_MIN_SHARE
ACCOUNT_HISTORY_MIN_SHARE
envKun PayFriend0.7Mindste andel af historikken der skal pege på samme konto, og kun PayFriend kan ændre den.live
ACCOUNT_SUGGESTION_MIN_CONFIDENCE
ACCOUNT_SUGGESTION_MIN_CONFIDENCE
envKun PayFriend0.8Mindste konfidens før et kontoforslag må følge med i bogføringen, og kun PayFriend kan ændre den.live
ACCOUNTING_AUTO_BOOK_ENABLED
ACCOUNTING_AUTO_BOOK_ENABLED
envKun PayFriendtrueGlobalt kill switch for auto-bogføring af bilag, og kun PayFriend kan ændre det.live
ACCOUNTING_VOUCHER_PRUNE_ABORT_RATIO
ACCOUNTING_VOUCHER_PRUNE_ABORT_RATIO
envKun PayFriend0.25Andel af bogførte bilag der må mangle i regnskabet, før oprydningen afbrydes, og kun PayFriend kan ændre den.live
ECONOMIC_PAYABLES_MAX_RECONCILIATION_RATIO
ECONOMIC_PAYABLES_MAX_RECONCILIATION_RATIO
envKun PayFriend1.2Højeste forhold mellem lokal og e-conomic-kreditorpost før synk stopper, og kun PayFriend kan ændre det.live
OCR_BASELINE_MIN_COMPANY_READS
OCR_BASELINE_MIN_COMPANY_READS
envKun PayFriend20Mindste antal OCR-læsninger på firmaet før eskalering må sammenligne med baseline, og kun PayFriend kan ændre det.live
OCR_BASELINE_MIN_SUPPLIER_READS
OCR_BASELINE_MIN_SUPPLIER_READS
envKun PayFriend5Mindste antal OCR-læsninger på leverandøren før eskalering må sammenligne med baseline, og kun PayFriend kan ændre det.live
OCR_ESCALATE_BELOW_CONFIDENCE
OCR_ESCALATE_BELOW_CONFIDENCE
envKun PayFriend0.85OCR-konfidens under dette tal kan sende dokumentet til et dyrere pas, og kun PayFriend kan ændre det.live
OCR_ESCALATE_BELOW_MEDIAN
OCR_ESCALATE_BELOW_MEDIAN
envKun PayFriend0.15Hvor langt under leverandørens median en OCR-konfidens skal ligge, før dokumentet eskaleres, og kun PayFriend kan ændre det.live
OCR_MAX_GARBLED_RATIO
OCR_MAX_GARBLED_RATIO
envKun PayFriend0.1Højeste andel ulæselige tegn før en PDF-tekst kasseres, og kun PayFriend kan ændre den.live
OCR_MAX_PASSES
OCR_MAX_PASSES
envKun PayFriend2Højeste antal OCR-pas pr. dokument, og kun PayFriend kan ændre det.live
OCR_MIN_TEXT_CHARS
OCR_MIN_TEXT_CHARS
envKun PayFriend100Mindste antal tegn i udtrukket PDF-tekst før siden regnes for læsbar, og kun PayFriend kan ændre det.live
OCR_MIN_TEXT_DENSITY
OCR_MIN_TEXT_DENSITY
envKun PayFriend0.005Mindste tegntæthed på siden før PDF-teksten regnes for læsbar, og kun PayFriend kan ændre den.live
RECONCILIATION_AMOUNT_TOLERANCE_MAX
RECONCILIATION_AMOUNT_TOLERANCE_MAX
envKun PayFriend10Største beløbsforskel i kroner et udgiftsmatch må kalde inden for tolerance, og kun PayFriend kan ændre den.live
RECONCILIATION_AUTO_APPLY_THRESHOLD
RECONCILIATION_AUTO_APPLY_THRESHOLD
envKun PayFriend0.85Konfidens et match skal nå, før afstemningen må linke uden et klik, og kun PayFriend kan ændre den.live
RECONCILIATION_EXPENSE_DATE_DECAY_FLOOR
RECONCILIATION_EXPENSE_DATE_DECAY_FLOOR
envKun PayFriend0.7Hvor stor en del af strategi-konfidensen et udgiftsmatch beholder på kanten af datovinduet, og kun PayFriend kan ændre den.live
RECONCILIATION_EXPENSE_DATE_FULL_SCORE_BILL_DAYS
RECONCILIATION_EXPENSE_DATE_FULL_SCORE_BILL_DAYS
envKun PayFriend7Dage en regning må ligge fra banklinjen og stadig få fuld datokonfidens, og kun PayFriend kan ændre dem.live
RECONCILIATION_EXPENSE_DATE_FULL_SCORE_VOUCHER_DAYS
RECONCILIATION_EXPENSE_DATE_FULL_SCORE_VOUCHER_DAYS
envKun PayFriend3Dage en kvittering må ligge fra banklinjen og stadig få fuld datokonfidens, og kun PayFriend kan ændre dem.live
RECONCILIATION_EXPENSE_DATE_WINDOW_BILL_DAYS
RECONCILIATION_EXPENSE_DATE_WINDOW_BILL_DAYS
envKun PayFriend30Hvor langt en regning må ligge fra banklinjen, før datostyrede strategier ikke tilbydes, og kun PayFriend kan ændre det.live
RECONCILIATION_EXPENSE_DATE_WINDOW_VOUCHER_DAYS
RECONCILIATION_EXPENSE_DATE_WINDOW_VOUCHER_DAYS
envKun PayFriend14Hvor langt en kvittering må ligge fra banklinjen, før datostyrede strategier ikke tilbydes, og kun PayFriend kan ændre det.live
RECONCILIATION_EXPLANATION_WINDOW_DAYS
RECONCILIATION_EXPLANATION_WINDOW_DAYS
envKun PayFriend14Hvor mange dage match-forklaringer gemmes, målt på bilagets oprettelse, og kun PayFriend kan ændre det.live
RECONCILIATION_MERCHANT_FX_MARGIN_TOLERANCE
RECONCILIATION_MERCHANT_FX_MARGIN_TOLERANCE
envKun PayFriend0.05Hvor stor en kursmargen et kortkøb må have og stadig tælle som samme betaling, og kun PayFriend kan ændre den.live
RECONCILIATION_NAME_SIMILARITY_AUTO
RECONCILIATION_NAME_SIMILARITY_AUTO
envKun PayFriend1Navnelighed der kræves, før et navnematch må bogføres uden klik, og kun PayFriend kan ændre den.live
RECONCILIATION_NAME_SIMILARITY_SUGGEST
RECONCILIATION_NAME_SIMILARITY_SUGGEST
envKun PayFriend0.65Navnelighed der kræves, før et navnematch må foreslås, og kun PayFriend kan ændre den.live
RECONCILIATION_SUPPLIER_PROFILE_STALENESS_DAYS
RECONCILIATION_SUPPLIER_PROFILE_STALENESS_DAYS
envKun PayFriend180Dage en leverandørprofil må stå ubekræftet, før den ikke længere auto-anvendes, og kun PayFriend kan ændre dem.live
SALARY_RECONCILIATION_DATE_WINDOW
SALARY_RECONCILIATION_DATE_WINDOW
envKun PayFriend3Dage en lønudbetaling må ligge fra banklinjen og stadig matches, og kun PayFriend kan ændre dem.live
SALARY_RECONCILIATION_SPLIT_WINDOW
SALARY_RECONCILIATION_SPLIT_WINDOW
envKun PayFriend7Dage løndele må ligge fra hinanden og stadig høre til samme kørsel, og kun PayFriend kan ændre dem.live
SUPPLIER_PROFILE_VAT_MIN_MATCHES
SUPPLIER_PROFILE_VAT_MIN_MATCHES
envKun PayFriend2Mindste antal historiske linjer før en momskode må foreslås fra leverandørprofilen, og kun PayFriend kan ændre det.live
SUPPLIER_PROFILE_VAT_MIN_SHARE
SUPPLIER_PROFILE_VAT_MIN_SHARE
envKun PayFriend0.8Mindste andel af historikken der skal have samme momskode, og kun PayFriend kan ændre den.live
Bilagsorakel klar
bilag_oracle_ready_at
systemKun PayFriendingenManglende bilag for e-conomic, Dinero, Billy og Business Central vises først, når både dette stempel og kontoplan-stemplet er sat.live

Herfra er det teknisk

7

Regler

Teknisk

Alle regler, der gælder siden, genereret fra katalogen, nummereret på tværs af grupperne.

Indtag (10)

Nr.RegelVærdiSkalaKan overstyres af
1OCR-gulv for auto-bilag
Gulvet er 0,85.
0.85 andel0-1Ingen
2OCR ved stærk bankmatch
Det sænkede gulv er 0,70.
0.7 andel0-1Ingen
3OCR-gulv for automatisk regning
Gulvet er 0,85.
0.85 andel0-1Ingen
4Stærk bankmatch
Grænsen er 85 point.
85 point0-100Ingen
5Lookback for push
Lookback er 14 dage.
14 dagedageIngen
6Push pr. firma
Loftet er 5.
5 bilagantalIngen
7Cache på tallet for manglende bilag
Antallet af manglende bilag pr. selskab caches i 5 minutter, og cachen tømmes ved afvisning, upload og bogføring.
5 minutterminutterIngen
8Gratis-planens loft
Loftet er 25 bilag.
25 bilagbilag i altindstilling.company.paywall-exempt
9Oprydning stopper
Grænsen er 0,25.
0.25 andel0-1indstilling.env.accounting-voucher-prune-abort-ratio
10Konfidens på et erstatningsbilag
Et oprettet erstatningsbilag stemples med konfidens 1,00, så det regnes for færdigt og kan bogføres.
1 andel0-1Ingen

OCR og kontering (30)

Nr.RegelVærdiSkalaKan overstyres af
11Blandet momssats
Båndet er 0,5 procentpoint.
0.5 procentpointprocentpointIngen
12Standardmoms
Satsen er 25 procent.
25 procentprocentIngen
13Linjebeløb
Tolerancen er 0,015.
0.015 beløbabsolutIngen
14Bruttoanker
Tolerancen er 0,05.
0.05 beløbabsolutIngen
15Momskontrol
Tolerancen er 0,02.
0.02 beløbabsolutIngen
16Laveste konfidens for et historikforslag
Konfidensen for et historikforslag er mindst 0,85, uanset hvor tæt andelen ligger på gulvet.
0.85 andel0-1Ingen
17Højeste konfidens for et historikforslag
Konfidensen for et historikforslag er højst 0,97, også når hele historikken peger på samme konto.
0.97 andel0-1Ingen
18Historik, andel
Andelen er 0,70.
0.7 andel0-1indstilling.env.account-history-min-share
19Historik, antal
Antallet er 2.
2 posteringerantalindstilling.env.account-history-min-matches
20Kontoforslag
Gulvet er 0,80.
0.8 andel0-1indstilling.env.account-suggestion-min-confidence
21Momskode, andel
Andelen er 0,80.
0.8 andel0-1indstilling.env.supplier-profile-vat-min-share
22Momskode, antal
Antallet er 2.
2 linjerantalindstilling.env.supplier-profile-vat-min-matches
23Loft for AI foreslå konti
Et tryk lægger SuggestVoucherAccountsJob i kø for de 200 nyeste afventende bilag uden konto, og resten venter til næste tryk.
200 bilagantalIngen
24Navnelighed for uklar leverandørmatch
Fuzzy-trinnet kræver mindst 75 procents lighed mellem OCR-navnet og et eksisterende leverandørnavn.
75 procent0-100Ingen
25Afstand til en gyldig momssats
Tolerancen er 0,5 procentpoint. Længere væk bliver satsen stående som blanding, og over 25 procent bliver den 25.
0.5 procentpointprocentpointIngen
26Navn, auto
Default er 1.
1 andel0-1indstilling.env.reconciliation-name-similarity-auto
27Navn, forslag
Default er 0,65.
0.65 andel0-1indstilling.env.reconciliation-name-similarity-suggest
28Baseline, firma
Gulvet er 20.
20 læsningerantalindstilling.env.ocr-baseline-min-company-reads
29Baseline, leverandør
Gulvet er 5.
5 læsningerantalindstilling.env.ocr-baseline-min-supplier-reads
30Eskaler under konfidens
Gulvet er 0,85.
0.85 andel0-1indstilling.env.ocr-escalate-below-confidence
31Eskaler under median
Fradraget er 0,15.
0.15 andel0-1indstilling.env.ocr-escalate-below-median
32Konfidens for en kreditnota
Klassifikationen svarer credit_note med konfidens 0,95, uden at spørge modellen, når dokumentet bærer kreditnota-mærker.
0.95 andel0-1Ingen
33Svarloft for udlæsningen
Loftet er 16.384 output-tokens pr. udlæsning, og tænkning er slået fra, så hele loftet går til svaret.
16384 tokenstokensIngen
34OCR-pas
Loftet er 2.
2 pasantalindstilling.env.ocr-max-passes
35Største fil til billedlæsning
Grænsen er 30 MiB base64-kodet, hvilket svarer til en fil på omkring 22,5 MiB.
31457280 bytesbytes efter base64Ingen
36Mindste resttid før et nyt kald
Et nyt kald til modellen startes kun, hvis der er mindst 10 sekunder tilbage af tidsbudgettet.
10 sekundersekunderIngen
37Teksttæthed
Gulvet er 0,005.
0.005 tæthed0-1indstilling.env.ocr-min-text-density
38Læsbare tegn
Gulvet er 100 tegn.
100 tegntegnindstilling.env.ocr-min-text-chars
39Ulæselige tegn
Loftet er 0,10.
0.1 andel0-1indstilling.env.ocr-max-garbled-ratio
40Tidsbudget for én udlæsning
Budgettet er 165 sekunder pr. udlæsning, og det deles af alle kald i udlæsningen, også en eskalering til den dyre model.
165 sekundersekunderIngen

Match (49)

Nr.RegelVærdiSkalaKan overstyres af
41Beløbstolerance, loft
Loftet er 10 kroner.
10 kronerkronerindstilling.env.reconciliation-amount-tolerance-max
42Datogulv
Gulvet er 0,70.
0.7 andel0-1indstilling.env.reconciliation-expense-date-decay-floor
43Datovindue, kvittering
Vinduet er 14 dage.
14 dagedageindstilling.env.reconciliation-expense-date-window-voucher-days
44Datovindue, regning
Vinduet er 30 dage.
30 dagedageindstilling.env.reconciliation-expense-date-window-bill-days
45Difference, kroner
Default er 50 kroner.
50 kronerkronerindstilling.company.difference-tolerance-amount
46Difference, andel
Default er 0,005.
0.005 andel0-1indstilling.company.difference-tolerance-percent
47Forklaringer
Vinduet er 14 dage.
14 dagedageindstilling.env.reconciliation-explanation-window-days
48Forslag, kroner
Default er 50 kroner.
50 kronerkronerindstilling.company.match-tolerance-amount
49Forslag, andel
Default er 0,02.
0.02 andel0-1indstilling.company.match-tolerance-percent
50Fuld score, kvittering
Båndet er 3 dage.
3 dagedageindstilling.env.reconciliation-expense-date-full-score-voucher-days
51Fuld score, regning
Båndet er 7 dage.
7 dagedageindstilling.env.reconciliation-expense-date-full-score-bill-days
52Godkendelsesgrænse
Default er 5.
5 bekræftelserantalindstilling.company.reconciliation-auto-approve-threshold
53Kursmargen
Margen er 0,05.
0.05 andel0-1indstilling.env.reconciliation-merchant-fx-margin-tolerance
54Minimumssikkerhed
Default er 0,90.
0.9 andel0-1indstilling.company.reconciliation-auto-approve-min-confidence
55Profilens levetid
Default er 180 dage.
180 dagedageindstilling.env.reconciliation-supplier-profile-staleness-days
56Aliaspoint i e-mail-armen
Højst 30 point for et alias.
30 point0-100Ingen
57Beløbspoint i e-mail-armen
Op til 40 point for beløbet.
40 point0-100Ingen
58Datopoint i e-mail-armen
Op til 20 point for datoen.
20 point0-100Ingen
59Datovindue for bankmatch
Vinduet er 30 dage.
30 dagedageIngen
60Beløbsbånd for kandidater
Båndet er plus/minus 10 %.
10 procentprocentIngen
61Korroboration på 7 dage
Vinduet er 7 dage.
7 dagedageIngen
62Mindste bankmatch
Scoren skal være mindst 70.
70 point0-100indstilling.company.voucher-auto-promote-min-confidence
63Navnepoint i e-mail-armen
Højst 28 point for navnet, ét trin ad gangen.
28 point0-100Ingen
64Korteste navnestump
Stumpen er mindst 5 tegn.
5 tegntegnIngen
65Grænse pr. firma og time
Grænsen er 500 bilag.
500 bilagantalIngen
66Samme køb
Afstanden er højst 21 dage.
21 dagedageIngen
67Loft på e-mail-scoren
Scoren er højst 100.
100 point0-100Ingen
68Sweepets vindue for eksakt beløb
Vinduet er 90 dage.
90 dagedageIngen
69Sweepets navnelighed
Navnelighed er mindst 0,70.
0.7 andel0-1Ingen
70Unikt beløb
Forslaget ligger på 60 point, under mindste bankmatch.
60 point0-100Ingen
71Loft når betaleren hører til en anden faktura
Loftet er 0,75.
0.75 andel0-1Ingen
72Auto-link
Tærsklen er 0,85.
0.85 andel0-1indstilling.env.reconciliation-auto-apply-threshold
73Strategier der må auto-matche på udgiftssiden
Antallet af auto-tilladte strategier er 5.
5 strategierantalindstilling.company.reconciliation-auto-approve-enabled
74Eksakt beløb
Konfidensen er 0,85.
0.85 andel0-1Ingen
75Beløb inden for tolerance
Konfidensen er 0,70.
0.7 andel0-1Ingen
76Loft når betalernavnet modsiger
Loftet er 0,75.
0.75 andel0-1Ingen
77Unikt bilagsbeløb
Konfidensen er 0,80.
0.8 andel0-1Ingen
78Bilagsnavn
Konfidensen er 0,70.
0.7 andel0-1Ingen
79Loft for forfaldent vindue
Loftet er 0,75.
0.75 andel0-1Ingen
80Loft på historisk backfill
Loftet er 0,75.
0.75 andel0-1Ingen
81Indkomst: beløb og dato
Strategien amount_and_date scorer 0,85.
0.85 andel0-1Ingen
82Indkomst: beløb og modpart
Strategien amount_and_counterparty scorer 0,75.
0.75 andel0-1Ingen
83Indkomst: svagt fakturanummer
Strategien invoice_number_weak scorer 0,55.
0.55 andel0-1Ingen
84Indkomst: tekstsøgning
Strategien description_search scorer 0,6.
0.6 andel0-1Ingen
85Loft ved krydsvaluta
Loftet er 0,75.
0.75 andel0-1Ingen
86Leverandørnavn
Konfidensen er 0,85.
0.85 andel0-1Ingen
87Aliasandel for en stærk leverandørprofil
Andelen er mindst 0,9.
0.9 andel0-1indstilling.company.reconciliation-auto-approve-threshold
88Reference, eksakt
Den levende værdi er 0,99.
0.99 andel0-1Ingen
89Reference, fallback
Fallback er 0,95.
0.95 andel0-1Ingen

Bogføring (37)

Nr.RegelVærdiSkalaKan overstyres af
90Auto-bogføring: kræver bekræftet bankmatch
Der skal findes en bank_transaction_matches-række for netop dette bilag. At bank_transaction_id er sat, er ikke nok.
1 vagt0-1, hvor 1 er altid slået tilIngen
91Auto-bogføring: ingen bogførbarheds-blokering
VoucherBookabilityChecker::check skal give bookable. Blokeringerne er listet under tilstanden for bogførings-blokeringer.
1 vagt0-1, hvor 1 er altid slået tilIngen
92Auto-bogføring: selskabets eget flueben
voucher_auto_book_enabled skal være sand. Default er falsk.
1 vagt0-1, hvor 1 er altid slået tilindstilling.company.voucher-auto-book-enabled
93Auto-bogføring: globalt flag
Er flaget slukket, siger politikken nej for alle selskaber. Default i config er tændt.
1 vagt0-1, hvor 1 er altid slået tilindstilling.env.accounting-auto-book-enabled
94Auto-bogføring: ikke mens regning-eller-kvittering er ubesvaret
awaitsSupplierInvoiceDecision skal være falsk.
1 vagt0-1, hvor 1 er altid slået tilIngen
95Auto-bogføring: ikke en markeret dublet
duplicate_of_id skal være tom.
1 vagt0-1, hvor 1 er altid slået tilIngen
96Auto-bogføring: ikke hent-ved-kilden
Indgangskilden må ikke være en hent-ved-kilden-kilde.
1 vagt0-1, hvor 1 er altid slået tilIngen
97Auto-bogføring: ikke lønbilag
isPayrollJournal skal være falsk.
1 vagt0-1, hvor 1 er altid slået tilIngen
98Auto-bogføring: en konto på hver linje
Bilaget skal have mindst én linje, og ingen linje må mangle kontonummer.
1 vagt0-1, hvor 1 er altid slået tilIngen
99Auto-bogføring: linjerne skal give totalen
LineTotalDiscrepancy::forVoucher skal give null, altså ingen afvigelse ud over afrunding.
1 vagt0-1, hvor 1 er altid slået tilIngen
100Auto-bogføringens konfidens
Default er 0,95.
0.95 andel0-1indstilling.company.voucher-auto-book-min-confidence
101Auto-bogføring: bilaget skal være bogførbart
Status skal have isBookable lig sand. Booking, Bogført, Tilbageført og Konverteret er afvist.
1 vagt0-1, hvor 1 er altid slået tilIngen
102Manuel Bogfør kræver bankmatch eller en bekræftelse
Er bank_transaction_id tom, skal confirm_no_bank_match være sand, ellers afvises Bogfør med ap.vouchers.book_blocked_no_bank_match.
1 vagt0-1, hvor 1 er altid slået tilIngen
103Et bilag hænger i Booking efter 60 minutter
STALE_AFTER_MINUTES er 60. Uret er updated_at, som sættes ved afsendelse, så ventetid i køen tæller med.
60 minutterminutterIngen
104BookVoucherJob forsøger kun én gang
tries er 1.
1 forsøgantalIngen
105Bogføringstilstand: auto-bogfør eller kladde
shouldAutoBookEntries er sand, medmindre integrationens invoice_creation_mode er draft. Default er auto_book.
1 tilstand1 er auto_book, 0 er draftIngen
106OCR-gulv for bogføring uden force
CONFIDENCE_THRESHOLD er 0,90. Auto-bogføring kræver ovenikøbet selskabets tærskel, som er 0,95 som default.
0.9 andel0-1Ingen
107Vagt 8: banklinjen er en uafregnet reservation
isPendingSettlementAnchored afviser. Bilaget sættes til Afventer og ikke til Fejlet.
1 vagt0-1, hvor 1 er altid slået tilIngen
108Vagt 2: allerede bogført
Svaret er "Bilaget er allerede bogført." og ingen udbyder kaldes.
1 vagt0-1, hvor 1 er altid slået tilIngen
109Vagt 10: banklinjen er allerede bogført i accounting_entries
Vagten søger i accounting_entries på dato, beløb og bankforbindelsens afstemningskonto. Også manuel Bogfør afvises.
1 vagt0-1, hvor 1 er altid slået tilIngen
110Vagt 12: bogførbarhedstjek, med mindre et menneske tvinger
Med force springes tjekket over. Blokeringerne, der også stopper en manuel Bogfør, står i VoucherBookBlocker::blocksManualBooking.
1 vagt0-1, hvor 1 er altid slået tilIngen
111Vagt 6: bilaget dokumenterer en eksisterende postering
documentsExistingLedgerEntry afviser, også ved manuel Bogfør.
1 vagt0-1, hvor 1 er altid slået tilIngen
112Vagt 0: dublet stoppes i jobbet
Er duplicate_of_id sat, sættes bilaget tilbage til Afventer med en fejltekst, og der kaldes ingen udbyder.
1 vagt0-1, hvor 1 er altid slået tilIngen
113Vagt 5: banklinjen ligger før skæringsdatoen
isPreCutoverDoubleBookingRisk afviser. Også manuel Bogfør kan ikke tvinge den igennem.
1 vagt0-1, hvor 1 er altid slået tilIngen
114Vagt 1: genoptag en eksisterende kladde
canResumeEconomicAutoBook er sand for journal_state Unconfirmed, eller for en importeret kassekladde-kladde uden journal_state. Business Central har samme genoptagelse for Unconfirmed.
1 vagt0-1, hvor 1 er altid slået tilIngen
115Vagt 13: ingen aktiv regnskabsintegration
Teksten er "Ingen aktiv regnskabsintegration fundet. Forbind e-conomic eller Dinero under Indstillinger → Integrationer."
1 vagt0-1, hvor 1 er altid slået tilIngen
116Vagt 14: ingen linjer at bogføre fra
cannotPostFromZeroLines afviser: beløb 0 giver "Bilaget har ingen linjer", og beløb uden konto giver "Ingen udgiftskonto er valgt".
1 vagt0-1, hvor 1 er altid slået tilIngen
117Vagt 4: konverteret til regning
Svaret er "Bilaget er konverteret til en regning og bogføres derfra." Vagten læser det varige link og ikke statussen.
1 vagt0-1, hvor 1 er altid slået tilIngen
118Vagt 11: lignende kladde eller postering i det levende regnskab
Vagten læser kassekladdens kladder og de bogførte poster live fra udbyderen, og matcher på dato, beløb og bankkonto. Kan regnskabet ikke læses, springes bilaget også over.
1 vagt0-1, hvor 1 er altid slået tilIngen
119Vagt 9: lønbilag på bilagsvejen
isPayrollJournal afviser, og et bilag i Booking sættes til Fejlet og ikke til Afventer.
1 vagt0-1, hvor 1 er altid slået tilIngen
120Vagt 7: bilaget har ikke noget beløb
Både total_amount og amount er null. Nul tæller ikke, kun null.
1 vagt0-1, hvor 1 er altid slået tilIngen
121Vagt 15: modkonto skal kunne findes
Rækkefølgen er bilagets egen modkonto, den matchede bankforbindelses konto, og kun for umatchede bilag udbyderens standard. Finder den ingen, bliver bilaget Fejlet.
1 vagt0-1, hvor 1 er altid slået tilIngen
122Vagt 3: tilbageført
Svaret er "Bilaget er tilbageført og kan ikke bogføres igen."
1 vagt0-1, hvor 1 er altid slået tilIngen
123Kreditorforhold
Loftet er 1,2.
1.2 forholdforholdindstilling.env.economic-payables-max-reconciliation-ratio
124Løn, datovindue
Vinduet er 3 dage.
3 dagedageindstilling.env.salary-reconciliation-date-window
125Lønkomponent
Konfidensen er 0,85.
0.85 andel0-1Ingen
126Løn, splitvindue
Vinduet er 7 dage.
7 dagedageindstilling.env.salary-reconciliation-split-window

Fortryd og lås (6)

Nr.RegelVærdiSkalaKan overstyres af
127Abonnementsgæld stopper også skrivning til regnskabet
Gaten spørger først requiresPayment på selskabet og kaster AccountingWritesPausedException, før den ser på pausen. Brugerinitieret hjælper ikke her.
1 vagt0-1, hvor 1 er altid slået tilIngen
128Et bogført eller tilbageført bilag er låst
Slet afvises for et bogført bilag med reference. Redigering og scanning afvises for Bogført og Tilbageført. Ny fil afvises også for Booking.
1 vagt0-1, hvor 1 er altid slået tilIngen
129Skrivepause stopper automatiske skrivninger
AccountingWriteGate::assert kaster AccountingWritesPausedException, når accounting_writes_paused_at er sat, og skrivningen ikke er markeret som brugerinitieret.
1 vagt0-1, hvor 1 er altid slået tilindstilling.company.accounting-writes-paused-at
130Tilbageføring tages atomisk, før udbyderen kaldes
En betinget opdatering flytter reversal_claimed_at fra null. Den, der ikke får rækken, får besked om at vente.
1 vagt0-1, hvor 1 er altid slået tilIngen
131Kun et bogført bilag med reference kan tilbageføres
reverse() afviser alt andet end Booked, et bilag med reversed_at, et bilag uden provider og external_voucher_id, og (undtagen importeret Dinero) et bilag uden modkonto.
1 vagt0-1, hvor 1 er altid slået tilIngen
132Ét bogføringsjob pr. bilag ad gangen
Nøglen er book-voucher:{id}. uniqueFor er 600 sekunder, og låsen slippes først, når jobbet er færdigt eller tiden er gået.
600 sekundersekunderIngen

Herfra er det teknisk

8

Teknisk flow

Teknisk

Syv sekvensdiagrammer følger de hovedveje, et bilag tager. Rækkefølgen er UI, route, controller, service, job og udbyder, og hver deltager er et link: til katalogposten (job, tabel, integration, handling), til handlingen bag et route-navn, eller til klassen på app@e99eb6a på GitHub. Pile med stiplet streg er et job, der lægges i kø. Klasserne er de splittede klasser på main: VoucherController er tynd og kalder VoucherIntake, VoucherBookRequest, VoucherMutations og VoucherMatchActions, og bogføringen er delt i VoucherBookingService, VoucherBookingGate, EconomicVoucherBooker og VoucherBookingFinisher.

handling.kvitteringer.upload. Bilaget er klar, når OCR har skrevet felterne. Status er stadig Afventer, for klar og bogført er to forskellige ting.

job.score-bank-transaction-suggestionsintegration.anthropicjob.scan-vouchertabel.vouchersVoucherServiceVoucherIntakeVoucherControllervouchers.storeuseVoucherListUploadBrugerjob.score-bank-transaction-suggestionsintegration.anthropicjob.scan-vouchertabel.vouchersVoucherServiceVoucherIntakeVoucherControllervouchers.storeuseVoucherListUploadBrugerBilagIntakeGuard (plan-loft) og dublet-tjek på filens SHA-256Klar = status pending med udlæste feltervælger eller slipper en fil1POST (billeder krympes i browseren)2store3store4storeVoucher5opretter bilag, status pending, kilde upload6i kø på koe.voucher-scan-interactive7bestiller scoring af bankforslag8OCR af filen9leverandør, dato, beløb, konfidens10felter og linjer, forsøger bankmatch11
kode: app/Services/Ap/VoucherIntake.php · VoucherIntake::storekode: app/Jobs/ScanVoucherJob.php · ScanVoucherJob

b. En mail med kvittering, til den er et bilag

Sektion kaldt “b. En mail med kvittering, til den er et bilag”

En mail i en postkasse bliver aldrig et bilag direkte. Den bliver en vedhæftning, og først promotion (begreb.bilagsindgang.promotion) gør vedhæftningen til et bilag med status Afventer. Postmark-adressen bilag+ med en fil springer vedhæftningen over og opretter bilaget direkte, se domaene.bilagsindgang, kanal 2.

tabel.vouchersVoucherMinterBulkPromoterEmailAttachmentLifecycleServiceEmailAttachmentAutoPromoterjob.auto-promote-matched-attachmentsintegration.anthropicjob.scan-email-attachmenttabel.email-voucher-attachmentsEmailScanAttachmentPersistenceintegration.gmailjob.scan-company-emailjob.scan-emailsschedule.scan-emailstabel.vouchersVoucherMinterBulkPromoterEmailAttachmentLifecycleServiceEmailAttachmentAutoPromoterjob.auto-promote-matched-attachmentsintegration.anthropicjob.scan-email-attachmenttabel.email-voucher-attachmentsEmailScanAttachmentPersistenceintegration.gmailjob.scan-company-emailjob.scan-emailsschedule.scan-emailsKun hvis modulet email-bilag og auto-promote er slået tilhvert kvarter1én pr. postkasse (koe.email-scan)2henter nye mails (Gmail, Outlook eller IMAP)3persistDownloadedAttachment4én vedhæftning pr. fil5i kø på koe.voucher-scan6OCR af vedhæftningen7gemmer læsningen og et bankmatch8id'et sendes videre9promoteForCompany10bulkPromoteWithoutBankLink11bulkPromoteWithoutBankLink12mintVoucherFromAttachment13opretter bilag, status pending, kilde email14status promoted, peger på bilaget15

Bilaget er nu en voucher, men det er ikke bogført. Auto-bogføring kører kun fra job.scan-voucher, som en promotion ikke går gennem. En mail-voucher bogføres derfor altid af et menneske, med diagram c. Se også faelde.bilagsindgang.vedhaeftning-er-ikke-bilag.

kode: app/Services/Email/Lifecycle/VoucherMinter.php · VoucherMinter::mintVoucherFromAttachmentkode: app/Services/Email/EmailAttachmentAutoPromoter.php · EmailAttachmentAutoPromoter::promoteForCompany

c. Bogfør, fra klik til journal_state booked

Sektion kaldt “c. Bogfør, fra klik til journal_state booked”

handling.kvitteringer.bogfoer. Diagrammet viser e-conomic. De tre andre udbydere har hver deres booker bag VoucherBookingService, se domaene.bogfoering.

VoucherBookingFinisherintegration.economicEconomicVoucherBookerVoucherBookingGateVoucherBookingServicejob.book-vouchertabel.vouchersVoucherBookRequestVoucherControllervouchers.bookuseBookingLifecycleBrugerVoucherBookingFinisherintegration.economicEconomicVoucherBookerVoucherBookingGateVoucherBookingServicejob.book-vouchertabel.vouchersVoucherBookRequestVoucherControllervouchers.bookuseBookingLifecycleBrugerjournal_state er booked, når bookJournalEntries lykkes. Kladde giver draft, en fejl i bogføringen giver unconfirmedtrykker Bogfør1POST2book3refuseIfUnbookable4status booking5i kø med force6book7refuse (vagt 1 til 11)8ingen afvisning9bookEconomic10postJournalVoucher (kladdelinjer)11uploadVoucherAttachment, derefter bookJournalEntries12bilagsnummer og journal13resultat14commit15status booked, journal_state booked, booked_at16

Vagterne i VoucherBookingGate::refuse og VoucherBookingService::book står i tabel i domaene.bogfoering. Bilag fra mail og upload bruger samme vej. Fejler uploaden af filen, sender VoucherBookingFinisher::commit en separat job.push-voucher-document-to-economic bagefter.

kode: app/Services/Ap/VoucherBookingService.php · VoucherBookingService::bookkode: app/Services/Ap/Booking/VoucherBookingFinisher.php · VoucherBookingFinisher::commitkode: app/Enums/JournalState.php · JournalState::fromBookOutcome

handling.kvitteringer.tilbagefoer. Tilbageføring er en modpostering, ikke en sletning, og kravet tages, før udbyderen kaldes, så to klik giver én modpostering.

VoucherReversalRecorderintegration.economicEconomicVoucherBookertabel.vouchersVoucherBookingServiceVoucherMutationsVoucherControllervouchers.reverseuseBookingLifecycleBrugerVoucherReversalRecorderintegration.economicEconomicVoucherBookertabel.vouchersVoucherBookingServiceVoucherMutationsVoucherControllervouchers.reverseuseBookingLifecycleBrugerDinero og Billy sletter i stedet en ubogført kladde, og bilaget bliver pending igentrykker Tilbagefør1POST2reverse3reverse4reverse5tager kravet reversal_claimed_at6reverseEconomic7negerede linjer i samme journal, derefter bogføring8nyt bilagsnummer9resultat10persistReversal (tre forsøg)11status reversed, journal_state null12
kode: app/Services/Ap/VoucherBookingService.php · VoucherBookingService::reversekode: app/Services/Ap/Booking/VoucherReversalRecorder.php · VoucherReversalRecorder::persistReversal

handling.kvitteringer.link-transaktion. Koblingen rører ikke bogføringen.

tabel.voucherstabel.bank-transaction-matchesLinksVoucherTransactionsVoucherMatchActionsVoucherControllervouchers.link-transactionvouchers.transaction-suggestionsTransactionQuickConnectBrugertabel.voucherstabel.bank-transaction-matchesLinksVoucherTransactionsVoucherMatchActionsVoucherControllervouchers.link-transactionvouchers.transaction-suggestionsTransactionQuickConnectBrugerLinjens match_status genberegnes: manual_matched eller partially_matchedåbner cellen Transaktion1GET forslag2transactionSuggestions3vælger en banklinje4POST5linkTransaction6linkTransaction7linkTransaction (via VoucherTransactionService)8række med match_source human, konfidens 1,009bank_transaction_id10
kode: app/Services/Ap/VoucherMatchActions.php · VoucherMatchActions::linkTransactionkode: app/Services/Ap/Concerns/LinksVoucherTransactions.php · LinksVoucherTransactions::linkTransaction

handling.kvitteringer.upload-manglende. En postering i regnskabet mangler et bilag, og uploadet bilag får posteringens regnskabsår og bilagsnummer.

job.push-voucher-document-to-economicMissingReceiptServicetabel.accounting-entriestabel.vouchersVoucherServiceVoucherIntakeVoucherControllervouchers.missing.uploaduseMissingReceiptMutationsBrugerjob.push-voucher-document-to-economicMissingReceiptServicetabel.accounting-entriestabel.vouchersVoucherServiceVoucherIntakeVoucherControllervouchers.missing.uploaduseMissingReceiptMutationsBrugerTællingen bag fanen nulstilles, så posten forsvinder med det sammevælger en fil på en post1POST2uploadMissingReceipt3uploadMissingReceipt4henter posteringen5storeVoucher6opretter bilag, status pending, kilde upload7flushCache8filen sendes til regnskabet som dokument9

Push-jobbet sendes kun, når bilaget har fået posteringens regnskabsår og bilagsnummer, og når firmaet ikke er sat på pause. For Billy og Business Central er det deres egne push-jobs (job.push-voucher-document-to-billy, job.push-voucher-document-to-business-central).

kode: app/Services/Ap/VoucherIntake.php · VoucherIntake::uploadMissingReceipt

Den uovervågede vej starter ikke i en knap, men i scanningen. Se faelde.kvitteringer.auto-bogfoering-aldrig-brugt: den er slået fra hos alle selskaber, så diagrammet viser, hvad koden gør, og ikke noget kunder oplever i dag.

tabel.vouchersVoucherBookingFinisherintegration.economicVoucherBookingServicejob.book-voucherVoucherAutoBookPolicytabel.bank-transaction-matchesVoucherAutoMatcherjob.scan-vouchertabel.vouchersVoucherBookingFinisherintegration.economicVoucherBookingServicejob.book-voucherVoucherAutoBookPolicytabel.bank-transaction-matchesVoucherAutoMatcherjob.scan-voucherGlobal flag, selskabets flag, konfidens, bekræftet bankmatch, konto på hver linje, ingen blokeringOCR og udfyldning af bilaget1attempt (kun uden bankmatch)2skriver et match, hvis gaten lader det3shouldAutoBook4ja5i kø med autoBook, uden force6book7som i diagram c8commit9status booked, auto_booked_at sat10

Politikkens tolv betingelser står i domaene.bogfoering, og hver er en regel i kataloget, fx regel.bogfoering.auto-book-min-confidence.

kode: app/Services/Ap/VoucherAutoBookPolicy.php · VoucherAutoBookPolicy::shouldAutoBookkode: app/Jobs/ScanVoucherJob.php · ScanVoucherJob

Fra mail til e-conomic: hvornår kan det ikke fortrydes længere

Sektion kaldt “Fra mail til e-conomic: hvornår kan det ikke fortrydes længere”

Tabellen følger et bilag fra mailen til bogføringen og siger, hvad man kan gøre ved det på hvert trin. Det, regnskabssystemet selv gør med en bogført postering (fx lukkede perioder), er ikke undersøgt her.

TrinHvad står derKan det fortrydesHvordan
Mailen er scannetEn vedhæftning i tabel.email-voucher-attachments, ikke et bilagJaVedhæftningen kan afvises, og promotion kan fortrydes, så længe bilaget ikke er bogført (begreb.bilagsindgang.promotion)
PromoveretEt bilag med status AfventerJahandling.kvitteringer.slet
Bogfør er trykketStatus Bogfører, mens job.book-voucher kørerNejBilaget kan ikke slettes, mens det bogføres (handling.kvitteringer.slet). Hænger det i over 60 minutter, sætter job.vouchers-recover-stuck-booking det til Fejlet, og man tjekker regnskabet, før man bogfører igen (faelde.kvitteringer.bilag-haenger-i-booking)
BogførtStatus Bogført, journal_state booked, bilaget er låstJa, én ganghandling.kvitteringer.tilbagefoer poster en modpostering (regel.bogfoering.tilbagefoer-kun-bogfoert)
TilbageførtStatus TilbageførtNej, ikke længereBilaget kan hverken bogføres igen eller tilbageføres to gange (regel.bogfoering.laast-efter-bogfoering)

Så grænsen er tilbageføringen: indtil bilaget er bogført kan alt rettes eller slettes, efter bogføring findes der præcis én fortrydelse, og efter den er der ingen.

Herfra er det teknisk

9

Data

Teknisk

De fem tabeller, siden læser og skriver mest. Kortene er hentet fra kataloget, og prod-tallene er målt read-only mod payfriend_app og stemplet med dato. En tabel uden prod-tal er ikke målt. Alle beløb står i øre. Andre tabeller bag siden står i domaene.bilagsindgang og domaene.bankmatch.

voucherspayfriend_app

Et bilag er den post, brugeren ser under Kvitteringer, med fil, status og beløb i øre.

KolonneBetydningVærdier
statusHvor bilaget er i livscyklussen.pending, booking, booked, reversed, failed, scan_failed, converted
journal_stateOm bilaget er bogført, kladde, fejlet eller ubekræftet hos udbyderen.booked, draft, failed, unconfirmed
ingestion_sourceHvor bilaget kom ind.upload, email, api, provider_pull, provider_sync, recurring, payroll, eboks, digital_post, google_ads, meta, brobizz, google_workspace, google_cloud, inbox_auto
amountNettobeløb i øre. Beløb i øre.
vat_amountMomsbeløb i øre. Beløb i øre.
total_amountTotal i bilagets valuta, i øre. Beløb i øre.
total_amount_dkkTotal omregnet til kroner, i øre. Beløb i øre.
posted_amount_dkkDet beløb der blev bogført, i øre. Beløb i øre.
currencyBilagets valuta, tre bogstaver.
company_idSelskabet, bilaget hører til.
providerRegnskabsudbyderen, når bilaget er spejlet derfra.
external_voucher_idUdbyderens id. Unik sammen med selskab og udbyder.
external_attachment_idUdbyderens bilagsfil. Unik pr. selskab.

Relationer: company_id til companies (Hører til et selskab.); bank_transaction_id til bank-transactions (Den banklinje, bilaget er matchet til.); suggested_bank_transaction_id til bank-transactions (Den banklinje, matcheren foreslår.); duplicate_of_id til vouchers (Det bilag, denne række er en dublet af.); single_line_account_id til chart-of-accounts (Kontoen ved enkeltlinje-bogføring.); periodization_account_id til chart-of-accounts (Periodiseringskontoen.); supplier_id (Leverandøren. Leverandørtabellen er uden for det her katalog.); converted_to_supplier_invoice_id (Leverandørfakturaen, bilaget er konverteret til. Tabellen er uden for det her katalog.)

Prod-tal målt 2026-10-01

Målt 2026-10-01, ikke-slettede bilag, i alt 214.225. Pr. ingestion_source og status: eboks: booked 1; email: booked 374, converted 33, failed 16, pending 976, reversed 2; payroll: booked 16, failed 1, pending 148, reversed 1; provider_pull: booked 171.154, pending 39.709, reversed 85; provider_sync: failed 1, pending 595; upload: booked 746, converted 2, failed 18, pending 345, reversed 2. Pr. ingestion_source og journal_state (NULL er ikke bogført eller uden udbyder-journal): eboks: booked 1; email: NULL 1.031, booked 351, draft 18, unconfirmed 1; payroll: NULL 154, booked 11, draft 1; provider_pull: NULL 210.920, booked 23, unconfirmed 5; provider_sync: NULL 596; upload: NULL 702, booked 253, draft 152, unconfirmed 6. auto_booked_at er sat på 0 af 214.225 bilag, 0,00 % i hver ingestion_source.

Forespørgsler: scripts/prod-queries/01-vouchers-status.sql

kode: app app/Models/Voucher.php · Voucherverificeretkode: app app/Enums/VoucherStatus.php · VoucherStatusverificeretkode: app app/Enums/JournalState.php · JournalStateverificeretkode: app app/Enums/IngestionSource.php · IngestionSourceverificeretkode: app app/Models/Voucher.php · Voucher::totalDkkMoneyverificeretprod-data: 2026-10-01: scripts/prod-queries/01-vouchers-status.sql: SELECT ingestion_source, status, COUNT(*) AS antal FROM vouchers WHERE deleted_at IS NULL GROUP BY ingestion_source, status ORDER BY ingestion_source, status scripts/prod-queries/02-vouchers-journal-state.sql: SELECT ingestion_source, journal_state, COUNT(*) AS antal FROM vouchers WHERE deleted_at IS NULL GROUP BY ingestion_source, journal_state ORDER BY ingestion_source, journal_state scripts/prod-queries/03-vouchers-auto-booked.sql: SELECT ingestion_source, COUNT(*) AS antal, SUM(auto_booked_at IS NOT NULL) AS auto_bogfoert, ROUND(100 * SUM(auto_booked_at IS NOT NULL) / COUNT(*), 2) AS andel_pct FROM vouchers WHERE deleted_at IS NULL GROUP BY ingestion_source ORDER BY antal DESCVerificeret 2026-10-01 mod app@e99eb6a.

voucher-linespayfriend_app

En bilagslinje er én postering på et bilag, med beløb i øre og et kontoforslag.

KolonneBetydningVærdier
voucher_idBilaget, linjen hører til.
account_idDen valgte konto.
suggested_account_idDen konto, forslaget peger på.
suggestion_confidenceForslagets sikkerhed som decimal mellem 0 og 1.
amountLinjens beløb i øre. Beløb i øre.
amount_dkkLinjens beløb i kroner, i øre. Beløb i øre.
vat_amountMoms i øre. Beløb i øre.
unit_priceEnhedspris i øre. Beløb i øre.
deductible_vat_amount_minorFradragsberettiget moms i øre. Beløb i øre.
vat_classification_sourceHvem der satte momskoden.ai, rule, manual, default

Relationer: voucher_id til vouchers (Hører til et bilag.); company_id til companies (Hører til et selskab.); account_id til chart-of-accounts (Den valgte konto.); suggested_account_id til chart-of-accounts (Den foreslåede konto.)

Ingen prod-tal er målt for tabellen.

kode: app app/Models/VoucherLine.php · VoucherLineverificeretVerificeret 2026-10-01 mod app@e99eb6a.

email-voucher-attachmentspayfriend_app

En mailvedhæftning er filen fra en mail, med OCR-status og beløb i kroner.

KolonneBetydningVærdier
statusHvor vedhæftningen er, fra OCR til bilag eller afvisning.pending_ocr, ready, ocr_failed, promoted, dismissed, deferred_ocr, quota_blocked
file_hashFilens hash. Unik pr. selskab.
amountNettobeløb i kroner, decimal(15,2).
vat_amountMoms i kroner, decimal(15,2).
total_amountTotal i kroner, decimal(15,2).
bank_match_confidenceMatchsikkerhed på skalaen 0 til 100.
bank_match_strategyHvilken e-mail-strategi der lavede forslaget, scored eller unique_amount.scored, unique_amount
dismissed_reasonHvorfor bilaget er afvist, fx at det er samme køb som et søskendebilag.same_purchase_duplicate, packing_slip, non_receipt
voucher_idBilaget, vedhæftningen er blevet til.

Relationer: email_voucher_source_id til email-voucher-sources (Mailen, filen kom med.); company_id til companies (Hører til et selskab.); voucher_id til vouchers (Bilaget, filen er forfremmet til.); suggested_bank_transaction_id til bank-transactions (Den foreslåede banklinje.); matched_bank_transaction_id til bank-transactions (Den matchede banklinje.); supplier_invoice_id (Leverandørfakturaen, filen er blevet til. Tabellen er uden for det her katalog.)

Prod-tal målt 2026-10-01

Målt 2026-10-01, 35.906 vedhæftninger. Pr. status og dismissed_reason: pending_ocr 2; ready 15.653; ocr_failed 25; promoted 3.193 heraf 1.336 med voucher_id; dismissed 350; dismissed (non_receipt) 576; dismissed (own_sales_sender) 18; dismissed (packing_slip) 440; dismissed (same_purchase_duplicate) 297 heraf 1 med voucher_id; dismissed (supplier_is_self) 784; quota_blocked 79; deferred_ocr 14.489. 1.337 har et voucher_id, altså 3,72 % er blevet til en voucher.

Forespørgsler: scripts/prod-queries/04-email-attachments-status.sql

kode: app app/Models/EmailVoucherAttachment.php · EmailVoucherAttachmentverificeretprod-data: 2026-10-01: scripts/prod-queries/04-email-attachments-status.sql: SELECT status, dismissed_reason, COUNT(*) AS antal, SUM(voucher_id IS NOT NULL) AS med_voucher, SUM(promoted_at IS NOT NULL) AS promoveret FROM email_voucher_attachments GROUP BY status, dismissed_reason ORDER BY status, dismissed_reason scripts/prod-queries/05-email-attachments-andel.sql: SELECT COUNT(*) AS antal, SUM(voucher_id IS NOT NULL) AS med_voucher, ROUND(100 * SUM(voucher_id IS NOT NULL) / COUNT(*), 2) AS andel_pct FROM email_voucher_attachmentsVerificeret 2026-10-01 mod app@e99eb6a.

bank-transaction-matchespayfriend_app

Et bankmatch knytter en banklinje til et bilag eller en anden post og gemmer det fordelte beløb i kroner.

KolonneBetydningVærdier
bank_transaction_idBanklinjen.
matchable_typeHvilken slags post, linjen er matchet til.
matchable_idId på den post, linjen er matchet til.
allocated_amountDet beløb, der er fordelt på matchet, decimal(12,2).
allocated_amount_dkkDet fordelte beløb i kroner, decimal(12,2).
match_differenceResten mellem linje og post, decimal(12,2).
match_strategyHvilken strategi der lavede matchet.
match_confidenceSikkerhed som decimal mellem 0 og 1.

Relationer: bank_transaction_id til bank-transactions (Banklinjen, matchet hører til.); matched_by (Brugeren, der matchede manuelt. Brugertabellen er uden for det her katalog.)

Prod-tal målt 2026-10-01

Målt 2026-10-01, 36.717 match-rækker. match_source system (34.771): accounting_sweep 32.975, amount_and_date 556, auto_voucher_rematch 542, reference_exact 248, overforselsservice_bank_auto 197, yapily_payment_auto 45, payroll_group 41, auto_voucher_scan 41, internal_transfer_autobook 34, payroll_component 32, manual 31, supplier_name_match 15, manual_voucher_link 7, supplier_profile 3, manual_cleanup_yapily_dup 1, manual_invoice_link 1, unknown 1, auto_settlement 1. match_source human (1.946): manual 424, voucher_upload_match 410, unknown 402, manual_voucher_link 234, amount_and_date 191, email_bank_match 117, reference_exact 115, amount_exact 43, amount_and_counterparty 4, supplier_name_match 2, voucher_name_match 2, invoice_number_weak 1, supplier_profile 1.

Forespørgsler: scripts/prod-queries/07-bank-transaction-matches-strategi.sql

kode: app app/Models/BankTransactionMatch.php · BankTransactionMatchverificeretprod-data: 2026-10-01: scripts/prod-queries/07-bank-transaction-matches-strategi.sql: SELECT match_strategy, match_source, COUNT(*) AS antal FROM bank_transaction_matches GROUP BY match_strategy, match_source ORDER BY antal DESCVerificeret 2026-10-01 mod app@e99eb6a.

accounting-entriespayfriend_app

En finanspost er en spejlet postering fra regnskabsudbyderen, med beløb i øre.

KolonneBetydningVærdier
providerHvilken udbyder, posten er spejlet fra.
accounting_yearRegnskabsåret.
voucher_numberBilagsnummeret hos udbyderen.
entry_numberLinjenummeret på bilaget.
account_numberKontonummeret.
amountBeløb i øre. Beløb i øre.
amount_base_minorBeløb i selskabets grundvaluta, i øre. Kolonnen er tilføjet efter skema-dumpet. Beløb i øre.
currencyPostens valuta.
datePosteringsdatoen.

Relationer: company_id til companies (Hører til et selskab.)

Ingen prod-tal er målt for tabellen.

kode: app app/Models/AccountingEntry.php · AccountingEntryverificeretkode: app app/Models/AccountingEntry.php · AccountingEntry::castsverificeretVerificeret 2026-10-01 mod app@e99eb6a.

Herfra er det teknisk

10

Kendte fælder

Teknisk

Alle fælder, der hører til siden eller til dens fire domæner, og dem der peger på tabellerne i lag 9. Hver fælde står som symptom, årsag og sådan undgås den.

50 fælder: 46 stadig sande, 4 delvist sande, 0 rettede og 0 inaktive. De står med de stadig sande først. Hver fælde er skrevet som symptom, årsag og sådan undgås den.

Et mailforslag står som 0,86 i afstemningspanelet og ser stærkere ud end det er, eller det rykker over en ren beløbsmatch på 0,85.

0,86-gulvet er en rangering, ikke en tærskelStadig sandBankmatch

Årsag
SuggestsInboxAttachments::inboxConfidenceBand løfter et mailscoret par til mindst 0,86, når scoren er mindst 70 og enten mapped >= 0,86 eller navnene bekræfter hinanden. Det er kun rangering og visning. Den gemte bank_match_confidence er den rå score. Den ældre forklaring, at alias +30 og eksakt beløb +40 alene nåede 70, er forældet: aliaspointet kræver nu, at navnene ligner hinanden.
Sådan undgås den
Læs bank_match_confidence og bank_match_strategy på bilaget, ikke tallet i panelet. Et par med strategien unique_amount (60) får aldrig gulvet.
Kilder (2)

kode: app app/Services/Reconciliation/Concerns/SuggestsInboxAttachments.php · SuggestsInboxAttachments::inboxConfidenceBandverificeretkode: app app/Services/Reconciliation/MatchSuggestion.php · MatchSuggestionverificeret

En kvittering matches til en forkert banklinje, og næste kvittering fra samme leverandør foreslås til samme forkerte modpart.

Et forkert match kan lære et aliasStadig sandBankmatch

Årsag
ReconciliationMatchService lærer via RecordsMatchAliases efter hvert match, uden navnetjek, uden konfidenstjek og uden at spørge, om en maskine eller et menneske matchede. E-mail-armens recordAlias kræver derimod namesCorroborate. Aliaset læses live af scoreCandidate, så fejlen virker ved næste scoring, uden deploy.
Sådan undgås den
Find aliaset i supplier_aliases for leverandøren, og slet det. Aliaser uden navnestøtte kan ryddes med kommandoen supplier-aliases:purge-uncorroborated (tør kørsel som standard, --force sletter).
Kilder (3)

kode: app app/Services/Reconciliation/Concerns/RecordsMatchAliases.php · RecordsMatchAliases::recordEmailInboxAliasverificeretkode: app app/Services/Email/BankTransactionMatchingService.php · BankTransactionMatchingService::recordAliasverificeretkode: app app/Console/Commands/PurgeUncorroboratedSupplierAliasesCommand.php · PurgeUncorroboratedSupplierAliasesCommandverificeret

match-audit:run --replay nægter at køre eller giver et tomt resultat på en lokal database.

Match-auditens replay kan ikke måles lokalt uden en produktionskopiStadig sandBankmatch

Årsag
RunMatchAuditCommand kører kun i production som standard, afviser beskyttede databaser og kræver --outside-production andre steder. Replayet kører den rigtige MatchScorer mod bekræftede matches og har brug for en varm valutakursmap og rigtige data.
Sådan undgås den
Mål replayet i production eller mod en produktionskopi. Læs resultatet i adminappens Matchkvalitet-side.
Kilder (1)

kode: app app/Console/Commands/RunMatchAuditCommand.php · RunMatchAuditCommandverificeret

Mange bilag står umatchede, og man leder efter en fejl i matchjobbet.

Bilagsfrafald er køer, ikke fejlStadig sandBankmatch

Årsag
Mailbilag falder ud gennem statuserne pending_ocr, ready, ocr_failed, promoted og dismissed. Et ready-bilag uden suggested_bank_transaction_id er bare et bilag uden forslag. Match-jobbet kigger kun på bilag inden for vinduet på 30 dage og prøver igen i timen. Kilder, der er gået døde, vises i inbox-assess-source-health, ikke som en matchfejl.
Sådan undgås den
Slå op i status og i match_explanations, før du antager en fejl.
Kilder (2)

kode: app app/Models/EmailVoucherAttachment.php · EmailVoucherAttachment::scopeMatchWindowOpenverificeretkode: app app/Jobs/MatchUnmatchedAttachmentsJob.php · MatchUnmatchedAttachmentsJobverificeret

Banklinjen har to filer i Indbakken, og den ene står som afvist med grunden samme køb. Man tror, at bilaget er forsvundet eller matchet forkert.

Faktura og kvittering på samme banklinje er ét købStadig sandBankmatch

Årsag
samePurchase siger, at to rækker er samme køb, hvis de har samme fakturanummer, eller hvis de er et par af en faktura og en kvittering med samme beløb, valuta og leverandør inden for 21 dage. EmailAttachmentAutoPromoter beholder den bedste og afviser søskende med grunden same_purchase_duplicate. Målt 2026-10-01 var 297 vedhæftninger afvist sådan.
Sådan undgås den
Se på den vedhæftning, der blev promoveret. Er det den forkerte, så er det den, brugeren skal flytte. To fakturaer med samme beløb er ikke samme køb, heller ikke to måneder af samme abonnement, så de afvises ikke af denne regel.
Kilder (3)

kode: app app/Services/Email/BankTransactionMatchingService.php · BankTransactionMatchingService::samePurchaseverificeretkode: app app/Services/Email/EmailAttachmentAutoPromoter.php · EmailAttachmentAutoPromoter::promoteForCompanyverificeretprod-data: 2026-10-01: scripts/prod-queries/04-email-attachments-status.sql: SELECT status, dismissed_reason, COUNT(*) AS antal, SUM(voucher_id IS NOT NULL) AS med_voucher, SUM(promoted_at IS NOT NULL) AS promoveret FROM email_voucher_attachments GROUP BY status, dismissed_reason ORDER BY status, dismissed_reason

Et match fortrydes, og kunden forventer, at bogføringen også er rullet tilbage.

Fortryd af et match afbogfører ikkeStadig sandBankmatch

Årsag
UnmatchesBankTransactions::unmatch sletter match-rækkerne og nulstiller bilagets banklinje-anker, men afbogfører ikke noget. Er matchet afregnet i regnskabet (faktura betalt med eksternt id, leverandørafregning), kaster den CannotUnmatchSettledException. Et manuelt bogført bilag fra panelet nulstilles kun til unmatched, og journalen står tilbage i regnskabet. Det automatiske unwind rører kun indtægtsmatches til fakturaer.
Sådan undgås den
Fortryd kun før bogføring. Efter bogføring skal bilaget håndteres i regnskabssystemet.
Kilder (2)

kode: app app/Services/Reconciliation/Concerns/UnmatchesBankTransactions.php · UnmatchesBankTransactions::unmatchverificeretkode: app app/Console/Commands/UnwindAutoMatchesCommand.php · UnwindAutoMatchesCommandverificeret

En linje står som manual_matched, men ingen kan huske at have matchet den.

manual_matched betyder ikke, at et menneske matchedeStadig sandBankmatch

Årsag
match_status beskriver kun køens udseende. match_source (system eller human) på bank_transaction_matches siger, hvem der skrev rækken. Sweepet skriver accounting_sweep med system og status manual_matched.
Sådan undgås den
Brug match_source og match_strategy til at forklare et match, aldrig match_status.
Kilder (1)

kode: app app/Enums/MatchSource.php · MatchSourceverificeret

En kvittering og en banklinje har samme beløb, men kvitteringen står stadig som forslag eller åben.

Beløbet er ens, men bilaget matchede ikkeStadig sandBankmatch

Årsag
Mail: uden navn eller alias giver et eksakt beløb 40 point og en dato højst 20, så scoren når ikke 70, og det unikke beløb stopper på 60 og er kun et forslag. Afstemning: amount_exact scorer 0,85 men er ikke auto-tilladt. Derudover afviser korroborationsporten et par, hvor datoen ligger over 7 dage fra og beløbet ikke ligger inden for 1 %. Nøglen RECONCILIATION_AMOUNT_ONLY_CORROBORATION_DAYS (14) har ingen læser, så den ændrer ingenting.
Sådan undgås den
Slå bilaget op i match_explanations: auto_blocked_reason siger empty_pool, no_score, not_in_candidate_pool, strategy_not_auto_eligible eller below_threshold. Tjek også bank_match_rejections og at linjen ikke allerede er afstemt eller før skæringsdatoen.
Kilder (2)

kode: app app/Services/Email/Concerns/ScoresInboxBankCandidates.php · ScoresInboxBankCandidates::scoreCandidateverificeretkode: app app/Enums/MatchAutoBlockedReason.php · MatchAutoBlockedReasonverificeret

Mailbilag fra et nyt firma ender som regninger i stedet for at matche en banklinje.

Onboarding-sweepet beslaglægger banklinjerStadig sandBankmatch

Årsag
AccountingReconciliationSweepService skriver en række med strategien accounting_sweep og match_source system. E-mail-armen læser kun ->unreconciled(), altså linjer uden match-række, så en sweepet linje er usynlig for den. Onboarding har ikke mailboksen som krævet trin. Audit-detektoren sweep_claimed_before_mail leder efter præcis dette.
Sådan undgås den
Forbind mailen før regnskabet, eller sæt en skæringsdato ved forbindelsen. Sweepet kører kun, når BankConnection::autoSweepEnabled er sand.
Kilder (2)

kode: app app/Services/Reconciliation/Concerns/AppliesSweepMatches.php · AppliesSweepMatchesverificeretkode: app app/Services/Email/BankTransactionMatchingService.php · BankTransactionMatchingService::beginCandidateBatchverificeret

Matchraten ser lav ud, fordi lønjournaler og pull-bilag er med i nævneren.

Lønbilag drukner matchratenStadig sandBankmatch

Årsag
Admins VoucherMatchMeter tæller kun email, upload, eboks og inbox_auto (CollectedSources). Appens RematchVouchersCommand udelukker provider_pull og lønjournaler. Afstemningsmotoren har ingen split på ingestion_source, og lønlinjer matches mod lønoverførsler (payroll_component, payroll_group), ikke mod lønbilag.
Sådan undgås den
Del altid en matchrate på ingestion_source, som VoucherMatchMeter gør.
Kilder (2)

kode: app app/Enums/IngestionSource.php · IngestionSource::Payrollverificeretkode: app app/Console/Commands/RematchVouchersCommand.php · RematchVouchersCommandverificeret

Et tal som 70, 0,70 eller 85 bliver sammenlignet på tværs af motorerne og giver forkerte konklusioner om, hvornår noget bliver matchet.

To skalaer: 0 til 100 og 0 til 1Stadig sandBankmatch

Årsag
BankTransactionMatchingService::MIN_CONFIDENCE er 70 på skalaen 0-100 og gemmes som bank_match_confidence på mailbilaget. MatchScorer og bank_transaction_matches.match_confidence bruger 0-1. Panelet viser mailscoren som min(0,99, score/100), kun til visning.
Sådan undgås den
Spørg altid hvilken motor tallet kommer fra, før du sammenligner. Mail: [[regel.bankmatch.min-confidence]]. Afstemning: [[regel.match.auto-apply]].
Kilder (2)

kode: app app/Services/Email/BankTransactionMatchingService.php · BankTransactionMatchingService::MIN_CONFIDENCEverificeretkode: app app/Services/Reconciliation/Concerns/SuggestsInboxAttachments.php · SuggestsInboxAttachments::inboxConfidenceBandverificeret

En kvittering fra Gmail er gemt, men har intet beløb og ingen leverandør, og den bliver ikke promoveret.

Fil i Indbakken uden OCRStadig sandBilagsindgang

Årsag
En mail med filter_result skipped_low_confidence og en kvalificeret fil gemmes med status deferred_ocr. Der kører ingen OCR. Målt 2026-10-01: 14.489 af 35.906 vedhæftninger står sådan.
Sådan undgås den
Brugeren kan vælge Prøv OCR igen, som flytter den til pending_ocr. Spørg ikke først efter beløbet, det findes ikke endnu.
Kilder (2)

kode: app app/Integrations/Email/Concerns/EmailScanAttachmentPersistence.php · EmailScanAttachmentPersistence::persistDownloadedAttachmentverificeretprod-data: 2026-10-01: scripts/prod-queries/04-email-attachments-status.sql: SELECT status, dismissed_reason, COUNT(*) AS antal, SUM(voucher_id IS NOT NULL) AS med_voucher, SUM(promoted_at IS NOT NULL) AS promoveret FROM email_voucher_attachments GROUP BY status, dismissed_reason ORDER BY status, dismissed_reason

Kunden har videresendt en kvittering til bilag+, men der findes ingen kilde-række og intet bilag.

Postmark-mail forsvinder uden sporStadig sandBilagsindgang

Årsag
Filer over 13.400.000 tegn base64 (omkring 10 MB) springes over. Er det den eneste fil, returnerer InboundAttachmentExtractor en tom liste, og der skrives kun en logadvarsel. Krop-fallback udløses ikke.
Sådan undgås den
Søg i loggen efter InboundEmail: attachment too large. Bed kunden uploade filen manuelt, hvor grænsen er 20 MB.
Kilder (2)

kode: app app/Services/Inbound/InboundAttachmentExtractor.php · InboundAttachmentExtractor::extractAllverificeretkode: app app/Services/Inbound/InboundAttachmentExtractor.php · InboundAttachmentExtractor::hasOversizedAttachmentverificeret

Kunden siger, at kvitteringen kom til Gmail, men der er ingen kilde-række for mailen.

Gmail-kvittering ligger i Spam eller Sendt og scannes ikkeStadig sandBilagsindgang

Årsag
MailboxScanInclusion udelukker DRAFT, TRASH, SPAM og mails kun i Sendt. Outlook udelukker sentitems, drafts, deleteditems og junkemail. Første sync går højst 30 dage tilbage. Kodeobservation, ikke set i drift: WalksGmailHistory::runIncrementalScan skærer listen til 200 og flytter markøren alligevel, så en kørsel med flere nye mails kunne tabe nogle.
Sådan undgås den
Spørg hvor mailen lå. Tjek meta.requires_reauth og last_error på postkassen før du leder videre.
Kilder (2)

kode: app app/Integrations/Email/Gmail/Concerns/WalksGmailHistory.php · WalksGmailHistory::runIncrementalScanverificeretkode: app app/Jobs/ScanCompanyEmailJob.php · ScanCompanyEmailJobverificeret

Kilden står som skipped_duplicate med teksten "bilag findes allerede", men der findes intet bilag med samme fil.

Postmark-mail afvist som dublet, men den er ikke en dubletStadig sandBilagsindgang

Årsag
InboundVoucherProcessor skriver kilden uden dokument i begge tilfælde: når filen er en hash-dublet, og når gratis-loftet på 25 bilag er nået. Rækken skelner ikke mellem de to.
Sådan undgås den
Slå selskabets resterende bilag op i BilagIntakeGuard og tjek, om en vedhæftning med samme hash findes, før du kalder mailen en dublet.
Kilder (3)

kode: app app/Services/Inbound/InboundVoucherProcessor.php · InboundVoucherProcessor::processverificeretkode: app app/Services/Inbound/InboundAttachmentExtractor.php · InboundAttachmentExtractor::recordSourceverificeretkode: app app/Services/Billing/BilagIntakeGuard.php · BilagIntakeGuardverificeret

Et selskab har slået Email-bilag fra, men Indbakken fyldes stadig, og OCR-forbruget kører.

Modulet er slået fra, men mails bliver stadig scannetStadig sandBilagsindgang

Årsag
ScanEmailsJob og ScanEmailAttachmentJob læser ikke module_email_bilag_enabled. Modulet gater UI-ruterne, AutoPromote, auto-oprettelse af regning og MatchUnmatched. Selve scannet og OCR kører, så længe integrationen er enabled.
Sådan undgås den
Slå postkassen fra for at stoppe scannet, ikke modulet alene.
Kilder (2)

kode: app app/Jobs/ScanEmailsJob.php · ScanEmailsJobverificeretkode: app app/Services/Email/EmailAttachmentAutoPromoter.php · EmailAttachmentAutoPromoter::promoteForCompanyverificeret

En supporter leder efter en voucher for en kvittering hentet fra Overførselsservice.

Overførselsservice-kvitteringer ligner bilagStadig sandBilagsindgang

Årsag
FetchOverforselsserviceReceipts henter filer fra bankens postkasse og sender dem til ApplyReceipt eller ApplyCollectionReceipt. Ingen af dem opretter en voucher eller sætter en indgangskilde. Kvitteringen opdaterer status på leveringen og betalingsbenet.
Sådan undgås den
Slå op i leveringen og betalingsbenene. Afstemning sker først, når bankhævningen ses.
Kilder (2)

kode: app app/Jobs/FetchOverforselsserviceReceipts.php · FetchOverforselsserviceReceiptsverificeretkode: app app/Services/Overforselsservice/ApplyReceipt.php · ApplyReceiptverificeret

Tabellen vouchers har over 214.000 rækker, men kun omkring 3.000 er bilag, nogen har modtaget og skal tage stilling til.

Mange vouchers, men få rigtige bilagStadig sandBilagsindgang

Årsag
provider_pull er ét voucher pr. bogført bilagsnummer i kundens hovedbog, også bank-, løn- og momsposteringer, og e-conomic-kladder. Målt 2026-10-01: 210.948 af 214.225 (98,5 %) er provider_pull. De fleste har ingen fil. Visninger skjuler dem, og de tæller ikke mod gratisloftet. Slettedetektionen af forældede rækker er slået fra som standard.
Sådan undgås den
Tæl aldrig bilag uden at gruppere på ingestion_source. Udeluk provider_pull, og tæl derefter pr. kilde og status. Tallet 88.000, der blev brugt i recon, var fra hukommelsen. Det målte tal står her.
Kilder (3)

kode: app app/Services/VoucherUpsertService.php · VoucherUpsertService::upsertverificeretkode: app app/Jobs/SyncAccountingVouchers.php · SyncAccountingVouchersverificeretprod-data: 2026-10-01: scripts/prod-queries/01-vouchers-status.sql: SELECT ingestion_source, status, COUNT(*) AS antal FROM vouchers WHERE deleted_at IS NULL GROUP BY ingestion_source, status ORDER BY ingestion_source, status

Kunden har opgraderet fra gratis, men ældre mails er stadig ikke behandlet. Kilden findes ikke i Nye eller Set.

Vedhæftninger står fast som quota_blockedStadig sandBilagsindgang

Årsag
ScanEmailAttachmentJob sætter quota_blocked uden OCR, når loftet er nået. Der er ikke fundet kode, der genstarter dem ved opgradering, og retryOcr afviser status quota_blocked. Indbakke-scopet dækker kun pending_ocr, ready og ocr_failed. Målt 2026-10-01: 79 vedhæftninger.
Sådan undgås den
Find dem på status. Nulstilling kræver en manuel rettelse i data. Påstanden om at en opgradering frigiver dem står kun i en kodekommentar og er uverificeret.
Kilder (3)

kode: app app/Jobs/ScanEmailAttachmentJob.php · ScanEmailAttachmentJobverificeretkode: app app/Observers/BilagMeteringObserver.php · BilagMeteringObserververificeretprod-data: 2026-10-01: scripts/prod-queries/04-email-attachments-status.sql: SELECT status, dismissed_reason, COUNT(*) AS antal, SUM(voucher_id IS NOT NULL) AS med_voucher, SUM(promoted_at IS NOT NULL) AS promoveret FROM email_voucher_attachments GROUP BY status, dismissed_reason ORDER BY status, dismissed_reason

Et bilag står to gange, eller en kvittering mangler, fordi den blev afvist som dublet.

Samme PDF kommer ind to gangeStadig sandBilagsindgang

Årsag
Mail, Postmark og bulk-upload afviser hash-dubletter stille. Upload mod en mailvedhæftning kan give to rækker i to tabeller, indtil den ene promoveres. Derefter flagger VoucherDuplicateDetector en tvilling på tværs af kilder med duplicate_of_id, og bogføring blokeres med DuplicateFlagged.
Sådan undgås den
Se på file_hash på begge sider, og på duplicate_of_id. Fetch-at-source har ingen hash-forhåndstjek, så to ens filer giver to bilag.
Kilder (3)

kode: app app/Services/Ap/VoucherDuplicateDetector.php · VoucherDuplicateDetector::flagIfCrossChannelTwinverificeretkode: app app/Services/Inbound/InboundAttachmentExtractor.php · InboundAttachmentExtractor::isDuplicateverificeretkode: app app/Integrations/Email/Concerns/EmailScanAttachmentPersistence.php · EmailScanAttachmentPersistence::persistDownloadedAttachmentverificeret

Kunden har videresendt en mail uden fil, og bilaget findes, men mailen findes ikke i Indbakken.

Bilag fra tekst-mail findes ikke i IndbakkenStadig sandBilagsindgang

Årsag
ProcessInboundBodyEmailJob opretter bilaget direkte med kilden email og skriver ingen mailvedhæftning. Kilde-rækken matcher ingen af fanerne Nye, Set, Promoveret og Oversete. Om en anden feedvej viser den, er uverificeret.
Sådan undgås den
Søg i vouchers på filnavn lig mailens emne plus .pdf, og tjek filter_result på kilden: processed, skipped_body_not_receipt eller skipped_body_failed.
Kilder (1)

kode: app app/Jobs/ProcessInboundBodyEmailJob.php · ProcessInboundBodyEmailJobverificeret

Kunden ser kvitteringen i Indbakken og regner med, at den er med i Kvitteringer og kan bogføres. Bilaget findes ikke i bilagslisten.

Kvitteringen er i Indbakken, men der er intet bilagStadig sandBilagsindgang

Årsag
Mailscan opretter aldrig et bilag. Det gemmer en mailvedhæftning med status ready. Et bilag opstår først ved promotion: manuelt, via AutoPromote eller via MatchUnmatched. AutoPromote kræver en bankmatch og en række OCR-, dato- og cutover-gates. Af 35.906 vedhæftninger er 1.337 (3,72 %) blevet til et bilag.
Sådan undgås den
Læs status på vedhæftningen først. Står den på ready, er den et forslag. Tjek derefter mint-gates: bankforbindelse og afstemningsstart, om banklinjen er landet, matchstrategi og confidence, OCR-niveau og leverandørnavn.
Kilder (3)

kode: app app/Services/Email/Concerns/SelectsBankMatchedPromoteCandidates.php · SelectsBankMatchedPromoteCandidates::eligibleverificeretkode: app app/Services/Email/Lifecycle/VoucherMinter.php · VoucherMinter::mintVoucherFromAttachmentverificeretprod-data: 2026-10-01: scripts/prod-queries/04-email-attachments-status.sql: SELECT status, dismissed_reason, COUNT(*) AS antal, SUM(voucher_id IS NOT NULL) AS med_voucher, SUM(promoted_at IS NOT NULL) AS promoveret FROM email_voucher_attachments GROUP BY status, dismissed_reason ORDER BY status, dismissed_reason

Robotten bogfører et køb, som bogholderen allerede har skrevet i kassekladden.

Auto-bogføring var blind for kassekladdenStadig sandBogføring til regnskab

Årsag
Vagt 10 læser accounting_entries. Den synk, der fylder tabellen, henter fra accounting-years-entries og ikke fra kassekladdens kladde-endpoint, og kører hver time. Det var den oprindelige blinde plet. På main findes vagt 11, som læser kladder og bogførte poster direkte hos udbyderen. For e-conomic, Billy og Business Central læser opslaget kladder. Vores Dinero-opslag returnerer altid en tom kladdeliste. Vagt 11 kræver desuden en bekræftet banklinje, en afstemningskonto på bankforbindelsen og et match på dato, beløb og bankkonto, så en kladde med et andet beløb eller en anden dato slipper igennem. Kan regnskabet ikke læses, springer robotten bilaget over.
Sådan undgås den
Sæt afstemningskontoen på hver bankforbindelse. Forvent ikke, at robotten fanger en kladde hos en Dinero-kunde. Læg kladdeførende kunder uden for auto-bogføring.
Kilder (4)

kode: app app/Services/Ap/BankLedgerPostingLookup.php · BankLedgerPostingLookup::liveBankLineCoverageForTransactionverificeretkode: app app/Services/Ap/BankLedgerPostingLookup.php · BankLedgerPostingLookup::alreadyPostedverificeretkode: app app/Integrations/Dinero/DineroBookedLiveLedgerLookup.php · DineroBookedLiveLedgerLookup::draftFinanceVoucherEntriesverificeretkode: app app/Integrations/Economic/EconomicLiveLedgerLookup.php · EconomicLiveLedgerLookup::draftFinanceVoucherEntriesverificeret

To posteringer af samme køb i regnskabet, eller to modposteringer af samme bilag.

Bilaget blev bogført to gangeStadig sandBogføring til regnskab

Årsag
1) Et job hang i Booking. Genrejsningen flytter det til Fejlet og sender det ikke igen, men hvis udbyderens kald allerede var lykkedes, og brugeren trykker Bogfør igen, er der to. Fejlteksten advarer om det. 2) E-conomic-kaldet har ingen idempotensnøgle, og vi sender det uden HTTP-genforsøg, fordi et gensendt kald kan have bogført to gange. 3) Bogholderen havde allerede lavet posteringen i kassekladden eller i bogføringen, og vagterne fandt den ikke, fordi de kun matcher på dato, beløb og bankkonto og kræver en bekræftet banklinje med en afstemningskonto. 4) To hurtige klik på Tilbagefør: kravet reversal_claimed_at tager kun den første.
Sådan undgås den
Brug Bogfør igen først efter at have kigget i regnskabet. Sæt bankforbindelsens afstemningskonto, så vagt 10 og 11 kan søge. Bekræft ikke "lignende postering", før begge sider er læst.
Kilder (4)

kode: app app/Console/Commands/RecoverStuckBookingVouchers.php · RecoverStuckBookingVouchersverificeretkode: app app/Services/Ap/Booking/EconomicVoucherBooker.php · EconomicVoucherBooker::bookEconomicverificeretkode: app app/Services/Ap/BankLedgerPostingLookup.php · BankLedgerPostingLookup::liveBankLineCoverageForTransactionverificeretkode: app app/Services/Ap/VoucherBookingService.php · VoucherBookingService::reverseverificeret

En bogføring fejler på grund af et andet bilags kladde, eller rører mere end det ene bilag.

Dato-fallback er ikke afgrænset til bilagetStadig sandBogføring til regnskab

Årsag
bookJournalEntries bogfører først bilagets egne kladdelinjer med bookdraftentries. Kan linjerne ikke findes, eller fejler det, falder koden tilbage til bookJournalEntriesByDateInterval, som koden selv kalder dato-afgrænset. Fallbacken tager journal og dato og ikke bilagsnummer. Koden kalder den selv dato-afgrænset og skriver, at den fejler, når en ubalanceret søsterkladde ligger på samme dato. Hvad e-conomic i øvrigt gør med søsterkladder, er en udbyderpåstand, vi ikke har en kilde på.
Sådan undgås den
Antag ikke, at fallbacken kun rører ét bilag. Læs loggen "falling back to date interval", når en bogføring fejler uforklarligt, og spørg kunden om andre kladder på samme dato.
Kilder (2)

kode: app app/Integrations/Economic/Concerns/WritesJournals.php · WritesJournals::bookJournalEntriesverificeretkode: app app/Integrations/Economic/Concerns/WritesJournals.php · WritesJournals::bookJournalEntriesByDateIntervalverificeret

Revisoren ser to poster i e-conomic efter en tilbageføring af en kladde.

En e-conomic-kladde tilbageføres med en modposteringStadig sandBogføring til regnskab

Årsag
reverseDinero og reverseBilly sletter en kladde, vi aldrig fik bogført, og bilaget bliver Afventer igen. reverseEconomic har ingen sletning og poster altid en negeret kopi i samme journal, også når originalen kun er en kladde.
Sådan undgås den
Forklar kunden, at en tilbageført e-conomic-kladde efterlader både original og modpostering. Slet kladden i e-conomic, hvis den slet ikke er bogført.
Kilder (3)

kode: app app/Services/Ap/Booking/EconomicVoucherBooker.php · EconomicVoucherBooker::reverseEconomicverificeretkode: app app/Services/Ap/Booking/BillyVoucherBooker.php · BillyVoucherBooker::reverseBillyverificeretkode: app app/Services/Ap/Booking/DineroVoucherReverser.php · DineroVoucherReverser::reverseDineroverificeret

Selskabet får ingen automatiske bogføringer, og intet ser fejlet ud.

En glemt pause slukker al automatikStadig sandBogføring til regnskab

Årsag
DeferWhenAccountingWritesPaused afbryder jobbet og gemmer det som en DeferredAccountingWrite. Resume sætter kun accounting_writes_paused_at til null. De ventende skrivninger sendes ikke, før kunden vælger Send i automatiseringsoversigten, og kunden kan også kassere dem. Robotten stempler ikke Booking, så dens bilag ligger videre i Afventer. Operatørknappen Auto bogfør stempler Booking, før jobbet holdes tilbage, og et sådant bilag flyttes efter 60 minutter til Fejlet med teksten om, at bogføringen gik i stå, selvom intet gik galt.
Sådan undgås den
Kig efter accounting_writes_paused_at og antallet af ventende skrivninger, når et selskab ingen automatik får. Afslut en pause med Send eller Kassér.
Kilder (4)

kode: app app/Jobs/Middleware/DeferWhenAccountingWritesPaused.php · DeferWhenAccountingWritesPaused::handleverificeretkode: app app/Http/Controllers/Dashboard/AutomationOverviewController.php · AutomationOverviewController::resumeverificeretkode: app app/Http/Controllers/Dashboard/AutomationOverviewController.php · AutomationOverviewController::replayPendingverificeretkode: app app/Models/DeferredAccountingWrite.php · DeferredAccountingWrite::replayverificeret

Kunden har trykket Bogfør, og der er ingen postering i e-conomic.

Kunden har trykket Bogfør, men intet sker i e-conomicStadig sandBogføring til regnskab

Årsag
Gå efter bilagets status og booking_error. 1) Status Bogfører: jobbet ligger i køen, eller det hænger. Efter 60 minutter flytter genrejsningen det til Fejlet. 2) Status Fejlet: booking_error har årsagen, og en tekst om "gik i stå" betyder, at posteringen kan være oprettet alligevel. 3) Status Afventer med en tekst i booking_error: en vagt sendte bilaget tilbage, og teksten står i tilstanden for bogførings-blokeringer. 4) Status Bogført med journal_state Draft: integrationen står på kladde, så posteringen ligger i kassekladden og er ikke bogført. 5) Status Bogført med journal_state Unconfirmed: kladden findes, men bogføringstrinnet fejlede. Et nyt Bogfør genoptager kladden. 6) Intet job blev oprettet: en lignende postering i regnskabet kræver, at et menneske bekræfter, og knappen viste en bekræftelse. 7) Skrivepause (kun automatiske veje) eller abonnementsgæld (alle veje): gaten afviser skrivningen.
Sådan undgås den
Tjek i denne rækkefølge: bilagets status, booking_error, journal_state, selskabets accounting_writes_paused_at og ventende skrivninger i automatiseringsoversigten, og om selskabet har abonnementsgæld. En manuel Bogfør sender force og er brugerinitieret, så den stoppes ikke af kundens egen pause, men den stoppes af abonnementsgæld.
Kilder (4)

kode: app app/Services/Ap/VoucherBookingService.php · VoucherBookingService::bookverificeretkode: app app/Services/Ap/Booking/VoucherBookingFinisher.php · VoucherBookingFinisher::commitverificeretkode: app app/Support/Accounting/AccountingWriteGate.php · AccountingWriteGate::assertverificeretkode: app app/Console/Commands/RecoverStuckBookingVouchers.php · RecoverStuckBookingVouchers::handleverificeret

Samme køb står både som bogholderens kladde og som PayFriends postering.

Kladdeførende bogholdere giver dubletterStadig sandBogføring til regnskab

Årsag
En importeret kassekladde-kladde har journal_state null. Bogfør på sådan et bilag genoptager den eksisterende kladde med bookdraftentries i stedet for at oprette en ny, og det er vagt 1. Men et bilag, der ikke selv har en kladde, og en kladde, bogholderen skrev uden om PayFriend, forbindes kun af vagt 11 på dato, beløb og bankkonto. Dato-fallbacken i bogføringskaldet er desuden ikke afgrænset til bilagsnummeret.
Sådan undgås den
Spørg kunden, hvordan bogholderen arbejder, før auto-bogføring slås til. Brug kladde-tilstand, så posteringer lægges i kassekladden og ikke bogføres af os. Bekræft ikke lignende poster uden at have set begge sider.
Kilder (3)

kode: app app/Models/Concerns/Voucher/HasAutoBookGates.php · HasAutoBookGates::canResumeEconomicAutoBookverificeretkode: app app/Services/Ap/Booking/EconomicVoucherResume.php · EconomicVoucherResume::resumeEconomicAutoBookverificeretkode: app app/Services/Ap/VoucherBookRequest.php · VoucherBookRequest::bookverificeret

Oprydning i kundens kassekladde fejler med en pause-fejl, eller automatikken bogfører midt i oprydningen.

Oprydning i kladden og skrivepausen modarbejder hinandenStadig sandBogføring til regnskab

Årsag
Kommandoen bank:cleanup-autobooked-transfers sletter kladder gennem EconomicClient, hvis skrivende metoder alle går gennem AccountingWriteGate. Kommandoen markerer sig ikke som brugerinitieret og nævner ikke pausen. Står selskabet på pause, afvises hvert slet med en pause-undtagelse. Står det ikke på pause, kan robotten bogføre, mens der ryddes op. Intet i koden kræver en pause under oprydning. Det er en driftsregel, og koden gør den svær at følge.
Sådan undgås den
Beslut før oprydning, om pausen skal stå. Husk at tage den af bagefter: en glemt pause slukker al automatik.
Kilder (3)

kode: app app/Console/Commands/CleanupAutoBookedTransferDraftsCommand.php · CleanupAutoBookedTransferDraftsCommand::withdrawverificeretkode: app app/Support/Accounting/AccountingWriteGate.php · AccountingWriteGate::assertverificeretkode: app app/Integrations/Economic/Concerns/ManagesDraftAccruals.php · ManagesDraftAccruals::deleteDraftJournalEntryverificeret

Man leder efter pf_voucher_{id} i e-conomic og finder ingenting.

Referencen pf_voucher_{id} sendes kun til DineroStadig sandBogføring til regnskab

Årsag
DineroVoucherBooker sætter ExternalReference til pf_voucher_{id}. EconomicVoucherBooker sender ingen tilsvarende reference. Dineros modpostering får pf_voucher_reversal_{id}. Referencen læses ikke tilbage af os, så den forhindrer ikke dubletter.
Sådan undgås den
Find et e-conomic-bilag via external_voucher_id (år-bilagsnummer), journal_number og external_voucher_number på bilaget.
Kilder (2)

kode: app app/Services/Ap/Booking/DineroVoucherBooker.php · DineroVoucherBooker::bookDineroverificeretkode: app app/Services/Ap/Booking/EconomicVoucherBooker.php · EconomicVoucherBooker::bookEconomicverificeret

Et bilag står som Bogført, selvom ingen har trykket Bogfør.

Robotten bogførte et bilag uden at spørgeStadig sandBogføring til regnskab

Årsag
ScanVoucherJob spørger VoucherAutoBookPolicy efter OCR og auto-match. Sagde politikken ja, blev BookVoucherJob sendt med autoBook. Det kræver, at miljø-flaget og selskabets eget flueben var tændt, at OCR-konfidensen var mindst selskabets tærskel (0,95 som default), og at banklinjen var bekræftet matchet. Sporet er auto_booked_at på bilaget og en aktivitetslog-række af typen voucher_auto_book.
Sådan undgås den
Kun PayFriend kan slå selskabets flueben fra, i admin. Selskabet kan stoppe alle automatiske skrivninger med skrivepausen. Det globale flag ACCOUNTING_AUTO_BOOK_ENABLED stopper alle selskaber. Operatørknappen Auto bogfør er et andet spor, der ikke stempler auto_booked_at og ikke kræver de to flag.
Kilder (3)

kode: app app/Services/Ap/VoucherAutoBookPolicy.php · VoucherAutoBookPolicy::shouldAutoBookverificeretkode: app app/Jobs/ScanVoucherJob.php · ScanVoucherJob::handleverificeretkode: app app/Jobs/BookVoucherJob.php · BookVoucherJob::logVoucherAutoBookverificeret

Et kvitteringsbilag med mange varer har kun én eller to linjer under Kontering, selvom kvitteringen har mange.

Produktlinjer fra OCR slås sammen til én linjeStadig sandOCR og kontering

Årsag
VoucherPopulator sletter bilagets linjer og skriver dem om fra VoucherLineConsolidator. Konsolidatoren samler alle produktlinjer i én (to ved blandet sats) bygget på bilagets total og moms, og beholder kun gebyrlinjer en for en. Enkeltlinjerne ligger kun i ocr_raw på bilaget.
Sådan undgås den
Det er med vilje, fordi detailpriser er inklusive moms og ikke kan summeres til en netto. Skal en varelinje konteres for sig, kræver det manuel redigering i bilagets skuffe. En ny scanning bygger linjerne om og overskriver rettelser.
Kilder (2)

kode: app app/Services/Ap/VoucherLineConsolidator.php · VoucherLineConsolidator::consolidateverificeretkode: app app/Services/Ap/VoucherPopulator.php · VoucherPopulator::populateverificeret

Man tror, at momskodeforslaget aldrig bruges, og fjerner eller ignorerer det.

suggested_vat_code er ikke længere dødStadig sandOCR og kontering

Årsag
Memory sagde, at feltet skrives men aldrig læses. På main læser ConfirmedVoucherVatCode feltet som led 4: linjens egen kode, kontoens kode, den eneste købskode for den bekræftede sats, og først derefter forslaget. Bogføring, posteringsvisning og skuffen bruger resolveren.
Sådan undgås den
Læs rækkefølgen i ConfirmedVoucherVatCode. En ubekræftet sats når aldrig led 3 eller 4. Forslagets egen rækkefølge, når det skrives, er: sats under eller på nul giver ingen kode, så tvunget omvendt betaling, så kontoens kode (giver ingen forslag), så historik, så AI.
Kilder (2)

kode: app app/Services/Vat/ConfirmedVoucherVatCode.php · ConfirmedVoucherVatCode::resolveverificeretkode: app app/Services/Ap/Concerns/BuildsAccountSuggestionContext.php · BuildsAccountSuggestionContext::vatCodeForSuggestionverificeret

Et selskab bruger flere AI-tokens end budgettet, og man tror, at noget burde have stoppet det.

AI-budgettet stopper kun knappen, og tom betyder ubegrænsetStadig sandOCR og kontering

Årsag
AiUsageTracker::hasBudgetRemaining kaldes af knappen AI foreslå konti og af enkelte andre funktioner. SupplierOcrService, AccountSuggestionService og VoucherPopulator tjekker det ikke, og ClaudeApiClient logger kun forbruget. Når budgettet er tomt i admin, tolker koden det som ubegrænset, mens hjælpeteksten siger default budget.
Sådan undgås den
Slå forbruget op i admin under AI-omkostninger. Sæt et tal, hvis loftet skal gælde. Et tal tæller input plus output fra månedens start.
Kilder (2)

kode: app app/Services/Ai/AiUsageTracker.php · AiUsageTracker::hasBudgetRemainingverificeretkode: app app/Services/Ap/VoucherLineAccountSuggester.php · VoucherLineAccountSuggester::bulkSuggestAccountsverificeret

Koden har en auto-bogføringssti for bilag, men i prod sker den aldrig.

Auto-bogføring af bilag er slået fra overaltStadig sandKvitteringer (på tværs af domæner)

Årsag
voucher_auto_book_enabled er slået til hos 0 af 155 selskaber, og auto_booked_at er sat på 0 af 213.225 ikke-slettede bilag. Til sammenligning er voucher_auto_promote_enabled slået til hos alle 155 og voucher_auto_match_enabled hos 140. Hvorfor auto-bogføring er slået fra, er ikke målt.
Sådan undgås den
Forklar ikke auto-bogføring af bilag som noget, kunder oplever i dag. Tjek tallet igen, før en tekst siger at bilag bogføres af sig selv.
Kilder (1)

prod-data: 2026-10-01: scripts/prod-queries/08-companies-automatik.sql og scripts/prod-queries/03-vouchers-auto-booked.sql

Et bilag står i booking og bliver ikke bogført eller fejlet.

Bilag der hænger i bookingStadig sandKvitteringer (på tværs af domæner)

Årsag
Bogføringen er startet, men har ikke skrevet et resultat tilbage. Målt 2026-10-01 var der 0 bilag i booking med updated_at ældre end 60 minutter, så fælden er ikke aktiv lige nu.
Sådan undgås den
Mål med UTC_TIMESTAMP(). MySQL NOW() i prod er CEST, mens kolonnerne er UTC, og NOW() flytter grænsen to timer.
Kilder (1)

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

Et gammelt link med scope=handled viser linsen Klar til bogføring som valgt, men listen indeholder bogførte og tilbageførte bilag, ikke bilag der er klar til at blive bogført.

Gamle scope-værdier tænder en linse, men skærer anderledesStadig sandKvitteringer (på tværs af domæner)

Årsag
Klienten oversætter scope=attention til linsen needs og scope=handled til linsen ready, så chippen lyser. Serveren skærer derimod attention og handled efter de gamle faneregler: attention er statusserne pending, booking, failed og scan_failed, handled er booked og reversed. De rigtige linser, scope=needs og scope=ready, har deres egne vilkår på banklinje, journal, regnskabsår og bilagsnummer.
Sådan undgås den
Brug scope=needs og scope=ready, når et link skal åbne en linse. Når et tal fra en gammel attention- eller handled-visning skal sammenlignes med linsetallene, så regn med at de to ikke er det samme sæt.
Kilder (2)

kode: app app/Services/Ap/Concerns/BuildsVoucherFilteredListQuery.php · BuildsVoucherFilteredListQuery::applyScopeFilterverificeretkode: app resources/js/Pages/Dashboard/Vouchers/hooks/useVoucherListState.tsx · useVoucherListStateverificeret

Et erstatningsbilag i en valuta uden to decimaler får et beløb, der er 100 gange for stort eller for småt, og en halv øre kan runde forkert.

Tabt kvittering regner øre med round(v * 100)Stadig sandKvitteringer (på tværs af domæner)

Årsag
Metoden viser beløbet i PDF-bilaget med MinorUnits::toMinor, men gemmer beløbet på bilaget med (int) round((float) $v * 100). Det fejler for valutaer uden to decimaler og for halve øre, fordi floaten ikke er præcis. Pengereglen kræver heltal i mindste enhed og valutabevidst omregning.
Sådan undgås den
Brug MinorUnits::toMinor til både visning og lagring. Rettes ikke i Atlas. Bifund fra recon, stadig sandt på main.
Kilder (2)

kode: app app/Services/Ap/LostReceiptService.php · LostReceiptService::createAsVoucherverificeretkode: app app/Services/Ap/VoucherPopulator.php · VoucherPopulator::populateverificeret

Et bilagstal fra prod ser enormt ud eller viser næsten ingen auto-bogføring, fx 0 % auto-bogført af 213.225.

Bilagstal drukner i provider_pullStadig sandKvitteringer (på tværs af domæner)

Årsag
210.948 af 213.225 ikke-slettede bilag har ingestion_source provider_pull, altså bilag spejlet fra kundens regnskabssystem. De er ikke indleveret af en bruger. De ægte kvitteringer er upload, email og eboks, 2.515 bilag. Payroll og provider_sync er endnu to kilder, der ikke er kvitteringer.
Sådan undgås den
Del altid på ingestion_source, før et tal bruges som forklaring. Skriv i teksten hvilke kilder tallet dækker.
Kilder (1)

prod-data: 2026-10-01: scripts/prod-queries/03-vouchers-auto-booked.sql

Kunden har lagt bilaget ind i e-conomic, men posteringen står stadig under Mangler bilag.

Et bilag uploadet i e-conomic står under Mangler bilag til næste natStadig sandBilagsindgang

Årsag
Oraklet er tabellen economic_documents, som nulstilles og genopbygges af economic:sync-documents hver nat kl. 04.05 UTC. Kun et bilag uploadet via PayFriend skrives straks ind. Kontoen skal desuden forvente bilag, posteringen må ikke være en customerInvoice, og tallet caches i 5 minutter.
Sådan undgås den
Upload bilaget i PayFriend i stedet, eller vent til næste nat. Et selskab uden oracle-varme (bilag_oracle_ready_at eller chart_receipt_classified_at tom) viser ikke et tal, men opgør bilag.
Kilder (2)

kode: app app/Services/Vouchers/Concerns/BuildsMissingReceiptQueries.php · BuildsMissingReceiptQueries::economicBaseQueryverificeretkode: app app/Console/Commands/SyncEconomicDocumentsCommand.php · SyncEconomicDocumentsCommandverificeret

Et bilag får en vat_amount, der i virkeligheden er en afgift, og nettobeløbet bliver forkert.

Afgift læst som moms: rettet i prompten, ikke i kodenStadig sandOCR og kontering

Årsag
Modellen kan læse en linje som Heraf skadesforsikringsafgift som moms. Konsolidatoren bruger bilagets egen moms som facit og regner nettoen som total minus moms, så en forkert moms giver et forkert netto. Prompten forbyder det nu med reglen NOT VAT, og et gebyr skal være sin egen linje. Ingen kode kontrollerer bagefter, at beløbet står under en momsmærkat.
Sådan undgås den
Tjek momsen mod linjernes sats i bilagets skuffe, når bilaget indeholder afgifter eller forsikring, og scan igen, hvis momsen ser forkert ud. Verdict mod main: rettet i prompten, men uden kodevagt.
Kilder (2)

kode: app app/Services/Ap/ParsesSupplierOcrPayloads.php · ParsesSupplierOcrPayloads::getExtractionPromptverificeretkode: app app/Services/Ap/VoucherLineConsolidator.php · VoucherLineConsolidator::deriveNetAndVatRateverificeret

Man tror, at momsmotoren kontrollerer fradrag, eller at man kan tænde den ved at skifte VAT_ENGINE_SHADOW_MODE.

Momsmotoren er en tom kontaktStadig sandOCR og kontering

Årsag
Gaten VatEnforcementGate holder kun en linje, hvis vat_decision_action siger flag eller stop, og ingen kode i app skriver kolonnen mere. Klassifikatoren, der skrev kolonnen, blev fjernet som død kode. Alle linjer står derfor uden afgørelse og bliver ikke holdt, også hvis enforcing blev sand.
Sådan undgås den
Tænd den ikke uden at genopbygge klassifikatoren først. Gaten selv beskriver tjeklisten: delfradrag, hvidliste, tvivlsstandard og tilbagefyldning.
Kilder (2)

kode: app app/Services/Vat/VatEnforcementGate.php · VatEnforcementGate::lineIsSafeverificeretkode: app config/vat.php · vat.shadow_modeverificeret

Man tæller scanning_failed på bilagene og konkluderer, at OCR næsten aldrig fejler. Eller man leder efter et mailbilag under Kvitteringer og finder det ikke.

OCR og OCR-fejl står på vedhæftningen, ikke på bilagetStadig sandOCR og kontering

Årsag
ScanEmailAttachmentJob kører OCR på mailens vedhæftning og gemmer resultatet på vedhæftningen i email_voucher_attachments. Først når en vedhæftning promoveres, bliver der oprettet et bilag. Det er derfor OCR-fejlene (status ocr_failed) ligger på vedhæftningerne, mens bilagene aldrig har set dem. Målt 2026-10-01 var kun 3,72 % af vedhæftningerne blevet til et bilag.
Sådan undgås den
Mål mailbilag på email_voucher_attachments og ikke på vouchers. Tæl fejl med status ocr_failed der, og husk deferred_ocr (filer der endnu ikke er scannet) og de afviste (dismissed), før du kalder en andel for lav.
Kilder (3)

kode: app app/Jobs/ScanEmailAttachmentJob.php · ScanEmailAttachmentJob::handleverificeretkode: app app/Services/Email/EmailAttachmentAutoPromoter.php · EmailAttachmentAutoPromoter::promoteForCompanyverificeretprod-data: 2026-10-01: scripts/prod-queries/04-email-attachments-status.sql: SELECT status, dismissed_reason, COUNT(*) AS antal, SUM(voucher_id IS NOT NULL) AS med_voucher, SUM(promoted_at IS NOT NULL) AS promoveret FROM email_voucher_attachments GROUP BY status, dismissed_reason ORDER BY status, dismissed_reason

Et bilag står som scanner i flere minutter og ender som Scanning fejlet, selvom udlæsningen ikke selv fejlede.

OCR-budgettet er længere end jobbets timeoutStadig sandOCR og kontering

Årsag
Tidsbudgettet er 165 sekunder, jobbet har timeout 120 sekunder, og supervisoren for den interaktive kø har timeout 130 sekunder. Kommentaren ved budgettet forklarer kun forholdet til de andre jobs. Et langsomt Claude-svar kan derfor få jobbet stoppet, før budgettet løber ud, og efter to stop kører failed() og sætter scan_failed.
Sådan undgås den
Tryk Scan igen på bilaget. Bliver det ved med at fejle, kan leverandør og beløb tastes i bilagets skuffe.
Kilder (2)

kode: app app/Services/Ap/SupplierOcrService.php · SupplierOcrService::EXTRACTION_BUDGET_SECONDSverificeretkode: app app/Jobs/ScanVoucherJob.php · ScanVoucherJobverificeret

En række har shimmer og teksten AI scanner, men der sker aldrig noget, og der kommer ingen fejl.

En fejl i scanningen kan efterlade bilaget som scannerStadig sandOCR og kontering

Årsag
ScanVoucherJob returnerer uden at ændre status, når bilaget ikke har en filsti, når filen ikke kan læses fra disken, og når OCR-kaldet kaster en undtagelse. Der kastes ikke videre, så der er intet nyt forsøg og failed() kører ikke. Rækken vises som scanner, når status er pending og ocr_confidence er tom.
Sådan undgås den
Tryk Scan igen på rækken. Mangler filen helt, kan der vedhæftes en ny. En HTTP-fejl fra Claude kaster ikke, men giver en ufuldstændig udlæsning og scan_failed.
Kilder (2)

kode: app app/Jobs/ScanVoucherJob.php · ScanVoucherJob::scanVoucherverificeretkode: app resources/js/lib/voucherStatus.ts · isVoucherScanningverificeret

Alle linjer på et bilag står på samme konto, selv om kunden plejer at splitte dem.

Et bilag med flere linjer kan have flere konti, men fallbacken giver dem sammeDelvist sandOCR og kontering

Årsag
suggestForVoucherLines giver et forslag pr. linje. Gebyrlinjer får deres egen konto. En produktlinje uden eget forslag får et forslag på bilagsniveau, så alle sådanne linjer ender på samme konto, og den sættes først på linjen, når konfidensen når gaten. Konsolidatoren samler desuden produktlinjerne til én (to ved blandet sats), så splittet først findes, hvis brugeren laver det selv.
Sådan undgås den
Kig på suggested_account_id pr. linje i tabel.voucher-lines før du kalder forslaget forkert. Andelen af flerlinjebilag, der bruger flere konti hos kunderne, er ikke målt her.
Kilder (2)

kode: app app/Services/Ap/AccountSuggestionService.php · AccountSuggestionService::suggestForVoucherLinesverificeretkode: app app/Services/Ap/VoucherPopulator.php · VoucherPopulator::populateverificeret

Admin kan ikke åbne et bilags fil, selv om kunden kan se den i appen. Eller en fil virker lokalt og ikke i produktion.

Filens disk står på hver række, og admin og appen kan have hver sin standardDelvist sandKvitteringer (på tværs af domæner)

Årsag
Voucher::disk giver file_disk, og er kolonnen tom, så filesystems.default. Begge repoers config har local som standard, og den rigtige værdi sættes i miljøet. En række med tom file_disk læses derfor fra hver sin disk, hvis app og admin ikke er sat ens. Admin afviser nu et diskenavn, der ikke findes, med en synlig fejl (500, Ukendt fil-disk), og en manglende fil giver 404, så fælden fejler ikke længere tavst.
Sådan undgås den
Tjek file_disk på rækken først. Er den tom, så sammenlign FILESYSTEM_DISK i appens og adminens miljø, før du leder i koden. Miljøværdierne er ikke læst her, kun de to configs.
Kilder (3)

kode: app app/Models/Voucher.php · Voucher::diskverificeretkode: admin app/Support/StoredFileDelivery.php · StoredFileDelivery::streamkode: app config/filesystems.php · defaultverificeret

En betaling til en leverandør fejler en uge efter, med en fejl der peger på et IBAN-felt, der ser rigtigt ud.

OCR kan misse et ciffer i et IBAN, og gamle rækker kan stadig være forkerteDelvist sandOCR og kontering

Årsag
Modellen kan læse et IBAN et ciffer for kort, med høj konfidens. OcrIbanGuard tjekker nu længde og kontrolcifre, før et IBAN bliver gemt på leverandøren, og kasserer et ubrugeligt. Rækker skrevet før vagten er ikke rettet.
Sådan undgås den
Kør suppliers:audit-iban (kun læsning, valgfrit pr. selskab) for at finde IBAN, en bank vil afvise. Ret hver mod bilaget i hånden, for det manglende ciffer kan ikke udledes.
Kilder (2)

kode: app app/Services/Ap/OcrIbanGuard.php · OcrIbanGuard::filterverificeretkode: app app/Console/Commands/AuditSupplierIbansCommand.php · AuditSupplierIbansCommand::handleverificeret

Et bilags eller jobs alder i en ad hoc-forespørgsel er to timer for høj, når den regnes med NOW().

MySQL NOW() er ikke nødvendigvis UTC, men kolonnerne erDelvist sandPlatform

Årsag
Appens tidszone er UTC, og kolonner skrives i UTC. NOW() følger databaseserverens tidszone, og forbindelsen sætter ingen. Er serveren på dansk tid, er NOW() 120 minutter foran om sommeren. Serverens egen tidszone er ikke læst her, så størrelsen af forskydningen er ikke verificeret.
Sådan undgås den
Brug UTC_TIMESTAMP() eller send et tidspunkt med som parameter. Tjek SELECT @@global.time_zone, @@session.time_zone, før du tror på en alder.
Kilder (1)

kode: app config/app.php · timezoneverificeret

Herfra er det teknisk

11

Kilder og dækning

Teknisk

Siden er skrevet mod inventaret, som er trukket ud af koden på de låste SHA'er. Et element er dækket, når en katalogpost nævner det, eller når det står på listen over bevidste udeladelser med begrundelse.

Dækning mod inventaret: 100 %(438 af 438 elementer, heraf 0 bevidst udeladt). Inventaret er trukket ud af koden på app@e99eb6a og admin@58da84c. Hele rapporten står påsiden Dækning.

Verificeret mod app@9d146f9, 16 skal genverificeres, 0 brudt

Inventar-gruppeDækketUdeladtUdækketI altDækning
Ruter480048100 %
UI-kald580058100 %
Tilladelser5005100 %
Enums580058100 %
Indstillinger11900119100 %
Admin-skrivere170017100 %
Schedule260026100 %
Jobs920092100 %
Køer150015100 %