Fortnox · Craft Commerce 5
Fakturan stämmer med vad kunden betalade
Ett svenskt Fortnox-företag avrundar nästan alltid varje faktura till närmaste hela krona. En webbutik debiterar ner till öret. De två sakerna kan inte gälla samtidigt, och inget av systemen nämner det någonsin — förrän vid bankavstämningen. Knox vägrar vara tyst om det.
Den säger ifrån innan den skickar
Knox modellerar Fortnox eget räknesätt, förutsäger vad företagets inställning för öresutjämning kommer att göra med totalsumman, och kontrollerar siffran Fortnox svarar med. När de inte stämmer säger fakturan det — med båda talen och orsaken på sig.
Charged to the customer 499,50
Invoiced in Fortnox 500,00
Fortnox öresutjämning +0,50
▸ Does not match the order
Fortnox applied an öresutjämning of 0,50. Turn it off
under Inställningar → Fakturering → Registreringsvy
to make invoices match what customers pay.
Funktioner
En avstämningsspärr, en momsmotor som visar hur den tänkte, och en idempotensmodell byggd för numrerade dokument.
Öresavrundning, hanterad på fyra sätt
Knox modellerar Fortnox räknesätt i stället för att räkna om sitt eget, täpper till sin egen rest med en riktig 0 %-avrundningsrad mot 3740, förutsäger vad företagets inställning kommer att göra, och kontrollerar totalsumman Fortnox svarar med.
- Fortnox exposes no endpoint for the setting — Knox infers it from your recent invoices
- A changed setting shows up as a mismatched invoice, not a surprise at year end
Den vägrar skicka något felaktigt
En faktura som inte går ihop med vad kunden debiterades stoppas, med båda talen och anledningen på sig — den skickas inte med en varning i en logg ingen läser.
Svensk moms, avgjord per order
Inrikes, omvänd betalningsskyldighet inom EU, EU-konsumenter med eller utan One Stop Shop, och export — avgjort utifrån vart varorna går och om köparen uppgav ett momsnummer, och bokfört på rätt BAS-konto.
- The reasoning is stored on the invoice, because reverse charge is a claim to Skatteverket
- Account numbers are validated against your own chart before you go live
Aldrig två fakturor för en order
Ett skapande vars utfall är okänt upprepas aldrig. Knox stämplar Craft-orderns referens på varje faktura i ett fält Fortnox tillåter filtrering på, så ett obesvarat anrop slås upp i stället för att chansas på.
Kunder, bokföring och betalningar
Knox håller en riktig Fortnox-kund per köpare — vilket är det som över huvud taget gör omvänd betalningsskyldighet och export möjliga — bokför fakturor med en förhandskontroll av räkenskapsår, och flyttar betalningar åt båda hållen.
- Register the payment your checkout already took
- Or poll Fortnox for invoices paid there, because a poll cannot miss what a webhook can
Repetera innan du går skarpt
En torrkörning skriver ut vad varje ofakturerad order skulle faktureras till, vilken momshantering den skulle få och varför, och vilka ordrar som skulle nekas — utan att skicka något.
Vanliga frågor
Frågorna det är värt att besvara innan du installerar.
Nej. Knox kostar 99 USD engångs med en förnyelse på 79 USD/år. Det finns en enda utgåva och allt ingår i den — Fortnox-kunder, omvänd betalningsskyldighet, OSS, export, bokföring, betalningar och kreditfakturor hålls inte tillbaka för en högre nivå. Förnyelsen betalar för uppdateringar och support; pluginet fortsätter fungera om du låter den löpa ut.
Nästan säkert inte — det är ditt Fortnox-företags inställning för öresutjämning, och det är det enskilt vanligaste felet i en Fortnox-integration för webbutiker. Fortnox avrundar varje faktura till närmaste hela krona och bokför differensen på 3740, medan din butik debiterar ner till öret. Tryck på Läs av från Fortnox i Knox inställningar och läs vad som står.
Eftersom Fortnox lagrar momstypen på kundposten, inte på fakturan. En faktura bokförd mot en samlingskund vars VATType är SEVAT redovisas som en inrikes svensk försäljning oavsett vad raderna säger — så en försäljning med omvänd betalningsskyldighet som skickas så visar 0 % moms och redovisas som inrikes, vilket ser rätt ut och är fel. Knox stoppar den i stället. Slå på Synka kunder i inställningarna så går den igenom.
Nej. Den kontrollerar formatet — två bokstäver, rätt landsprefix, rimlig längd — och säger det i motiveringen den sparar på fakturan. Att bekräfta att ett nummer faktiskt är registrerat är en VIES-slagning och ditt ansvar; att nollbeskatta en försäljning på ett overifierat nummer gör att du blir skyldig momsen.
Nej, och det är designens centrala omsorg. Ett unikt index gör att två kö-arbetare som tävlar krockar lokalt i stället för i Fortnox fakturanumrering — och ett skapande vars utfall är okänt upprepas aldrig. knox/sync/reconcile slår upp fakturan på orderreferensen Knox stämplar på var och en, och gör antingen anspråk på den eller röjer vägen.
Nej. Fakturering är ett köjobb som läggs i en try/catch från hanteraren för slutförd order. Är Fortnox nere, långsamt, eller har din token gått ut, slutförs ordern precis som den skulle ha gjort och fakturan kommer senare.
Medvetet inte. Fortnox webhook-täckning är en liten och rörlig uppsättning resurser, och en webhook som aldrig kommer fram går inte att skilja från en lugn vecka — tystnad är det enda felläge en bokföringsintegration inte får ha. Betalningar läses av mot lastmodified i stället.
Fortnox ogiltigförklarar en refresh-token 45 dagar efter att den utfärdats, och klockan startar om först när den används — så en butik utan ordrar på sju veckor kommer tillbaka till en död anslutning. Knox varnar i kontrollpanelen när deadlinen är inom fjorton dagar; en veckovis knox/connect/refresh i cron förhindrar det helt.
Ingenting händer förrän du ber om det. knox/sync/backfill --dry skriver ut vad varje order skulle faktureras till och vilka som skulle nekas, utan att skicka något; ta bort flaggan när du är nöjd.
Craft CMS 5.3+, Craft Commerce 5.0+, PHP 8.2+, och ett Fortnox-konto med API-licens — vilket inte är samma sak som en Fortnox-prenumeration.
Sluta stämma av för hand
En enda utgåva för 99 USD med en förnyelse på 79 USD/år. Fortnox-kunder, omvänd betalningsskyldighet, OSS, export, bokföring, betalningar och kreditfakturor ingår allihop.